X-Git-Url: http://git.linex4red.de/pub/lufa.git/blobdiff_plain/8ccc2b2272564440cedc484b7c9cc8b5b7230ccf..5d9403fde4e0d89313121fcd5fa4cfc6c4ddfc4e:/LUFA/Build/lufa.build.in diff --git a/LUFA/Build/lufa.build.in b/LUFA/Build/lufa.build.in index 994f4b7fd..91c54f969 100644 --- a/LUFA/Build/lufa.build.in +++ b/LUFA/Build/lufa.build.in @@ -7,7 +7,7 @@ # LUFA_BUILD_MODULES += BUILD -LUFA_BUILD_TARGETS += size symbol-sizes all elf hex lss clean +LUFA_BUILD_TARGETS += size check-source symbol-sizes all lib elf 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 LUFA_BUILD_PROVIDED_VARS += @@ -25,11 +25,17 @@ LUFA_BUILD_PROVIDED_MACROS += # size - List built application size # symbol-sizes - Print application symbols from the binary ELF # file as a list sorted by size in bytes +# check-source - Print a list of SRC source files that cannot +# be found # 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 # lss - Build application LSS assembly listing file -# clean - Remove output files +# clean - Remove all project intermediatary and binary +# output files +# mostlyclean - Remove intermediatary output files, but +# preserve binaries # # MANDATORY PARAMETERS: # @@ -113,38 +119,37 @@ else endif # Output Messages -MSG_BUILD_BEGIN := Begin compilation of project \"$(TARGET)\"... -MSG_BUILD_END := Finished building project \"$(TARGET)\". MSG_COMPILE_CMD := ' [GCC] :' MSG_ASSEMBLE_CMD := ' [GAS] :' MSG_NM_CMD := ' [NM] :' MSG_REMOVE_CMD := ' [RM] :' -MSG_LINKER_CMD := ' [LNK] :' +MSG_LINK_CMD := ' [LNK] :' +MSG_ARCHIVE_CMD := ' [AR] :' 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)) -CPP_SOURCE = $(filter %.cpp, $(SRC)) -ASM_SOURCE = $(filter %.S, $(SRC)) +C_SOURCE := $(filter %.c, $(SRC)) +CPP_SOURCE := $(filter %.cpp, $(SRC)) +ASM_SOURCE := $(filter %.S, $(SRC)) # Create a list of unknown source file types, if any are found throw an error -UNKNOWN_SOURCE = $(filter-out $(C_SOURCE) $(CPP_SOURCE) $(ASM_SOURCE), $(SRC)) +UNKNOWN_SOURCE := $(filter-out $(C_SOURCE) $(CPP_SOURCE) $(ASM_SOURCE), $(SRC)) ifneq ($(UNKNOWN_SOURCE),) - $(error Unknown input source formats: $(UNKNOWN_SOURCE)) + $(error Unknown input source file formats: $(UNKNOWN_SOURCE)) endif # 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 := $(addsuffix .o, $(basename $(SRC))) ifneq ($(OBJDIR),.) - $(shell mkdir $(OBJDIR) 2>&1 | /dev/null) + $(shell mkdir $(OBJDIR) 2>&1 > /dev/null) VPATH += $(dir $(SRC)) - OBJECT_FILES := $(addprefix $(patsubst %/,%,$(OBJDIR))/, $(notdir $(OBJECT_FILES))) endif -DEPENDENCY_FILES = $(OBJECT_FILES:%.o=%.d) +# Create a list of dependency files from the list of object files +DEPENDENCY_FILES := $(OBJECT_FILES:%.o=%.d) # Create a list of common flags to pass to the compiler/linker/assembler BASE_CC_FLAGS := -pipe @@ -182,17 +187,17 @@ SIZE_FORMAT_FLAG := $(shell $(CROSS)-size --help | grep -- --format=.*avr > /dev build_begin: @echo "" - @echo $(MSG_BUILD_BEGIN) + @echo Begin compilation of project \"$(TARGET)\"... @echo "" build_end: - @echo $(MSG_BUILD_END) + @echo Finished building project \"$(TARGET)\". @echo "" -gcc_version: +gcc-version: @$(CROSS)-gcc --version -check_source: +check-source: @for f in $(SRC); do \ if [ ! -f $$f ]; then \ echo "Error: Source file not found: $$f"; \ @@ -207,18 +212,21 @@ size: $(TARGET).elf symbol-sizes: $(TARGET).elf @echo $(MSG_NM_CMD) Extracting \"$<\" symbols with decimal byte sizes - avr-nm --size-sort --demangle --radix=d $< + $(CROSS)-nm --size-sort --demangle --radix=d $< -clean: +mostlyclean: @echo $(MSG_REMOVE_CMD) Removing object files of \"$(TARGET)\" rm -f $(OBJECT_FILES) @echo $(MSG_REMOVE_CMD) Removing dependency files of \"$(TARGET)\" rm -f $(DEPENDENCY_FILES) + +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 + rm -f $(TARGET).elf $(TARGET).hex $(TARGET).eep $(TARGET).map $(TARGET).lss $(TARGET).sym $(TARGET).a -all: build_begin check_source gcc_version elf hex lss sym size build_end +all: build_begin check-source gcc-version elf hex lss sym size build_end +lib: $(TARGET).a elf: $(TARGET).elf hex: $(TARGET).hex $(TARGET).eep lss: $(TARGET).lss @@ -234,12 +242,18 @@ $(OBJDIR)/%.o: %.cpp $(MAKEFILE_LIST) $(OBJDIR)/%.o: %.S $(MAKEFILE_LIST) @echo $(MSG_ASSEMBLE_CMD) Assembling \"$(notdir $<)\" - $(CROSS)-gcc -c $(BASE_CC_FLAGS) $(BASE_ASM_FLAGS) $(CC_FLAGS) $(ASM_FLAGS) $< -o $@ + $(CROSS)-gcc -c $(BASE_CC_FLAGS) $(BASE_ASM_FLAGS) $(CC_FLAGS) $(ASM_FLAGS) -MMD -MP -MF $(@:%.o=%.d) $< -o $@ + +.PRECIOUS : $(OBJECT_FILES) +.SECONDARY : %.a +%.a: $(OBJECT_FILES) + @echo $(MSG_ARCHIVE_CMD) Archiving object files into \"$@\" + $(CROSS)-ar rcs $@ $(OBJECT_FILES) .PRECIOUS : $(OBJECT_FILES) .SECONDARY : %.elf %.elf: $(OBJECT_FILES) - @echo $(MSG_LINKER_CMD) Linking object files into \"$@\" + @echo $(MSG_LINK_CMD) Linking object files into \"$@\" $(CROSS)-gcc $(BASE_CC_FLAGS) $(BASE_LD_FLAGS) $(CC_FLAGS) $(LD_FLAGS) $^ -o $@ %.hex: %.elf @@ -262,4 +276,4 @@ $(OBJDIR)/%.o: %.S $(MAKEFILE_LIST) -include $(DEPENDENCY_FILES) # Phony build targets for this module -.PHONY: build_begin build_end gcc_version check_source size symbol-sizes elf hex lss clean +.PHONY: build_begin build_end gcc-version check-source size symbol-sizes lib elf hex lss clean mostlyclean