From 399e964b7567c06e3f319d4979842cd45d898fd3 Mon Sep 17 00:00:00 2001 From: Freek van Tienen Date: Tue, 5 Mar 2019 02:12:00 -0800 Subject: [PATCH] [make] Add support for c++0x for all architectures --- conf/Makefile.chibios | 9 +++++ conf/Makefile.linux | 4 +- conf/Makefile.stm32 | 8 +++- conf/chibios/chibios_rules.mk | 2 +- conf/firmwares/fixedwing.makefile | 1 + conf/firmwares/rotorcraft.makefile | 1 + conf/modules/ins_mekf_wind.xml | 1 - conf/modules/rust_demo_module.xml | 7 ---- sw/airborne/c++.cpp | 60 ++++++++++++++++++++++++++++++ sw/airborne/pprz_syscalls.c | 13 +++++++ 10 files changed, 94 insertions(+), 12 deletions(-) create mode 100644 sw/airborne/c++.cpp diff --git a/conf/Makefile.chibios b/conf/Makefile.chibios index 2cb4ef9d16f..ac5e72919ec 100644 --- a/conf/Makefile.chibios +++ b/conf/Makefile.chibios @@ -74,6 +74,12 @@ else $(TARGET).CFLAGS += -DCH_DBG_THREADS_PROFILING=TRUE endif +# +# Add syscalls and c++ new/delete operators +# +$(TARGET).srcs += c++.cpp pprz_syscalls.c +$(TARGET).CXXFLAGS += -fno-sized-deallocation + # # General rules # @@ -312,6 +318,9 @@ CPPWARN = -Wall -Wextra # List all user C define here, like -D_DEBUG=1 UDEFS = $($(TARGET).CFLAGS) $(USER_CFLAGS) $(BOARD_CFLAGS) +# List all extra user CPP define here +UPDEFS = $($(TARGET).CXXFLAGS) + # Define ASM defines here UADEFS = $($(TARGET).CFLAGS) $(USER_CFLAGS) $(BOARD_CFLAGS) diff --git a/conf/Makefile.linux b/conf/Makefile.linux index 1ba64086541..ede06c9d120 100644 --- a/conf/Makefile.linux +++ b/conf/Makefile.linux @@ -37,6 +37,7 @@ OPT ?= 3 # Slightly bigger .elf files but gains the ability to decode macros DEBUG_FLAGS ?= -ggdb3 CSTANDARD ?= -std=gnu99 +CXXSTANDARD ?= -std=c++0x CINCS = $(INCLUDES) -I$(PAPARAZZI_SRC)/sw/include # @@ -65,10 +66,11 @@ CFLAGS += $(USER_CFLAGS) $(BOARD_CFLAGS) CXXFLAGS += $(CINCS) CXXFLAGS += -O$(OPT) -fPIC CXXFLAGS += $(DEBUG_FLAGS) +CXXFLAGS += $(CXXSTANDARD) CXXFLAGS += -pipe -fshow-column -ffast-math CXXFLAGS += -g -ffunction-sections -fdata-sections CXXFLAGS += -Wall -Wextra -#CXXFLAGS += $($(TARGET).CFLAGS) +CXXFLAGS += $($(TARGET).CFLAGS) CXXFLAGS += $($(TARGET).CXXFLAGS) CXXFLAGS += $(USER_CFLAGS) $(BOARD_CFLAGS) diff --git a/conf/Makefile.stm32 b/conf/Makefile.stm32 index 3b9db227e15..cfa269fe60f 100644 --- a/conf/Makefile.stm32 +++ b/conf/Makefile.stm32 @@ -36,7 +36,6 @@ Q=@ # include $(PAPARAZZI_SRC)/conf/Makefile.arm-embedded-toolchain - ifeq ($(ARCH_L),f4) MCU = cortex-m4 else @@ -47,9 +46,13 @@ OPT ?= s DEBUG_FLAGS ?= -ggdb3 CSTANDARD ?= -std=gnu99 -CXXSTANDARD ?= -std=c++98 +CXXSTANDARD ?= -std=c++0x CINCS = $(INCLUDES) -I$(PAPARAZZI_SRC)/sw/include +# add syscalls and c++ new/delete operators +$(TARGET).srcs += c++.cpp pprz_syscalls.c +$(TARGET).CXXFLAGS += -fno-sized-deallocation + # input files SRCS = $($(TARGET).srcs) #ASRC = @@ -145,6 +148,7 @@ CFLAGS += -DPPRZLINK_UNALIGNED_ACCESS=1 # C++ only flags CXXFLAGS += $(CXXSTANDARD) +CXXFLAGS += -I. -I./$(ARCH) -I../ext/libopencm3/include $(INCLUDES) CXXFLAGS += -pipe -fshow-column -ffast-math CXXFLAGS += -ffunction-sections -fdata-sections CXXFLAGS += $($(TARGET).CXXFLAGS) diff --git a/conf/chibios/chibios_rules.mk b/conf/chibios/chibios_rules.mk index 40a80aaec31..819710e910d 100644 --- a/conf/chibios/chibios_rules.mk +++ b/conf/chibios/chibios_rules.mk @@ -118,7 +118,7 @@ ODFLAGS = -x --syms ASFLAGS = $(MCFLAGS) -Wa,-amhls=$(LSTDIR)/$(notdir $(<:.s=.lst)) $(ADEFS) ASXFLAGS = $(MCFLAGS) -Wa,-amhls=$(LSTDIR)/$(notdir $(<:.S=.lst)) $(ADEFS) CFLAGS = $(MCFLAGS) $(OPT) $(COPT) $(CWARN) -Wa,-alms=$(LSTDIR)/$(notdir $(<:.c=.lst)) $(DEFS) -CPPFLAGS = $(MCFLAGS) $(OPT) $(CPPOPT) $(CPPWARN) -Wa,-alms=$(LSTDIR)/$(notdir $(<:.cpp=.lst)) $(DEFS) +CPPFLAGS = $(MCFLAGS) $(OPT) $(CPPOPT) $(CPPWARN) -Wa,-alms=$(LSTDIR)/$(notdir $(<:.cpp=.lst)) $(DEFS) $(UPDEFS) LDFLAGS = $(MCFLAGS) $(OPT) -nostartfiles $(LLIBDIR) -Wl,-Map=$(BUILDDIR)/$(PROJECT).map,--cref,--no-warn-mismatch,--library-path=$(RULESPATH)/ld,--script=$(LDSCRIPT)$(LDOPT) # Thumb interwork enabled only if needed because it kills performance. diff --git a/conf/firmwares/fixedwing.makefile b/conf/firmwares/fixedwing.makefile index 9794cc10b73..76ca15a7bcc 100644 --- a/conf/firmwares/fixedwing.makefile +++ b/conf/firmwares/fixedwing.makefile @@ -21,6 +21,7 @@ SRC_MODULES=modules FIXEDWING_INC = -I$(SRC_FIRMWARE) -I$(SRC_FIXEDWING) -I$(SRC_BOARD) VPATH += $(PAPARAZZI_HOME)/var/share +VPATH += $(PAPARAZZI_HOME)/sw/ext # Standard Fixed Wing Code include $(CFG_FIXEDWING)/autopilot.makefile diff --git a/conf/firmwares/rotorcraft.makefile b/conf/firmwares/rotorcraft.makefile index c5d8602d870..30791561691 100644 --- a/conf/firmwares/rotorcraft.makefile +++ b/conf/firmwares/rotorcraft.makefile @@ -37,6 +37,7 @@ ap.ARCHDIR = $(ARCH) VPATH += $(PAPARAZZI_HOME)/var/share +VPATH += $(PAPARAZZI_HOME)/sw/ext ###################################################################### ## diff --git a/conf/modules/ins_mekf_wind.xml b/conf/modules/ins_mekf_wind.xml index 5292428432c..0389d755367 100644 --- a/conf/modules/ins_mekf_wind.xml +++ b/conf/modules/ins_mekf_wind.xml @@ -82,7 +82,6 @@ - diff --git a/conf/modules/rust_demo_module.xml b/conf/modules/rust_demo_module.xml index 94da85b2bd4..a7d3f7c2480 100644 --- a/conf/modules/rust_demo_module.xml +++ b/conf/modules/rust_demo_module.xml @@ -26,13 +26,6 @@ - - - Additional defines needed by Rust's `alloc` crate - --> - - -