# Adapted from Makefile.msp430 ### Defin the CPU directory CONTIKI_CPU=$(CONTIKI)/cpu/at91sam7s ### Define the source files we have in the AT91SAM7S port CONTIKI_CPU_DIRS = . dbg-io loader usb AT91SAM7S = clock.c debug-uart.c interrupt-utils.c newlib-syscalls.c sys-interrupt.c rtimer-arch.c rtimer-arch-interrupt.c uip-log.c SYSAPPS = codeprop-otf.c APPDIRS += $(CONTIKI)/cpu/at91sam7s/loader ELFLOADER = elfloader-otf.c elfloader-arm.c symtab.c cfs-ram.c USB = usb-proto.c usb-handler.c usb-interrupt.c cdc-acm.c descriptors.c string-descriptors.c TARGETLIBS = random.c dbg-printf.c dbg-puts.c dbg-putchar.c dbg-sprintf.c strformat.c CONTIKI_TARGET_SOURCEFILES += $(AT91SAM7S) $(SYSAPPS) $(ELFLOADER) \ $(TARGETLIBS) $(UIPDRIVERS) $(USB) CONTIKI_SOURCEFILES += $(CONTIKI_TARGET_SOURCEFILES) THREADS = ### Compiler definitions CC = arm-elf-gcc LD = arm-elf-ld AS = arm-elf-as AR = arm-elf-ar NM = arm-elf-nm OBJCOPY = arm-elf-objcopy STRIP = arm-elf-strip XSLTPROC=xsltproc PROJECT_OBJECTFILES += ${addprefix $(OBJECTDIR)/,$(CONTIKI_TARGET_MAIN:.c=.o)} LINKERSCRIPT = $(CONTIKI_CPU)/AT91SAM7S64-ROM.ld STARTUP=${addprefix $(OBJECTDIR)/,startup-SAM7S.o} # JTAG program upload OPENOCD = openocd OPENOCD_FLASH_CFG = arm7_wig_flash.cfg OPENOCD_RESET = arm7_wig_reset.cfg # USB program upload SAMIAM=Sam_I_Am SAMIAM_TTY=/dev/ttyACM0 ARCH_FLAGS= -mcpu=arm7tdmi -mthumb-interwork THUMB_FLAGS=-mthumb ARM_FLAGS= CFLAGSNO = -I. -I$(CONTIKI)/core -I$(CONTIKI_CPU) -I$(CONTIKI_CPU)/loader \ -I$(CONTIKI_CPU)/dbg-io \ -I$(CONTIKI)/platform/$(TARGET) \ ${addprefix -I,$(APPDIRS)} \ -DWITH_UIP -DWITH_ASCII -DMCK=$(MCK) \ -Wall -Werror $(ARCH_FLAGS) -g CFLAGS += $(CFLAGSNO) -O -DRUN_AS_SYSTEM -DROM_RUN LDFLAGS += -T $(LINKERSCRIPT) -nostartfiles CDEPFLAGS = $(CFLAGS) -D __MAKING_DEPS__ ### Setup directory search path for source files CUSTOM_RULE_C_TO_OBJECTDIR_O=yes CUSTOM_RULE_C_TO_O=yes %-interrupt.o: %-interrupt.c $(CC) $(CFLAGS) $(ARM_FLAGS) $< -c $(OBJECTDIR)/%-interrupt.o: %-interrupt.c $(CC) $(CFLAGS) $(ARM_FLAGS) -c $< -o $@ %-arm.o: %-arm.c $(CC) $(CFLAGS) $(ARM_FLAGS) $< -c $(OBJECTDIR)/%-arm.o: %-arm.c $(CC) $(CFLAGS) $(ARM_FLAGS) -c $< -o $@ $(OBJECTDIR)/interrupt-utils.o: interrupt-utils.c $(CC) $(CFLAGS) $(ARM_FLAGS) $< -c -o $@ %.o: %.c $(CC) $(CFLAGS) $(THUMB_FLAGS) $< -c $(OBJECTDIR)/%.o: %.c $(CC) $(CFLAGS) $(THUMB_FLAGS) -c $< -o $@ CUSTOM_RULE_S_TO_OBJECTDIR_O = yes %.o: %.S $(CC) $(CFLAGS) $(ARM_FLAGS) $< -c $(OBJECTDIR)/%.o: %.S $(CC) $(CFLAGS) $(ARM_FLAGS) $< -c -o $@ CUSTOM_RULE_C_TO_CO=yes %.co: %.c $(CC) $(CFLAGS) $(THUMB_FLAGS) $< -c -o $@ CUSTOM_RULE_C_TO_CE=yes %.ce: %.o $(LD) $(LDFLAGS) --relocatable -T $(CONTIKI_CPU)/merge-rodata.ld $< -o $@ $(STRIP) -K _init -K _fini --strip-unneeded -g -x $@ CUSTOM_RULE_LINK=yes %-stripped.o: %.c $(CC) $(CFLAGS) -c $< -o $@ $(STRIP) --strip-unneeded -g -x $@ %-stripped.o: %.o $(STRIP) --strip-unneeded -g -x -o $@ $< %.o: ${CONTIKI_TARGET}/loader/%.S $(AS) -o $(notdir $(<:.S=.o)) $< %-nosyms.$(TARGET): %.co $(PROJECT_OBJECTFILES) contiki-$(TARGET).a $(STARTUP) $(OBJECTDIR)/empty-symbols.o $(CC) $(LDFLAGS) $(CFLAGS) -nostartfiles -o $@ $(filter-out %.a,$^) $(filter %.a,$^) -lc $(filter %.a,$^) %.ihex: %.$(TARGET) $(OBJCOPY) $^ -O ihex $@ %.bin: %.$(TARGET) $(OBJCOPY) -O binary $< $@ .PHONY: symbols.c ifdef CORE %.$(TARGET): %.co $(PROJECT_OBJECTFILES) contiki-$(TARGET).a $(STARTUP) $(OBJECTDIR)/symbols.o $(CC) $(LDFLAGS) $(CFLAGS) -nostartfiles -o $@ $(filter-out %.a,$^) $(filter %.a,$^) -lc $(filter %.a,$^) symbols.c: $(CORE) $(NM) $< | awk -f $(CONTIKI_CPU)/builtins.awk -f ../../tools/mknmlist > symbols.c else %.$(TARGET): %-nosyms.$(TARGET) ln -sf $< $@ endif empty-symbols.c: @${CONTIKI}/tools/make-empty-symbols $(CONTIKI_CPU)/usb/string-descriptors.c: \ $(CONTIKI_CPU)/usb/string-descriptors.xml $(XSLTPROC) $(CONTIKI_CPU)/usb/string-descriptors.xslt $^ >$@ upload_ocd_%: %.bin cp $< /tmp/openocd_write.bin # Clear lock bits cd $(CONTIKI_CPU)/openocd;$(OPENOCD) -f $(OPENOCD_FLASH_CFG) -rm /tmp/openocd_write.bin upload_%: %.ihex # Clear lock bits $(SAMIAM) "open $(SAMIAM_TTY) , writew 0xffffff64 5a000004" $(SAMIAM) "open $(SAMIAM_TTY) , writew 0xffffff64 5a002004" $(SAMIAM) "open $(SAMIAM_TTY) , flash $< , go" ocd_reset: cd $(CONTIKI_CPU)/openocd;$(OPENOCD) -f $(OPENOCD_RESET) # Don't use core/loader/elfloader.c, use elfloader-otf.c instead $(OBJECTDIR)/elfloader.o: echo -n >$@ .PRECIOUS: %-nosyms.$(TARGET)