X-Git-Url: http://git.linex4red.de/pub/lufa.git/blobdiff_plain/59ca4ec0ec2376c3e94793ccb43487ecd036e1e7..fc0ff2f97657a893db336dded648c8bd60582bc1:/LUFA/Build/lufa.build.in diff --git a/LUFA/Build/lufa.build.in b/LUFA/Build/lufa.build.in index 4207f1707..f77757819 100644 --- a/LUFA/Build/lufa.build.in +++ b/LUFA/Build/lufa.build.in @@ -7,12 +7,12 @@ # LUFA_BUILD_MODULES += BUILD -LUFA_BUILD_TARGETS += size checksource all elf hex clean +LUFA_BUILD_TARGETS += size checksource all elf hex lss gcc_version clean LUFA_BUILD_MANDATORY_VARS += TARGET ARCH MCU SRC F_USB LUFA_PATH LUFA_BUILD_OPTIONAL_VARS += BOARD OPTIMIZATION C_STANDARD CPP_STANDARD F_CPU C_FLAGS CPP_FLAGS ASM_FLAGS CC_FLAGS LD_FLAGS # ----------------------------------------------------------------------------- -# LUFA Compiler Buildsystem Makefile Module. +# LUFA GCC Compiler Buildsystem Makefile Module. # ----------------------------------------------------------------------------- # DESCRIPTION: # Provides a set of targets to build a C, C++ and/or Assembly application @@ -25,6 +25,8 @@ LUFA_BUILD_OPTIONAL_VARS += BOARD OPTIMIZATION C_STANDARD CPP_STANDARD F_CPU C_ # all - Build application and list size # elf - Build application ELF debug object file # hex - Build application HEX object files +# lss - Build application LSS assembly listing file +# gcc_version - Print version of GCC used # clean - Remove output files # # MANDATORY PARAMETERS: @@ -72,15 +74,26 @@ CPP_FLAGS ?= ASM_FLAGS ?= CC_FLAGS ?= +# Determine the utility prefix to use for the selected architecture +ifeq ($(ARCH), AVR8) + CROSS := avr- +else ifeq ($(ARCH), XMEGA) + CROSS := avr- +else ifeq ($(ARCH), UC3) + CROSS := avr32- +else + $(error Unsupported architecture.) +endif + # Output Messages -MSG_BUILD_BEGIN = Begin compilation of project \"$(TARGET)\"... -MSG_BUILD_END = Finished building project \"$(TARGET)\"... -MSG_COMPILE_CMD = ' [CC] :' -MSG_REMOVE_CMD = ' [RM] :' -MSG_LINKER_CMD = ' [LNK] :' -MSG_SIZE_CMD = ' [SIZE] :' -MSG_OBJCPY_CMD = ' [OBJCPY] :' -MSG_OBJDMP_CMD = ' [OBJDMP] :' +MSG_BUILD_BEGIN := Begin compilation of project \"$(TARGET)\"... +MSG_BUILD_END := Finished building project \"$(TARGET)\". +MSG_COMPILE_CMD := ' [CC] :' +MSG_REMOVE_CMD := ' [RM] :' +MSG_LINKER_CMD := ' [LNK] :' +MSG_SIZE_CMD := ' [SIZE] :' +MSG_OBJCPY_CMD := ' [OBJCPY] :' +MSG_OBJDMP_CMD := ' [OBJDMP] :' # Convert input source file list to differentiate them by type C_SOURCE = $(filter %.c, $(SRC)) @@ -88,20 +101,16 @@ CPP_SOURCE = $(filter %.cpp, $(SRC)) ASM_SOURCE = $(filter %.S, $(SRC)) # Convert input source filenames into a list of required output object files -OBJECT_FILES = $(filter %.o, $(C_SOURCE:%.c=%.o) $(CPP_SOURCE:%.cpp=%.o) $(ASM_SOURCE:%.S=%.o)) +OBJECT_FILES = $(filter %.o, $(C_SOURCE:%.c=%.o) $(CPP_SOURCE:%.cpp=%.o) $(ASM_SOURCE:%.S=%.o)) +DEPENDENCY_FILES = $(OBJECT_FILES:%=%.d) # Create a list of flags to pass to the compiler ifeq ($(ARCH), AVR8) - CC_FLAGS += -mmcu=$(MCU) -gdwarf-2 -fshort-enums -fno-inline-small-functions -fpack-struct - CROSS = avr- + CC_FLAGS += -mmcu=$(MCU) -gdwarf-2 -fshort-enums -fno-inline-small-functions -fpack-struct else ifeq ($(ARCH), XMEGA) - CC_FLAGS += -mmcu=$(MCU) -gdwarf-2 -fshort-enums -fno-inline-small-functions -fpack-struct - CROSS = avr- + CC_FLAGS += -mmcu=$(MCU) -gdwarf-2 -fshort-enums -fno-inline-small-functions -fpack-struct else ifeq ($(ARCH), UC3) - CC_FLAGS += -mpart=$(MCU) -g3 -masm-addr-pseudos - CROSS = avr32- -else - $(error Unsupported architecture.) + CC_FLAGS += -mpart=$(MCU) -g3 -masm-addr-pseudos endif CC_FLAGS += -Wall -fno-strict-aliasing -funsigned-char -funsigned-bitfields -ffunction-sections CC_FLAGS += -I. -I$(patsubst %/,%,$(LUFA_PATH))/.. @@ -111,11 +120,14 @@ ifneq ($(F_CPU),) endif # Additional language specific compiler flags -C_FLAGS += -Wstrict-prototypes +C_FLAGS += -O$(OPTIMIZATION) -std=$(C_STANDARD) -MMD -MP -MF $@.d -Wstrict-prototypes +CPP_FLAGS += -O$(OPTIMIZATION) -std=$(CPP_STANDARD) -MMD -MP -MF $@.d # Create a list of flags to pass to the linker -LD_FLAGS += -Wl,-Map=$(TARGET).map,--cref -Wl,--gc-sections -lm -ifneq ($(F_CPU), UC3) +LD_FLAGS += -lm -Wl,-Map=$(TARGET).map,--cref -Wl,--gc-sections +ifeq ($(ARCH), UC3) + LD_FLAGS += --rodata-writable --direct-data +else LD_FLAGS += -Wl,--relax endif @@ -126,18 +138,23 @@ ifneq ($(UNKNOWN_SOURCE),) endif # Determine flags to pass to the size utility based on its reported features -SIZE_MCU_FLAG = $(shell avr-size --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) ) -SIZE_FORMAT_FLAG = $(shell avr-size --help | grep -- --format=.*avr > /dev/null && echo --format=avr ) +SIZE_MCU_FLAG := $(shell $(CROSS)size --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) ) +SIZE_FORMAT_FLAG := $(shell $(CROSS)size --help | grep -- --format=.*avr > /dev/null && echo --format=avr ) begin: @echo "" @echo $(MSG_BUILD_BEGIN) + @echo "" end: + @echo "" @echo $(MSG_BUILD_END) @echo "" +gcc_version: + @$(CROSS)gcc --version + checksource: @for f in $(SRC) $(CPPSRC) $(ASRC); do \ if [ -f $$f ]; then \ @@ -150,11 +167,11 @@ checksource: size: @echo $(MSG_SIZE_CMD) Determining size of \"$(TARGET).elf\" @if test -f $(TARGET).elf; then \ - avr-size $(SIZE_MCU_FLAG) $(SIZE_FORMAT_FLAG) $(TARGET).elf ; 2>/dev/null; \ + $(CROSS)size $(SIZE_MCU_FLAG) $(SIZE_FORMAT_FLAG) $(TARGET).elf ; 2>/dev/null; \ fi -.PHONY: begin hex lss end size -all: begin hex end size +.PHONY: begin gcc_version elf hex lss size end +all: begin gcc_version elf hex lss size end elf: $(TARGET).elf hex: $(TARGET).hex $(TARGET).eep @@ -162,11 +179,11 @@ lss: $(TARGET).lss %.o: %.c @echo $(MSG_COMPILE_CMD) Compiling C file \"$<\" - $(CROSS)gcc -c $(CC_FLAGS) $(C_FLAGS) -O$(OPTIMIZATION) -std=$(C_STANDARD) $< -o $@ + $(CROSS)gcc -c $(CC_FLAGS) $(C_FLAGS) $< -o $@ %.o: %.cpp @echo $(MSG_COMPILE_CMD) Compiling C++ file \"$<\" - $(CROSS)gcc -c $(CC_FLAGS) $(CPP_FLAGS) -O$(OPTIMIZATION) -std=$(CPP_STANDARD) -x c++ $< -o $@ + $(CROSS)gcc -c $(CC_FLAGS) $(CPP_FLAGS) -x c++ $< -o $@ %.o: %.S @echo $(MSG_COMPILE_CMD) Assembling \"$<\" @@ -175,7 +192,7 @@ lss: $(TARGET).lss .PRECIOUS : $(OBJECT_FILES) %.elf: $(OBJECT_FILES) @echo $(MSG_LINKER_CMD) Linking object files into \"$@\" - $(CROSS)gcc $^ $(CC_FLAGS) $(LD_FLAGS) -o $@ + $(CROSS)gcc $(CC_FLAGS) $(LD_FLAGS) $^ -o $@ %.hex: %.elf @echo $(MSG_OBJCPY_CMD) Extracting HEX file data from \"$<\" @@ -190,7 +207,12 @@ lss: $(TARGET).lss $(CROSS)objdump -h -S -z $< > $@ clean: - @echo $(MSG_REMOVE_CMD) Removing object files \"$(notdir $(OBJECT_FILES))\" + @echo $(MSG_REMOVE_CMD) Removing object files \"$(strip $(notdir $(OBJECT_FILES)))\" rm -f $(OBJECT_FILES) + @echo $(MSG_REMOVE_CMD) Removing dependency files \"$(strip $(notdir $(DEPENDENCY_FILES)))\" + rm -f $(DEPENDENCY_FILES) @echo $(MSG_REMOVE_CMD) Removing output files \"$(TARGET).elf $(TARGET).hex $(TARGET).eep $(TARGET).map $(TARGET).lss\" rm -f $(TARGET).elf $(TARGET).hex $(TARGET).eep $(TARGET).map $(TARGET).lss + +# Include build dependency files +-include $(DEPENDENCY_FILES) \ No newline at end of file