CPP_SOURCE = $(filter %.cpp, $(SRC))\r
ASM_SOURCE = $(filter %.S, $(SRC))\r
\r
+# Create a list of unknown source file types, if any are found throw an error\r
+UNKNOWN_SOURCE = $(filter-out $(C_SOURCE) $(CPP_SOURCE) $(ASM_SOURCE), $(SRC))\r
+ifneq ($(UNKNOWN_SOURCE),)\r
+ $(error Unknown input source formats: $(UNKNOWN_SOURCE))\r
+endif\r
+\r
# Convert input source filenames into a list of required output object files\r
OBJECT_FILES = $(filter %.o, $(C_SOURCE:%.c=%.o) $(CPP_SOURCE:%.cpp=%.o) $(ASM_SOURCE:%.S=%.o))\r
-DEPENDENCY_FILES = $(OBJECT_FILES:%=%.d)\r
+DEPENDENCY_FILES = $(OBJECT_FILES:%.o=%.d)\r
\r
-# Create a list of flags to pass to the compiler\r
+# Create a list of common flags to pass to the compiler/linker/assembler\r
+BASE_CC_FLAGS := \r
ifeq ($(ARCH), AVR8)\r
- CC_FLAGS += -mmcu=$(MCU) -gdwarf-2 -fshort-enums -fno-inline-small-functions -fpack-struct\r
+ BASE_CC_FLAGS += -mmcu=$(MCU) -gdwarf-2 -fshort-enums -fno-inline-small-functions -fpack-struct\r
else ifeq ($(ARCH), XMEGA)\r
- CC_FLAGS += -mmcu=$(MCU) -gdwarf-2 -fshort-enums -fno-inline-small-functions -fpack-struct\r
+ BASE_CC_FLAGS += -mmcu=$(MCU) -gdwarf-2 -fshort-enums -fno-inline-small-functions -fpack-struct\r
else ifeq ($(ARCH), UC3)\r
- CC_FLAGS += -mpart=$(MCU) -g3 -masm-addr-pseudos\r
+ BASE_CC_FLAGS += -mpart=$(MCU:at32%=%) -g3 -masm-addr-pseudos\r
endif\r
-CC_FLAGS += -Wall -fno-strict-aliasing -funsigned-char -funsigned-bitfields -ffunction-sections\r
-CC_FLAGS += -I. -I$(patsubst %/,%,$(LUFA_PATH))/..\r
-CC_FLAGS += -DARCH=ARCH_$(ARCH) -DBOARD=BOARD_$(BOARD) -DF_USB=$(F_USB)UL\r
+BASE_CC_FLAGS += -Wall -fno-strict-aliasing -funsigned-char -funsigned-bitfields -ffunction-sections\r
+BASE_CC_FLAGS += -I. -I$(patsubst %/,%,$(LUFA_PATH))/..\r
+BASE_CC_FLAGS += -DARCH=ARCH_$(ARCH) -DBOARD=BOARD_$(BOARD) -DF_USB=$(F_USB)UL\r
ifneq ($(F_CPU),)\r
- CC_FLAGS += -DF_CPU=$(F_CPU)UL\r
+ BASE_CC_FLAGS += -DF_CPU=$(F_CPU)UL\r
endif\r
\r
# Additional language specific compiler flags\r
-C_FLAGS += -O$(OPTIMIZATION) -std=$(C_STANDARD) -MMD -MP -MF $@.d -Wstrict-prototypes \r
-CPP_FLAGS += -O$(OPTIMIZATION) -std=$(CPP_STANDARD) -MMD -MP -MF $@.d\r
+BASE_C_FLAGS := -x c -O$(OPTIMIZATION) -std=$(C_STANDARD) -Wstrict-prototypes\r
+BASE_CPP_FLAGS := -x c++ -O$(OPTIMIZATION) -std=$(CPP_STANDARD)\r
+BASE_ASM_FLAGS := -x assembler-with-cpp\r
\r
# Create a list of flags to pass to the linker\r
-LD_FLAGS += -lm -Wl,-Map=$(TARGET).map,--cref -Wl,--gc-sections \r
+BASE_LD_FLAGS := -lm -Wl,-Map=$(TARGET).map,--cref -Wl,--gc-sections \r
ifeq ($(ARCH), UC3)\r
- LD_FLAGS += --rodata-writable --direct-data \r
+ BASE_LD_FLAGS += --rodata-writable --direct-data \r
else\r
- LD_FLAGS += -Wl,--relax\r
-endif\r
-\r
-# Create a list of unknown source file types, if any are found throw an error\r
-UNKNOWN_SOURCE = $(filter-out $(C_SOURCE) $(CPP_SOURCE) $(ASM_SOURCE), $(SRC))\r
-ifneq ($(UNKNOWN_SOURCE),)\r
- $(error Unknown input source formats: $(UNKNOWN_SOURCE))\r
+ BASE_LD_FLAGS += -Wl,--relax\r
endif\r
\r
# Determine flags to pass to the size utility based on its reported features\r
done\r
\r
size: $(TARGET).elf\r
- @echo $(MSG_SIZE_CMD) Determining size of \"$(TARGET).elf\"\r
+ @echo $(MSG_SIZE_CMD) Determining size of \"$<\"\r
@if test -f $(TARGET).elf; then \\r
- $(CROSS)size $(SIZE_MCU_FLAG) $(SIZE_FORMAT_FLAG) $(TARGET).elf ; 2>/dev/null; \\r
+ $(CROSS)size $(SIZE_MCU_FLAG) $(SIZE_FORMAT_FLAG) $< ; 2>/dev/null; \\r
fi\r
\r
symbol-sizes: $(TARGET).elf\r
- @echo $(MSG_NM_CMD) Extracting \"$(TARGET).elf\" symbols with decimal byte sizes\r
- avr-nm --size-sort --demangle --radix=d $(TARGET).elf\r
+ @echo $(MSG_NM_CMD) Extracting \"$<\" symbols with decimal byte sizes\r
+ avr-nm --size-sort --demangle --radix=d $<\r
\r
clean:\r
@echo $(MSG_REMOVE_CMD) Removing object files of \"$(TARGET)\"\r
\r
%.o: %.c $(MAKEFILE_LIST)\r
@echo $(MSG_COMPILE_CMD) Compiling C file \"$<\"\r
- $(CROSS)gcc -c $(CC_FLAGS) $(C_FLAGS) $< -o $@\r
+ $(CROSS)gcc -c $(BASE_CC_FLAGS) $(BASE_C_FLAGS) $(CC_FLAGS) $(C_FLAGS) -MMD -MP -MF $(@:%.o=%.d) $< -o $@\r
\r
%.o: %.cpp $(MAKEFILE_LIST)\r
@echo $(MSG_COMPILE_CMD) Compiling C++ file \"$<\"\r
- $(CROSS)gcc -c $(CC_FLAGS) $(CPP_FLAGS) -x c++ $< -o $@\r
+ $(CROSS)gcc -c $(BASE_CC_FLAGS) $(BASE_CPP_FLAGS) $(CC_FLAGS) $(CPP_FLAGS) -MMD -MP -MF $(@:%.o=%.d) $< -o $@\r
\r
%.o: %.S $(MAKEFILE_LIST)\r
@echo $(MSG_ASSEMBLE_CMD) Assembling \"$<\"\r
- $(CROSS)gcc -c $(CC_FLAGS) $(ASM_FLAGS) -x assembler-with-cpp $< -o $@\r
+ $(CROSS)gcc -c $(BASE_CC_FLAGS) $(BASE_ASM_FLAGS) $(CC_FLAGS) $(ASM_FLAGS) $< -o $@\r
\r
.PRECIOUS : $(OBJECT_FILES)\r
%.elf: $(OBJECT_FILES)\r
@echo $(MSG_LINKER_CMD) Linking object files into \"$@\"\r
- $(CROSS)gcc $(CC_FLAGS) $(LD_FLAGS) $^ -o $@\r
+ $(CROSS)gcc $(BASE_CC_FLAGS) $(BASE_LD_FLAGS) $(CC_FLAGS) $(LD_FLAGS) $^ -o $@\r
\r
%.hex: %.elf\r
@echo $(MSG_OBJCPY_CMD) Extracting HEX file data from \"$<\"\r