974850cdf2
ELF files generated by GCC make SmartRF Flash Programmer 2 crash (only the TI format is supported by this tool for ELFs), and binary files are not very appropriate because they are gapless, so generate Intel HEX files since these are very well supported by most programming tools while still flexible. Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
94 lines
2.9 KiB
Makefile
94 lines
2.9 KiB
Makefile
CC = arm-none-eabi-gcc
|
|
CPP = arm-none-eabi-cpp
|
|
LD = arm-none-eabi-gcc
|
|
AR = arm-none-eabi-ar
|
|
OBJCOPY = arm-none-eabi-objcopy
|
|
NM = arm-none-eabi-nm
|
|
|
|
LDSCRIPT = $(OBJECTDIR)/cc2538.ld
|
|
|
|
CFLAGS += -O2 -mcpu=cortex-m3 -mthumb -mlittle-endian
|
|
CFLAGS += -fshort-enums -fomit-frame-pointer -fno-strict-aliasing
|
|
CFLAGS += -Wall
|
|
LDFLAGS += -mcpu=cortex-m3 -mthumb -nostartfiles
|
|
LDFLAGS += -T $(LDSCRIPT)
|
|
LDFLAGS += -Wl,-Map=$(@:.elf=-$(TARGET).map),--cref,--no-warn-mismatch
|
|
OBJCOPY_FLAGS += -O binary --gap-fill 0xff
|
|
|
|
### Are we building with code size optimisations?
|
|
ifeq ($(SMALL),1)
|
|
CFLAGS += -ffunction-sections -fdata-sections
|
|
LDFLAGS += -Wl,--gc-sections
|
|
endif
|
|
|
|
### If the user-specified a Node ID, pass a define
|
|
ifdef NODEID
|
|
CFLAGS += -DIEEE_ADDR_NODE_ID=$(NODEID)
|
|
endif
|
|
|
|
### CPU-dependent cleanup files
|
|
CLEAN += symbols.c symbols.h *.d *.elf *.hex
|
|
|
|
### CPU-dependent directories
|
|
CONTIKI_CPU_DIRS = . dev usb
|
|
|
|
### Use the existing debug I/O in cpu/arm/common
|
|
CONTIKI_CPU_DIRS += ../arm/common/dbg-io
|
|
|
|
### Use usb core from cpu/cc253x/usb/common
|
|
CONTIKI_CPU_DIRS += ../cc253x/usb/common ../cc253x/usb/common/cdc-acm
|
|
|
|
### CPU-dependent source files
|
|
CONTIKI_CPU_SOURCEFILES += clock.c rtimer-arch.c uart.c watchdog.c
|
|
CONTIKI_CPU_SOURCEFILES += nvic.c cpu.c sys-ctrl.c gpio.c ioc.c spi.c
|
|
CONTIKI_CPU_SOURCEFILES += cc2538-rf.c udma.c lpm.c
|
|
CONTIKI_CPU_SOURCEFILES += dbg.c ieee-addr.c
|
|
CONTIKI_CPU_SOURCEFILES += slip-arch.c slip.c
|
|
|
|
DEBUG_IO_SOURCEFILES += dbg-printf.c dbg-snprintf.c dbg-sprintf.c strformat.c
|
|
|
|
USB_CORE_SOURCEFILES += usb-core.c cdc-acm.c
|
|
USB_ARCH_SOURCEFILES += usb-arch.c usb-serial.c cdc-acm-descriptors.c
|
|
|
|
CONTIKI_SOURCEFILES += $(CONTIKI_CPU_SOURCEFILES) $(DEBUG_IO_SOURCEFILES)
|
|
CONTIKI_SOURCEFILES += $(USB_CORE_SOURCEFILES) $(USB_ARCH_SOURCEFILES)
|
|
|
|
### Don't treat the .elf as intermediate
|
|
.PRECIOUS: %.elf %.hex %.bin
|
|
|
|
### Always re-build ieee-addr.o in case the command line passes a new NODEID
|
|
FORCE:
|
|
|
|
$(OBJECTDIR)/ieee-addr.o: ieee-addr.c FORCE | $(OBJECTDIR)
|
|
$(TRACE_CC)
|
|
$(Q)$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
### Compilation rules
|
|
CUSTOM_RULE_LINK=1
|
|
|
|
%.elf: $(TARGET_STARTFILES) %.co $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) contiki-$(TARGET).a $(LDSCRIPT)
|
|
$(TRACE_LD)
|
|
$(Q)$(LD) $(LDFLAGS) ${filter-out $(LDSCRIPT) %.a,$^} ${filter %.a,$^} -o $@
|
|
|
|
%.hex: %.elf
|
|
$(OBJCOPY) -O ihex $< $@
|
|
|
|
%.bin: %.elf
|
|
$(OBJCOPY) $(OBJCOPY_FLAGS) $< $@
|
|
|
|
### We don't really need the .hex and .bin for the .$(TARGET) but let's make
|
|
### sure they get built
|
|
%.$(TARGET): %.elf %.hex %.bin
|
|
cp $< $@
|
|
|
|
### This rule is used to generate the correct linker script
|
|
LDGENFLAGS += $(addprefix -D,$(subst $(COMMA), ,$(DEFINES)))
|
|
LDGENFLAGS += $(addprefix -I,$(SOURCEDIRS))
|
|
LDGENFLAGS += -imacros "contiki-conf.h"
|
|
LDGENFLAGS += -x c -P -E
|
|
|
|
# NB: Assumes LDSCRIPT was not overridden and is in $(OBJECTDIR)
|
|
$(LDSCRIPT): $(CONTIKI_CPU)/cc2538.lds FORCE | $(OBJECTDIR)
|
|
$(TRACE_CC)
|
|
$(Q)$(CC) $(LDGENFLAGS) $< -o $@
|