0a7094bc39
The sensinode platform does not support .upload and .serialdump Their presence in the makefile has confused in the past confused some users. This commit removes them The commit also removes the $(OBJECTDIR)/%.rel: %.cS recipe which is not used by either 8051 platform and is probably broken anyway, since it has been unmaintained for years
210 lines
6.6 KiB
Makefile
210 lines
6.6 KiB
Makefile
### Compiler definitions
|
|
CC = sdcc
|
|
LD = sdcc
|
|
AS = sdcc
|
|
AR = sdcclib
|
|
OBJCOPY = objcopy
|
|
STRIP = strip
|
|
|
|
### Hex file conversions
|
|
PACKIHX = packihx
|
|
SREC_CAT = srec_cat
|
|
SREC_FLAGS = -disable_sequence_warnings
|
|
|
|
BANK_ALLOC = $(CONTIKI_CPU)/bank-alloc.py
|
|
SEGMENT_RULES = $(OBJECTDIR)/segment.rules
|
|
|
|
CFLAGS += --model-$(MEMORY_MODEL) --stack-auto --std-c99
|
|
CFLAGS += -DCC2530_LAST_FLASH_BANK=$(HIGH_FLASH_BANK)
|
|
CFLAGS += --fomit-frame-pointer
|
|
|
|
LDFLAGS += --model-$(MEMORY_MODEL) --stack-auto --out-fmt-ihx
|
|
LDFLAGS += --xram-loc 0x0000 --xram-size 0x1F00
|
|
LDFLAGS += --code-loc $(START_ADDR) --code-size $(CODE_SIZE)
|
|
|
|
ASFLAGS += -plosgff
|
|
|
|
AROPTS = -a
|
|
|
|
### Our object files are .rel, so we can't use the default finalize dependency
|
|
### generation. Override here.
|
|
define FINALIZE_SDCC_DEPENDENCY
|
|
cp $(@:.rel=.d) $(@:.rel=.$$$$); \
|
|
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
|
|
-e '/^$$/ d' -e 's/$$/ :/' < $(@:.rel=.$$$$) >> $(@:.rel=.d); \
|
|
rm -f $(@:.rel=.$$$$)
|
|
endef
|
|
|
|
### SoC flavor (F256, F128, F64, F32) as the ID of the last flash bank (0...7)
|
|
### We assume F256, project Makefile can override
|
|
###
|
|
### ToDo:
|
|
### Fix --code-size accordingly
|
|
### Fix the bank allocator to play for all flavors
|
|
ifndef HIGH_FLASH_BANK
|
|
HIGH_FLASH_BANK=7
|
|
endif
|
|
|
|
### Banking Guesswork:
|
|
### Generic examples do not specify banking.
|
|
### We automatically turn it on if its unspecified and if we are building with
|
|
### UIP_CONF_IPV6
|
|
ifndef HAVE_BANKING
|
|
ifeq ($(UIP_CONF_IPV6),1)
|
|
HAVE_BANKING=1
|
|
else
|
|
HAVE_BANKING=0
|
|
endif
|
|
endif
|
|
|
|
### Does the project want us to offset the firmware?
|
|
### define start address and max code size accordingly
|
|
ifeq ($(OFFSET_FIRMWARE),1)
|
|
START_ADDR = 0x01000
|
|
HOME_START = 00001000
|
|
ifeq ($(HAVE_BANKING),1)
|
|
CODE_SIZE = 0x3F000
|
|
else
|
|
CODE_SIZE = 0x0F000
|
|
endif
|
|
else
|
|
START_ADDR = 0x00000
|
|
HOME_START = 00000000
|
|
ifeq ($(HAVE_BANKING),1)
|
|
CODE_SIZE = 0x40000
|
|
else
|
|
CODE_SIZE = 0x10000
|
|
endif
|
|
endif
|
|
|
|
### Are we building with BANKing supoprt?
|
|
ifeq ($(HAVE_BANKING),1)
|
|
## Yes
|
|
MEMORY_MODEL=huge
|
|
LDFLAGS += -Wl-r
|
|
LD_PRE_FLAGS += -Wl-bBANK1=0x018000
|
|
CFLAGS += -DHAVE_SDCC_BANKING
|
|
#use this in $(call c_seg,$<) to get segment for a source file.
|
|
c_seg = --codeseg $(shell python $(BANK_ALLOC) $1 $(SEGMENT_RULES) $2)
|
|
else
|
|
## No banking
|
|
MEMORY_MODEL=large
|
|
c_seg =
|
|
endif
|
|
|
|
### CPU-dependent cleanup files
|
|
CLEAN += *.lnk *.lk *.sym *.lib *.ihx *.rel *.mem *.rst *.asm *.hex
|
|
CLEAN += *.omf *.cdb *.banks *.flags *.banked-hex
|
|
CLEAN += symbols.c symbols.h
|
|
|
|
### CPU-dependent directories
|
|
CONTIKI_CPU_DIRS = . dev
|
|
|
|
### CPU-dependent source files
|
|
CONTIKI_SOURCEFILES += soc.c clock.c stack.c
|
|
CONTIKI_SOURCEFILES += uart0.c uart1.c uart-intr.c
|
|
CONTIKI_SOURCEFILES += dma.c dma_intr.c
|
|
CONTIKI_SOURCEFILES += cc2530-rf.c
|
|
CONTIKI_SOURCEFILES += watchdog.c rtimer-arch.c
|
|
CONTIKI_SOURCEFILES += port2-intr.c port2.c
|
|
CONTIKI_ASMFILES +=
|
|
|
|
include $(CONTIKI_CPU)/usb/Makefile.usb
|
|
|
|
CONTIKI_SOURCEFILES += $(USB_SOURCEFILES)
|
|
|
|
CONTIKI_ASMOBJECTFILES = $(addprefix $(OBJECTDIR)/,$(CONTIKI_ASMFILES:.S=.rel))
|
|
|
|
CONTIKI_CASMOBJECTFILES = $(addprefix $(OBJECTDIR)/, \
|
|
$(CONTIKI_CASMFILES:.cS=.rel))
|
|
|
|
CONTIKI_PLATFORM_DIRS = $(PLATFORM_APPDIRS) \
|
|
$(addprefix $(CONTIKI)/platform/$(TARGET)/, $(CONTIKI_TARGET_DIRS))
|
|
|
|
CONTIKI_CPU_DIRS_LIST = $(addprefix $(CONTIKI_CPU)/, \
|
|
$(CONTIKI_CPU_DIRS))
|
|
|
|
oname = $(patsubst %.c,%.rel,$(patsubst %.S,%.rel,$(1)))
|
|
|
|
CONTIKI_OBJECTFILES = $(addprefix $(OBJECTDIR)/, \
|
|
$(call oname, $(CONTIKI_SOURCEFILES)))
|
|
|
|
PROJECT_OBJECTFILES = $(addprefix $(OBJECTDIR)/, \
|
|
$(call oname, $(PROJECT_SOURCEFILES)))
|
|
|
|
### Compilation rules
|
|
|
|
SEGMENT_RULE_FILES = $(foreach dir, . $(CONTIKI_PLATFORM_DIRS) \
|
|
$(CONTIKI_CPU_DIRS_LIST), $(wildcard $(dir)/segment.rules) )
|
|
|
|
# NB: Assumes SEGMENT_RULES was not overridden and is in $(OBJECTDIR)
|
|
$(SEGMENT_RULES): $(SEGMENT_RULE_FILES) | $(OBJECTDIR)
|
|
cat $(SEGMENT_RULE_FILES) | \
|
|
sed -e 's/#.*$$//' -e 's/^\s*//' -e '/^$$/d' > $@
|
|
|
|
CUSTOM_RULE_LINK=1
|
|
CUSTOM_RULE_C_TO_OBJECTDIR_O=1
|
|
CUSTOM_RULE_ALLOBJS_TO_TARGETLIB=1
|
|
|
|
$(OBJECTDIR)/%.rel: %.c $(SEGMENT_RULES) | $(OBJECTDIR)
|
|
$(CC) $(call c_seg,$<,$@) $(CFLAGS) -c $< -o $@ -Wp,-MMD,$(@:.rel=.d),-MQ,$@
|
|
@$(FINALIZE_SDCC_DEPENDENCY)
|
|
|
|
contiki-$(TARGET).lib: $(CONTIKI_OBJECTFILES) $(PROJECT_OBJECTFILES) \
|
|
$(CONTIKI_ASMOBJECTFILES) $(CONTIKI_CASMOBJECTFILES)
|
|
rm -f $@
|
|
for target in $^; do echo $$target >> $@; done
|
|
|
|
.PRECIOUS: %.$(TARGET) %.hex
|
|
|
|
# build app/example local object files. We need a separate rule so that we can
|
|
# pass -DAUTOSTART_ENABLE for those files only
|
|
$(OBJECTDIR)/%.app.rel: %.c $(SEGMENT_RULES) | $(OBJECTDIR)
|
|
$(CC) $(call c_seg,$<,$@) -DAUTOSTART_ENABLE $(CFLAGS) -c $< -o $@
|
|
|
|
# .ihx is the sdcc binary output file
|
|
ifeq ($(HAVE_BANKING),1)
|
|
### Build bankable firmware
|
|
%.ihx: $(OBJECTDIR)/%.app.rel $(CONTIKI_TARGET_MAIN) contiki-$(TARGET).lib
|
|
@echo "\nFirst Link"
|
|
@echo "==============="
|
|
$(CC) $(LDFLAGS) $(LD_PRE_FLAGS) -o $@ $(CONTIKI_TARGET_MAIN) $(OBJECTDIR)/$*.app.rel -llibsdcc.lib -lcontiki-$(TARGET).lib > /dev/null
|
|
|
|
%.flags: %.ihx
|
|
### Allocate modules to banks and relocate object files
|
|
@echo "\nBank Allocation"
|
|
@echo "==============="
|
|
python $(BANK_ALLOC) $(basename $(@F)) $(SEGMENT_RULES) $(OFFSET_FIRMWARE)
|
|
|
|
%.banked-hex: %.flags
|
|
### Link again with new bank allocations
|
|
@echo "\nFinal Link"
|
|
@echo "==============="
|
|
$(CC) $(LDFLAGS) $(shell cat $<) -o $@ $(CONTIKI_TARGET_MAIN) $(OBJECTDIR)/$*.app.rel -llibsdcc.lib -lcontiki-$(TARGET).lib > /dev/null
|
|
|
|
%.hex: %.banked-hex
|
|
### Post-process the hex file for programmers which dislike SDCC output hex format
|
|
$(eval BANKS := $(shell egrep '(^BANK[0-9])=' $(@:.hex=.map) | sed -e 's/BANK\([0-9]\).*/\1/' | uniq))
|
|
$(eval FILES := $(addsuffix .hex,$(addprefix bank,$(BANKS))))
|
|
@echo "\nPack hex file"
|
|
@echo "==============="
|
|
@for bank in $(BANKS); do \
|
|
echo $(SREC_CAT) $(SREC_FLAGS) $(@:.hex=.banked-hex) -intel \
|
|
-crop 0x"$$bank"8000 "0x"$$bank"FFFF" \
|
|
-offset -$$((0x8000 * $$bank + 0x08000)) -o bank"$$bank".hex -intel; \
|
|
$(SREC_CAT) $(SREC_FLAGS) $(@:.hex=.banked-hex) -intel \
|
|
-crop 0x"$$bank"8000 "0x"$$bank"FFFF" \
|
|
-offset -$$((0x8000 * $$bank + 0x08000)) -o bank"$$bank".hex -intel; \
|
|
done
|
|
$(SREC_CAT) $(SREC_FLAGS) $(@:.hex=.banked-hex) -intel -crop 0x00000 0x07FFF -o home.ihx -intel
|
|
srec_cat home.ihx -intel $(foreach file,$(FILES),$(file) -intel) -o $@ -intel
|
|
rm -f home.ihx $(FILES)
|
|
else
|
|
### Build non-banked firmware
|
|
%.ihx: $(OBJECTDIR)/%.app.rel $(CONTIKI_TARGET_MAIN) contiki-$(TARGET).lib
|
|
$(CC) $(LDFLAGS) -o $@ $(CONTIKI_TARGET_MAIN) $(OBJECTDIR)/$*.app.rel -llibsdcc.lib -lcontiki-$(TARGET).lib > /dev/null
|
|
|
|
%.hex: %.ihx
|
|
$(PACKIHX) $< > $@
|
|
endif
|