📄 makerules
字号:
#-*-Makefile-*-# Base Makefile for nesC apps.## Created: 6/2002, Philip Levis <pal@cs.berkeley.edu>## Updated: 6/18/2002 Rob von Behren <jrvb@cs.berkeley.edu># Multi-platform support## Updated: 6/20/2002 David Gay <dgay@intel-research.net># Compile via gcc, make tos.th system-wide, not app-wide# (still need to ponder group selection)## Updated: 6/27/2003 Jaein Jeong <jaein@cs.berkeley.edu># In-network programming support for mica2, mica2dot platforms######################################################################## this needs to be -dlpt=3 on thinkpads# PROGRAMMER_EXTRA_FLAGS :=# We don't actually set it here, so you can either set the # PROGRAMMER_EXTRA_FLAGS environment variable (recommended) or# define it in ../Makelocal-include $(shell ncc -print-tosdir)/../apps/Makelocal# User configuration:# Specify user values in Makelocal to override the defaults hereifndef DEFAULT_LOCAL_GROUPDEFAULT_LOCAL_GROUP := 0x7dendififndef OPTFLAGSOPTFLAGS := -Osendififndef NESC_FLAGSNESC_FLAGS := -Wnesc-allendif# configure the base for the app dirs. This is used to generate more# useful package names in the documentation.ifeq ($(BASEDIR)_x, _x)BASEDIR := $(shell pwd | sed 's@\(.*\)/apps.*$$@\1@' )endif# The output directory for generated documentationifeq ($(DOCDIR)_x, _x)DOCDIR := $(BASEDIR)/doc/nesdocendif#####################################################################################################ifeq ($(PLATFORMS)_x, _x)PLATFORMS = mica mica2 mica2dot pc cricket2 cricket2dm cricket cricket_mit cricket_pcendifOBJCOPY = avr-objcopySET_ID = set-mote-idPROGRAMER = uispifdef MSG_SIZEPFLAGS := -DTOSH_DATA_LENGTH=$(MSG_SIZE) $(PFLAGS)endif#ifdef APP_DIR#PFLAGS := -I$(APP_DIR) $(PFLAGS)#endif# This is for network reprogramming# If XNP is defined, add the network reprogramming related files# to the search path and generate a timestamp to make each build unique.XNP_DIR := ../../tos/lib/Xnpifdef XNPPFLAGS := -I$(XNP_DIR) $(shell $(XNP_DIR)/ident.pl .ident_install_id $(COMPONENT)) $(PFLAGS)endifPFLAGS := $(PFLAGS) -Wall -Wshadow -DDEF_TOS_AM_GROUP=$(DEFAULT_LOCAL_GROUP) $(NESC_FLAGS)ifndef TINYSECTINYSEC := false # default: disable tinysecendif# The tinysec keyfile to use and the default key name (this re matches the# first key. you can explicitly list keys by: make mica KEYNAME=mykeynameKEYFILE := $(HOME)/.tinyos_keyfileKEYNAME := '\w+'ifeq ($(TINYSEC),true)TINYSEC_KEY := $(shell mote-key -kf $(KEYFILE) -kn $(KEYNAME))ifeq ($(TINYSEC_KEY),)$(error tinysec key has not been properly set. It is needed for tinysec. \ Check to make sure that the script exists)endifPFLAGS := $(PFLAGS) -DTINYSEC_KEY="$(TINYSEC_KEY)" -DTINYSEC_KEYSIZE=8endifNCC = nccLIBS = -lm####################################################################### Choose platform options, based on MAKECMDGOALS####################################################################### be quieter....#ifeq ($(VERBOSE_MAKE)_x, _x)#MAKEFLAGS += -s#endif#export VERBOSE_MAKEdefine USAGEUsage: make <platform> make all make clean make install[.n] <platform> make reinstall[.n] <platform> # no rebuild of target make docs <platform> Valid platforms are: $(PLATFORMS)endefPLATAUX=$(PLATFORMS) allPLATFORM := $(filter $(PLATAUX), $(MAKECMDGOALS))PFLAGS := -target=$(PLATFORM) $(PFLAGS)MAKECMDGOALS := $(filter-out $(PLATAUX), $(MAKECMDGOALS))########################################################################## Programming Boards : flags#########################################################################PROGRAMMER_FLAGS=-dprog=dapa $(PROGRAMMER_PART) $(PROGRAMMER_EXTRA_FLAGS)PROGRAMMER := DAPA########################################################################## Programming Boards : command line input# Command line input for programmers: # none : default to parallel programming board# MIB510=<dev> : use mib510 serial port programming board at port <dev># EPRB=<host> : use eprb at hostname <host># AVRISP=<dev> : use AVRISP serial programmer at port <dev>############################################################################ If MIB510 thenMIB5100 := $(subst MIB510=,,$(filter MIB510=%,$(MAKECMDGOALS)))ifneq ($(MIB510_),) MIB510 := $(MIB5100)endifMAKECMDGOALS := $(filter-out MIB510=%,$(MAKECMDGOALS))### If STK is a set environment variable or if STK=xxx appears on the command### line, then take it to be a network address and program assuming an stk500### module.EPRB0 := $(subst EPRB=,,$(filter EPRB=%,$(MAKECMDGOALS)))ifneq ($(EPRB_),) EPRB := $(EPRB0)endifMAKECMDGOALS := $(filter-out EPRB=%,$(MAKECMDGOALS))ifneq (x$(MIB510),x) PROGRAMMER := STK PROGRAMMER_FLAGS=-dprog=mib510 -dserial=$(MIB510) $(PROGRAMMER_PART) $(PROGRAMMER_EXTRA_FLAGS_MIB)endififneq (x$(EPRB),x) PROGRAMMER := STK PROGRAMMER_FLAGS=-dprog=stk500 -dhost=$(EPRB) $(PROGRAMMER_PART) $(PROGRAMMER_EXTRA_FLAGS_STK)endififdef AVRISP PROGRAMMER := STK PROGRAMMER_FLAGS=-dprog=stk500 -dserial=$(AVRISP) $(PROGRAMMER_PART) $(PROGRAMMER_EXTRA_FLAGS_AVRISP)endif#Sensor Board Defaultsifeq ($(SENSORBOARD),) ifeq ($(PLATFORM),mica) SENSORBOARD = micasb endif ifeq ($(PLATFORM),mica2) SENSORBOARD = micasb endif ifeq ($(PLATFORM),cricket2dm) SENSORBOARD = micasb endif ifeq ($(PLATFORM),cricket2) SENSORBOARD = micasb endif ifeq ($(PLATFORM),cricket) SENSORBOARD = micasb endif ifeq ($(PLATFORM),cricket_mit) SENSORBOARD = micasb endif ifeq ($(PLATFORM),mica128) SENSORBOARD = micasb endif ifeq ($(PLATFORM),rene2) SENSORBOARD = basicsb endif ifeq ($(PLATFORM),pc) SENSORBOARD = micasb endif ifeq ($(PLATFORM),cricket_pc) SENSORBOARD = micasb endif ifeq ($(PLATFORM),mica2dot) SENSORBOARD = basicsb endifendifBUILDDIR = build/$(PLATFORM)MAIN_EXE = $(BUILDDIR)/main.exeMAIN_SREC = $(BUILDDIR)/main.srecifneq ($(findstring pc, $(PLATFORM)),)OPTFLAGS := -g -O0PFLAGS := -pthread $(PFLAGS) -fnesc-nido-tosnodes=1000 -fnesc-cfile=$(BUILDDIR)/app.cMAIN_TARGET = $(MAIN_EXE)elsePFLAGS := $(PFLAGS) -finline-limit=100000 -fnesc-cfile=$(BUILDDIR)/app.cMAIN_TARGET = $(MAIN_SREC)endifPFLAGS := -board=$(SENSORBOARD) $(PFLAGS)# added options to support network reprogramming. This sets the correct bootloader# for mica2 and mica2dot platforms. And this also sets the programmer flag for# native ATmega128.ifeq ($(PLATFORM), mica) PROGRAMMER_PART=-dpart=ATmega103 --wr_fuse_e=fdPROGRAMMER_FLAGS_INP=-dprog=dapa $(PROGRAMMER_EXTRA_FLAGS)ifdef AVRISP PROGRAMMER_FLAGS_INP=-dprog=stk500 -dserial=$(AVRISP_DEV) -dpart=ATmega103endifendififeq ($(PLATFORM), mica128) PROGRAMMER_PART=-dpart=ATmega128 --wr_fuse_e=ffPROGRAMMER_FLAGS_INP=-dprog=dapa $(PROGRAMMER_EXTRA_FLAGS)ifdef AVRISP PROGRAMMER_FLAGS_INP=-dprog=stk500 -dserial=$(AVRISP_DEV) -dpart=ATmega128endifendififeq ($(PLATFORM), mica2)BOOTLOADER=$(XNP_DIR)/inpispm2.srecPROGRAMMER_PART=-dpart=ATmega128 --wr_fuse_e=ffPROGRAMMER_FLAGS_INP=-dprog=dapa $(PROGRAMMER_EXTRA_FLAGS)ifdef AVRISP PROGRAMMER_FLAGS_INP=-dprog=stk500 -dserial=$(AVRISP_DEV) -dpart=ATmega128endifendififeq ($(PLATFORM), cricket2)PROGRAMMER_PART=-dpart=ATmega128 --wr_fuse_e=ffPROGRAMMER_FLAGS=-dprog=stk200 $(PROGRAMMER_EXTRA_FLAGS)endififeq ($(PLATFORM), cricket2dm)PROGRAMMER_PART=-dpart=ATmega128 --wr_fuse_e=ffPROGRAMMER_FLAGS=-dprog=stk200 $(PROGRAMMER_EXTRA_FLAGS)endififeq ($(PLATFORM), cricket)PROGRAMMER_PART=-dpart=ATmega128 --wr_fuse_e=ffPROGRAMMER_FLAGS=-dprog=mib510 -dserial=/dev/ttyS0 $(PROGRAMMER_PART) $(PROGRAMMER_EXTRA_FLAGS)endififeq ($(PLATFORM), cricket_mit)PROGRAMMER_PART=-dpart=ATmega128 --wr_fuse_e=ffPROGRAMMER_FLAGS=-dprog=stk200 $(PROGRAMMER_EXTRA_FLAGS)endififeq ($(PLATFORM), mica2dot)BOOTLOADER =$(XNP_DIR)/inpispm2d.srecPROGRAMMER_PART=-dpart=ATmega128 --wr_fuse_e=ffPROGRAMMER_FLAGS_INP=-dprog=dapa $(PROGRAMMER_EXTRA_FLAGS)ifdef AVRISP PROGRAMMER_FLAGS_INP=-dprog=stk500 -dserial=$(AVRISP_DEV) -dpart=ATmega128endifendif####################################################################### Rules for documentation generation####################################################################### add documentation flags to ncc, if requestedDOCS := $(filter docs, $(MAKECMDGOALS))MAKECMDGOALS := $(filter-out docs, $(MAKECMDGOALS))ifeq ($(DOCS)_x, docs_x)build: FORCE @echo " Making documentation for $(COMPONENT) on $(PLATFORM)" nesdoc $(DOCDIR)/$(PLATFORM) -fnesc-is-app $(PFLAGS) $(CFLAGS) $(COMPONENT).ncendif# dummy rule for 'docs' target - so make won't complain about itdocs: @true####################################################################### Rules for debugging####################################################################### add documentation flags to ncc, if requestedDBG := $(filter debug, $(MAKECMDGOALS))MAKECMDGOALS := $(filter-out debug, $(MAKECMDGOALS))ifeq ($(DBG)_x, debug_x)OPTFLAGS := -O1 -g -fnesc-no-inlineendif# dummy rule for 'debug' target - so make won't complain about itdebug: @true# For those who like debugging optimised code, there's debugoptDBGOPT := $(filter debugopt, $(MAKECMDGOALS))MAKECMDGOALS := $(filter-out debugopt, $(MAKECMDGOALS))ifeq ($(DBGOPT)_x, debugopt_x)OPTFLAGS := $(OPTFLAGS) -gendif# dummy rule for 'debug' target - so make won't complain about itdebugopt: @true####################################################################### top-level rules. switch based on MAKECMDGOALS######################################################################## rules for make clean#ifeq ($(MAKECMDGOALS)_x, clean_x)PLATFORM=$(PLATAUX): @echo ""elseifeq ($(PLATFORM)_x,_x)$(error $(PLATAUX) $(MAKECMDGOALS) $(USAGE))endifMAKECMDGOALS := $(patsubst install.%,install,$(MAKECMDGOALS))MAKECMDGOALS := $(patsubst reinstall.%,reinstall,$(MAKECMDGOALS))## rules for make install <platform>#ifeq ($(MAKECMDGOALS)_x, install_x)$(PLATAUX): @trueelseifeq ($(MAKECMDGOALS)_x, reinstall_x)$(PLATAUX): @trueelseifeq ($(MAKECMDGOALS)_x, inp_x)$(PLATAUX): @trueelseall: for platform in $(PLATFORMS); do \ $(MAKE) $$platform $(DOCS) || exit 1; \ done$(PLATFORMS): buildendifendifendifendif############################################################################################################################################## #### Begin main rules #### ##############################################################################################################################################ifneq ($(DOCS)_x, docs_x)build: $(MAIN_TARGET)endifinstall: $(MAIN_SREC) FORCE @$(MAKE) $(PLATFORM) re$@ PROGRAMMER="$(PROGRAMMER)" PROGRAMMER_FLAGS="$(PROGRAMMER_FLAGS)"install.%: $(MAIN_SREC) FORCE $(MAKE) $(PLATFORM) re$@ PROGRAMMER="$(PROGRAMMER)" PROGRAMMER_FLAGS="$(PROGRAMMER_FLAGS)"ifeq ($(PROGRAMMER),DAPA) ### program via parallel portreinstall: FORCE @echo " installing $(PLATFORM) binary" $(PROGRAMER) $(PROGRAMMER_FLAGS) --erase sleep 1 $(PROGRAMER) $(PROGRAMMER_FLAGS) --upload if=$(MAIN_SREC) sleep 1 $(PROGRAMER) $(PROGRAMMER_FLAGS) --verify if=$(MAIN_SREC)reinstall.%: FORCE @echo " installing $(PLATFORM) binary" $(SET_ID) $(MAIN_SREC) $(MAIN_SREC).out `echo $@ |perl -pe 's/^reinstall.//; $$_=hex if /^0x/i;'` $(PROGRAMER) $(PROGRAMMER_FLAGS) --erase sleep 1 $(PROGRAMER) $(PROGRAMMER_FLAGS) --upload if=$(MAIN_SREC).out sleep 1 $(PROGRAMER) $(PROGRAMMER_FLAGS) --verify if=$(MAIN_SREC).outelse ### Otherwise, program via the stk500 where STK specifies a network addressreinstall: FORCE @echo " installing $(PLATFORM) binary" $(PROGRAMER) $(PROGRAMMER_FLAGS) --erase --upload if=$(MAIN_SREC)reinstall.%: FORCE @echo " installing $(PLATFORM) binary" $(SET_ID) $(MAIN_SREC) $(MAIN_SREC).$*.out `echo $@ |perl -pe 's/^reinstall.//; $$_=hex if /^0x/i;'` $(PROGRAMER) $(PROGRAMMER_FLAGS) --erase --upload if=$(MAIN_SREC).$*.outendif ### Done programming$(MAIN_EXE): $(BUILDDIR) FORCE @echo " compiling $(COMPONENT) to a $(PLATFORM) binary" $(NCC) -o $(MAIN_EXE) $(OPTFLAGS) $(PFLAGS) $(CFLAGS) $(COMPONENT).nc $(LIBS) $(LDFLAGS) @echo " compiled $(COMPONENT) to $@" @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{bss}); }'$(MAIN_SREC): $(MAIN_EXE) $(OBJCOPY) --output-target=srec $(MAIN_EXE) $(MAIN_SREC)$(BUILDDIR): mkdir -p $(BUILDDIR)clean: FORCE rm -rf $(BUILDDIR) rm -f core.* rm -f *~# uploading boot loader for network reprogramming. Do this after loading app srec file.# using either 'make install' or 'make reinstall'inp: FORCE $(PROGRAMER) $(PROGRAMMER_FLAGS_INP) --upload if=$(BOOTLOADER)FORCE:.phony: FORCE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -