diff --git a/Makefile.include b/Makefile.include index 63c3e63df..a3a8adad7 100644 --- a/Makefile.include +++ b/Makefile.include @@ -72,7 +72,7 @@ CONTIKI_SOURCEFILES += $(CONTIKIFILES) CONTIKIDIRS += ${addprefix $(CONTIKI)/core/,dev lib net net/llsec net/mac net/rime \ net/rpl sys cfs ctk lib/ctk loader . } -oname = ${patsubst %.c,%.o,${patsubst %.S,%.o,$(1)}} +oname = ${patsubst %.cpp,%.o,${patsubst %.c,%.o,${patsubst %.S,%.o,$(1)}}} CONTIKI_OBJECTFILES = ${addprefix $(OBJECTDIR)/,${call oname, $(CONTIKI_SOURCEFILES)}} @@ -124,16 +124,18 @@ endif ### Verbosity control. Use make V=1 to get verbose builds. ifeq ($(V),1) - TRACE_CC = - TRACE_LD = - TRACE_AR = - TRACE_AS = + TRACE_CC = + TRACE_CXX = + TRACE_LD = + TRACE_AR = + TRACE_AS = Q= else - TRACE_CC = @echo " CC " $< - TRACE_LD = @echo " LD " $@ - TRACE_AR = @echo " AR " $@ - TRACE_AS = @echo " AS " $< + TRACE_CC = @echo " CC " $< + TRACE_CXX = @echo " CXX " $< + TRACE_LD = @echo " LD " $@ + TRACE_AR = @echo " AR " $@ + TRACE_AS = @echo " AS " $< Q=@ endif @@ -152,8 +154,9 @@ CONTIKI_CPU_DIRS_CONCAT = ${addprefix $(CONTIKI_CPU)/, \ SOURCEDIRS = . $(PROJECTDIRS) $(CONTIKI_TARGET_DIRS_CONCAT) \ $(CONTIKI_CPU_DIRS_CONCAT) $(CONTIKIDIRS) $(APPDS) ${dir $(target_makefile)} -vpath %.c $(SOURCEDIRS) -vpath %.S $(SOURCEDIRS) +vpath %.c $(SOURCEDIRS) +vpath %.cpp $(SOURCEDIRS) +vpath %.S $(SOURCEDIRS) CFLAGS += ${addprefix -I,$(SOURCEDIRS) $(CONTIKI)} @@ -171,7 +174,7 @@ endif ifneq ($(MAKECMDGOALS),clean) -include ${addprefix $(OBJECTDIR)/,$(CONTIKI_SOURCEFILES:.c=.d) \ - $(PROJECT_SOURCEFILES:.c=.d)} + $(PROJECT_OBJECTFILES:.o=.d)} endif ### See http://make.paulandlesley.org/autodep.html#advanced @@ -210,6 +213,13 @@ $(OBJECTDIR)/%.o: %.c | $(OBJECTDIR) @$(FINALIZE_DEPENDENCY) endif +ifndef CUSTOM_RULE_CPP_TO_OBJECTDIR_O +$(OBJECTDIR)/%.o: %.cpp | $(OBJECTDIR) + $(TRACE_CXX) + $(Q)$(CXX) $(CFLAGS) -MMD -c $< -o $@ + @$(FINALIZE_DEPENDENCY) +endif + ifndef CUSTOM_RULE_S_TO_OBJECTDIR_O $(OBJECTDIR)/%.o: %.S | $(OBJECTDIR) $(TRACE_AS) @@ -222,6 +232,12 @@ ifndef CUSTOM_RULE_C_TO_O $(Q)$(CC) $(CFLAGS) -c $< -o $@ endif +ifndef CUSTOM_RULE_CPP_TO_O +%.o: %.cpp + $(TRACE_CXX) + $(Q)$(CXX) $(CFLAGS) -c $< -o $@ +endif + ifndef CUSTOM_RULE_C_TO_CO %.co: %.c @@ -265,6 +281,8 @@ endif # the match-anything rule below instead. %: %.c +%: %.cpp + # Match-anything pattern rule to allow the project makefiles to # abstract from the actual binary name. It needs to contain some # command in order to be a rule, not just a prerequisite. diff --git a/cpu/avr/Makefile.avr b/cpu/avr/Makefile.avr index 2656054a3..ee88407d6 100644 --- a/cpu/avr/Makefile.avr +++ b/cpu/avr/Makefile.avr @@ -90,6 +90,7 @@ CONTIKI_SOURCEFILES += $(CONTIKI_TARGET_SOURCEFILES) ### Compiler definitions CC = avr-gcc +CXX = avr-g++ LD = avr-gcc AS = avr-as AR = avr-ar @@ -130,6 +131,12 @@ $(OBJECTDIR)/%.o: %.c | $(OBJECTDIR) %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ +$(OBJECTDIR)/%.o: %.cpp | $(OBJECTDIR) + $(CXX) $(CFLAGS) -c $< -o $@ + +%.o: %.cpp + $(CXX) $(CFLAGS) -c $< -o $@ + %.ko: %.o $(STRIP) -K _init -K _fini --strip-unneeded -g -x $< -o $@