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:
Christopher Peplin 2014-09-10 00:09:04 -04:00
parent e30bb5c28a
commit ffaa16ef28
2 changed files with 103 additions and 25 deletions

View file

@ -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)

View file

@ -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:**