]> sigrok.org Git - sigrok-firmware-fx2lafw.git/blobdiff - fx2lib/lib/fx2.mk
Import fx2lib into fx2lafw directly.
[sigrok-firmware-fx2lafw.git] / fx2lib / lib / fx2.mk
diff --git a/fx2lib/lib/fx2.mk b/fx2lib/lib/fx2.mk
new file mode 100644 (file)
index 0000000..eecedc5
--- /dev/null
@@ -0,0 +1,101 @@
+# common make targets for compiling fx2 firmware
+#
+# In your Makefile, define:
+# SOURCES: list of c files to compile
+# A51_SOURCES: list of any a51 files.
+# DEPS: list of any depedancies (like auto-generated header files) that need
+#       generated prior to compiling. You must provide the target definition
+#       for any DEPS you define.
+# BASENAME: name of your firmware file, i.e., myfirmware, but not myfirmware.c
+#
+# Leave these alone or redefine as necessary to customize firmware.
+# (Redefine after including this makefile)
+# VID vendor id
+# PID product id
+# LIBS optional additional libraries to link with the firmware.
+# SDCC build/link options
+#  CODE_SIZE:    Default --code-size 0x3c00
+#  XRAM_SIZE:    Default --xram-size 0x0200
+#  XRAM_LOC:     Default --xram-loc 0x3c00
+# BUILDDIR: build directory (default build)
+# These two can be changed to be blank if no device descriptor is being used.
+#  DSCR_AREA:    Default -Wl"-b DSCR_AREA=0x3e00"
+#  INT2JT:             Default -Wl"-b INT2JT=0x3f00"
+#
+# Provided targets:
+#
+# default target: creates $(BASENAME).ihx
+# bix: creates $(BASENAME).bix
+# iic: creates $(BASENAME).iic
+# load: uses fx2load to load firmware.bix onto the development board
+#  (You can customize VID/PID if you need to load the firmware onto a device that has different vendor and product id
+#  The default is  0x04b4, 0x8613
+# clean: delete all the temp files.
+#
+#
+#
+
+VID?=0x04b4
+PID?=0x8613
+
+DSCR_AREA?=-Wl"-b DSCR_AREA=0x3e00"
+INT2JT?=-Wl"-b INT2JT=0x3f00"
+CODE_SIZE?=--code-size 0x3c00
+XRAM_SIZE?=--xram-size 0x0200
+XRAM_LOC?=--xram-loc 0x3c00
+BUILDDIR?=build
+
+FX2LIBDIR?=$(dir $(lastword $(MAKEFILE_LIST)))../
+
+RELS=$(addprefix $(BUILDDIR)/, $(addsuffix .rel, $(notdir $(basename $(SOURCES) $(A51_SOURCES)))))
+# these are pretty good settings for most firmwares.  
+# Have to be careful with memory locations for 
+# firmwares that require more xram etc.
+CC = sdcc -mmcs51 \
+       $(SDCCFLAGS) \
+    $(CODE_SIZE) \
+    $(XRAM_SIZE) \
+    $(XRAM_LOC) \
+       $(DSCR_AREA) \
+       $(INT2JT)
+
+
+.PHONY: ihx iic bix load clean clean-all
+
+
+ihx: $(BUILDDIR)/$(BASENAME).ihx
+bix: $(BUILDDIR)/$(BASENAME).bix
+iic: $(BUILDDIR)/$(BASENAME).iic
+
+$(FX2LIBDIR)/lib/fx2.lib: $(FX2LIBDIR)/lib/*.c $(FX2LIBDIR)/lib/*.a51
+       make -C $(FX2LIBDIR)/lib
+
+$(BUILDDIR):
+       mkdir -p $(BUILDDIR)
+
+$(BUILDDIR)/$(BASENAME).ihx: $(BUILDDIR) $(SOURCES) $(A51_SOURCES) $(FX2LIBDIR)/lib/fx2.lib $(DEPS) 
+# can't use default target %.rel because there is no way
+# to differentiate the dependency.  (Is it %.rel: %.c or %.a51)
+       for a in $(A51_SOURCES); do \
+        cp $$a $(BUILDDIR)/; \
+        cd $(BUILDDIR) && sdas8051 -logs `basename $$a` && cd ..; done
+       for s in $(SOURCES); do \
+        THISREL=$$(basename `echo "$$s" | sed -e 's/\.c$$/\.rel/'`); \
+        $(CC) -c -I $(FX2LIBDIR)/include $$s -o $(BUILDDIR)/$$THISREL ; done
+       $(CC) -o $@ $(RELS) fx2.lib -L $(FX2LIBDIR)/lib $(LIBS)
+
+
+$(BUILDDIR)/$(BASENAME).bix: $(BUILDDIR)/$(BASENAME).ihx
+       objcopy -I ihex -O binary $< $@
+$(BUILDDIR)/$(BASENAME).iic: $(BUILDDIR)/$(BASENAME).ihx
+       $(FX2LIBDIR)/utils/ihx2iic.py -v $(VID) -p $(PID) $< $@
+
+load: $(BUILDDIR)/$(BASENAME).bix
+       fx2load -v $(VID) -p $(PID) $(BUILDDIR)/$(BASENAME).bix
+
+clean:
+       rm -f $(BUILDDIR)/*.{asm,ihx,lnk,lst,map,mem,rel,rst,sym,adb,cdb,bix}
+
+clean-all: clean
+       make -C $(FX2LIBDIR)/lib clean
+