From 7375c789e1b85ef5eb280339559c0cc9ae8f3b87 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sat, 18 Aug 2012 10:45:29 +0000 Subject: Document build system targets. Add a rule to the BUILD module that is run if a source file does not exist to show an error to the user, rather than running the check-source rule before each build (slightly faster/more portable and the generated error is then a true make error). --- LUFA/Build/lufa_atprogram.mk | 2 ++ LUFA/Build/lufa_avrdude.mk | 2 ++ LUFA/Build/lufa_build.mk | 30 +++++++++++++++++++++++++++++- LUFA/Build/lufa_core.mk | 8 +++++++- LUFA/Build/lufa_cppcheck.mk | 2 ++ LUFA/Build/lufa_dfu.mk | 4 ++++ LUFA/Build/lufa_doxygen.mk | 1 + LUFA/Build/lufa_hid.mk | 4 ++++ 8 files changed, 51 insertions(+), 2 deletions(-) (limited to 'LUFA/Build') diff --git a/LUFA/Build/lufa_atprogram.mk b/LUFA/Build/lufa_atprogram.mk index f9f5dfc9c..df8d42f07 100644 --- a/LUFA/Build/lufa_atprogram.mk +++ b/LUFA/Build/lufa_atprogram.mk @@ -89,10 +89,12 @@ else $(error Unsupported architecture "$(ARCH)") endif +# Programs in the target FLASH memory using ATPROGRAM atprogram: $(TARGET).elf $(MAKEFILE_LIST) @echo $(MSG_ATPROGRAM_CMD) Programming device \"$(MCU)\" FLASH using \"$(ATPROGRAM_PROGRAMMER)\" atprogram $(BASE_ATPROGRAM_FLAGS) program $(ATPROGRAM_FLASH_FLAGS) --file $< +# Programs in the target EEPROM memory using ATPROGRAM atprogram-ee: $(TARGET).elf $(MAKEFILE_LIST) @echo $(MSG_ATPROGRAM_CMD) Programming device \"$(MCU)\" EEPROM using \"$(ATPROGRAM_PROGRAMMER)\" atprogram $(BASE_ATPROGRAM_FLAGS) program $(ATPROGRAM_EEPROM_FLAGS) --file $< diff --git a/LUFA/Build/lufa_avrdude.mk b/LUFA/Build/lufa_avrdude.mk index 21f93ef26..cec386e8e 100644 --- a/LUFA/Build/lufa_avrdude.mk +++ b/LUFA/Build/lufa_avrdude.mk @@ -72,10 +72,12 @@ MSG_AVRDUDE_CMD := ' [AVRDUDE] :' # Construct base avrdude command flags BASE_AVRDUDE_FLAGS := -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +# Programs in the target FLASH memory using AVRDUDE avrdude: $(TARGET).hex $(MAKEFILE_LIST) @echo $(MSG_AVRDUDE_CMD) Programming device \"$(MCU)\" FLASH with settings \"$(AVRDUDE_FLASH_FLAGS)\" using \"$(AVRDUDE_PROGRAMMER)\" on port \"$(AVRDUDE_PORT)\" avrdude $(BASE_AVRDUDE_FLAGS) -U flash:w:$< $(AVRDUDE_FLAGS) +# Programs in the target EEPROM memory using AVRDUDE avrdude-ee: $(TARGET).eep $(MAKEFILE_LIST) @echo $(MSG_AVRDUDE_CMD) Programming device \"$(MCU)\" EEPROM with settings \"$(AVRDUDE_EEP_FLAGS)\" using \"$(AVRDUDE_PROGRAMMER)\" on port \"$(AVRDUDE_PORT)\" avrdude $(BASE_AVRDUDE_FLAGS) -U eeprom:w:$< $(AVRDUDE_FLAGS) diff --git a/LUFA/Build/lufa_build.mk b/LUFA/Build/lufa_build.mk index f363c8c10..33ff6eb13 100644 --- a/LUFA/Build/lufa_build.mk +++ b/LUFA/Build/lufa_build.mk @@ -36,6 +36,8 @@ LUFA_BUILD_PROVIDED_MACROS += # output files # mostlyclean - Remove intermediatary output files, but # preserve binaries +# .s - Compile C/C++ source file into an assembly file +# for manual code inspection # # MANDATORY PARAMETERS: # @@ -207,14 +209,17 @@ endif size: SIZE_MCU_FLAG := $(shell $(CROSS)-size --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) ) size: SIZE_FORMAT_FLAG := $(shell $(CROSS)-size --help | grep -- --format=.*avr > /dev/null && echo --format=avr ) +# Pre-build informational target, to give compiler and project name information when building build_begin: @echo $(MSG_INFO_MESSAGE) Begin compilation of project \"$(TARGET)\"... @echo "" @$(CROSS)-gcc --version +# Post-build informational target, to project name information when building has completed build_end: @echo $(MSG_INFO_MESSAGE) Finished building project \"$(TARGET)\". +# Checks all target source files and provides information on whether they exist or not check-source: @for f in $(SRC); do \ if [ ! -f $$f ]; then \ @@ -223,77 +228,100 @@ check-source: fi; \ done +# Prints size information of a compiled application (FLASH, RAM and EEPROM usages) size: $(TARGET).elf @echo $(MSG_SIZE_CMD) Determining size of \"$<\" @echo "" $(CROSS)-size $(SIZE_MCU_FLAG) $(SIZE_FORMAT_FLAG) $< ; 2>/dev/null; +# Prints size information on the symbols within a compiled application in decimal bytes symbol-sizes: $(TARGET).elf @echo $(MSG_NM_CMD) Extracting \"$<\" symbols with decimal byte sizes $(CROSS)-nm --size-sort --demangle --radix=d $< +# Cleans intermediatary build files, leaving only the compiled application files 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) +# 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 -all: build_begin check-source elf hex lss sym size build_end +# Performs a complete build of the user application and prints size information afterwards +all: build_begin elf hex 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 lss: $(TARGET).lss sym: $(TARGET).sym +# Default target to *create* the user application's specified source files; if this rule is executed by +# make, the input source file doens't exist and an error needs to be presented to the user +$(SRC): + $(error Source file does not exist: $@) + +# Compiles an input C source file and generates an assembly listing for it %.s: %.c $(MAKEFILE_LIST) @echo $(MSG_COMPILE_CMD) Generating assembly from C file \"$(notdir $<)\" $(CROSS)-gcc -S $(BASE_CC_FLAGS) $(BASE_C_FLAGS) $(CC_FLAGS) $(C_FLAGS) $< -o $@ +# Compiles an input C++ source file and generates an assembly listing for it %.s: %.cpp $(MAKEFILE_LIST) @echo $(MSG_COMPILE_CMD) Generating assembly from C++ file \"$(notdir $<)\" $(CROSS)-gcc -S $(BASE_CC_FLAGS) $(BASE_CPP_FLAGS) $(CC_FLAGS) $(CPP_FLAGS) $< -o $@ +# Compiles an input C source file and generates a linkable object file for it $(OBJDIR)/%.o: %.c $(MAKEFILE_LIST) @echo $(MSG_COMPILE_CMD) Compiling C file \"$(notdir $<)\" $(CROSS)-gcc -c $(BASE_CC_FLAGS) $(BASE_C_FLAGS) $(CC_FLAGS) $(C_FLAGS) -MMD -MP -MF $(@:%.o=%.d) $< -o $@ +# Compiles an input C++ source file and generates a linkable object file for it $(OBJDIR)/%.o: %.cpp $(MAKEFILE_LIST) @echo $(MSG_COMPILE_CMD) Compiling C++ file \"$(notdir $<)\" $(CROSS)-gcc -c $(BASE_CC_FLAGS) $(BASE_CPP_FLAGS) $(CC_FLAGS) $(CPP_FLAGS) -MMD -MP -MF $(@:%.o=%.d) $< -o $@ +# Assembles an input ASM source file and generates a linkable object file for it $(OBJDIR)/%.o: %.S $(MAKEFILE_LIST) @echo $(MSG_ASSEMBLE_CMD) Assembling \"$(notdir $<)\" $(CROSS)-gcc -c $(BASE_CC_FLAGS) $(BASE_ASM_FLAGS) $(CC_FLAGS) $(ASM_FLAGS) -MMD -MP -MF $(@:%.o=%.d) $< -o $@ +# Generates a library archive file from the user application, which can be linked into other applications .PRECIOUS : $(OBJECT_FILES) .SECONDARY : %.a %.a: $(OBJECT_FILES) @echo $(MSG_ARCHIVE_CMD) Archiving object files into \"$@\" $(CROSS)-ar rcs $@ $(OBJECT_FILES) +# Generates an ELF debug file from the user application, which can be further processed for FLASH and EEPROM data +# files, or used for programming and debugging directly .PRECIOUS : $(OBJECT_FILES) .SECONDARY : %.elf %.elf: $(OBJECT_FILES) @echo $(MSG_LINK_CMD) Linking object files into \"$@\" $(CROSS)-gcc $(BASE_LD_FLAGS) $(LD_FLAGS) $^ -o $@ +# 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 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 +# Creates an assembly listing file from an input project ELF file, containing interleaved assembly and source data %.lss: %.elf @echo $(MSG_OBJDMP_CMD) Extracting LSS file data from \"$<\" $(CROSS)-objdump -h -S -z $< > $@ +# Creates a symbol file listing the loadable and discarded symbols from an input project ELF file %.sym: %.elf @echo $(MSG_NM_CMD) Extracting SYM file data from \"$<\" $(CROSS)-nm -n $< > $@ diff --git a/LUFA/Build/lufa_core.mk b/LUFA/Build/lufa_core.mk index b83e62998..cb06a701e 100644 --- a/LUFA/Build/lufa_core.mk +++ b/LUFA/Build/lufa_core.mk @@ -133,22 +133,28 @@ help: @echo "===================================================================" @echo " The LUFA BuildSystem 2.0 - Powered By Duct Tape (tm) " @echo "===================================================================" - + +# Lists build modules included by the project makefile, in alphabetical order list_modules: @echo Currently Used Build System Modules: $(PRINTABLE_LUFA_BUILD_MODULES) +# Lists build targets included by the project makefile, in alphabetical order list_targets: @echo Currently Available Build Targets: $(PRINTABLE_LUFA_BUILD_TARGETS) +# Lists mandatory variables that must be set by the project makefile, in alphabetical order list_mandatory: @echo Mandatory Variables for Included Modules: $(PRINTABLE_LUFA_MANDATORY_VARS) +# Lists optional variables that must be set by the project makefile, in alphabetical order list_optional: @echo Optional Variables for Included Modules: $(PRINTABLE_LUFA_OPTIONAL_VARS) +# Lists variables provided by the included build modules, in alphabetical order list_provided: @echo Variables Provided by the Included Modules: $(PRINTABLE_LUFA_PROVIDED_VARS) +# Lists macros provided by the included build modules, in alphabetical order list_macros: @echo Macros Provided by the Included Modules: $(PRINTABLE_LUFA_PROVIDED_MACROS) diff --git a/LUFA/Build/lufa_cppcheck.mk b/LUFA/Build/lufa_cppcheck.mk index 1593a4279..b247ee73d 100644 --- a/LUFA/Build/lufa_cppcheck.mk +++ b/LUFA/Build/lufa_cppcheck.mk @@ -92,10 +92,12 @@ endif # Output Messages MSG_CPPCHECK_CMD := ' [CPPCHECK]:' +# Checks the CPPCheck configuration as used in the user project, to determine if any paths are missing or invalid cppcheck-config: @echo $(MSG_CPPCHECK_CMD) Checking cppcheck configuration check on source files cppcheck $(BASE_CPPCHECK_FLAGS) --check-config $(CPPCHECK_FLAGS) $(SRC) +# Runs a static analysis using CPPCheck to determine if there are any issues cppcheck: @echo $(MSG_CPPCHECK_CMD) Performing static analysis on source files cppcheck $(BASE_CPPCHECK_FLAGS) --enable=$(CPPCHECK_ENABLE) $(CPPCHECK_SUPPRESS:%=--suppress=%) $(CPPCHECK_FLAGS) $(SRC) diff --git a/LUFA/Build/lufa_dfu.mk b/LUFA/Build/lufa_dfu.mk index ba75f14a7..ddb7aab7a 100644 --- a/LUFA/Build/lufa_dfu.mk +++ b/LUFA/Build/lufa_dfu.mk @@ -62,12 +62,14 @@ MSG_COPY_CMD := ' [CP] :' MSG_REMOVE_CMD := ' [RM] :' MSG_DFU_CMD := ' [DFU] :' +# Programs in the target FLASH memory using BATCHISP, the command line tool used by FLIP flip: $(TARGET).hex $(MAKEFILE_LIST) @echo $(MSG_DFU_CMD) Programming FLASH with batchisp using \"$<\" batchisp -hardware usb -device $(MCU) -operation erase f batchisp -hardware usb -device $(MCU) -operation loadbuffer $< program batchisp -hardware usb -device $(MCU) -operation start reset 0 +# Programs in the target EEPROM memory using BATCHISP, the command line tool used by FLIP flip-ee: $(TARGET).eep $(MAKEFILE_LIST) @echo $(MSG_DFU_CMD) Copying EEP file to temporary file \"$<.hex\" cp $< $<.hex @@ -78,12 +80,14 @@ flip-ee: $(TARGET).eep $(MAKEFILE_LIST) @echo $(MSG_DFU_CMD) Removing temporary file \"$<.hex\" rm $<.hex +# Programs in the target FLASH memory using DFU-PROGRAMMER dfu: $(TARGET).hex $(MAKEFILE_LIST) @echo $(MSG_DFU_CMD) Programming FLASH with dfu-programmer using \"$<\" dfu-programmer $(MCU) erase dfu-programmer $(MCU) flash $< dfu-programmer $(MCU) reset +# Programs in the target EEPROM memory using DFU-PROGRAMMER dfu-ee: $(TARGET).eep $(MAKEFILE_LIST) @echo $(MSG_DFU_CMD) Programming EEPROM with dfu-programmer using \"$<\" dfu-programmer $(MCU) eeprom-flash $< diff --git a/LUFA/Build/lufa_doxygen.mk b/LUFA/Build/lufa_doxygen.mk index 51123799f..265ba6e93 100644 --- a/LUFA/Build/lufa_doxygen.mk +++ b/LUFA/Build/lufa_doxygen.mk @@ -73,6 +73,7 @@ else DOXYGEN_CMD := $(BASE_DOXYGEN_CMD) endif +# Builds the project documentation using the specified configuration file and the DOXYGEN tool doxygen: @echo $(MSG_DOXYGEN_CMD) Configuration file \"$(DOXYGEN_CONF)\" with parameters \"$(DOXYGEN_OVERRIDE_PARAMS)\" $(DOXYGEN_CMD) diff --git a/LUFA/Build/lufa_hid.mk b/LUFA/Build/lufa_hid.mk index a74197a0b..f0e4f45de 100644 --- a/LUFA/Build/lufa_hid.mk +++ b/LUFA/Build/lufa_hid.mk @@ -64,20 +64,24 @@ MSG_HID_BOOTLOADER_CMD := ' [HID] :' MSG_OBJCPY_CMD := ' [OBJCPY] :' MSG_MAKE_CMD := ' [MAKE] :' +# Programs in the target FLASH memory using the HID_BOOTLOADER_CLI tool hid: $(TARGET).hex $(MAKEFILE_LIST) @echo $(MSG_HID_BOOTLOADER_CMD) Programming FLASH with hid_bootloader_cli using \"$<\" hid_bootloader_cli -mmcu=$(MCU) -v $< +# Programs in the target EEPROM memory using the HID_BOOTLOADER_CLI tool (note: clears target FLASH memory) hid-ee: $(TARGET).eep $(MAKEFILE_LIST) @echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a binary file \"InputEEData.bin\" avr-objcopy -I ihex -O binary $< $(patsubst %/,%,$(LUFA_PATH))/Build/HID_EEPROM_Loader/InputEEData.bin @echo $(MSG_MAKE_CMD) Making EEPROM loader application for \"$<\" make -C $(patsubst %/,%,$(LUFA_PATH))/Build/HID_EEPROM_Loader/ MCU=$(MCU) clean hid +# Programs in the target FLASH memory using the TEENSY_BOOTLOADER_CLI tool teensy: $(TARGET).hex $(MAKEFILE_LIST) @echo $(MSG_HID_BOOTLOADER_CMD) Programming FLASH with teensy_loader_cli using \"$<\" teensy_loader_cli -mmcu=$(MCU) -v $< +# Programs in the target EEPROM memory using the TEENSY_BOOTLOADER_CLI tool (note: clears target FLASH memory) teensy-ee: $(TARGET).hex $(MAKEFILE_LIST) @echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a binary file \"InputEEData.bin\" avr-objcopy -I ihex -O binary $< $(patsubst %/,%,$(LUFA_PATH))/Build/HID_EEPROM_Loader/InputEEData.bin -- cgit v1.2.3