Add variables for compiler options exclusively for C, C++ or assembly.
Sometimes a flag needs to be added when compiling with GCC, but specifically *not* with G++. This 4 variable setup allows you to specify a set of common flags (COMMONFLAGS) passed to every run of the compiler, and flags for each sub-type separately.
This commit is contained in:
parent
e30bb5c28a
commit
ffaa16ef28
2 changed files with 103 additions and 25 deletions
52
Arduino.mk
52
Arduino.mk
|
@ -906,10 +906,11 @@ else
|
|||
endif
|
||||
|
||||
# Using += instead of =, so that CPPFLAGS can be set per sketch level
|
||||
CPPFLAGS += -$(MCU_FLAG_NAME)=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=$(ARDUINO_VERSION) -D__PROG_TYPES_COMPAT__ \
|
||||
COMMONFLAGS += -$(MCU_FLAG_NAME)=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=$(ARDUINO_VERSION) -D__PROG_TYPES_COMPAT__ \
|
||||
-I. -I$(ARDUINO_CORE_PATH) -I$(ARDUINO_VAR_PATH)/$(VARIANT) \
|
||||
$(SYS_INCLUDES) $(USER_INCLUDES) -Wall -ffunction-sections \
|
||||
-fdata-sections
|
||||
CPPFLAGS +=
|
||||
|
||||
ifdef DEBUG
|
||||
OPTIMIZATION_FLAGS= $(DEBUG_FLAGS)
|
||||
|
@ -917,11 +918,11 @@ else
|
|||
OPTIMIZATION_FLAGS = -O$(OPTIMIZATION_LEVEL)
|
||||
endif
|
||||
|
||||
CPPFLAGS += $(OPTIMIZATION_FLAGS)
|
||||
COMMONFLAGS += $(OPTIMIZATION_FLAGS)
|
||||
|
||||
# USB IDs for the Caterina devices like leonardo or micro
|
||||
ifneq ($(CATERINA),)
|
||||
CPPFLAGS += -DUSB_VID=$(USB_VID) -DUSB_PID=$(USB_PID)
|
||||
COMMONFLAGS += -DUSB_VID=$(USB_VID) -DUSB_PID=$(USB_PID)
|
||||
endif
|
||||
|
||||
ifndef CFLAGS_STD
|
||||
|
@ -938,9 +939,10 @@ else
|
|||
$(call show_config_variable,CXXFLAGS_STD,[USER])
|
||||
endif
|
||||
|
||||
CFLAGS += $(CFLAGS_STD)
|
||||
CXXFLAGS += -fno-exceptions $(CXXFLAGS_STD)
|
||||
ASFLAGS += -x assembler-with-cpp
|
||||
CFLAGS += $(COMMONFLAGS) $(CFLAGS_STD)
|
||||
CPPFLAGS += $(COMMONFLAGS) -fno-exceptions $(CXXFLAGS_STD)
|
||||
CPPFLAGS += $(CXXFLAGS) # For backwards compatibility
|
||||
ASFLAGS += $(COMMONFLAGS) -x assembler-with-cpp
|
||||
LDFLAGS += -$(MCU_FLAG_NAME)=$(MCU) -Wl,--gc-sections -O$(OPTIMIZATION_LEVEL)
|
||||
SIZEFLAGS ?= --mcu=$(MCU) -C
|
||||
|
||||
|
@ -1024,27 +1026,27 @@ $(call show_separator)
|
|||
# library sources
|
||||
$(OBJDIR)/libs/%.o: $(ARDUINO_LIB_PATH)/%.c
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CC) -MMD -c $(CPPFLAGS) $(CFLAGS) $< -o $@
|
||||
$(CC) -MMD -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/libs/%.o: $(ARDUINO_LIB_PATH)/%.cpp
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CC) -MMD -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@
|
||||
$(CC) -MMD -c $(CPPFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/libs/%.o: $(ARDUINO_LIB_PATH)/%.S
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CC) -MMD -c $(CPPFLAGS) $(ASFLAGS) $< -o $@
|
||||
$(CC) -MMD -c $(ASFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/userlibs/%.o: $(USER_LIB_PATH)/%.cpp
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CC) -MMD -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@
|
||||
$(CC) -MMD -c $(CPPFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/userlibs/%.o: $(USER_LIB_PATH)/%.c
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CC) -MMD -c $(CPPFLAGS) $(CFLAGS) $< -o $@
|
||||
$(CC) -MMD -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/userlibs/%.o: $(USER_LIB_PATH)/%.S
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CC) -MMD -c $(CPPFLAGS) $(ASFLAGS) $< -o $@
|
||||
$(CC) -MMD -c $(ASFLAGS) $< -o $@
|
||||
|
||||
ifdef COMMON_DEPS
|
||||
COMMON_DEPS := $(COMMON_DEPS) $(MAKEFILE_LIST)
|
||||
|
@ -1055,59 +1057,59 @@ endif
|
|||
# normal local sources
|
||||
$(OBJDIR)/%.o: %.c $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CC) -MMD -c $(CPPFLAGS) $(CFLAGS) $< -o $@
|
||||
$(CC) -MMD -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/%.o: %.cc $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CXX) -MMD -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@
|
||||
$(CXX) -MMD -c $(CPPFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/%.o: %.cpp $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CXX) -MMD -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@
|
||||
$(CXX) -MMD -c $(CPPFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/%.o: %.S $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CC) -MMD -c $(CPPFLAGS) $(ASFLAGS) $< -o $@
|
||||
$(CC) -MMD -c $(ASFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/%.o: %.s $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CC) -c $(CPPFLAGS) $(ASFLAGS) $< -o $@
|
||||
$(CC) -c $(ASFLAGS) $< -o $@
|
||||
|
||||
# the pde -> o file
|
||||
$(OBJDIR)/%.o: %.pde $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CXX) -x c++ -include $(ARDUINO_HEADER) -MMD -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@
|
||||
$(CXX) -x c++ -include $(ARDUINO_HEADER) -MMD -c $(CPPFLAGS) $< -o $@
|
||||
|
||||
# the ino -> o file
|
||||
$(OBJDIR)/%.o: %.ino $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CXX) -x c++ -include $(ARDUINO_HEADER) -MMD -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@
|
||||
$(CXX) -x c++ -include $(ARDUINO_HEADER) -MMD -c $(CPPFLAGS) $< -o $@
|
||||
|
||||
# generated assembly
|
||||
$(OBJDIR)/%.s: %.pde $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CXX) -x c++ -include $(ARDUINO_HEADER) -MMD -S -fverbose-asm $(CPPFLAGS) $(CXXFLAGS) $< -o $@
|
||||
$(CXX) -x c++ -include $(ARDUINO_HEADER) -MMD -S -fverbose-asm $(CPPFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/%.s: %.ino $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CXX) -x c++ -include $(ARDUINO_HEADER) -MMD -S -fverbose-asm $(CPPFLAGS) $(CXXFLAGS) $< -o $@
|
||||
$(CXX) -x c++ -include $(ARDUINO_HEADER) -MMD -S -fverbose-asm $(CPPFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/%.s: %.cpp $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CXX) -x c++ -include $(ARDUINO_HEADER) -MMD -S -fverbose-asm $(CPPFLAGS) $(CXXFLAGS) $< -o $@
|
||||
$(CXX) -x c++ -include $(ARDUINO_HEADER) -MMD -S -fverbose-asm $(CPPFLAGS) $< -o $@
|
||||
|
||||
# core files
|
||||
$(OBJDIR)/core/%.o: $(ARDUINO_CORE_PATH)/%.c $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CC) -MMD -c $(CPPFLAGS) $(CFLAGS) $< -o $@
|
||||
$(CC) -MMD -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/core/%.o: $(ARDUINO_CORE_PATH)/%.cpp $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CXX) -MMD -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@
|
||||
$(CXX) -MMD -c $(CPPFLAGS) $< -o $@
|
||||
|
||||
$(OBJDIR)/core/%.o: $(ARDUINO_CORE_PATH)/%.S $(COMMON_DEPS) | $(OBJDIR)
|
||||
@$(MKDIR) $(dir $@)
|
||||
$(CC) -MMD -c $(CPPFLAGS) $(ASFLAGS) $< -o $@
|
||||
$(CC) -MMD -c $(ASFLAGS) $< -o $@
|
||||
|
||||
# various object conversions
|
||||
$(OBJDIR)/%.hex: $(OBJDIR)/%.elf $(COMMON_DEPS)
|
||||
|
|
|
@ -852,6 +852,82 @@ CXXFLAGS_STD = = -std=gnu++98
|
|||
|
||||
----
|
||||
|
||||
### CFLAGS
|
||||
|
||||
**Description:**
|
||||
|
||||
Flags passed to copmiler for files compiled as C. Add more flags to this
|
||||
variable using `+=`.
|
||||
|
||||
Defaults to all flags required for a typical build.
|
||||
|
||||
**Example:**
|
||||
|
||||
```Makefile
|
||||
CFLAGS += -DMY_DEFINE
|
||||
```
|
||||
|
||||
**Requirement:** *Optional*
|
||||
|
||||
----
|
||||
|
||||
### CPPFLAGS
|
||||
|
||||
**Description:**
|
||||
|
||||
Flags passed to the compiler for files compiled as C++. Add more flags to this
|
||||
variable using `+=`.
|
||||
|
||||
Defaults to all flags required for a typical build.
|
||||
|
||||
**Example:**
|
||||
|
||||
```Makefile
|
||||
CPPFLAGS += -DMY_DEFINE
|
||||
```
|
||||
|
||||
**Requirement:** *Optional*
|
||||
|
||||
----
|
||||
|
||||
### ASFLAGS
|
||||
|
||||
**Description:**
|
||||
|
||||
Flags passed to compiler for files compiled as assembly (e.g. `.S` files). Add
|
||||
more flags to this variable using `+=`.
|
||||
|
||||
Defaults to all flags required for a typical build.
|
||||
|
||||
**Example:**
|
||||
|
||||
```Makefile
|
||||
ASFLAGS += -DMY_DEFINE
|
||||
```
|
||||
|
||||
**Requirement:** *Optional*
|
||||
|
||||
----
|
||||
|
||||
### COMMONFLAGS
|
||||
|
||||
**Description:**
|
||||
|
||||
Flags passed to the compiler for files compiled as C, C++ and assembly. Add more
|
||||
flags to this variable using `+=`.
|
||||
|
||||
Defaults to all flags required for a typical build.
|
||||
|
||||
**Example:**
|
||||
|
||||
```Makefile
|
||||
COMMON_FLAGS += -DMY_DEFINE_FOR_ALL_SOURCE_TYPES
|
||||
```
|
||||
|
||||
**Requirement:** *Optional*
|
||||
|
||||
----
|
||||
|
||||
### OVERRIDE_EXECUTABLES
|
||||
|
||||
**Description:**
|
||||
|
|
Loading…
Add table
Reference in a new issue