#-*-Makefile-*- vim:syntax=make #$Id$ define AVR_HELP AVR extras: debug : compile with minimal optimization and debug symbols debugopt : compile with debug symbols xnp : compile for network programming Programmer options: dapa : (default) use parallel port programmer mib510, : use MIB510/MIB520 serial port programming board at port eprb, : use EPRB at hostname avrisp, : use AVRISP serial programmer at port The dev or host parameter for the programmer option need not be specified, in which case it is expected to be defined as in an environment variable of the same name in all caps (such as MIB510, EPRB, or AVRISP). endef HELP += $(AVR_HELP) ifdef MAKE_DEPUTY_FLAG NCC_SAFE_TINYOS_FLAG = -safe else NCC_SAFE_TINYOS_FLAG = endif OBJCOPY = avr-objcopy OBJDUMP = avr-objdump SET_ID = tos-set-symbols PROGRAMMER ?= uisp NCC = ncc LIBS = -lm AMADDR = ActiveMessageAddressC\$$addr # Uncomment the next two lines if you have a toolchain without the dollar sign # patch. This needs nesc 1.2.8 or newer (1.2.9 is recommended). #PFLAGS += -fnesc-separator=__ #AMADDR = ActiveMessageAddressC__addr BUILDDIR = build/$(PLATFORM) MAIN_EXE = $(BUILDDIR)/main.exe MAIN_SREC = $(BUILDDIR)/main.srec MAIN_IHEX = $(BUILDDIR)/main.ihex INSTALL_SREC = $(MAIN_SREC).out$(if $(NODEID),-$(NODEID),) VOLUMEFILE = volumes-at45db.xml PFLAGS += -Wall -Wshadow $(NESC_FLAGS) PFLAGS += -target=$(PLATFORM) -fnesc-cfile=$(BUILDDIR)/app.c -board=$(SENSORBOARD) ifdef MSG_SIZE PFLAGS += -DTOSH_DATA_LENGTH=$(MSG_SIZE) endif ifdef DEFAULT_LOCAL_GROUP PFLAGS += -DDEFINED_TOS_AM_GROUP=$(DEFAULT_LOCAL_GROUP) endif AVRGCCMAJOR = $(shell avr-gcc -v 2>&1 | grep "gcc version" | sed -n 's/gcc version \([2-5]\)\.\([0-9]\)\.\([0-9]\).*/\1/p') ifeq ($(AVRGCCMAJOR),4) PFLAGS += --param max-inline-insns-single=100000 else PFLAGS += -finline-limit=100000 endif ifeq ($(PROGRAMMER),avrdude) AVRDUDE_CONF ?= /etc/avrdude/avrdude.conf ifeq ($(shell [ -f /bin/cygwin1.dll ] && echo cygwin),cygwin) AVRDUDE_CONF := $(shell cygpath -m $(AVRDUDE_CONF)) endif PROGRAMMER_EXTRA_FLAGS += -C$(AVRDUDE_CONF) # PROGRAMMER_EXTRA_FLAGS += -v -v endif ifdef DEFAULT_PROGRAM_AVR DEFAULT_PROGRAM = $(DEFAULT_PROGRAM_AVR) endif DEFAULT_PROGRAM ?= dapa BUILDLESS_DEPS += bytes ifndef NOWIRING include $(TINYOS_MAKE_PATH)/wiring.extra endif # Use the 'if' function instead of the 'ifdef' construct because ifdef freaks # out with call in there. I don't know why. $(if $(PROGRAM),,$(call TOSMake_include,avr/$(DEFAULT_PROGRAM).extra)) # Build storage file if volumes.xml present ifneq ($(wildcard $(VOLUMEFILE)), ) exe0: $(BUILDDIR)/StorageVolumes.h $(BUILDDIR)/StorageVolumes.h: $(VOLUMEFILE) tos-storage-at45db $(PLATFORMDIR) <$(VOLUMEFILE) >$@ || rm -f $@ PFLAGS += -I$(BUILDDIR) endif ifndef BUILD_DEPS ifeq ($(filter $(BUILDLESS_DEPS),$(GOALS)),) BUILD_DEPS = srec tosimage bytes $(POST_BUILD_EXTRA_DEPS) endif endif setid: FORCE @cmd () { echo "$$@"; $$@; }; if [ x = x$(NODEID) ]; then cmd cp $(MAIN_SREC) $(INSTALL_SREC); else cmd $(SET_ID) $(MAIN_SREC) $(INSTALL_SREC) TOS_NODE_ID=$(NODEID) $(AMADDR)=$(NODEID) ; fi delsetid: FORCE rm -f $(subst .srec.,.exe.,$(INSTALL_SREC)) $(INSTALL_SREC) srec: exe FORCE $(OBJCOPY) --output-target=srec $(MAIN_EXE) $(MAIN_SREC) tos_buildinfo: ihex build_buildinfo FORCE @: tosimage: ihex build_tosimage FORCE @: ihex: exe FORCE $(OBJCOPY) --output-target=ihex $(MAIN_EXE) $(MAIN_IHEX) exe: exe0 bytes FORCE @: exe0: builddir $(BUILD_EXTRA_DEPS) FORCE @echo " compiling $(COMPONENT) to a $(PLATFORM) binary" $(NCC) -o $(MAIN_EXE) $(NCC_SAFE_TINYOS_FLAG) $(OPTFLAGS) $(PFLAGS) $(CFLAGS) $(WIRING_CHECK_FLAGS) $(COMPONENT).nc $(LIBS) $(LDFLAGS) ifdef WIRING_CHECK_FILE @nescc-wiring $(WIRING_CHECK_FILE) endif @echo " compiled $(COMPONENT) to $(MAIN_EXE)" builddir: FORCE mkdir -p $(BUILDDIR) bytes: FORCE @$(OBJDUMP) -h $(MAIN_EXE) | perl -ne '$$b{$$1}=hex $$2 if /^\s*\d+\s*\.(text|data|bss)\s+(\S+)/; END { printf("%16d bytes in ROM\n%16d bytes in RAM\n",$$b{text}+$$b{data},$$b{data}+$$b{bss}); }'