Skip to content
Snippets Groups Projects
Unverified Commit dea14f77 authored by Simon Duquennoy's avatar Simon Duquennoy Committed by GitHub
Browse files

Merge pull request #698 from g-oikonomou/contrib/build/dirs

Change build output dir structure and filenames
parents 9280046c 1dc02498
No related branches found
No related tags found
No related merge requests found
Showing
with 112 additions and 78 deletions
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
*.ihex *.ihex
*.pyc *.pyc
*~ *~
obj_* build/*
Makefile.target Makefile.target
Makefile.*.defines Makefile.*.defines
tools/doxygen/html tools/doxygen/html
......
...@@ -13,8 +13,6 @@ include $(CONTIKI)/Makefile.identify-target ...@@ -13,8 +13,6 @@ include $(CONTIKI)/Makefile.identify-target
### Include Makefile.tools to pull in targets that allow us to build tools dir ### Include Makefile.tools to pull in targets that allow us to build tools dir
include $(CONTIKI)/Makefile.tools include $(CONTIKI)/Makefile.tools
CONTIKI_NG_TARGET_LIB = contiki-ng-$(TARGET).a
ifeq ($(DEFINES),) ifeq ($(DEFINES),)
-include Makefile.$(TARGET).defines -include Makefile.$(TARGET).defines
ifneq ($(DEFINES),) ifneq ($(DEFINES),)
...@@ -39,7 +37,12 @@ ifdef CI ...@@ -39,7 +37,12 @@ ifdef CI
endif endif
endif endif
OBJECTDIR = obj_$(TARGET) BUILD_DIR = build
BUILD_DIR_TARGET = $(BUILD_DIR)/$(TARGET)
BUILD_DIR_BOARD = $(BUILD_DIR_TARGET)/$(BOARD)/$(BUILD_DIR_CONFIG)
OBJECTDIR = $(BUILD_DIR_BOARD)/obj
CONTIKI_NG_TARGET_LIB = $(BUILD_DIR_BOARD)/contiki-ng-$(TARGET).a
LOWERCASE = -abcdefghijklmnopqrstuvwxyz/ LOWERCASE = -abcdefghijklmnopqrstuvwxyz/
UPPERCASE = _ABCDEFGHIJKLMNOPQRSTUVWXYZ_ UPPERCASE = _ABCDEFGHIJKLMNOPQRSTUVWXYZ_
...@@ -75,10 +78,6 @@ endef ...@@ -75,10 +78,6 @@ endef
CONTIKI_OBJECTFILES = ${addprefix $(OBJECTDIR)/,${call oname, $(CONTIKI_SOURCEFILES)}} CONTIKI_OBJECTFILES = ${addprefix $(OBJECTDIR)/,${call oname, $(CONTIKI_SOURCEFILES)}}
PROJECT_OBJECTFILES = ${addprefix $(OBJECTDIR)/,${call oname, $(PROJECT_SOURCEFILES)}} PROJECT_OBJECTFILES = ${addprefix $(OBJECTDIR)/,${call oname, $(PROJECT_SOURCEFILES)}}
# Provide way to create $(OBJECTDIR) if it has been removed by make clean
$(OBJECTDIR):
mkdir $@
uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1))) uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
### Include target makefile (TODO Unsafe?) ### Include target makefile (TODO Unsafe?)
...@@ -124,6 +123,11 @@ endif # $(BOARD) not empty ...@@ -124,6 +123,11 @@ endif # $(BOARD) not empty
PLATFORM_ACTION ?= build PLATFORM_ACTION ?= build
# Provide way to create $(OBJECTDIR) if it has been removed by make clean
$(OBJECTDIR):
$(TRACE_MKDIR)
$(Q)mkdir -p $@
ifneq ($(BOARD),) ifneq ($(BOARD),)
TARGET_BOARD_UPPERCASE := ${strip ${shell echo $(BOARD) | sed y!$(LOWERCASE)!$(UPPERCASE)!}} TARGET_BOARD_UPPERCASE := ${strip ${shell echo $(BOARD) | sed y!$(LOWERCASE)!$(UPPERCASE)!}}
CFLAGS += -DCONTIKI_BOARD_$(TARGET_BOARD_UPPERCASE)=1 CFLAGS += -DCONTIKI_BOARD_$(TARGET_BOARD_UPPERCASE)=1
...@@ -241,12 +245,20 @@ ifeq ($(V),1) ...@@ -241,12 +245,20 @@ ifeq ($(V),1)
TRACE_LD = TRACE_LD =
TRACE_AR = TRACE_AR =
TRACE_AS = TRACE_AS =
TRACE_OBJCOPY =
TRACE_OBJDUMP =
TRACE_MKDIR =
TRACE_CP =
Q= Q=
else else
TRACE_CC = @echo " CC " $< TRACE_CC = @echo " CC " $<
TRACE_LD = @echo " LD " $@ TRACE_LD = @echo " LD " $@
TRACE_AR = @echo " AR " $@ TRACE_AR = @echo " AR " $@
TRACE_AS = @echo " AS " $< TRACE_AS = @echo " AS " $<
TRACE_OBJCOPY = @echo " OBJCOPY " $< "-->" $@
TRACE_OBJDUMP = @echo " OBJDUMP " $< "-->" $@
TRACE_MKDIR = @echo " MKDIR " $@
TRACE_CP = @echo " CP " $< "-->" $@
Q=@ Q=@
endif endif
...@@ -303,14 +315,13 @@ endef ...@@ -303,14 +315,13 @@ endef
### Harmonize filename of a .map file, if the platform's build system wants ### Harmonize filename of a .map file, if the platform's build system wants
### to create one ### to create one
CONTIKI_NG_PROJECT_MAP = $(addsuffix -$(TARGET).map, $(basename $@)) CONTIKI_NG_PROJECT_MAP = $(BUILD_DIR_BOARD)/$(basename $(notdir $@)).map
.PHONY: clean distclean usage help targets boards savetarget savedefines viewconf .PHONY: clean distclean usage help targets boards savetarget savedefines viewconf
clean: clean:
-$(Q)rm -f *.d *.e *.o $(CONTIKI_NG_TARGET_LIB) $(CLEAN) -$(Q)rm -f *.d *.e *.o $(CLEAN)
-$(Q)rm -rf $(OBJECTDIR) -$(Q)rm -rf $(BUILD_DIR_TARGET)
-$(Q)rm -f $(addsuffix -$(TARGET).map, $(CONTIKI_PROJECT))
-$(Q)rm -f $(addsuffix .$(TARGET), $(CONTIKI_PROJECT)) -$(Q)rm -f $(addsuffix .$(TARGET), $(CONTIKI_PROJECT))
@echo Target $(TARGET) cleaned @echo Target $(TARGET) cleaned
...@@ -319,6 +330,7 @@ distclean: ...@@ -319,6 +330,7 @@ distclean:
echo Running: $(MAKE) TARGET=$$TARG clean; \ echo Running: $(MAKE) TARGET=$$TARG clean; \
$(MAKE) TARGET=$$TARG clean; \ $(MAKE) TARGET=$$TARG clean; \
done done
-$(Q)rm -rf $(BUILD_DIR)
-include $(CONTIKI)/arch/platform/$(TARGET)/Makefile.customrules-$(TARGET) -include $(CONTIKI)/arch/platform/$(TARGET)/Makefile.customrules-$(TARGET)
...@@ -383,12 +395,16 @@ ifndef LD ...@@ -383,12 +395,16 @@ ifndef LD
endif endif
ifndef CUSTOM_RULE_LINK ifndef CUSTOM_RULE_LINK
%.$(TARGET): %.o $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) $(CONTIKI_NG_TARGET_LIB) $(BUILD_DIR_BOARD)/%.$(TARGET): %.o $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) $(CONTIKI_NG_TARGET_LIB)
$(TRACE_LD) $(TRACE_LD)
$(Q)$(LD) $(LDFLAGS) $(TARGET_STARTFILES) ${filter-out %.a,$^} \ $(Q)$(LD) $(LDFLAGS) $(TARGET_STARTFILES) ${filter-out %.a,$^} \
${filter %.a,$^} $(TARGET_LIBFILES) -o $@ ${filter %.a,$^} $(TARGET_LIBFILES) -o $@
endif endif
%.$(TARGET): $(BUILD_DIR_BOARD)/%.$(TARGET)
$(TRACE_CP)
$(Q)cp $< $@
%.ramprof: %.$(TARGET) %.ramprof: %.$(TARGET)
$(NM) -S -td --size-sort $< | grep -i " [abdrw] " | cut -d' ' -f2,4 $(NM) -S -td --size-sort $< | grep -i " [abdrw] " | cut -d' ' -f2,4
...@@ -446,9 +462,9 @@ ifeq ($(findstring $(TARGET),native cooja),) ...@@ -446,9 +462,9 @@ ifeq ($(findstring $(TARGET),native cooja),)
include $(CONTIKI)/Makefile.embedded include $(CONTIKI)/Makefile.embedded
endif endif
# Don't treat %.$(TARGET) as an intermediate file because it is # Don't treat $(BUILD_DIR_BOARD)/%.$(TARGET) and $(TARGET) as intermediate
# in fact the primary target. # files because for many platforms they are in fact the primary target.
.PRECIOUS: %.$(TARGET) .PRECIOUS: $(BUILD_DIR_BOARD)/%.$(TARGET) %.$(TARGET)
# Cancel the predefined implict rule for compiling and linking # Cancel the predefined implict rule for compiling and linking
# a single C source into a binary to force GNU make to consider # a single C source into a binary to force GNU make to consider
......
### Verbosity control. Use make V=1 to get verbose builds.
### Extends what we already have in the top-level Makefile
ifeq ($(V),1)
TRACE_SREC_CAT =
else
TRACE_SREC_CAT = @echo " SREC_CAT " $< "-->" $@
endif
CC = arm-none-eabi-gcc CC = arm-none-eabi-gcc
CPP = arm-none-eabi-cpp CPP = arm-none-eabi-cpp
LD = arm-none-eabi-gcc LD = arm-none-eabi-gcc
...@@ -43,22 +51,32 @@ endif ...@@ -43,22 +51,32 @@ endif
### CPU-dependent cleanup files ### CPU-dependent cleanup files
CLEAN += *.elf *.bin *.lst *.hex *.i16hex CLEAN += *.elf *.bin *.lst *.hex *.i16hex
OUT_HEX = $(BUILD_DIR_BOARD)/%.hex
OUT_I16HEX = $(BUILD_DIR_BOARD)/%.i16hex
OUT_BIN = $(BUILD_DIR_BOARD)/%.bin
OUT_LST = $(BUILD_DIR_BOARD)/%.lst
### Don't treat the following files as intermediate ### Don't treat the following files as intermediate
.PRECIOUS: %.elf %.hex %.bin .PRECIOUS: $(OUT_ELF) $(OUT_HEX) $(OUT_BIN)
%.i16hex: %.elf $(OUT_I16HEX): $(OUT_ELF)
$(OBJCOPY) -O ihex $< $@ $(TRACE_OBJCOPY)
$(Q)$(OBJCOPY) -O ihex $< $@
%.hex: %.i16hex $(OUT_HEX): $(OUT_I16HEX)
$(SREC_CAT) $< -intel -o $@ -intel $(TRACE_SREC_CAT)
$(Q)$(SREC_CAT) $< -intel -o $@ -intel
%.bin: %.elf $(OUT_BIN): $(OUT_ELF)
$(OBJCOPY) -O binary $(OBJCOPY_FLAGS) $< $@ $(TRACE_OBJCOPY)
$(Q)$(OBJCOPY) -O binary $(OBJCOPY_FLAGS) $< $@
%.lst: %.elf $(OUT_LST): $(OUT_ELF)
$(OBJDUMP) $(OBJDUMP_FLAGS) $< > $@ $(TRACE_OBJDUMP)
$(Q)$(OBJDUMP) $(OBJDUMP_FLAGS) $< > $@
### We don't really need the .hex and .bin for the .$(TARGET) but let's make ### We don't really need the .hex and .bin for the .$(TARGET) but let's make
### sure they get built ### sure they get built
%.$(TARGET): %.elf %.hex %.bin $(BUILD_DIR_BOARD)/%.$(TARGET): $(OUT_ELF) $(OUT_HEX) $(OUT_BIN)
cp $< $@ $(TRACE_CP)
$(Q)cp $< $@
...@@ -3,11 +3,25 @@ CONTIKI_ARM_DIRS += cortex-m cortex-m/CMSIS ...@@ -3,11 +3,25 @@ CONTIKI_ARM_DIRS += cortex-m cortex-m/CMSIS
### Build syscalls for newlib ### Build syscalls for newlib
MODULES += os/lib/newlib MODULES += os/lib/newlib
LDFLAGS += -T $(LDSCRIPT)
LDFLAGS += -Wl,--gc-sections,--sort-section=alignment
LDFLAGS += -Wl,-Map=$(CONTIKI_NG_PROJECT_MAP),--cref,--no-warn-mismatch
OBJCOPY_FLAGS += --gap-fill 0xff
CPU_STARTFILES = ${addprefix $(OBJECTDIR)/,${call oname, $(CPU_START_SOURCEFILES)}}
### Resolve any potential circular dependencies between the linked libraries
### See: https://stackoverflow.com/questions/5651869/gcc-what-are-the-start-group-and-end-group-command-line-options/5651895
TARGET_LIBFLAGS := -Wl,--start-group $(TARGET_LIBFILES) -Wl,--end-group
CUSTOM_RULE_LINK = 1 CUSTOM_RULE_LINK = 1
OUT_ELF = $(BUILD_DIR_BOARD)/%.elf
.SECONDEXPANSION: .SECONDEXPANSION:
%.elf: $(CPU_STARTFILES) $$(CONTIKI_OBJECTFILES) %.o $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) $(LDSCRIPT) $(TARGET_LIBS) $(OUT_ELF): $(CPU_STARTFILES) $$(CONTIKI_OBJECTFILES) %.o $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) $(LDSCRIPT) $(TARGET_LIBS)
$(TRACE_LD) $(TRACE_LD)
$(Q)$(LD) $(LDFLAGS) ${filter-out $(LDSCRIPT) %.a,$^} ${filter %.a,$^} $(TARGET_LIBFLAGS) -o $@ $(Q)$(LD) $(LDFLAGS) ${filter-out $(LDSCRIPT) %.a,$^} ${filter %.a,$^} $(TARGET_LIBFLAGS) -o $@
......
...@@ -3,16 +3,7 @@ CONTIKI_ARM_DIRS += cortex-m/cm3 ...@@ -3,16 +3,7 @@ CONTIKI_ARM_DIRS += cortex-m/cm3
CFLAGS += -mcpu=cortex-m3 CFLAGS += -mcpu=cortex-m3
LDFLAGS += -mcpu=cortex-m3 -nostartfiles LDFLAGS += -mcpu=cortex-m3 -nostartfiles
LDFLAGS += -T $(LDSCRIPT)
LDFLAGS += -Wl,--gc-sections,--sort-section=alignment
LDFLAGS += -Wl,-Map=$(CONTIKI_NG_PROJECT_MAP),--cref,--no-warn-mismatch
OBJCOPY_FLAGS += --gap-fill 0xff TARGET_LIBFILES += -lm
CPU_STARTFILES = ${addprefix $(OBJECTDIR)/,${call oname, $(CPU_START_SOURCEFILES)}}
### Resolve any potential circular dependencies between the linked libraries
### See: https://stackoverflow.com/questions/5651869/gcc-what-are-the-start-group-and-end-group-command-line-options/5651895
TARGET_LIBFLAGS := -Wl,--start-group $(TARGET_LIBFILES) -lm -Wl,--end-group
include $(CONTIKI)/arch/cpu/arm/cortex-m/Makefile.cortex-m include $(CONTIKI)/arch/cpu/arm/cortex-m/Makefile.cortex-m
...@@ -3,16 +3,5 @@ CONTIKI_ARM_DIRS += cortex-m/cm4 ...@@ -3,16 +3,5 @@ CONTIKI_ARM_DIRS += cortex-m/cm4
CFLAGS += -mcpu=cortex-m4 CFLAGS += -mcpu=cortex-m4
LDFLAGS += -mcpu=cortex-m4 LDFLAGS += -mcpu=cortex-m4
LDFLAGS += -T $(LDSCRIPT)
LDFLAGS += -Wl,--gc-sections,--sort-section=alignment
LDFLAGS += -Wl,-Map=$(CONTIKI_NG_PROJECT_MAP),--cref,--no-warn-mismatch
OBJCOPY_FLAGS += --gap-fill 0xff
CPU_STARTFILES = ${addprefix $(OBJECTDIR)/,${call oname, $(CPU_START_SOURCEFILES)}}
### Resolve any potential circular dependencies between the linked libraries
### See: https://stackoverflow.com/questions/5651869/gcc-what-are-the-start-group-and-end-group-command-line-options/5651895
TARGET_LIBFLAGS := -Wl,--start-group $(TARGET_LIBFILES) -Wl,--end-group
include $(CONTIKI)/arch/cpu/arm/cortex-m/Makefile.cortex-m include $(CONTIKI)/arch/cpu/arm/cortex-m/Makefile.cortex-m
...@@ -81,8 +81,10 @@ STACK_SIZE = 0 ...@@ -81,8 +81,10 @@ STACK_SIZE = 0
@$(SIZE) -A $< | egrep "data|bss" | awk '{s+=$$2} END {s=s+$(STACK_SIZE); f=$(RAM_SIZE)-s; printf "[RAM] used %6d, free %6d\n",s,f;}' @$(SIZE) -A $< | egrep "data|bss" | awk '{s+=$$2} END {s=s+$(STACK_SIZE); f=$(RAM_SIZE)-s; printf "[RAM] used %6d, free %6d\n",s,f;}'
@$(SIZE) -A $< | egrep "text|isr_vector" | awk '{s+=$$2} END {f=$(FLASH_SIZE)-s; printf "[Flash] used %6d, free %6d\n",s,f;}' @$(SIZE) -A $< | egrep "text|isr_vector" | awk '{s+=$$2} END {f=$(FLASH_SIZE)-s; printf "[Flash] used %6d, free %6d\n",s,f;}'
include $(CONTIKI)/arch/cpu/arm/cortex-m/cm3/Makefile.cm3
ifeq ($(BOARD_SUPPORTS_BSL),1) ifeq ($(BOARD_SUPPORTS_BSL),1)
%.upload: %.bin %.upload: $(OUT_BIN)
ifeq ($(wildcard $(BSL)), ) ifeq ($(wildcard $(BSL)), )
@echo "ERROR: Could not find the cc2538-bsl script. Did you run 'git submodule update --init' ?" @echo "ERROR: Could not find the cc2538-bsl script. Did you run 'git submodule update --init' ?"
else else
...@@ -95,5 +97,3 @@ endif ...@@ -95,5 +97,3 @@ endif
### For the login etc targets ### For the login etc targets
BAUDRATE = 115200 BAUDRATE = 115200
include $(CONTIKI)/arch/cpu/arm/cortex-m/cm3/Makefile.cm3
...@@ -172,11 +172,11 @@ vpath %.s $(ASM_PATHS) ...@@ -172,11 +172,11 @@ vpath %.s $(ASM_PATHS)
OBJECTS = $(C_OBJECTS) $(ASM_OBJECTS) OBJECTS = $(C_OBJECTS) $(ASM_OBJECTS)
CLEAN += nrf52832.a NRFLIB = $(BUILD_DIR_BOARD)/nrf52832.a
TARGET_LIBS = nrf52832.a $(NRF52_SDK_ROOT)/components/iot/ble_6lowpan/lib/ble_6lowpan.a TARGET_LIBS = $(NRFLIB) $(NRF52_SDK_ROOT)/components/iot/ble_6lowpan/lib/ble_6lowpan.a
nrf52832.a: $(OBJECTS) $(NRFLIB): $(OBJECTS)
$(TRACE_AR) $(TRACE_AR)
$(Q)$(AR) $(AROPTS) $@ $^ $(Q)$(AR) $(AROPTS) $@ $^
......
...@@ -28,11 +28,12 @@ endif ...@@ -28,11 +28,12 @@ endif
BSL = $(CONTIKI)/tools/cc2538-bsl/cc2538-bsl.py BSL = $(CONTIKI)/tools/cc2538-bsl/cc2538-bsl.py
%.upload: %.bin %.elf %.upload: $(OUT_BIN) $(OUT_ELF)
ifeq ($(wildcard $(BSL)), ) ifeq ($(wildcard $(BSL)), )
@echo "ERROR: Could not find the cc2538-bsl script. Did you run 'git submodule update --init' ?" @echo "ERROR: Could not find the cc2538-bsl script. Did you run 'git submodule update --init' ?"
else else
$(eval BSL_ADDRESS_ARG := -a $(shell $(OBJDUMP) -h $*.elf | grep -B1 LOAD | \ $(eval BSL_ADDRESS_ARG := -a $(shell $(OBJDUMP) -h \
$(BUILD_DIR_BOARD)/$*.elf | grep -B1 LOAD | \
grep -Ev 'LOAD|\-\-' | awk '{print "0x" $$5}' | \ grep -Ev 'LOAD|\-\-' | awk '{print "0x" $$5}' | \
sort -g | head -1)) sort -g | head -1))
$(PYTHON) $(BSL) $(BSL_FLAGS) $(BSL_ADDRESS_ARG) $< $(PYTHON) $(BSL) $(BSL_FLAGS) $(BSL_ADDRESS_ARG) $<
......
...@@ -34,10 +34,10 @@ endif ...@@ -34,10 +34,10 @@ endif
endif ## QUICKSTART endif ## QUICKSTART
#MAIN_SRC = $(OBJECTDIR)/$(LIBNAME).c #MAIN_SRC = $(BUILD_DIR_BOARD)/$(LIBNAME).c
MAIN_OBJ = $(OBJECTDIR)/$(LIBNAME).o MAIN_OBJ = $(BUILD_DIR_BOARD)/$(LIBNAME).o
ARCHIVE = $(OBJECTDIR)/$(LIBNAME).a ARCHIVE = $(BUILD_DIR_BOARD)/$(LIBNAME).a
JNILIB = $(OBJECTDIR)/$(LIBNAME).$(TARGET) JNILIB = $(BUILD_DIR_BOARD)/$(LIBNAME).$(TARGET)
CONTIKI_APP_OBJ = $(CONTIKI_APP).o CONTIKI_APP_OBJ = $(CONTIKI_APP).o
### COOJA platform sources ### COOJA platform sources
......
...@@ -10,11 +10,11 @@ CUSTOM_RULE_LINK=1 ...@@ -10,11 +10,11 @@ CUSTOM_RULE_LINK=1
REDEF_PRINTF=1 # Redefine functions to enable printf()s inside Cooja REDEF_PRINTF=1 # Redefine functions to enable printf()s inside Cooja
# NB: Assumes ARCHIVE was not overridden and is in $(OBJECTDIR) # NB: Assumes ARCHIVE was not overridden and is in $(BUILD_DIR_BOARD)
$(ARCHIVE): $(CONTIKI_OBJECTFILES) | $(OBJECTDIR) $(ARCHIVE): $(CONTIKI_OBJECTFILES) | $(OBJECTDIR)
$(AR_COMMAND_1) $^ $(AR_COMMAND_2) $(AR_COMMAND_1) $^ $(AR_COMMAND_2)
# NB: Assumes JNILIB was not overridden and is in $(OBJECTDIR) # NB: Assumes JNILIB was not overridden and is in $(BUILD_DIR_BOARD)
$(JNILIB): $(CONTIKI_APP_OBJ) $(MAIN_OBJ) $(PROJECT_OBJECTFILES) $(ARCHIVE) | $(OBJECTDIR) $(JNILIB): $(CONTIKI_APP_OBJ) $(MAIN_OBJ) $(PROJECT_OBJECTFILES) $(ARCHIVE) | $(OBJECTDIR)
ifdef REDEF_PRINTF ifdef REDEF_PRINTF
......
...@@ -229,30 +229,34 @@ ALLLIBS = $(addprefix -l,$(LDLIBS)) $(addprefix -l,$(LDSTACKLIBS)) $(addprefix - ...@@ -229,30 +229,34 @@ ALLLIBS = $(addprefix -l,$(LDLIBS)) $(addprefix -l,$(LDSTACKLIBS)) $(addprefix -
ABS_APPLIBS = $(addsuffix _$(JENNIC_CHIP_FAMILY).a,$(addprefix $(COMPONENTS_BASE_DIR)/Library/lib,$(APPLIBS))) ABS_APPLIBS = $(addsuffix _$(JENNIC_CHIP_FAMILY).a,$(addprefix $(COMPONENTS_BASE_DIR)/Library/lib,$(APPLIBS)))
ifneq ($(wildcard $(SDK_BASE_DIR)/Components/Library/*),) ifneq ($(wildcard $(SDK_BASE_DIR)/Components/Library/*),)
# The SDK is fully installed, proceed to linking and objcopy to ready-to-upload .jn516x.bin file # The SDK is fully installed, proceed to linking
%.$(TARGET): %.o $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) $(CONTIKI_NG_TARGET_LIB) $(ABS_APPLIBS) $(BUILD_DIR_BOARD)/%.$(TARGET): %.o $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) $(CONTIKI_NG_TARGET_LIB) $(ABS_APPLIBS)
echo ${filter %.a,$^} @echo ${filter %.a,$^}
$(Q)$(CC) -Wl,--gc-sections $(LDFLAGS) -T$(LINKCMD) -o $@ -Wl,--start-group \ $(Q)$(CC) -Wl,--gc-sections $(LDFLAGS) -T$(LINKCMD) -o $@ -Wl,--start-group \
$(patsubst /cygdrive/c/%,c:/%,${filter-out %.a,$^}) \ $(patsubst /cygdrive/c/%,c:/%,${filter-out %.a,$^}) \
$(patsubst /cygdrive/c/%,c:/%,${filter %.a,$^}) \ $(patsubst /cygdrive/c/%,c:/%,${filter %.a,$^}) \
$(ALLLIBS) -Wl,--end-group -Wl,-Map,$(CONTIKI_NG_PROJECT_MAP) $(ALLLIBS) -Wl,--end-group -Wl,-Map,$(CONTIKI_NG_PROJECT_MAP)
$(OBJCOPY) -S -O binary $@ $@.bin
else else
# The SDK does not include libraries, only build objects and libraries, skip linking # The SDK does not include libraries, only build objects and libraries, skip linking
%.$(TARGET): %.o $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) $(CONTIKI_NG_TARGET_LIB) $(BUILD_DIR_BOARD)/%.$(TARGET): %.o $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) $(CONTIKI_NG_TARGET_LIB)
echo Creating empty $@ @echo Creating empty $@
touch $@ touch $@
endif endif
%.$(TARGET).bin: %.$(TARGET) $(BUILD_DIR_BOARD)/%.$(TARGET).bin: $(BUILD_DIR_BOARD)/%.$(TARGET)
$(TRACE_OBJCOPY)
$(Q)$(OBJCOPY) -S -O binary $< $@ $(Q)$(OBJCOPY) -S -O binary $< $@
%.$(TARGET).bin: $(BUILD_DIR_BOARD)/%.$(TARGET).bin
$(TRACE_CP)
$(Q)$(CP) $< $@
### Upload target to one jn516x mote specified by MOTE=portNumber ### Upload target to one jn516x mote specified by MOTE=portNumber
ifeq ($(HOST_OS),Windows) ifeq ($(HOST_OS),Windows)
%.upload: %.$(TARGET).bin %.upload: $(BUILD_DIR_BOARD)/%.$(TARGET).bin
${FLASH_PROGRAMMER} -a -c $(DEV_PORT) -B 1000000 -s -w -f $< ${FLASH_PROGRAMMER} -a -c $(DEV_PORT) -B 1000000 -s -w -f $<
else else
%.upload: %.$(TARGET).bin %.upload: $(BUILD_DIR_BOARD)/%.$(TARGET).bin
${FLASH_PROGRAMMER} -V 10 -v -s $(DEV_PORT) -I 38400 -P 1000000 -f $< ${FLASH_PROGRAMMER} -V 10 -v -s $(DEV_PORT) -I 38400 -P 1000000 -f $<
endif endif
...@@ -276,7 +280,7 @@ motelistinfo: ...@@ -276,7 +280,7 @@ motelistinfo:
$(Q)$(MOTELIST) ${FLASH_PROGRAMMER} \? $(Q)$(MOTELIST) ${FLASH_PROGRAMMER} \?
### Upload target to all connected jn516x motes ### Upload target to all connected jn516x motes
%.uploadall: %.$(TARGET).bin %.uploadall: $(BUILD_DIR_BOARD)/%.$(TARGET).bin
$(Q)$(MOTELIST) ${FLASH_PROGRAMMER} $< $(Q)$(MOTELIST) ${FLASH_PROGRAMMER} $<
### Flash the given file to all connected jn516x motes ### Flash the given file to all connected jn516x motes
......
...@@ -35,11 +35,12 @@ endif ...@@ -35,11 +35,12 @@ endif
BSL = $(CONTIKI)/tools/cc2538-bsl/cc2538-bsl.py BSL = $(CONTIKI)/tools/cc2538-bsl/cc2538-bsl.py
%.upload: %.bin %.elf %.upload: $(OUT_BIN) $(OUT_ELF)
ifeq ($(wildcard $(BSL)), ) ifeq ($(wildcard $(BSL)), )
@echo "ERROR: Could not find the cc2538-bsl script. Did you run 'git submodule update --init' ?" @echo "ERROR: Could not find the cc2538-bsl script. Did you run 'git submodule update --init' ?"
else else
$(eval BSL_ADDRESS_ARG := -a $(shell $(OBJDUMP) -h $*.elf | grep -B1 LOAD | \ $(eval BSL_ADDRESS_ARG := -a $(shell $(OBJDUMP) -h \
$(BUILD_DIR_BOARD)/$*.elf | grep -B1 LOAD | \
grep -Ev 'LOAD|\-\-' | awk '{print "0x" $$5}' | \ grep -Ev 'LOAD|\-\-' | awk '{print "0x" $$5}' | \
sort -g | head -1)) sort -g | head -1))
$(PYTHON) $(BSL) $(BSL_FLAGS) $(BSL_ADDRESS_ARG) $< $(PYTHON) $(BSL) $(BSL_FLAGS) $(BSL_ADDRESS_ARG) $<
......
...@@ -69,9 +69,9 @@ endif ...@@ -69,9 +69,9 @@ endif
### $$$$ Double escapes $s that need to be passed to the shell - once for when ### $$$$ Double escapes $s that need to be passed to the shell - once for when
### make parses UPLOAD_RULE, and once for when the expanded rule is parsed by make. ### make parses UPLOAD_RULE, and once for when the expanded rule is parsed by make.
define UPLOAD_RULE define UPLOAD_RULE
%.$(MOTE): %.bin %.elf %.$(MOTE): $(OUT_BIN) $(OUT_ELF)
@echo "Flashing $(MOTE)" @echo "Flashing $(MOTE)"
@BSL_ADDRESS=`$(OBJDUMP) -h $$*.elf | grep -B1 LOAD | \ @BSL_ADDRESS=`$(OBJDUMP) -h $(BUILD_DIR_BOARD)/$$*.elf | grep -B1 LOAD | \
grep -Ev 'LOAD|\-\-' | awk '{print "0x" $$$$5}' | \ grep -Ev 'LOAD|\-\-' | awk '{print "0x" $$$$5}' | \
sort -g | head -1`; \ sort -g | head -1`; \
$(PYTHON) $(BSL) $(BSL_FLAGS) -b $(BSL_SPEED) -a $$$${BSL_ADDRESS} -p $(MOTE) $$< $(PYTHON) $(BSL) $(BSL_FLAGS) -b $(BSL_SPEED) -a $$$${BSL_ADDRESS} -p $(MOTE) $$<
......
Subproject commit a5904b98366478bb9e7f7fe9f0bb78fc064914c5 Subproject commit 63538bbb882ba06a7b8cf97c11ce2fe4d22e4f88
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment