137 lines
4.6 KiB
Makefile
137 lines
4.6 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
|
|
OBJDUMP = arm-none-eabi-objdump
|
|
NM = arm-none-eabi-nm
|
|
SIZE = arm-none-eabi-size
|
|
SREC_CAT = srec_cat
|
|
|
|
### TI CC26xxware out-of-tree
|
|
### TI_CC26XXWARE is the home directory of the cc26xxware
|
|
### It MUST be provided as a path relative to $(CONTIKI)
|
|
### For example, if
|
|
### CONTIKI = /home/user/contiki
|
|
### and TI_CC26XXWARE is stored in
|
|
### /home/user/cc26xxware
|
|
### then set
|
|
### TI_CC26XXWARE = ../cc26xxware
|
|
ifndef TI_CC26XXWARE
|
|
$(error TI_CC26XXWARE not defined. Please see the README)
|
|
endif
|
|
|
|
### cc26xxware sources will be added to the MODULES list
|
|
TI_CC26XXWARE_SRC = $(TI_CC26XXWARE)/driverlib
|
|
|
|
### The directory with startup sources will be added to the CONTIKI_CPU_DIRS
|
|
### and the sources therein are added to the sources list explicitly. They are
|
|
### also listed explicitly in the linker command (through TARGET_STARTFILES),
|
|
### to make sure they always get linked in the image
|
|
TI_CC26XXWARE_STARTUP = ../../$(TI_CC26XXWARE)/startup_files
|
|
TI_CC26XXWARE_STARTUP_SRCS = ccfg.c startup_gcc.c
|
|
|
|
### MODULES will add some of these to the include pach, but we need to add
|
|
### them earlier to prevent filename clashes with Contiki core files
|
|
CFLAGS += -I$(CONTIKI)/$(TI_CC26XXWARE) -I$(CONTIKI)/$(TI_CC26XXWARE_SRC)
|
|
CFLAGS += -I$(CONTIKI)/$(TI_CC26XXWARE)/inc
|
|
MODULES += $(TI_CC26XXWARE_SRC)
|
|
|
|
LDSCRIPT = $(CONTIKI_CPU)/cc26xx.ld
|
|
|
|
CFLAGS += -mcpu=cortex-m3 -mthumb -mlittle-endian
|
|
CFLAGS += -ffunction-sections -fdata-sections
|
|
CFLAGS += -fshort-enums -fomit-frame-pointer -fno-strict-aliasing
|
|
CFLAGS += -Wall -std=c99
|
|
|
|
### Workaround for driverlib's cpu.h which tests if defined(gcc)
|
|
### Delete if it gets fixed or if we stop using the driverlib
|
|
CFLAGS += -Dgcc=__GNUC__
|
|
|
|
LDFLAGS += -mcpu=cortex-m3 -mthumb -mlittle-endian -nostartfiles
|
|
LDFLAGS += -T $(LDSCRIPT)
|
|
LDFLAGS += -Wl,--gc-sections,--sort-section=alignment
|
|
LDFLAGS += -Wl,-Map=$(@:.elf=-$(TARGET).map),--cref,--no-warn-mismatch
|
|
OBJCOPY_FLAGS += -O binary --gap-fill 0xff
|
|
OBJDUMP_FLAGS += --disassemble --source --disassembler-options=force-thumb
|
|
|
|
### Are we building with code size optimisations?
|
|
ifeq ($(SMALL),1)
|
|
CFLAGS += -Os
|
|
else
|
|
CFLAGS += -O2
|
|
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 dev/rfc-api $(TI_CC26XXWARE_STARTUP)
|
|
|
|
### Use the existing debug I/O in cpu/arm/common
|
|
CONTIKI_CPU_DIRS += ../arm/common/dbg-io
|
|
|
|
### CPU-dependent source files
|
|
CONTIKI_CPU_SOURCEFILES += clock.c rtimer-arch.c cc26xx-rtc.c uart.c
|
|
CONTIKI_CPU_SOURCEFILES += cc26xx-rf.c contiki-watchdog.c
|
|
CONTIKI_CPU_SOURCEFILES += putchar.c ieee-addr.c batmon-sensor.c
|
|
CONTIKI_CPU_SOURCEFILES += slip-arch.c slip.c cc26xx-uart.c lpm.c
|
|
CONTIKI_CPU_SOURCEFILES += gpio-interrupt.c
|
|
|
|
DEBUG_IO_SOURCEFILES += dbg-printf.c dbg-snprintf.c dbg-sprintf.c strformat.c
|
|
|
|
CONTIKI_SOURCEFILES += $(CONTIKI_CPU_SOURCEFILES) $(DEBUG_IO_SOURCEFILES)
|
|
|
|
TARGET_START_SOURCEFILES += fault-handlers.c $(TI_CC26XXWARE_STARTUP_SRCS)
|
|
TARGET_STARTFILES = $(addprefix $(OBJECTDIR)/,$(call oname, $(TARGET_START_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,$^} $(TARGET_LIBFILES) -lm -o $@
|
|
|
|
%.i16hex: %.elf
|
|
$(OBJCOPY) -O ihex $< $@
|
|
|
|
%.hex: %.i16hex
|
|
$(SREC_CAT) $< -intel -o $@ -intel
|
|
|
|
%.bin: %.elf
|
|
$(OBJCOPY) $(OBJCOPY_FLAGS) $< $@
|
|
|
|
%.lst: %.elf
|
|
$(OBJDUMP) $(OBJDUMP_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 $< $@
|
|
|
|
# a target that gives a user-friendly memory profile, taking into account the RAM
|
|
# that is statically occupied by the stack as defined in the linker script
|
|
# see $(LDSCRIPT)
|
|
RAM_SIZE = 0x00003E00
|
|
FLASH_SIZE = 0x0001E000
|
|
STACK_SIZE = 0
|
|
%.size: %.$(TARGET)
|
|
@$(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;}'
|
|
|