ifndef CONTIKI $(error CONTIKI not defined! You must specify where CONTIKI resides!) endif OBJECTDIR = obj_$(TARGET) ifeq ($(TARGET),) -include Makefile.target ifeq ($(TARGET),) $(warning TARGET not defined, using netsim target) TARGET=netsim else $(warning using saved target '$(TARGET)') endif endif usage: @echo "make MAKETARGETS... [TARGET=(TARGET)] [savetarget]" savetarget: -@rm -f Makefile.target @echo >Makefile.target "TARGET = $(TARGET)" ifeq (${wildcard $(OBJECTDIR)},) DUMMY := ${shell mkdir $(OBJECTDIR)} endif SYSTEM = process.c procinit.c service.c autostart.c THREADS = mt.c LIBS = memb.c timer.c list.c etimer.c CFS = cfs.c cfs-ram.c CTK = ctk.c UIP = uip.c uiplib.c resolv.c tcpip.c psock.c hc.c uip-split.c \ uip-fw.c uip-fw-service.c uipbuf.c uip_arp.c uiplib.c tcpdump.c \ uip-neighbor.c NET = $(UIP) uaodv.c uaodv-rt.c CTKVNC = $(CTK) ctk-vncserver.c libconio.c vnc-server.c vnc-out.c \ ctk-vncfont.c CTKTERM = $(CTK) libconio.c ctk-term.c ctk-term-in.c ctk-term-out.c \ ctk-termtelnet.c CONTIKIFILES = $(SYSTEM) $(THREADS) $(CFS) $(LIBS) $(NET) $(DHCP) CONTIKI_SOURCEFILES += $(CONTIKIFILES) CONTIKIDIRS = ${addprefix $(CONTIKI)/core/,dev lib net sys \ cfs ctk lib/ctk loader . } PROJECT_OBJECTFILES = ${addprefix $(OBJECTDIR)/,$(PROJECT_SOURCEFILES:.c=.o)} ### Include application makefiles ifdef APPS APPDIRS += $(addprefix $(CONTIKI)/apps/, $(APPS)) APPINCLUDES = $(foreach APP, $(APPS), $(CONTIKI)/apps/$(APP)/Makefile.$(APP)) -include $(APPINCLUDES) CONTIKI_SOURCEFILES += $(APP_SOURCES) $(DSC_SOURCES) endif ### Include target makefile (TODO Unsafe?) include $(CONTIKI)/platform/$(TARGET)/Makefile.$(TARGET) ### Automatic dependency generation ifneq ($(MAKECMDGOALS),clean) -include $(addprefix $(OBJECTDIR)/,$(CONTIKI_SOURCEFILES:.c=.d) \ $(PROJECT_SOURCEFILES:.c=.d)) endif clean: rm -f *~ *core core *.srec node-id.c \ *.lst *.map \ *.cprg *.bin *.data contiki*.a *.firmware core-labels.S *.ihex *.ini \ *.ce *.co -rm -rf $(OBJECTDIR) ifndef CUSTOM_RULE_C_TO_CE %.ce: %.c $(CC) $(CFLAGS) -DAUTOSTART_ENABLE -c $< -o $@ $(STRIP) --strip-unneeded -g -x $@ endif ifndef CUSTOM_RULE_C_TO_OBJECTDIR_O $(OBJECTDIR)/%.o: %.c $(CC) $(CFLAGS) -c $< -o $@ endif ifndef CUSTOM_RULE_C_TO_O %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ endif ifndef CUSTOM_RULE_C_TO_CO %.co: %.c $(CC) $(CFLAGS) -DAUTOSTART_ENABLE -c $< -o $@ endif ifndef AROPTS AROPTS = rcf endif ifndef CUSTOM_RULE_ALLOBJS_TO_TARGETLIB contiki-$(TARGET).a: ${addprefix $(OBJECTDIR)/, $(CONTIKI_SOURCEFILES:.c=.o)} $(AR) $(AROPTS) $@ $^ endif ifndef CCDEP CCDEP = $(CC) endif ifndef CDEPFLAGS CDEPFLAGS = $(CFLAGS) endif $(OBJECTDIR)/%.d: %.c @set -e; rm -f $@; \ $(CCDEP) -MM $(CDEPFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,$(OBJECTDIR)/\1.o $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$ # The line below is needed so that GNU make does not remove the # generated file. .PRECIOUS: %.$(TARGET) ifndef LD LD = $(CC) endif ifndef CUSTOM_RULE_LINK %.$(TARGET): %.co $(PROJECT_OBJECTFILES) contiki-$(TARGET).a $(CC) $(LDFLAGS) $(TARGET_STARTFILES) $(filter-out %.a,$^) $(filter %.a,$^) $(TARGET_LIBFILES) -o $@ endif # The target below looks weird, but I had to add the @ to avoid complaints # from GNU make about "*** No rule to make target `XXX'. Stop." %: %.$(TARGET) @