X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/2b43a6d7df6221b979f08326c02eb1cfdd077c49..c9db3f0aa9364284158c208740cce3bb73f72f7e:/LUFA/Build/lufa_build.mk diff --git a/LUFA/Build/lufa_build.mk b/LUFA/Build/lufa_build.mk index 486c863f5..9f1125d99 100644 --- a/LUFA/Build/lufa_build.mk +++ b/LUFA/Build/lufa_build.mk @@ -1,15 +1,15 @@ # # LUFA Library -# Copyright (C) Dean Camera, 2012. +# Copyright (C) Dean Camera, 2015. # # dean [at] fourwalledcubicle [dot] com # www.lufa-lib.org # LUFA_BUILD_MODULES += BUILD -LUFA_BUILD_TARGETS += size symbol-sizes all lib elf hex lss clean mostlyclean +LUFA_BUILD_TARGETS += size symbol-sizes all lib elf bin hex lss clean mostlyclean 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 OBJDIR OBJECT_FILES DEBUG_TYPE DEBUG_LEVEL LINKER_RELAXATIONS +LUFA_BUILD_OPTIONAL_VARS += BOARD OPTIMIZATION C_STANDARD CPP_STANDARD F_CPU C_FLAGS CPP_FLAGS ASM_FLAGS CC_FLAGS LD_FLAGS OBJDIR OBJECT_FILES DEBUG_TYPE DEBUG_LEVEL LINKER_RELAXATIONS COMPILER_PATH LUFA_BUILD_PROVIDED_VARS += LUFA_BUILD_PROVIDED_MACROS += @@ -28,11 +28,12 @@ LUFA_BUILD_PROVIDED_MACROS += # all - Build application and list size # lib - Build and archive source files into a library # elf - Build application ELF debug object file -# hex - Build application HEX object files +# bin - Build application BIN binary object file +# hex - Build application HEX object file # lss - Build application LSS assembly listing file -# clean - Remove all project intermediatary and binary +# clean - Remove all project intermediary and binary # output files -# mostlyclean - Remove intermediatary output files, but +# mostlyclean - Remove intermediary output files, but # preserve binaries # .s - Compile C/C++ source file into an assembly file # for manual code inspection @@ -71,6 +72,7 @@ LUFA_BUILD_PROVIDED_MACROS += # generate in the compiled object files # DEBUG_LEVEL - Level the debugging information to generate in # the compiled object files +# COMPILER_PATH - Location of the GCC toolchain to use # # PROVIDED VARIABLES: # @@ -89,6 +91,7 @@ ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $ ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) # Default values of optionally user-supplied variables +COMPILER_PATH ?= BOARD ?= NONE OPTIMIZATION ?= s F_CPU ?= @@ -122,12 +125,12 @@ $(call ERROR_IF_NONBOOL, LINKER_RELAXATIONS) # Determine the utility prefix to use for the selected architecture ifeq ($(ARCH), AVR8) - CROSS := avr + CROSS := $(COMPILER_PATH)avr else ifeq ($(ARCH), XMEGA) - CROSS := avr + CROSS := $(COMPILER_PATH)avr $(warning The XMEGA device support is currently EXPERIMENTAL (incomplete and/or non-functional), and is included for preview purposes only.) else ifeq ($(ARCH), UC3) - CROSS := avr32 + CROSS := $(COMPILER_PATH)avr32 $(warning The UC3 device support is currently EXPERIMENTAL (incomplete and/or non-functional), and is included for preview purposes only.) else $(error Unsupported architecture "$(ARCH)") @@ -192,6 +195,15 @@ BASE_CC_FLAGS += -DARCH=ARCH_$(ARCH) -DBOARD=BOARD_$(BOARD) -DF_USB=$(F_USB)UL ifneq ($(F_CPU),) BASE_CC_FLAGS += -DF_CPU=$(F_CPU)UL endif +ifeq ($(LINKER_RELAXATIONS), Y) +BASE_CC_FLAGS += -mrelax +endif + +# This flag is required for bootloaders as GCC will emit invalid jump table +# assembly code for devices with large amounts of flash; the jump table target +# is extracted from FLASH without using the correct ELPM instruction, resulting +# in a pseudo-random jump target. +BASE_CC_FLAGS += -fno-jump-tables # Additional language specific compiler flags BASE_C_FLAGS := -x c -O$(OPTIMIZATION) -std=$(C_STANDARD) -Wstrict-prototypes @@ -249,15 +261,16 @@ mostlyclean: # Cleans all build files, leaving only the original source code clean: mostlyclean @echo $(MSG_REMOVE_CMD) Removing output files of \"$(TARGET)\" - rm -f $(TARGET).elf $(TARGET).hex $(TARGET).eep $(TARGET).map $(TARGET).lss $(TARGET).sym $(TARGET).a + rm -f $(TARGET).elf $(TARGET).hex $(TARGET).bin $(TARGET).eep $(TARGET).map $(TARGET).lss $(TARGET).sym lib$(TARGET).a # Performs a complete build of the user application and prints size information afterwards -all: build_begin elf hex lss sym size build_end +all: build_begin elf hex bin lss sym size build_end # Helper targets, to build a specific type of output file without having to know the project target name lib: lib$(TARGET).a elf: $(TARGET).elf hex: $(TARGET).hex $(TARGET).eep +bin: $(TARGET).bin lss: $(TARGET).lss sym: $(TARGET).sym @@ -304,17 +317,22 @@ $(OBJDIR)/%.o: %.S $(MAKEFILE_LIST) .SECONDARY : %.elf %.elf: $(OBJECT_FILES) @echo $(MSG_LINK_CMD) Linking object files into \"$@\" - $(CROSS)-gcc $(BASE_LD_FLAGS) $(LD_FLAGS) $^ -o $@ + $(CROSS)-gcc $^ -o $@ $(BASE_LD_FLAGS) $(LD_FLAGS) # Extracts out the loadable FLASH memory data from the project ELF file, and creates an Intel HEX format file of it %.hex: %.elf @echo $(MSG_OBJCPY_CMD) Extracting HEX file data from \"$<\" $(CROSS)-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature $< $@ +# Extracts out the loadable FLASH memory data from the project ELF file, and creates an Binary format file of it +%.bin: %.elf + @echo $(MSG_OBJCPY_CMD) Extracting BIN file data from \"$<\" + $(CROSS)-objcopy -O binary -R .eeprom -R .fuse -R .lock -R .signature $< $@ + # Extracts out the loadable EEPROM memory data from the project ELF file, and creates an Intel HEX format file of it %.eep: %.elf @echo $(MSG_OBJCPY_CMD) Extracting EEP file data from \"$<\" - $(CROSS)-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex $< $@ || exit 0 + $(CROSS)-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings $< $@ || exit 0 # Creates an assembly listing file from an input project ELF file, containing interleaved assembly and source data %.lss: %.elf