From 7375c789e1b85ef5eb280339559c0cc9ae8f3b87 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Sat, 18 Aug 2012 10:45:29 +0000
Subject: [PATCH] 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 ++++
 LUFA/DoxygenPages/BuildSystem.txt |  4 ++++
 9 files changed, 55 insertions(+), 2 deletions(-)

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
+#    <filename>.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
diff --git a/LUFA/DoxygenPages/BuildSystem.txt b/LUFA/DoxygenPages/BuildSystem.txt
index a1ed8416e..c1e8be3db 100644
--- a/LUFA/DoxygenPages/BuildSystem.txt
+++ b/LUFA/DoxygenPages/BuildSystem.txt
@@ -105,6 +105,10 @@
  *    <td><tt>mostlyclean</tt></td>
  *    <td>Remove all intermediatary files but preserve any binary output files.</td>
  *   </tr>
+ *   <tr>
+ *    <td><tt><filename>.s</tt></td>
+ *    <td>Create an assembly listing of a given input C/C++ source file.</td>
+ *   </tr>
  *  </table>
  *
  *  \section SSec_BuildModule_BUILD_MandatoryParams Mandatory Parameters
-- 
GitLab