Fixed incorrect Dataflash functionality in the USBKEY board if the driver is modified...
[pub/lufa.git] / LUFA / Build / lufa_build.mk
index f363c8c..04596c5 100644 (file)
@@ -7,7 +7,7 @@
 #
 
 LUFA_BUILD_MODULES         += BUILD
-LUFA_BUILD_TARGETS         += size check-source symbol-sizes all lib elf hex lss clean mostlyclean
+LUFA_BUILD_TARGETS         += size 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 OBJECT_FILES DEBUG_TYPE DEBUG_LEVEL
 LUFA_BUILD_PROVIDED_VARS   += 
@@ -25,8 +25,6 @@ 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
@@ -36,6 +34,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:
 #
@@ -204,96 +204,116 @@ else ifeq ($(ARCH), UC3)
 endif
 
 # Determine flags to pass to the size utility based on its reported features (only invoke if size target required)
+# and on an architecture where this non-standard patch is available
+ifneq ($(ARCH), UC3)
 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 )
+endif
 
+# 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)\".
 
-check-source:
-       @for f in $(SRC); do \
-               if [ ! -f $$f ]; then \
-                       echo "Error: Source file not found: $$f"; \
-                       exit 1; \
-               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;
+       $(CROSS)-size $(SIZE_MCU_FLAG) $(SIZE_FORMAT_FLAG) $<
 
+# 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 doesn'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 $< > $@
+       $(CROSS)-objdump -h -d -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 $< > $@
@@ -302,4 +322,4 @@ $(OBJDIR)/%.o: %.S $(MAKEFILE_LIST)
 -include $(DEPENDENCY_FILES)
 
 # Phony build targets for this module
-.PHONY: build_begin build_end check-source size symbol-sizes lib elf hex lss clean mostlyclean
+.PHONY: build_begin build_end size symbol-sizes lib elf hex lss clean mostlyclean