-# 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.
-#
-#
-#
-
-# The sdcc 8051 assembler binary has/had different names.
-ifneq ($(shell which sdas8051 2>/dev/null),)
-# Newer sdcc, Debian / Ubuntu
-SDAS8051 = sdas8051
-endif
-ifneq ($(shell which sdcc-sdas8051 2>/dev/null),)
-# Newer sdcc, Fedora
-SDAS8051 = sdcc-sdas8051
-endif
-ifneq ($(shell which asx8051 2>/dev/null),)
-# Older sdcc
-SDAS8051 = asx8051
-endif
-
-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
-