X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=fx2lib%2Flib%2Ffx2.mk;fp=fx2lib%2Flib%2Ffx2.mk;h=eecedc5c88314d5e233e2256b8c5d267a72606fc;hb=3608c1063d17c56c038434eba5a6b11f26e530b5;hp=0000000000000000000000000000000000000000;hpb=8b13135e5fd175911ad9d8283b17fc97fe0c7709;p=sigrok-firmware-fx2lafw.git diff --git a/fx2lib/lib/fx2.mk b/fx2lib/lib/fx2.mk new file mode 100644 index 00000000..eecedc5c --- /dev/null +++ b/fx2lib/lib/fx2.mk @@ -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 +