[build] allow compilation of C++ on stm32 (libopencm3 and chibios)

This commit is contained in:
Gautier Hattenberger
2018-09-05 15:28:45 +02:00
parent 428fa38612
commit 1ddf343009
3 changed files with 31 additions and 6 deletions
+8 -4
View File
@@ -100,7 +100,7 @@ ifeq (,$(findstring $(RTOS_DEBUG),0 FALSE))
else
CH_OPT ?= 2 -ggdb
endif
USE_OPT = -std=gnu99 -O$(CH_OPT) \
USE_OPT = -O$(CH_OPT) \
-falign-functions=16 -fomit-frame-pointer \
-W -Wall \
$(PPRZ_DEFINITION)
@@ -108,7 +108,7 @@ endif
# C specific options here (added to USE_OPT).
ifeq ($(USE_COPT),)
USE_COPT =
USE_COPT = -std=gnu99
endif
# C++ specific options here (added to USE_OPT).
@@ -224,7 +224,8 @@ CSRC = $(STARTUPSRC) \
$(FATFSSRC) \
$(CHIBIOS_BOARD_MAIN)
ECSRC = $($(TARGET).srcs)
ECSRC = $(filter %.c, $($(TARGET).srcs))
ECPPSRC = $(filter %.cpp, $($(TARGET).srcs))
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
# setting.
@@ -275,8 +276,11 @@ CPPC = $(TRGT)g++
# Enable loading with g++ only if you need C++ runtime support.
# NOTE: You can use C++ even without C++ support if you are careful. C++
# runtime support makes code size explode.
ifeq ($(ECPPSRC),)
LD = $(TRGT)gcc
#LD = $(TRGT)g++
else
LD = $(TRGT)g++
endif
CP = $(TRGT)objcopy
AS = $(TRGT)gcc -x assembler-with-cpp
AR = $(TRGT)ar
+7 -1
View File
@@ -48,6 +48,7 @@ DEBUG_FLAGS ?= -ggdb3
CSTANDARD ?= -std=gnu99
CXXSTANDARD ?= -std=c++98
CINCS = $(INCLUDES) -I$(PAPARAZZI_SRC)/sw/include
# input files
SRCS = $($(TARGET).srcs)
@@ -107,6 +108,9 @@ CXXFLAGS += $(FLOAT_ABI)
CXXFLAGS += $(ARCH_FLAGS)
CXXFLAGS += $(USER_CFLAGS)
CXXFLAGS += $(WARN_FLAGS)
CXXFLAGS += $(CINCS)
CXXFLAGS += $($(TARGET).CFLAGS)
CXXFLAGS += $(BOARD_CFLAGS)
CFLAGS += -I. -I./$(ARCH) -I../ext/libopencm3/include $(INCLUDES)
@@ -128,9 +132,11 @@ CFLAGS += $(BOARD_CFLAGS)
ifneq ($(ARCH_L), )
ifeq ($(ARCH_L),f4)
CFLAGS += -DSTM32F4
CXXFLAGS += -DSTM32F4
endif
else
CFLAGS += -DSTM32F1
CXXFLAGS += -DSTM32F1
endif
# with cortex-m3 and m4 unaligned data can still be read
@@ -227,7 +233,7 @@ sym: $(OBJDIR)/$(TARGET).sym
.PRECIOUS : $(OBJS) $(AOBJ)
%.elf: $(OBJS) $(AOBJ) | $(OBJDIR)
@echo LD $@
$(Q)$(LD) $(LDFLAGS) $($(TARGET).LDFLAGS) -o $@ $(COBJ) $(AOBJ) $(LDLIBS)
$(Q)$(LD) $(LDFLAGS) $($(TARGET).LDFLAGS) -o $@ $(OBJS) $(AOBJ) $(LDLIBS)
# Compile: create object files from C source files.
$(OBJDIR)/%.o : %.c $(OBJDIR)/../Makefile.ac
+16 -1
View File
@@ -19,6 +19,21 @@ else
@$(CC) -c $(CFLAGS) $(TOPT) -I. $(IINCDIR) $< -o $@
endif
OBJS += $(ECOBJS)
ECPPOBJS = $(sort $(addprefix $(OBJDIR)/, $(ECPPSRC:.cpp=.o)))
$(ECPPOBJS) : $(OBJDIR)/%.o : %.cpp Makefile
ifeq ($(USE_VERBOSE_COMPILE),yes)
@echo
VPATH=
test -d $(dir $@) || mkdir -p $(dir $@)
$(CPPC) -c $(CPPFLAGS) $(TOPT) -I. $(IINCDIR) $< -o $@
else
@echo Compiling $(<F)
@VPATH=
@test -d $(dir $@) || mkdir -p $(dir $@)
@$(CPPC) -c $(CPPFLAGS) $(TOPT) -I. $(IINCDIR) $< -o $@
endif
OBJS += $(ECOBJS) $(ECPPOBJS)
# *** EOF ***