From 231658362eca0f882f1fc28642ffe160926461f1 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 15 Dec 2015 22:23:08 +1100 Subject: [PATCH 01/11] Replace LUFA build system with DMBS. --- LUFA/Build/DMBS | 1 + .../HID_EEPROM_Loader/HID_EEPROM_Loader.c | 61 ---- LUFA/Build/HID_EEPROM_Loader/makefile | 42 --- LUFA/Build/lufa_atprogram.mk | 97 +---- LUFA/Build/lufa_avrdude.mk | 80 +---- LUFA/Build/lufa_build.mk | 338 +----------------- LUFA/Build/lufa_core.mk | 169 +-------- LUFA/Build/lufa_cppcheck.mk | 101 +----- LUFA/Build/lufa_dfu.mk | 89 +---- LUFA/Build/lufa_doxygen.mk | 94 +---- LUFA/Build/lufa_hid.mk | 90 +---- LUFA/Build/lufa_sources.mk | 10 +- 12 files changed, 36 insertions(+), 1136 deletions(-) create mode 160000 LUFA/Build/DMBS delete mode 100644 LUFA/Build/HID_EEPROM_Loader/HID_EEPROM_Loader.c delete mode 100644 LUFA/Build/HID_EEPROM_Loader/makefile diff --git a/LUFA/Build/DMBS b/LUFA/Build/DMBS new file mode 160000 index 00000000000..7dfe3cf63ab --- /dev/null +++ b/LUFA/Build/DMBS @@ -0,0 +1 @@ +Subproject commit 7dfe3cf63ab428690112b79ce5d5261945a9118c diff --git a/LUFA/Build/HID_EEPROM_Loader/HID_EEPROM_Loader.c b/LUFA/Build/HID_EEPROM_Loader/HID_EEPROM_Loader.c deleted file mode 100644 index 2ec44093cc9..00000000000 --- a/LUFA/Build/HID_EEPROM_Loader/HID_EEPROM_Loader.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2015. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2015 Dean Camera (dean [at] fourwalledcubicle [dot] com) - - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in - all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the - software without specific, written prior permission. - - The author disclaims all warranties with regard to this - software, including all implied warranties of merchantability - and fitness. In no event shall the author be liable for any - special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether - in an action of contract, negligence or other tortious action, - arising out of or in connection with the use or performance of - this software. -*/ - -/** \file - * - * Special application to extract an EEPROM image stored in FLASH memory, and - * copy it to the device EEPROM. This application is designed to be used with - * the HID build system module of LUFA to program the EEPROM of a target device - * that uses the HID bootloader protocol, which does not have native EEPROM - * programming support. - */ - -#include -#include -#include - -/* References to the binary EEPROM data linked in the AVR's FLASH memory space */ -extern const char _binary_InputEEData_bin_start[]; -extern const char _binary_InputEEData_bin_end[]; -extern const char _binary_InputEEData_bin_size[]; - -/* Friendly names for the embedded binary data stored in FLASH memory space */ -#define InputEEData _binary_InputEEData_bin_start -#define InputEEData_size ((int)_binary_InputEEData_bin_size) - -int main(void) -{ - /* Copy out the embedded EEPROM data from FLASH to EEPROM memory space */ - for (uint16_t i = 0; i < InputEEData_size; i++) - eeprom_update_byte((uint8_t*)i, pgm_read_byte(&InputEEData[i])); - - /* Infinite loop once complete */ - for (;;); -} diff --git a/LUFA/Build/HID_EEPROM_Loader/makefile b/LUFA/Build/HID_EEPROM_Loader/makefile deleted file mode 100644 index 76357489897..00000000000 --- a/LUFA/Build/HID_EEPROM_Loader/makefile +++ /dev/null @@ -1,42 +0,0 @@ -# -# LUFA Library -# Copyright (C) Dean Camera, 2015. -# -# dean [at] fourwalledcubicle [dot] com -# www.lufa-lib.org -# -# -------------------------------------- -# LUFA Project Makefile. -# -------------------------------------- - -# Run "make help" for target help. - -MCU = at90usb1287 -ARCH = AVR8 -F_CPU = 1000000 -F_USB = $(F_CPU) -OPTIMIZATION = s -TARGET = HID_EEPROM_Loader -SRC = $(TARGET).c -LUFA_PATH = ../../../LUFA -CC_FLAGS = -LD_FLAGS = -OBJECT_FILES = InputEEData.o - -# Default target -all: - -# Determine the AVR sub-architecture of the build main application object file -FIND_AVR_SUBARCH = avr$(shell avr-objdump -f $(TARGET).o | grep architecture | cut -d':' -f3 | cut -d',' -f1) - -# Create a linkable object file with the input binary EEPROM data stored in the FLASH section -InputEEData.o: InputEEData.bin $(TARGET).o $(MAKEFILE_LIST) - @echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a object file \"$@\" - avr-objcopy -I binary -O elf32-avr -B $(call FIND_AVR_SUBARCH) --rename-section .data=.progmem.data,contents,alloc,readonly,data $< $@ - -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_hid.mk diff --git a/LUFA/Build/lufa_atprogram.mk b/LUFA/Build/lufa_atprogram.mk index d55b02b76f3..86988d1caea 100644 --- a/LUFA/Build/lufa_atprogram.mk +++ b/LUFA/Build/lufa_atprogram.mk @@ -6,98 +6,5 @@ # www.lufa-lib.org # -LUFA_BUILD_MODULES += ATPROGRAM -LUFA_BUILD_TARGETS += atprogram atprogram-ee -LUFA_BUILD_MANDATORY_VARS += MCU TARGET -LUFA_BUILD_OPTIONAL_VARS += ATPROGRAM_PROGRAMMER ATPROGRAM_INTERFACE ATPROGRAM_PORT -LUFA_BUILD_PROVIDED_VARS += -LUFA_BUILD_PROVIDED_MACROS += - -# ----------------------------------------------------------------------------- -# LUFA ATPROGRAM Programmer Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to re-program a device using the Atmel atprogram -# utility in AVR Studio 5.x and Atmel Studio 6.0 onwards. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# atprogram - Program target FLASH with application using -# atprogram -# atprogram-ee - Program target EEPROM with application data -# using atprogram -# -# MANDATORY PARAMETERS: -# -# MCU - Microcontroller device model name -# TARGET - Application name -# -# OPTIONAL PARAMETERS: -# -# ATPROGRAM_PROGRAMMER - Name of programming hardware to use -# ATPROGRAM_INTERFACE - Name of programming interface to use -# ATPROGRAM_PORT - Name of communication port to use -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -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 -ATPROGRAM_PROGRAMMER ?= atmelice -ATPROGRAM_INTERFACE ?= jtag -ATPROGRAM_PORT ?= - -# Sanity check user supplied values -$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) -$(call ERROR_IF_EMPTY, MCU) -$(call ERROR_IF_EMPTY, TARGET) -$(call ERROR_IF_EMPTY, ATPROGRAM_PROGRAMMER) -$(call ERROR_IF_EMPTY, ATPROGRAM_INTERFACE) - -# Output Messages -MSG_ATPROGRAM_CMD := ' [ATPRGRM] :' - -# Construct base atprogram command flags -BASE_ATPROGRAM_FLAGS := --tool $(ATPROGRAM_PROGRAMMER) --interface $(ATPROGRAM_INTERFACE) --device $(MCU) -ifneq ($(ATPROGRAM_PORT),) - BASE_ATPROGRAM_FLAGS += --port $(ATPROGRAM_PORT) -endif - -# Construct the flags to use for the various memory spaces -ifeq ($(ARCH), AVR8) - ATPROGRAM_FLASH_FLAGS := --chiperase --flash - ATPROGRAM_EEPROM_FLAGS := --eeprom -else ifeq ($(ARCH), XMEGA) - ATPROGRAM_FLASH_FLAGS := --erase --flash - ATPROGRAM_EEPROM_FLAGS := --eeprom -else ifeq ($(ARCH), UC3) - ATPROGRAM_FLASH_FLAGS := --erase - ATPROGRAM_EEPROM_FLAGS := --eeprom -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 $< - -# Phony build targets for this module -.PHONY: atprogram atprogram-ee +DMBS_PATH := $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/atprogram.mk diff --git a/LUFA/Build/lufa_avrdude.mk b/LUFA/Build/lufa_avrdude.mk index 06c87e3d392..649215f5a3c 100644 --- a/LUFA/Build/lufa_avrdude.mk +++ b/LUFA/Build/lufa_avrdude.mk @@ -6,81 +6,5 @@ # www.lufa-lib.org # -LUFA_BUILD_MODULES += AVRDUDE -LUFA_BUILD_TARGETS += avrdude avrdude-ee -LUFA_BUILD_MANDATORY_VARS += MCU TARGET -LUFA_BUILD_OPTIONAL_VARS += AVRDUDE_PROGRAMMER AVRDUDE_PORT AVRDUDE_FLAGS -LUFA_BUILD_PROVIDED_VARS += -LUFA_BUILD_PROVIDED_MACROS += - -# ----------------------------------------------------------------------------- -# LUFA AVRDUDE Programmer Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to re-program a device using the open source -# avr-dude utility. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# avrdude - Program target FLASH with application using -# avrdude -# avrdude-ee - Program target EEPROM with application data -# using avrdude -# -# MANDATORY PARAMETERS: -# -# MCU - Microcontroller device model name -# TARGET - Application name -# -# OPTIONAL PARAMETERS: -# -# AVRDUDE_PROGRAMMER - Name of programming hardware to use -# AVRDUDE_PORT - Name of communication port to use -# AVRDUDE_FLAGS - Flags to pass to avr-dude -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -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 -AVRDUDE_PROGRAMMER ?= jtagicemkii -AVRDUDE_PORT ?= usb -AVRDUDE_FLAGS ?= - -# Sanity check user supplied values -$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) -$(call ERROR_IF_EMPTY, MCU) -$(call ERROR_IF_EMPTY, TARGET) -$(call ERROR_IF_EMPTY, AVRDUDE_PROGRAMMER) -$(call ERROR_IF_EMPTY, AVRDUDE_PORT) - -# Output Messages -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 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 using \"$(AVRDUDE_PROGRAMMER)\" on port \"$(AVRDUDE_PORT)\" - avrdude $(BASE_AVRDUDE_FLAGS) -U eeprom:w:$< $(AVRDUDE_FLAGS) - -# Phony build targets for this module -.PHONY: avrdude avrdude-ee +DMBS_PATH := $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/avrdude.mk diff --git a/LUFA/Build/lufa_build.mk b/LUFA/Build/lufa_build.mk index 9f1125d994e..3c41da000fc 100644 --- a/LUFA/Build/lufa_build.mk +++ b/LUFA/Build/lufa_build.mk @@ -6,346 +6,40 @@ # www.lufa-lib.org # -LUFA_BUILD_MODULES += BUILD -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 COMPILER_PATH -LUFA_BUILD_PROVIDED_VARS += -LUFA_BUILD_PROVIDED_MACROS += - -# ----------------------------------------------------------------------------- -# LUFA GCC Compiler Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to build a C, C++ and/or Assembly application -# via the AVR-GCC compiler. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# size - List built application size -# symbol-sizes - Print application symbols from the binary ELF -# file as a list sorted by size in bytes -# all - Build application and list size -# lib - Build and archive source files into a library -# elf - Build application ELF debug object file -# bin - Build application BIN binary object file -# hex - Build application HEX object file -# lss - Build application LSS assembly listing file -# clean - Remove all project intermediary and binary -# output files -# mostlyclean - Remove intermediary output files, but -# preserve binaries -# .s - Compile C/C++ source file into an assembly file -# for manual code inspection -# -# MANDATORY PARAMETERS: -# -# TARGET - Application name -# ARCH - Device architecture name -# MCU - Microcontroller device model name -# SRC - List of input source files (*.c, *.cpp, *.S) -# F_USB - Speed of the input clock of the USB controller -# in Hz -# LUFA_PATH - Path to the LUFA library core -# -# OPTIONAL PARAMETERS: -# -# BOARD - LUFA board hardware -# OPTIMIZATION - Optimization level -# C_STANDARD - C Language Standard to use -# CPP_STANDARD - C++ Language Standard to use -# F_CPU - Speed of the CPU, in Hz -# C_FLAGS - Flags to pass to the C compiler only -# CPP_FLAGS - Flags to pass to the C++ compiler only -# ASM_FLAGS - Flags to pass to the assembler only -# CC_FLAGS - Common flags to pass to the C/C++ compiler and -# assembler -# LD_FLAGS - Flags to pass to the linker -# LINKER_RELAXATIONS - Enable or disable linker relaxations to -# decrease binary size (note: can cause link -# failures on systems with an unpatched binutils) -# OBJDIR - Directory for the output object and dependency -# files; if equal to ".", the output files will -# be generated in the same folder as the sources -# OBJECT_FILES - Extra object files to link in to the binaries -# DEBUG_FORMAT - Format of the debugging information to -# 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: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - -SHELL = /bin/sh +DMBS_BUILD_MODULES += +DMBS_BUILD_TARGETS += +DMBS_BUILD_MANDATORY_VARS += F_USB +DMBS_BUILD_OPTIONAL_VARS += BOARD +DMBS_BUILD_PROVIDED_VARS += +DMBS_BUILD_PROVIDED_MACROS += ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) 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 ?= -C_STANDARD ?= gnu99 -CPP_STANDARD ?= gnu++98 -C_FLAGS ?= -CPP_FLAGS ?= -ASM_FLAGS ?= -CC_FLAGS ?= -OBJDIR ?= . -OBJECT_FILES ?= -DEBUG_FORMAT ?= dwarf-2 -DEBUG_LEVEL ?= 2 -LINKER_RELAXATIONS ?= Y - # Sanity check user supplied values -$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) -$(call ERROR_IF_EMPTY, MCU) -$(call ERROR_IF_EMPTY, TARGET) $(call ERROR_IF_EMPTY, ARCH) $(call ERROR_IF_EMPTY, F_USB) -$(call ERROR_IF_EMPTY, LUFA_PATH) -$(call ERROR_IF_EMPTY, BOARD) -$(call ERROR_IF_EMPTY, OPTIMIZATION) -$(call ERROR_IF_EMPTY, C_STANDARD) -$(call ERROR_IF_EMPTY, CPP_STANDARD) -$(call ERROR_IF_EMPTY, OBJDIR) -$(call ERROR_IF_EMPTY, DEBUG_FORMAT) -$(call ERROR_IF_EMPTY, DEBUG_LEVEL) -$(call ERROR_IF_NONBOOL, LINKER_RELAXATIONS) + +# Default values of optionally user-supplied variables +BOARD ?= NONE # Determine the utility prefix to use for the selected architecture -ifeq ($(ARCH), AVR8) - CROSS := $(COMPILER_PATH)avr -else ifeq ($(ARCH), XMEGA) - CROSS := $(COMPILER_PATH)avr +ifeq ($(ARCH), XMEGA) $(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 := $(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)") endif -# Output Messages -MSG_INFO_MESSAGE := ' [INFO] :' -MSG_COMPILE_CMD := ' [GCC] :' -MSG_ASSEMBLE_CMD := ' [GAS] :' -MSG_NM_CMD := ' [NM] :' -MSG_REMOVE_CMD := ' [RM] :' -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)) - -# 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)) -ifneq ($(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 += $(addsuffix .o, $(basename $(SRC))) - -# Check if an output object file directory was specified instead of the input file location -ifneq ($(OBJDIR),.) - # Prefix all the object filenames with the output object file directory path - OBJECT_FILES := $(addprefix $(patsubst %/,%,$(OBJDIR))/, $(notdir $(OBJECT_FILES))) - - # Check if any object file (without path) appears more than once in the object file list - ifneq ($(words $(sort $(OBJECT_FILES))), $(words $(OBJECT_FILES))) - $(error Cannot build with OBJDIR parameter set - one or more object file name is not unique) - endif - - # Create the output object file directory if it does not exist and add it to the virtual path list - $(shell mkdir $(OBJDIR) 2> /dev/null) - VPATH += $(dir $(SRC)) -endif - -# 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 -g$(DEBUG_FORMAT) -g$(DEBUG_LEVEL) -ifeq ($(ARCH), AVR8) - BASE_CC_FLAGS += -mmcu=$(MCU) -fshort-enums -fno-inline-small-functions -fpack-struct -else ifeq ($(ARCH), XMEGA) - BASE_CC_FLAGS += -mmcu=$(MCU) -fshort-enums -fno-inline-small-functions -fpack-struct -else ifeq ($(ARCH), UC3) - BASE_CC_FLAGS += -mpart=$(MCU:at32%=%) -masm-addr-pseudos -endif -BASE_CC_FLAGS += -Wall -fno-strict-aliasing -funsigned-char -funsigned-bitfields -ffunction-sections -BASE_CC_FLAGS += -I. -I$(patsubst %/,%,$(LUFA_PATH))/.. -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 +# LUFA specific standard build options +C_FLAGS += -I. -I$(patsubst %/,%,$(LUFA_PATH))/.. +C_FLAGS += -DARCH=ARCH_$(ARCH) -DBOARD=BOARD_$(BOARD) -DF_USB=$(F_USB)UL # 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 +C_FLAGS += -fno-jump-tables -# Additional language specific compiler flags -BASE_C_FLAGS := -x c -O$(OPTIMIZATION) -std=$(C_STANDARD) -Wstrict-prototypes -BASE_CPP_FLAGS := -x c++ -O$(OPTIMIZATION) -std=$(CPP_STANDARD) -BASE_ASM_FLAGS := -x assembler-with-cpp - -# Create a list of flags to pass to the linker -BASE_LD_FLAGS := -lm -Wl,-Map=$(TARGET).map,--cref -Wl,--gc-sections -ifeq ($(LINKER_RELAXATIONS), Y) - BASE_LD_FLAGS += -Wl,--relax -endif -ifeq ($(ARCH), AVR8) - BASE_LD_FLAGS += -mmcu=$(MCU) -else ifeq ($(ARCH), XMEGA) - BASE_LD_FLAGS += -mmcu=$(MCU) -else ifeq ($(ARCH), UC3) - BASE_LD_FLAGS += -mpart=$(MCU:at32%=%) --rodata-writable --direct-data -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)\". - -# 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) $< - -# 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 intermediary 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).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 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 - -# 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 $^ -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 -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 - @echo $(MSG_OBJDMP_CMD) Extracting LSS file data from \"$<\" - $(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 $< > $@ - -# Include build dependency files --include $(DEPENDENCY_FILES) - -# Phony build targets for this module -.PHONY: build_begin build_end size symbol-sizes lib elf hex lss clean mostlyclean +DMBS_PATH := $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/gcc.mk diff --git a/LUFA/Build/lufa_core.mk b/LUFA/Build/lufa_core.mk index 3067845e789..62cef9046aa 100644 --- a/LUFA/Build/lufa_core.mk +++ b/LUFA/Build/lufa_core.mk @@ -6,170 +6,5 @@ # www.lufa-lib.org # -LUFA_BUILD_MODULES += CORE -LUFA_BUILD_TARGETS += help list_targets list_modules list_mandatory list_optional list_provided list_macros -LUFA_BUILD_MANDATORY_VARS += -LUFA_BUILD_OPTIONAL_VARS += -LUFA_BUILD_PROVIDED_VARS += -LUFA_BUILD_PROVIDED_MACROS += - -# ----------------------------------------------------------------------------- -# LUFA Core Build System Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of core build targets for the LUFA build system -# ----------------------------------------------------------------------------- -# TARGETS: -# -# help - Build system help -# list_targets - List all build targets -# list_modules - List all build modules -# list_mandatory - List all mandatory make variables required by -# the included build modules of the application -# list_optional - List all optional make variables required by -# the included build modules of the application -# list_provided - List all provided make variables from the -# included build modules of the application -# list_macros - List all provided make macros from the -# included build modules of the application -# -# MANDATORY PARAMETERS: -# -# (None) -# -# OPTIONAL PARAMETERS: -# -# (None) -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - -SHELL = /bin/sh - -# Converts a given input to a printable output using "(None)" if no items are in the list -CONVERT_TO_PRINTABLE = $(if $(strip $(1)), $(1), (None)) - - -# Build sorted and filtered lists of the included build module data -SORTED_LUFA_BUILD_MODULES = $(sort $(LUFA_BUILD_MODULES)) -SORTED_LUFA_BUILD_TARGETS = $(sort $(LUFA_BUILD_TARGETS)) -SORTED_LUFA_MANDATORY_VARS = $(sort $(LUFA_BUILD_MANDATORY_VARS)) -SORTED_LUFA_OPTIONAL_VARS = $(filter-out $(SORTED_LUFA_MANDATORY_VARS), $(sort $(LUFA_BUILD_OPTIONAL_VARS))) -SORTED_LUFA_PROVIDED_VARS = $(sort $(LUFA_BUILD_PROVIDED_VARS)) -SORTED_LUFA_PROVIDED_MACROS = $(sort $(LUFA_BUILD_PROVIDED_MACROS)) - -# Create printable versions of the sorted build module data (use "(None)" when no data is available) -PRINTABLE_LUFA_BUILD_MODULES = $(call CONVERT_TO_PRINTABLE, $(SORTED_LUFA_BUILD_MODULES)) -PRINTABLE_LUFA_BUILD_TARGETS = $(call CONVERT_TO_PRINTABLE, $(SORTED_LUFA_BUILD_TARGETS)) -PRINTABLE_LUFA_MANDATORY_VARS = $(call CONVERT_TO_PRINTABLE, $(SORTED_LUFA_MANDATORY_VARS)) -PRINTABLE_LUFA_OPTIONAL_VARS = $(call CONVERT_TO_PRINTABLE, $(SORTED_LUFA_OPTIONAL_VARS)) -PRINTABLE_LUFA_PROVIDED_VARS = $(call CONVERT_TO_PRINTABLE, $(SORTED_LUFA_PROVIDED_VARS)) -PRINTABLE_LUFA_PROVIDED_MACROS = $(call CONVERT_TO_PRINTABLE, $(SORTED_LUFA_PROVIDED_MACROS)) - -help: - @echo "===================================================================" - @echo " LUFA Build System 2.0 " - @echo " (C) Dean Camera, 2015 { dean @ fourwalledcubicle . com } " - @echo "===================================================================" - @echo "DESCRIPTION: " - @echo " This build system is a set of makefile modules for (GNU) Make, to " - @echo " provide a simple system for building LUFA powered applications. " - @echo " Each makefile module can be included from within a user makefile, " - @echo " to expose the build rules documented in the comments at the top of" - @echo " each build module. " - @echo " " - @echo "USAGE: " - @echo " To execute a rule, define all variables indicated in the desired " - @echo " module as a required parameter before including the build module " - @echo " in your project makefile. Parameters marked as optional will " - @echo " assume a default value in the modules if not user-assigned. " - @echo " " - @echo " By default the target output shows both a friendly summary, as " - @echo " well as the actual invoked command. To suppress the output of the " - @echo " invoked commands and show only the friendly command output, run " - @echo " make with the \"-s\" switch added before the target(s). " - @echo " " - @echo "SEE ALSO: " - @echo " For more information, see the 'Build System' chapter of the LUFA " - @echo " project documentation. " - @echo "===================================================================" - @echo " " - @echo " Currently used build system modules in this application: " - @echo " " - @printf " %b" "$(PRINTABLE_LUFA_BUILD_MODULES:%= - %\n)" - @echo " " - @echo " " - @echo " Currently available build targets in this application: " - @echo " " - @printf " %b" "$(PRINTABLE_LUFA_BUILD_TARGETS:%= - %\n)" - @echo " " - @echo " " - @echo " Mandatory variables required by the selected build Modules: " - @echo " " - @printf " %b" "$(PRINTABLE_LUFA_MANDATORY_VARS:%= - %\n)" - @echo " " - @echo " " - @echo " Optional variables required by the selected build Modules: " - @echo " " - @printf " %b" "$(PRINTABLE_LUFA_OPTIONAL_VARS:%= - %\n)" - @echo " " - @echo " " - @echo " Variables provided by the selected build Modules: " - @echo " " - @printf " %b" "$(PRINTABLE_LUFA_PROVIDED_VARS:%= - %\n)" - @echo " " - @echo " " - @echo " Macros provided by the selected build Modules: " - @echo " " - @printf " %b" "$(PRINTABLE_LUFA_PROVIDED_MACROS:%= - %\n)" - @echo " " - @echo "===================================================================" - @echo " The LUFA BuildSystem 2.0 - Powered By Positive Thinking (tm) " - @echo "===================================================================" - -# Lists build modules included by the project makefile, in alphabetical order -list_modules: - @echo Currently Used Build System Modules: - @printf " %b" "$(PRINTABLE_LUFA_BUILD_MODULES:%= - %\n)" - -# Lists build targets included by the project makefile, in alphabetical order -list_targets: - @echo Currently Available Build Targets: - @printf " %b" "$(PRINTABLE_LUFA_BUILD_TARGETS:%= - %\n)" - -# Lists mandatory variables that must be set by the project makefile, in alphabetical order -list_mandatory: - @echo Mandatory Variables for Included Modules: - @printf " %b" "$(PRINTABLE_LUFA_MANDATORY_VARS:%= - %\n)" - -# Lists optional variables that must be set by the project makefile, in alphabetical order -list_optional: - @echo Optional Variables for Included Modules: - @printf " %b" "$(PRINTABLE_LUFA_OPTIONAL_VARS:%= - %\n)" - -# Lists variables provided by the included build modules, in alphabetical order -list_provided: - @echo Variables Provided by the Included Modules: - @printf " %b" "$(PRINTABLE_LUFA_PROVIDED_VARS:%= - %\n)" - -# Lists macros provided by the included build modules, in alphabetical order -list_macros: - @echo Macros Provided by the Included Modules: - @printf " %b" "$(PRINTABLE_LUFA_PROVIDED_MACROS:%= - %\n)" - -# Disable default in-built make rules (those that are needed are explicitly -# defined, and doing so has performance benefits when recursively building) -ifeq ($(filter -r,$(MAKEFLAGS)),) - MAKEFLAGS += -r -endif -.SUFFIXES: - -# Phony build targets for this module -.PHONY: help list_modules list_targets list_mandatory list_optional list_provided list_macros +DMBS_PATH := $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk diff --git a/LUFA/Build/lufa_cppcheck.mk b/LUFA/Build/lufa_cppcheck.mk index b96232338f2..801a4c15c56 100644 --- a/LUFA/Build/lufa_cppcheck.mk +++ b/LUFA/Build/lufa_cppcheck.mk @@ -6,102 +6,5 @@ # www.lufa-lib.org # -LUFA_BUILD_MODULES += CPPCHECK -LUFA_BUILD_TARGETS += cppcheck cppcheck-config -LUFA_BUILD_MANDATORY_VARS += SRC -LUFA_BUILD_OPTIONAL_VARS += CPPCHECK_INCLUDES CPPCHECK_EXCLUDES CPPCHECK_MSG_TEMPLATE CPPCHECK_ENABLE \ - CPPCHECK_SUPPRESS CPPCHECK_FAIL_ON_WARNING CPPCHECK_QUIET CPPCHECK_FLAGS -LUFA_BUILD_PROVIDED_VARS += -LUFA_BUILD_PROVIDED_MACROS += - -# ----------------------------------------------------------------------------- -# LUFA CPPCheck Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to scan a project with the free "cppcheck" static -# analysis tool, to check for code errors at runtime -# (see http://cppcheck.sourceforge.net). -# ----------------------------------------------------------------------------- -# TARGETS: -# -# cppcheck - Scan the project with CPPCheck -# cppcheck-config - Use CPPCheck to look for missing include files -# -# MANDATORY PARAMETERS: -# -# SRC - List of source files to statically analyze -# -# OPTIONAL PARAMETERS: -# -# CPPCHECK_INCLUDES - Extra include paths to search for missing -# header files -# CPPCHECK_EXCLUDES - Source file paths to exclude checking (can be -# a path fragment if desired) -# CPPCHECK_MSG_TEMPLATE - Template for cppcheck error and warning output -# CPPCHECK_ENABLE - General cppcheck category checks to enable -# CPPCHECK_SUPPRESS - Specific cppcheck warnings to disable by ID -# CPPCHECK_FAIL_ON_WARNING - Set to Y to fail the build on cppcheck -# warnings, N to continue even if warnings occur -# CPPCHECK_QUIET - Enable cppcheck verbose or quiet output mode -# CPPCHECK_FLAGS - Additional flags to pass to cppcheck -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -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 -CPPCHECK_INCLUDES ?= -CPPCHECK_EXCLUDES ?= -CPPCHECK_MSG_TEMPLATE ?= {file}:{line}: {severity} ({id}): {message} -CPPCHECK_ENABLE ?= all -CPPCHECK_SUPPRESS ?= variableScope missingInclude -CPPCHECK_FAIL_ON_WARNING ?= Y -CPPCHECK_QUIET ?= Y -CPPCHECK_FLAGS ?= - -# Sanity check user supplied values -$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) -$(call ERROR_IF_EMPTY, SRC) -$(call ERROR_IF_EMPTY, CPPCHECK_MSG_TEMPLATE) -$(call ERROR_IF_EMPTY, CPPCHECK_ENABLE) -$(call ERROR_IF_NONBOOL, CPPCHECK_FAIL_ON_WARNING) -$(call ERROR_IF_NONBOOL, CPPCHECK_QUIET) - -# Build a default argument list for cppcheck -BASE_CPPCHECK_FLAGS := --template="$(CPPCHECK_MSG_TEMPLATE)" $(CPPCHECK_INCLUDES:%=-I%) $(CPPCHECK_EXCLUDES:%=-i%) --inline-suppr --force --std=c99 - -# Sanity check parameters and construct additional command line arguments to cppcheck -ifeq ($(CPPCHECK_FAIL_ON_WARNING), Y) - BASE_CPPCHECK_FLAGS += --error-exitcode=1 -endif -ifeq ($(CPPCHECK_QUIET), Y) - BASE_CPPCHECK_FLAGS += --quiet -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: $(MAKEFILE_LIST) - @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: $(MAKEFILE_LIST) - @echo $(MSG_CPPCHECK_CMD) Performing static analysis on source files - cppcheck $(BASE_CPPCHECK_FLAGS) --enable=$(CPPCHECK_ENABLE) $(CPPCHECK_SUPPRESS:%=--suppress=%) $(CPPCHECK_FLAGS) $(SRC) - -# Phony build targets for this module -.PHONY: cppcheck-config cppcheck +DMBS_PATH := $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/cppcheck.mk diff --git a/LUFA/Build/lufa_dfu.mk b/LUFA/Build/lufa_dfu.mk index b19df057ec6..2100ae8f786 100644 --- a/LUFA/Build/lufa_dfu.mk +++ b/LUFA/Build/lufa_dfu.mk @@ -6,90 +6,5 @@ # www.lufa-lib.org # -LUFA_BUILD_MODULES += DFU -LUFA_BUILD_TARGETS += flip flip-ee dfu dfu-ee -LUFA_BUILD_MANDATORY_VARS += MCU TARGET -LUFA_BUILD_OPTIONAL_VARS += -LUFA_BUILD_PROVIDED_VARS += -LUFA_BUILD_PROVIDED_MACROS += - -# ----------------------------------------------------------------------------- -# LUFA DFU Bootloader Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to re-program a device currently running a DFU -# class bootloader with a project's FLASH and EEPROM files. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# flip - Program FLASH into target via Atmel FLIP -# flip-ee - Program EEPROM into target via Atmel FLIP -# dfu - Program FLASH into target via dfu-programmer -# dfu-ee - Program EEPROM into target via dfu-programmer -# -# MANDATORY PARAMETERS: -# -# MCU - Microcontroller device model name -# TARGET - Application name -# -# OPTIONAL PARAMETERS: -# -# (None) -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) - -# Sanity-check values of mandatory user-supplied variables -$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) -$(call ERROR_IF_EMPTY, MCU) -$(call ERROR_IF_EMPTY, TARGET) - -# Output Messages -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 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_COPY_CMD) Copying EEP file to temporary file \"$<.hex\" - cp $< $<.hex - @echo $(MSG_DFU_CMD) Programming EEPROM with batchisp using \"$<.hex\" - batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $<.hex program - batchisp -hardware usb -device $(MCU) -operation start reset 0 - @echo $(MSG_REMOVE_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) flash --eeprom $< - dfu-programmer $(MCU) reset - -# Phony build targets for this module -.PHONY: flip flip-ee dfu dfu-ee +DMBS_PATH := $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/dfu.mk diff --git a/LUFA/Build/lufa_doxygen.mk b/LUFA/Build/lufa_doxygen.mk index c2c516f924e..64afd4a5ac8 100644 --- a/LUFA/Build/lufa_doxygen.mk +++ b/LUFA/Build/lufa_doxygen.mk @@ -6,95 +6,5 @@ # www.lufa-lib.org # -LUFA_BUILD_MODULES += DOXYGEN -LUFA_BUILD_TARGETS += doxygen doxygen_upgrade doxygen_create -LUFA_BUILD_MANDATORY_VARS += LUFA_PATH -LUFA_BUILD_OPTIONAL_VARS += DOXYGEN_CONF DOXYGEN_FAIL_ON_WARNING DOXYGEN_OVERRIDE_PARAMS -LUFA_BUILD_PROVIDED_VARS += -LUFA_BUILD_PROVIDED_MACROS += - -# ----------------------------------------------------------------------------- -# LUFA Doxygen Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to automatically build Doxygen documentation for -# a project (see www.doxygen.org). -# ----------------------------------------------------------------------------- -# TARGETS: -# -# doxygen - Build Doxygen Documentation -# doxygen_create - Create a new Doxygen configuration file using -# the latest template -# doxygen_upgrade - Upgrade an existing Doxygen configuration file -# to the latest template -# -# MANDATORY PARAMETERS: -# -# LUFA_PATH - Path to the LUFA library core -# -# OPTIONAL PARAMETERS: -# -# DOXYGEN_CONF - Doxygen configuration filename -# DOXYGEN_FAIL_ON_WARNING - Set to Y to fail the build on Doxygen warnings, -# N to continue even if warnings occur -# DOXYGEN_OVERRIDE_PARAMS - Parameters to override in the doxygen -# configuration file -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -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 -DOXYGEN_CONF ?= doxyfile -DOXYGEN_FAIL_ON_WARNING ?= Y -DOXYGEN_OVERRIDE_PARAMS ?= QUIET=YES HTML_EXTRA_STYLESHEET=$(patsubst %/,%,$(LUFA_PATH))/DoxygenPages/Style/Style.css - -# Sanity check user supplied values -$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) -$(call ERROR_IF_EMPTY, DOXYGEN_CONF) -$(call ERROR_IF_EMPTY, LUFA_PATH) -$(call ERROR_IF_NONBOOL, DOXYGEN_FAIL_ON_WARNING) - -# Output Messages -MSG_DOXYGEN_CMD := ' [DOXYGEN] :' - -# Determine Doxygen invocation command -BASE_DOXYGEN_CMD := ( cat $(DOXYGEN_CONF) $(DOXYGEN_OVERRIDE_PARAMS:%=; echo "%") ) | doxygen - -ifeq ($(DOXYGEN_FAIL_ON_WARNING), Y) - DOXYGEN_CMD := if ( $(BASE_DOXYGEN_CMD) 2>&1 | grep -v -e "[Ww]arning:\|recompile doxygen" ;); then exit 1; fi; -else - DOXYGEN_CMD := $(BASE_DOXYGEN_CMD) -endif - -# Error if the specified Doxygen configuration file does not exist -$(DOXYGEN_CONF): - $(error Doxygen configuration file $@ does not exist) - -# Builds the project documentation using the specified configuration file and the DOXYGEN tool -doxygen: $(DOXYGEN_CONF) $(MAKEFILE_LIST) - @echo $(MSG_DOXYGEN_CMD) Configuration file \"$(DOXYGEN_CONF)\" with parameters \"$(DOXYGEN_OVERRIDE_PARAMS)\" - $(DOXYGEN_CMD) - -# Upgrades an existing Doxygen configuration file to the latest Doxygen template, preserving settings -doxygen_upgrade: $(DOXYGEN_CONF) $(MAKEFILE_LIST) - @echo $(MSG_DOXYGEN_CMD) Upgrading configuration file \"$(DOXYGEN_CONF)\" with latest template - doxygen -u $(DOXYGEN_CONF) > /dev/null - -# Creates a new Doxygen configuration file with the set file name -doxygen_create: $(MAKEFILE_LIST) - @echo $(MSG_DOXYGEN_CMD) Creating new configuration file \"$(DOXYGEN_CONF)\" with latest template - doxygen -g $(DOXYGEN_CONF) > /dev/null - -# Phony build targets for this module -.PHONY: doxygen doxygen_upgrade doxygen_create +DMBS_PATH := $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/doxygen.mk diff --git a/LUFA/Build/lufa_hid.mk b/LUFA/Build/lufa_hid.mk index 32a32a83cc6..86ca145bfaa 100644 --- a/LUFA/Build/lufa_hid.mk +++ b/LUFA/Build/lufa_hid.mk @@ -6,91 +6,5 @@ # www.lufa-lib.org # -LUFA_BUILD_MODULES += HID -LUFA_BUILD_TARGETS += hid hid-ee teensy teensy-ee -LUFA_BUILD_MANDATORY_VARS += MCU TARGET -LUFA_BUILD_OPTIONAL_VARS += -LUFA_BUILD_PROVIDED_VARS += -LUFA_BUILD_PROVIDED_MACROS += - -# ----------------------------------------------------------------------------- -# LUFA HID Bootloader Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to re-program a device currently running a HID -# class bootloader with a project's FLASH files. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# hid - Program FLASH into target via -# hid_bootloader_cli -# hid-ee - Program EEPROM into target via a temporary -# AVR application and hid_bootloader_cli -# teensy - Program FLASH into target via -# teensy_loader_cli -# teensy-ee - Program EEPROM into target via a temporary -# AVR application and teensy_loader_cli -# -# MANDATORY PARAMETERS: -# -# MCU - Microcontroller device model name -# TARGET - Application name -# -# OPTIONAL PARAMETERS: -# -# (None) -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - -SHELL = /bin/sh - -LUFA_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) - -# Sanity-check values of mandatory user-supplied variables -$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) -$(call ERROR_IF_EMPTY, MCU) -$(call ERROR_IF_EMPTY, TARGET) - -# Output Messages -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 $< $(LUFA_MODULE_PATH)/HID_EEPROM_Loader/InputEEData.bin - @echo $(MSG_MAKE_CMD) Making EEPROM loader application for \"$<\" - $(MAKE) -C $(LUFA_MODULE_PATH)/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 $< $(LUFA_MODULE_PATH)/HID_EEPROM_Loader/InputEEData.bin - @echo $(MSG_MAKE_CMD) Making EEPROM loader application for \"$<\" - $(MAKE) -s -C $(LUFA_MODULE_PATH)/HID_EEPROM_Loader/ MCU=$(MCU) clean teensy - -# Phony build targets for this module -.PHONY: hid hid-ee teensy teensy-ee +DMBS_PATH := $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/hid.mk diff --git a/LUFA/Build/lufa_sources.mk b/LUFA/Build/lufa_sources.mk index 73a8f7fe11c..ad1a47711ee 100644 --- a/LUFA/Build/lufa_sources.mk +++ b/LUFA/Build/lufa_sources.mk @@ -6,11 +6,11 @@ # www.lufa-lib.org # -LUFA_BUILD_MODULES += SOURCES -LUFA_BUILD_TARGETS += -LUFA_BUILD_MANDATORY_VARS += LUFA_PATH ARCH -LUFA_BUILD_OPTIONAL_VARS += -LUFA_BUILD_PROVIDED_VARS += LUFA_SRC_USB_DEVICE LUFA_SRC_USB_HOST \ +DMBS_BUILD_MODULES += LUFA_SOURCES +DMBS_BUILD_TARGETS += +DMBS_BUILD_MANDATORY_VARS += LUFA_PATH ARCH +DMBS_BUILD_OPTIONAL_VARS += +DMBS_BUILD_PROVIDED_VARS += LUFA_SRC_USB_DEVICE LUFA_SRC_USB_HOST \ LUFA_SRC_USB LUFA_SRC_USBCLASS_DEVICE \ LUFA_SRC_USBCLASS_HOST LUFA_SRC_USBCLASS \ LUFA_SRC_TEMPERATURE LUFA_SRC_SERIAL \ From b590350df0cb857bca8efdbd1be9c8532008aa54 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 22 Dec 2015 21:17:19 +1100 Subject: [PATCH 02/11] Clean up core build system DMBS subclass module. --- LUFA/Build/lufa_build.mk | 37 +++++++++++++++++++++- LUFA/Build/lufa_sources.mk | 2 +- LUFA/DoxygenPages/BuildSystem.txt | 21 +++++++++--- LUFA/DoxygenPages/MigrationInformation.txt | 2 +- 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/LUFA/Build/lufa_build.mk b/LUFA/Build/lufa_build.mk index 3c41da000fc..1aae2a38890 100644 --- a/LUFA/Build/lufa_build.mk +++ b/LUFA/Build/lufa_build.mk @@ -8,16 +8,51 @@ DMBS_BUILD_MODULES += DMBS_BUILD_TARGETS += -DMBS_BUILD_MANDATORY_VARS += F_USB +DMBS_BUILD_MANDATORY_VARS += LUFA_PATH ARCH F_USB DMBS_BUILD_OPTIONAL_VARS += BOARD DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += +# ----------------------------------------------------------------------------- +# LUFA Core Build Buildsystem Makefile Module. +# ----------------------------------------------------------------------------- +# DESCRIPTION: +# Subclass of the standard DMBS GCC build module, with LUFA specific +# extensions. This module provides the core build rules for the compilation +# of LUFA projects using GCC. +# ----------------------------------------------------------------------------- +# TARGETS: +# +# (None) +# +# MANDATORY PARAMETERS: +# +# LUFA_PATH - Path to the LUFA library core +# ARCH - Device architecture name +# F_USB - Speed of the USB core clock, in Hz +# +# OPTIONAL PARAMETERS: +# +# BOARD - LUFA board drivers to use +# +# PROVIDED VARIABLES: +# +# (None) +# +# PROVIDED MACROS: +# +# (None) +# +# ----------------------------------------------------------------------------- + +SHELL = /bin/sh + ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) # Sanity check user supplied values +$(call ERROR_IF_EMPTY, LUFA_PATH) $(call ERROR_IF_EMPTY, ARCH) $(call ERROR_IF_EMPTY, F_USB) diff --git a/LUFA/Build/lufa_sources.mk b/LUFA/Build/lufa_sources.mk index ad1a47711ee..0764d30f1af 100644 --- a/LUFA/Build/lufa_sources.mk +++ b/LUFA/Build/lufa_sources.mk @@ -15,7 +15,7 @@ DMBS_BUILD_PROVIDED_VARS += LUFA_SRC_USB_DEVICE LUFA_SRC_USB_HOST \ LUFA_SRC_USBCLASS_HOST LUFA_SRC_USBCLASS \ LUFA_SRC_TEMPERATURE LUFA_SRC_SERIAL \ LUFA_SRC_TWI LUFA_SRC_PLATFORM -LUFA_BUILD_PROVIDED_MACROS += +DMBS_BUILD_PROVIDED_MACROS += # ----------------------------------------------------------------------------- # LUFA Sources Buildsystem Makefile Module. diff --git a/LUFA/DoxygenPages/BuildSystem.txt b/LUFA/DoxygenPages/BuildSystem.txt index 7ddfa1be3f8..2c8d0c745ce 100644 --- a/LUFA/DoxygenPages/BuildSystem.txt +++ b/LUFA/DoxygenPages/BuildSystem.txt @@ -7,10 +7,23 @@ /** \page Page_BuildSystem The LUFA Build System * * \section Sec_BuildSystem_Overview Overview of the LUFA Build System - * The LUFA build system is an attempt at making a set of re-usable, modular build make files which - * can be referenced in a LUFA powered project, to minimize the amount of code required in an - * application makefile. The system is written in GNU Make, and each module is independent of - * one-another. + * The LUFA build system was originally an attempt at making a set of + * re-usable, modular build make files which could be referenced in a LUFA + * powered project, to minimize the amount of code required in an + * application makefile. + * + * As it turned out to be fairly generic in nature, it was split out into its + * own separate project, called DMBS (Dean's Makefile Build System) + * which is released into the public domain. LUFA specific portions of the + * LUFA build system extend DMBS, and provide a universal build system for all + * LUFA projects. + * + * The latest DMBS project information can be found at: + * https://github.com/abcminiuser/dmbs + * + * DMBS is written in GNU Make, and each module is independent of one-another. + * + * \section SSec_BuildSystem_Using Using the LUFA Build System * * For details on the prerequisites needed for Linux and Windows machines to be able to use the LUFA * build system, see \ref Sec_CompilingApps_Prerequisites. diff --git a/LUFA/DoxygenPages/MigrationInformation.txt b/LUFA/DoxygenPages/MigrationInformation.txt index b98bfc1700f..b9ed3a33537 100644 --- a/LUFA/DoxygenPages/MigrationInformation.txt +++ b/LUFA/DoxygenPages/MigrationInformation.txt @@ -17,7 +17,7 @@ * \section Sec_Migration151115 Migrating from 140928 to 151115 * Non-USB Library Components * - The ATPROGRAM LUFA build system module now defaults to the Atmel ICE debugger tool, instead of the Atmel JTAG ICE3. - * - The \x Serial_CreateStream() and \c Serial_CreateBlockingStream() functions now require a USART base pointer for XMEGA devices as the first parameter. + * - The \c Serial_CreateStream() and \c Serial_CreateBlockingStream() functions now require a USART base pointer for XMEGA devices as the first parameter. * * \section Sec_Migration140928 Migrating from 140302 to 140928 * Device Mode From 09b6c80555bc17b1206ee688ccdfc76454b2dbd7 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 22 Dec 2015 21:22:11 +1100 Subject: [PATCH 03/11] Add DMBS; don't Submodule so that people can download complete ZIP/TAR archives. --- LUFA/Build/DMBS | 1 - .../HID_EEPROM_Loader/HID_EEPROM_Loader.c | 39 +++ .../DMBS/DMBS/HID_EEPROM_Loader/makefile | 35 ++ LUFA/Build/DMBS/DMBS/License.txt | 32 ++ LUFA/Build/DMBS/DMBS/atprogram.mk | 103 ++++++ LUFA/Build/DMBS/DMBS/avrdude.mk | 86 +++++ LUFA/Build/DMBS/DMBS/core.mk | 180 ++++++++++ LUFA/Build/DMBS/DMBS/cppcheck.mk | 107 ++++++ LUFA/Build/DMBS/DMBS/dfu.mk | 95 +++++ LUFA/Build/DMBS/DMBS/doxygen.mk | 99 ++++++ LUFA/Build/DMBS/DMBS/gcc.mk | 331 ++++++++++++++++++ LUFA/Build/DMBS/DMBS/hid.mk | 96 +++++ LUFA/Build/DMBS/Readme.md | 105 ++++++ LUFA/Build/DMBS/Template/Template.c | 12 + LUFA/Build/DMBS/Template/makefile | 32 ++ 15 files changed, 1352 insertions(+), 1 deletion(-) delete mode 160000 LUFA/Build/DMBS create mode 100644 LUFA/Build/DMBS/DMBS/HID_EEPROM_Loader/HID_EEPROM_Loader.c create mode 100644 LUFA/Build/DMBS/DMBS/HID_EEPROM_Loader/makefile create mode 100644 LUFA/Build/DMBS/DMBS/License.txt create mode 100644 LUFA/Build/DMBS/DMBS/atprogram.mk create mode 100644 LUFA/Build/DMBS/DMBS/avrdude.mk create mode 100644 LUFA/Build/DMBS/DMBS/core.mk create mode 100644 LUFA/Build/DMBS/DMBS/cppcheck.mk create mode 100644 LUFA/Build/DMBS/DMBS/dfu.mk create mode 100644 LUFA/Build/DMBS/DMBS/doxygen.mk create mode 100644 LUFA/Build/DMBS/DMBS/gcc.mk create mode 100644 LUFA/Build/DMBS/DMBS/hid.mk create mode 100644 LUFA/Build/DMBS/Readme.md create mode 100644 LUFA/Build/DMBS/Template/Template.c create mode 100644 LUFA/Build/DMBS/Template/makefile diff --git a/LUFA/Build/DMBS b/LUFA/Build/DMBS deleted file mode 160000 index 7dfe3cf63ab..00000000000 --- a/LUFA/Build/DMBS +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7dfe3cf63ab428690112b79ce5d5261945a9118c diff --git a/LUFA/Build/DMBS/DMBS/HID_EEPROM_Loader/HID_EEPROM_Loader.c b/LUFA/Build/DMBS/DMBS/HID_EEPROM_Loader/HID_EEPROM_Loader.c new file mode 100644 index 00000000000..35ea2d79b76 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/HID_EEPROM_Loader/HID_EEPROM_Loader.c @@ -0,0 +1,39 @@ +/* + DMBS Build System + Released into the public domain. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com + */ + +/** \file + * + * Special application to extract an EEPROM image stored in FLASH memory, and + * copy it to the device EEPROM. This application is designed to be used with + * the HID build system module of DMBS to program the EEPROM of a target device + * that uses the HID bootloader protocol, which does not have native EEPROM + * programming support. + */ + +#include +#include +#include + +/* References to the binary EEPROM data linked in the AVR's FLASH memory space */ +extern const char _binary_InputEEData_bin_start[]; +extern const char _binary_InputEEData_bin_end[]; +extern const char _binary_InputEEData_bin_size[]; + +/* Friendly names for the embedded binary data stored in FLASH memory space */ +#define InputEEData _binary_InputEEData_bin_start +#define InputEEData_size ((int)_binary_InputEEData_bin_size) + +int main(void) +{ + /* Copy out the embedded EEPROM data from FLASH to EEPROM memory space */ + for (uint16_t i = 0; i < InputEEData_size; i++) + eeprom_update_byte((uint8_t*)i, pgm_read_byte(&InputEEData[i])); + + /* Infinite loop once complete */ + for (;;); +} diff --git a/LUFA/Build/DMBS/DMBS/HID_EEPROM_Loader/makefile b/LUFA/Build/DMBS/DMBS/HID_EEPROM_Loader/makefile new file mode 100644 index 00000000000..879eda8cf23 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/HID_EEPROM_Loader/makefile @@ -0,0 +1,35 @@ +# +# DMBS Build System +# Released into the public domain. +# +# dean [at] fourwalledcubicle [dot] com +# www.fourwalledcubicle.com +# + +# Run "make help" for target help. + +MCU = atmega128 +ARCH = AVR8 +F_CPU = 1000000 +OPTIMIZATION = s +TARGET = HID_EEPROM_Loader +SRC = $(TARGET).c +CC_FLAGS = +LD_FLAGS = +OBJECT_FILES = InputEEData.o + +# Default target +all: + +# Determine the AVR sub-architecture of the build main application object file +FIND_AVR_SUBARCH = avr$(shell avr-objdump -f $(TARGET).o | grep architecture | cut -d':' -f3 | cut -d',' -f1) + +# Create a linkable object file with the input binary EEPROM data stored in the FLASH section +InputEEData.o: InputEEData.bin $(TARGET).o $(MAKEFILE_LIST) + @echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a object file \"$@\" + avr-objcopy -I binary -O elf32-avr -B $(call FIND_AVR_SUBARCH) --rename-section .data=.progmem.data,contents,alloc,readonly,data $< $@ + +# Include LUFA build script makefiles +include ../core.mk +include ../gcc.mk +include ../hid.mk diff --git a/LUFA/Build/DMBS/DMBS/License.txt b/LUFA/Build/DMBS/DMBS/License.txt new file mode 100644 index 00000000000..322c7624e54 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/License.txt @@ -0,0 +1,32 @@ + DMBS Build System + Released into the public domain. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com + + + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/LUFA/Build/DMBS/DMBS/atprogram.mk b/LUFA/Build/DMBS/DMBS/atprogram.mk new file mode 100644 index 00000000000..de801b0031f --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/atprogram.mk @@ -0,0 +1,103 @@ +# +# DMBS Build System +# Released into the public domain. +# +# dean [at] fourwalledcubicle [dot] com +# www.fourwalledcubicle.com +# + +DMBS_BUILD_MODULES += ATPROGRAM +DMBS_BUILD_TARGETS += atprogram atprogram-ee +DMBS_BUILD_MANDATORY_VARS += MCU TARGET +DMBS_BUILD_OPTIONAL_VARS += ATPROGRAM_PROGRAMMER ATPROGRAM_INTERFACE ATPROGRAM_PORT +DMBS_BUILD_PROVIDED_VARS += +DMBS_BUILD_PROVIDED_MACROS += + +# ----------------------------------------------------------------------------- +# DMBS ATPROGRAM Programmer Buildsystem Makefile Module. +# ----------------------------------------------------------------------------- +# DESCRIPTION: +# Provides a set of targets to re-program a device using the Atmel atprogram +# utility in AVR Studio 5.x and Atmel Studio 6.0 onwards. +# ----------------------------------------------------------------------------- +# TARGETS: +# +# atprogram - Program target FLASH with application using +# atprogram +# atprogram-ee - Program target EEPROM with application data +# using atprogram +# +# MANDATORY PARAMETERS: +# +# MCU - Microcontroller device model name +# TARGET - Application name +# +# OPTIONAL PARAMETERS: +# +# ATPROGRAM_PROGRAMMER - Name of programming hardware to use +# ATPROGRAM_INTERFACE - Name of programming interface to use +# ATPROGRAM_PORT - Name of communication port to use +# +# PROVIDED VARIABLES: +# +# (None) +# +# PROVIDED MACROS: +# +# (None) +# +# ----------------------------------------------------------------------------- + +SHELL = /bin/sh + +ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) +ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) +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 +ATPROGRAM_PROGRAMMER ?= jtagice3 +ATPROGRAM_INTERFACE ?= jtag +ATPROGRAM_PORT ?= + +# Sanity check user supplied values +$(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) +$(call ERROR_IF_EMPTY, MCU) +$(call ERROR_IF_EMPTY, TARGET) +$(call ERROR_IF_EMPTY, ATPROGRAM_PROGRAMMER) +$(call ERROR_IF_EMPTY, ATPROGRAM_INTERFACE) + +# Output Messages +MSG_ATPROGRAM_CMD := ' [ATPRGRM] :' + +# Construct base atprogram command flags +BASE_ATPROGRAM_FLAGS := --tool $(ATPROGRAM_PROGRAMMER) --interface $(ATPROGRAM_INTERFACE) --device $(MCU) +ifneq ($(ATPROGRAM_PORT),) + BASE_ATPROGRAM_FLAGS += --port $(ATPROGRAM_PORT) +endif + +# Construct the flags to use for the various memory spaces +ifeq ($(ARCH), AVR8) + ATPROGRAM_FLASH_FLAGS := --chiperase --flash + ATPROGRAM_EEPROM_FLAGS := --eeprom +else ifeq ($(ARCH), XMEGA) + ATPROGRAM_FLASH_FLAGS := --erase --flash + ATPROGRAM_EEPROM_FLAGS := --eeprom +else ifeq ($(ARCH), UC3) + ATPROGRAM_FLASH_FLAGS := --erase + ATPROGRAM_EEPROM_FLAGS := --eeprom +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 $< + +# Phony build targets for this module +.PHONY: $(DMBS_BUILD_TARGETS) diff --git a/LUFA/Build/DMBS/DMBS/avrdude.mk b/LUFA/Build/DMBS/DMBS/avrdude.mk new file mode 100644 index 00000000000..d9b4df048f6 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/avrdude.mk @@ -0,0 +1,86 @@ +# +# DMBS Build System +# Released into the public domain. +# +# dean [at] fourwalledcubicle [dot] com +# www.fourwalledcubicle.com +# + +DMBS_BUILD_MODULES += AVRDUDE +DMBS_BUILD_TARGETS += avrdude avrdude-ee +DMBS_BUILD_MANDATORY_VARS += MCU TARGET +DMBS_BUILD_OPTIONAL_VARS += AVRDUDE_PROGRAMMER AVRDUDE_PORT AVRDUDE_FLAGS +DMBS_BUILD_PROVIDED_VARS += +DMBS_BUILD_PROVIDED_MACROS += + +# ----------------------------------------------------------------------------- +# DMBS AVRDUDE Programmer Buildsystem Makefile Module. +# ----------------------------------------------------------------------------- +# DESCRIPTION: +# Provides a set of targets to re-program a device using the open source +# avr-dude utility. +# ----------------------------------------------------------------------------- +# TARGETS: +# +# avrdude - Program target FLASH with application using +# avrdude +# avrdude-ee - Program target EEPROM with application data +# using avrdude +# +# MANDATORY PARAMETERS: +# +# MCU - Microcontroller device model name +# TARGET - Application name +# +# OPTIONAL PARAMETERS: +# +# AVRDUDE_PROGRAMMER - Name of programming hardware to use +# AVRDUDE_PORT - Name of communication port to use +# AVRDUDE_FLAGS - Flags to pass to avr-dude +# +# PROVIDED VARIABLES: +# +# (None) +# +# PROVIDED MACROS: +# +# (None) +# +# ----------------------------------------------------------------------------- + +SHELL = /bin/sh + +ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) +ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) +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 +AVRDUDE_PROGRAMMER ?= jtagicemkii +AVRDUDE_PORT ?= usb +AVRDUDE_FLAGS ?= + +# Sanity check user supplied values +$(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) +$(call ERROR_IF_EMPTY, MCU) +$(call ERROR_IF_EMPTY, TARGET) +$(call ERROR_IF_EMPTY, AVRDUDE_PROGRAMMER) +$(call ERROR_IF_EMPTY, AVRDUDE_PORT) + +# Output Messages +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 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 using \"$(AVRDUDE_PROGRAMMER)\" on port \"$(AVRDUDE_PORT)\" + avrdude $(BASE_AVRDUDE_FLAGS) -U eeprom:w:$< $(AVRDUDE_FLAGS) + +# Phony build targets for this module +.PHONY: $(DMBS_BUILD_TARGETS) diff --git a/LUFA/Build/DMBS/DMBS/core.mk b/LUFA/Build/DMBS/DMBS/core.mk new file mode 100644 index 00000000000..41992566d59 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/core.mk @@ -0,0 +1,180 @@ +# +# DMBS Build System +# Released into the public domain. +# +# dean [at] fourwalledcubicle [dot] com +# www.fourwalledcubicle.com +# + +DMBS_BUILD_MODULES += CORE +DMBS_BUILD_TARGETS += help list_targets list_modules list_mandatory list_optional list_provided list_macros +DMBS_BUILD_MANDATORY_VARS += +DMBS_BUILD_OPTIONAL_VARS += +DMBS_BUILD_PROVIDED_VARS += DMBS_VERSION +DMBS_BUILD_PROVIDED_MACROS += + +# ----------------------------------------------------------------------------- +# DMBS Core Build System Makefile Module. +# ----------------------------------------------------------------------------- +# DESCRIPTION: +# Provides a set of core build targets for the DMBS build system +# ----------------------------------------------------------------------------- +# TARGETS: +# +# help - Build system help +# list_targets - List all build targets +# list_modules - List all build modules +# list_mandatory - List all mandatory make variables required by +# the included build modules of the application +# list_optional - List all optional make variables required by +# the included build modules of the application +# list_provided - List all provided make variables from the +# included build modules of the application +# list_macros - List all provided make macros from the +# included build modules of the application +# +# MANDATORY PARAMETERS: +# +# (None) +# +# OPTIONAL PARAMETERS: +# +# (None) +# +# PROVIDED VARIABLES: +# +# DMBS_VERSION +# +# PROVIDED MACROS: +# +# (None) +# +# ----------------------------------------------------------------------------- + +SHELL = /bin/sh + + +# Current DMBS release version +DMBS_VERSION = 0.3 + + +# Converts a given input to a printable output using "(None)" if no items are in the list +CONVERT_TO_PRINTABLE = $(if $(strip $(1)), $(1), (None)) + + +# Build sorted and filtered lists of the included build module data +SORTED_DMBS_BUILD_MODULES = $(sort $(DMBS_BUILD_MODULES)) +SORTED_DMBS_BUILD_TARGETS = $(sort $(DMBS_BUILD_TARGETS)) +SORTED_DMBS_MANDATORY_VARS = $(sort $(DMBS_BUILD_MANDATORY_VARS)) +SORTED_DMBS_OPTIONAL_VARS = $(filter-out $(SORTED_DMBS_MANDATORY_VARS), $(sort $(DMBS_BUILD_OPTIONAL_VARS))) +SORTED_DMBS_PROVIDED_VARS = $(sort $(DMBS_BUILD_PROVIDED_VARS)) +SORTED_DMBS_PROVIDED_MACROS = $(sort $(DMBS_BUILD_PROVIDED_MACROS)) + +# Create printable versions of the sorted build module data (use "(None)" when no data is available) +PRINTABLE_DMBS_BUILD_MODULES = $(call CONVERT_TO_PRINTABLE, $(SORTED_DMBS_BUILD_MODULES)) +PRINTABLE_DMBS_BUILD_TARGETS = $(call CONVERT_TO_PRINTABLE, $(SORTED_DMBS_BUILD_TARGETS)) +PRINTABLE_DMBS_MANDATORY_VARS = $(call CONVERT_TO_PRINTABLE, $(SORTED_DMBS_MANDATORY_VARS)) +PRINTABLE_DMBS_OPTIONAL_VARS = $(call CONVERT_TO_PRINTABLE, $(SORTED_DMBS_OPTIONAL_VARS)) +PRINTABLE_DMBS_PROVIDED_VARS = $(call CONVERT_TO_PRINTABLE, $(SORTED_DMBS_PROVIDED_VARS)) +PRINTABLE_DMBS_PROVIDED_MACROS = $(call CONVERT_TO_PRINTABLE, $(SORTED_DMBS_PROVIDED_MACROS)) + +help: + @echo "===================================================================" + @echo " The DMBS Build System " + @echo " By Dean Camera { dean @ fourwalledcubicle . com } " + @echo "===================================================================" + @echo "DESCRIPTION: " + @echo " This build system is a set of makefile modules for (GNU) Make, to " + @echo " provide a simple system for building DMBS powered applications. " + @echo " Each makefile module can be included from within a user makefile, " + @echo " to expose the build rules documented in the comments at the top of" + @echo " each build module. " + @echo " " + @echo "USAGE: " + @echo " To execute a rule, define all variables indicated in the desired " + @echo " module as a required parameter before including the build module " + @echo " in your project makefile. Parameters marked as optional will " + @echo " assume a default value in the modules if not user-assigned. " + @echo " " + @echo " By default the target output shows both a friendly summary, as " + @echo " well as the actual invoked command. To suppress the output of the " + @echo " invoked commands and show only the friendly command output, run " + @echo " make with the \"-s\" switch added before the target(s). " + @echo "===================================================================" + @echo " " + @echo " Currently used build system modules in this application: " + @echo " " + @printf " %b" "$(PRINTABLE_DMBS_BUILD_MODULES:%= - %\n)" + @echo " " + @echo " " + @echo " Currently available build targets in this application: " + @echo " " + @printf " %b" "$(PRINTABLE_DMBS_BUILD_TARGETS:%= - %\n)" + @echo " " + @echo " " + @echo " Mandatory variables required by the selected build Modules: " + @echo " " + @printf " %b" "$(PRINTABLE_DMBS_MANDATORY_VARS:%= - %\n)" + @echo " " + @echo " " + @echo " Optional variables required by the selected build Modules: " + @echo " " + @printf " %b" "$(PRINTABLE_DMBS_OPTIONAL_VARS:%= - %\n)" + @echo " " + @echo " " + @echo " Variables provided by the selected build Modules: " + @echo " " + @printf " %b" "$(PRINTABLE_DMBS_PROVIDED_VARS:%= - %\n)" + @echo " " + @echo " " + @echo " Macros provided by the selected build Modules: " + @echo " " + @printf " %b" "$(PRINTABLE_DMBS_PROVIDED_MACROS:%= - %\n)" + @echo " " + @echo "===================================================================" + @echo " The DMBS Build System $(DMBS_VERSION) - Making MAKE easier." + @echo "===================================================================" + +# Lists build modules included by the project makefile, in alphabetical order +list_modules: + @echo Currently Used Build System Modules: + @printf " %b" "$(PRINTABLE_DMBS_BUILD_MODULES:%= - %\n)" + +# Lists build targets included by the project makefile, in alphabetical order +list_targets: + @echo Currently Available Build Targets: + @printf " %b" "$(PRINTABLE_DMBS_BUILD_TARGETS:%= - %\n)" + +# Lists mandatory variables that must be set by the project makefile, in alphabetical order +list_mandatory: + @echo Mandatory Variables for Included Modules: + @printf " %b" "$(PRINTABLE_DMBS_MANDATORY_VARS:%= - %\n)" + +# Lists optional variables that must be set by the project makefile, in alphabetical order +list_optional: + @echo Optional Variables for Included Modules: + @printf " %b" "$(PRINTABLE_DMBS_OPTIONAL_VARS:%= - %\n)" + +# Lists variables provided by the included build modules, in alphabetical order +list_provided: + @echo Variables Provided by the Included Modules: + @printf " %b" "$(PRINTABLE_DMBS_PROVIDED_VARS:%= - %\n)" + +# Lists macros provided by the included build modules, in alphabetical order +list_macros: + @echo Macros Provided by the Included Modules: + @printf " %b" "$(PRINTABLE_DMBS_PROVIDED_MACROS:%= - %\n)" + +# Debugging; "make print-VARNAME" will output the variable VARNAME's value +print-%: + @printf "%s = %s" $(@:print-%=%) $($(@:print-%=%)) + +# Disable default in-built make rules (those that are needed are explicitly +# defined, and doing so has performance benefits when recursively building) +ifeq ($(filter -r,$(MAKEFLAGS)),) + MAKEFLAGS += -r +endif +.SUFFIXES: + +# Phony build targets for this module +.PHONY: $(DMBS_BUILD_TARGETS) diff --git a/LUFA/Build/DMBS/DMBS/cppcheck.mk b/LUFA/Build/DMBS/DMBS/cppcheck.mk new file mode 100644 index 00000000000..2e0be12ad19 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/cppcheck.mk @@ -0,0 +1,107 @@ +# +# DMBS Build System +# Released into the public domain. +# +# dean [at] fourwalledcubicle [dot] com +# www.fourwalledcubicle.com +# + +DMBS_BUILD_MODULES += CPPCHECK +DMBS_BUILD_TARGETS += cppcheck cppcheck-config +DMBS_BUILD_MANDATORY_VARS += SRC +DMBS_BUILD_OPTIONAL_VARS += CPPCHECK_INCLUDES CPPCHECK_EXCLUDES CPPCHECK_MSG_TEMPLATE CPPCHECK_ENABLE \ + CPPCHECK_SUPPRESS CPPCHECK_FAIL_ON_WARNING CPPCHECK_QUIET CPPCHECK_FLAGS +DMBS_BUILD_PROVIDED_VARS += +DMBS_BUILD_PROVIDED_MACROS += + +# ----------------------------------------------------------------------------- +# DMBS CPPCheck Buildsystem Makefile Module. +# ----------------------------------------------------------------------------- +# DESCRIPTION: +# Provides a set of targets to scan a project with the free "cppcheck" static +# analysis tool, to check for code errors at runtime +# (see http://cppcheck.sourceforge.net). +# ----------------------------------------------------------------------------- +# TARGETS: +# +# cppcheck - Scan the project with CPPCheck +# cppcheck-config - Use CPPCheck to look for missing include files +# +# MANDATORY PARAMETERS: +# +# SRC - List of source files to statically analyze +# +# OPTIONAL PARAMETERS: +# +# CPPCHECK_INCLUDES - Extra include paths to search for missing +# header files +# CPPCHECK_EXCLUDES - Source file paths to exclude checking (can be +# a path fragment if desired) +# CPPCHECK_MSG_TEMPLATE - Template for cppcheck error and warning output +# CPPCHECK_ENABLE - General cppcheck category checks to enable +# CPPCHECK_SUPPRESS - Specific cppcheck warnings to disable by ID +# CPPCHECK_FAIL_ON_WARNING - Set to Y to fail the build on cppcheck +# warnings, N to continue even if warnings occur +# CPPCHECK_QUIET - Enable cppcheck verbose or quiet output mode +# CPPCHECK_FLAGS - Additional flags to pass to cppcheck +# +# PROVIDED VARIABLES: +# +# (None) +# +# PROVIDED MACROS: +# +# (None) +# +# ----------------------------------------------------------------------------- + +SHELL = /bin/sh + +ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) +ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) +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 +CPPCHECK_INCLUDES ?= +CPPCHECK_EXCLUDES ?= +CPPCHECK_MSG_TEMPLATE ?= {file}:{line}: {severity} ({id}): {message} +CPPCHECK_ENABLE ?= all +CPPCHECK_SUPPRESS ?= variableScope missingInclude +CPPCHECK_FAIL_ON_WARNING ?= Y +CPPCHECK_QUIET ?= Y +CPPCHECK_FLAGS ?= + +# Sanity check user supplied values +$(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) +$(call ERROR_IF_EMPTY, SRC) +$(call ERROR_IF_EMPTY, CPPCHECK_MSG_TEMPLATE) +$(call ERROR_IF_EMPTY, CPPCHECK_ENABLE) +$(call ERROR_IF_NONBOOL, CPPCHECK_FAIL_ON_WARNING) +$(call ERROR_IF_NONBOOL, CPPCHECK_QUIET) + +# Build a default argument list for cppcheck +BASE_CPPCHECK_FLAGS := --template="$(CPPCHECK_MSG_TEMPLATE)" $(CPPCHECK_INCLUDES:%=-I%) $(CPPCHECK_EXCLUDES:%=-i%) --inline-suppr --force --std=c99 + +# Sanity check parameters and construct additional command line arguments to cppcheck +ifeq ($(CPPCHECK_FAIL_ON_WARNING), Y) + BASE_CPPCHECK_FLAGS += --error-exitcode=1 +endif +ifeq ($(CPPCHECK_QUIET), Y) + BASE_CPPCHECK_FLAGS += --quiet +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: $(MAKEFILE_LIST) + @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: $(MAKEFILE_LIST) + @echo $(MSG_CPPCHECK_CMD) Performing static analysis on source files + cppcheck $(BASE_CPPCHECK_FLAGS) --enable=$(CPPCHECK_ENABLE) $(CPPCHECK_SUPPRESS:%=--suppress=%) $(CPPCHECK_FLAGS) $(SRC) + +# Phony build targets for this module +.PHONY: $(DMBS_BUILD_TARGETS) diff --git a/LUFA/Build/DMBS/DMBS/dfu.mk b/LUFA/Build/DMBS/DMBS/dfu.mk new file mode 100644 index 00000000000..62365c141a4 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/dfu.mk @@ -0,0 +1,95 @@ +# +# DMBS Build System +# Released into the public domain. +# +# dean [at] fourwalledcubicle [dot] com +# www.fourwalledcubicle.com +# + +DMBS_BUILD_MODULES += DFU +DMBS_BUILD_TARGETS += flip flip-ee dfu dfu-ee +DMBS_BUILD_MANDATORY_VARS += MCU TARGET +DMBS_BUILD_OPTIONAL_VARS += +DMBS_BUILD_PROVIDED_VARS += +DMBS_BUILD_PROVIDED_MACROS += + +# ----------------------------------------------------------------------------- +# DMBS DFU Bootloader Buildsystem Makefile Module. +# ----------------------------------------------------------------------------- +# DESCRIPTION: +# Provides a set of targets to re-program a device currently running a DFU +# class bootloader with a project's FLASH and EEPROM files. +# ----------------------------------------------------------------------------- +# TARGETS: +# +# flip - Program FLASH into target via Atmel FLIP +# flip-ee - Program EEPROM into target via Atmel FLIP +# dfu - Program FLASH into target via dfu-programmer +# dfu-ee - Program EEPROM into target via dfu-programmer +# +# MANDATORY PARAMETERS: +# +# MCU - Microcontroller device model name +# TARGET - Application name +# +# OPTIONAL PARAMETERS: +# +# (None) +# +# PROVIDED VARIABLES: +# +# (None) +# +# PROVIDED MACROS: +# +# (None) +# +# ----------------------------------------------------------------------------- + +SHELL = /bin/sh + +ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) +ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) +ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) + +# Sanity-check values of mandatory user-supplied variables +$(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) +$(call ERROR_IF_EMPTY, MCU) +$(call ERROR_IF_EMPTY, TARGET) + +# Output Messages +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 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_COPY_CMD) Copying EEP file to temporary file \"$<.hex\" + cp $< $<.hex + @echo $(MSG_DFU_CMD) Programming EEPROM with batchisp using \"$<.hex\" + batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $<.hex program + batchisp -hardware usb -device $(MCU) -operation start reset 0 + @echo $(MSG_REMOVE_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) flash --eeprom $< + dfu-programmer $(MCU) reset + +# Phony build targets for this module +.PHONY: $(DMBS_BUILD_TARGETS) diff --git a/LUFA/Build/DMBS/DMBS/doxygen.mk b/LUFA/Build/DMBS/DMBS/doxygen.mk new file mode 100644 index 00000000000..bcde61b473d --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/doxygen.mk @@ -0,0 +1,99 @@ +# +# DMBS Build System +# Released into the public domain. +# +# dean [at] fourwalledcubicle [dot] com +# www.fourwalledcubicle.com +# + +DMBS_BUILD_MODULES += DOXYGEN +DMBS_BUILD_TARGETS += doxygen doxygen_upgrade doxygen_create +DMBS_BUILD_MANDATORY_VARS += +DMBS_BUILD_OPTIONAL_VARS += DOXYGEN_CONF DOXYGEN_FAIL_ON_WARNING DOXYGEN_OVERRIDE_PARAMS +DMBS_BUILD_PROVIDED_VARS += +DMBS_BUILD_PROVIDED_MACROS += + +# ----------------------------------------------------------------------------- +# DMBS Doxygen Buildsystem Makefile Module. +# ----------------------------------------------------------------------------- +# DESCRIPTION: +# Provides a set of targets to automatically build Doxygen documentation for +# a project (see www.doxygen.org). +# ----------------------------------------------------------------------------- +# TARGETS: +# +# doxygen - Build Doxygen Documentation +# doxygen_create - Create a new Doxygen configuration file using +# the latest template +# doxygen_upgrade - Upgrade an existing Doxygen configuration file +# to the latest template +# +# MANDATORY PARAMETERS: +# +# (None) +# +# OPTIONAL PARAMETERS: +# +# DOXYGEN_CONF - Doxygen configuration filename +# DOXYGEN_FAIL_ON_WARNING - Set to Y to fail the build on Doxygen warnings, +# N to continue even if warnings occur +# DOXYGEN_OVERRIDE_PARAMS - Parameters to override in the doxygen +# configuration file +# PROVIDED VARIABLES: +# +# (None) +# +# PROVIDED MACROS: +# +# (None) +# +# ----------------------------------------------------------------------------- + +SHELL = /bin/sh + +ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) +ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) +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 +DOXYGEN_CONF ?= doxyfile +DOXYGEN_FAIL_ON_WARNING ?= Y +DOXYGEN_OVERRIDE_PARAMS ?= QUIET=YES + +# Sanity check user supplied values +$(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) +$(call ERROR_IF_EMPTY, DOXYGEN_CONF) +$(call ERROR_IF_NONBOOL, DOXYGEN_FAIL_ON_WARNING) + +# Output Messages +MSG_DOXYGEN_CMD := ' [DOXYGEN] :' + +# Determine Doxygen invocation command +BASE_DOXYGEN_CMD := ( cat $(DOXYGEN_CONF) $(DOXYGEN_OVERRIDE_PARAMS:%=; echo "%") ) | doxygen - +ifeq ($(DOXYGEN_FAIL_ON_WARNING), Y) + DOXYGEN_CMD := if ( $(BASE_DOXYGEN_CMD) 2>&1 | grep -v "warning: ignoring unsupported tag" ;); then exit 1; fi; +else + DOXYGEN_CMD := $(BASE_DOXYGEN_CMD) +endif + +# Error if the specified Doxygen configuration file does not exist +$(DOXYGEN_CONF): + $(error Doxygen configuration file $@ does not exist) + +# Builds the project documentation using the specified configuration file and the DOXYGEN tool +doxygen: $(DOXYGEN_CONF) $(MAKEFILE_LIST) + @echo $(MSG_DOXYGEN_CMD) Configuration file \"$(DOXYGEN_CONF)\" with parameters \"$(DOXYGEN_OVERRIDE_PARAMS)\" + $(DOXYGEN_CMD) + +# Upgrades an existing Doxygen configuration file to the latest Doxygen template, preserving settings +doxygen_upgrade: $(DOXYGEN_CONF) $(MAKEFILE_LIST) + @echo $(MSG_DOXYGEN_CMD) Upgrading configuration file \"$(DOXYGEN_CONF)\" with latest template + doxygen -u $(DOXYGEN_CONF) > /dev/null + +# Creates a new Doxygen configuration file with the set file name +doxygen_create: $(MAKEFILE_LIST) + @echo $(MSG_DOXYGEN_CMD) Creating new configuration file \"$(DOXYGEN_CONF)\" with latest template + doxygen -g $(DOXYGEN_CONF) > /dev/null + +# Phony build targets for this module +.PHONY: $(DMBS_BUILD_TARGETS) diff --git a/LUFA/Build/DMBS/DMBS/gcc.mk b/LUFA/Build/DMBS/DMBS/gcc.mk new file mode 100644 index 00000000000..b9347a60bc1 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/gcc.mk @@ -0,0 +1,331 @@ +# +# DMBS Build System +# Released into the public domain. +# +# dean [at] fourwalledcubicle [dot] com +# www.fourwalledcubicle.com +# + +DMBS_BUILD_MODULES += GCC +DMBS_BUILD_TARGETS += size symbol-sizes all lib elf bin hex lss clean mostlyclean +DMBS_BUILD_MANDATORY_VARS += TARGET ARCH MCU SRC +DMBS_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 +DMBS_BUILD_PROVIDED_VARS += +DMBS_BUILD_PROVIDED_MACROS += + +# ----------------------------------------------------------------------------- +# DMBS GCC Compiler Buildsystem Makefile Module. +# ----------------------------------------------------------------------------- +# DESCRIPTION: +# Provides a set of targets to build a C, C++ and/or Assembly application +# via the AVR-GCC compiler. +# ----------------------------------------------------------------------------- +# TARGETS: +# +# size - List built application size +# symbol-sizes - Print application symbols from the binary ELF +# file as a list sorted by size in bytes +# all - Build application and list size +# lib - Build and archive source files into a library +# elf - Build application ELF debug object file +# bin - Build application BIN binary object file +# hex - Build application HEX object file +# lss - Build application LSS assembly listing file +# clean - Remove all project intermediary and binary +# output files +# mostlyclean - Remove intermediary output files, but +# preserve binaries +# .s - Compile C/C++ source file into an assembly file +# for manual code inspection +# +# MANDATORY PARAMETERS: +# +# TARGET - Application name +# ARCH - Device architecture name +# MCU - Microcontroller device model name +# SRC - List of input source files (*.c, *.cpp, *.S) +# +# OPTIONAL PARAMETERS: +# +# OPTIMIZATION - Optimization level +# C_STANDARD - C Language Standard to use +# CPP_STANDARD - C++ Language Standard to use +# F_CPU - Speed of the CPU, in Hz +# C_FLAGS - Flags to pass to the C compiler only +# CPP_FLAGS - Flags to pass to the C++ compiler only +# ASM_FLAGS - Flags to pass to the assembler only +# CC_FLAGS - Common flags to pass to the C/C++ compiler and +# assembler +# LD_FLAGS - Flags to pass to the linker +# LINKER_RELAXATIONS - Enable or disable linker relaxations to +# decrease binary size (note: can cause link +# failures on systems with an unpatched binutils) +# OBJDIR - Directory for the output object and dependency +# files; if equal to ".", the output files will +# be generated in the same folder as the sources +# OBJECT_FILES - Extra object files to link in to the binaries +# DEBUG_FORMAT - Format of the debugging information to +# 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: +# +# (None) +# +# PROVIDED MACROS: +# +# (None) +# +# ----------------------------------------------------------------------------- + +SHELL = /bin/sh + +ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) +ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) +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 ?= +OPTIMIZATION ?= s +F_CPU ?= +C_STANDARD ?= gnu99 +CPP_STANDARD ?= gnu++98 +C_FLAGS ?= +CPP_FLAGS ?= +ASM_FLAGS ?= +CC_FLAGS ?= +OBJDIR ?= obj +OBJECT_FILES ?= +DEBUG_FORMAT ?= dwarf-2 +DEBUG_LEVEL ?= 2 +LINKER_RELAXATIONS ?= Y + +# Sanity check user supplied values +$(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) +$(call ERROR_IF_EMPTY, MCU) +$(call ERROR_IF_EMPTY, TARGET) +$(call ERROR_IF_EMPTY, ARCH) +$(call ERROR_IF_EMPTY, OPTIMIZATION) +$(call ERROR_IF_EMPTY, C_STANDARD) +$(call ERROR_IF_EMPTY, CPP_STANDARD) +$(call ERROR_IF_EMPTY, OBJDIR) +$(call ERROR_IF_EMPTY, DEBUG_FORMAT) +$(call ERROR_IF_EMPTY, DEBUG_LEVEL) +$(call ERROR_IF_NONBOOL, LINKER_RELAXATIONS) + +# Determine the utility prefix to use for the selected architecture +ifeq ($(ARCH), AVR8) + CROSS := $(COMPILER_PATH)avr +else ifeq ($(ARCH), XMEGA) + CROSS := $(COMPILER_PATH)avr +else ifeq ($(ARCH), UC3) + CROSS := $(COMPILER_PATH)avr32 +else + $(error Unsupported architecture "$(ARCH)") +endif + +# Output Messages +MSG_INFO_MESSAGE := ' [INFO] :' +MSG_COMPILE_CMD := ' [GCC] :' +MSG_ASSEMBLE_CMD := ' [GAS] :' +MSG_NM_CMD := ' [NM] :' +MSG_REMOVE_CMD := ' [RM] :' +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)) + +# 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)) +ifneq ($(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 += $(addsuffix .o, $(basename $(SRC))) + +# Check if an output object file directory was specified instead of the input file location +ifneq ($(OBJDIR),.) + # Prefix all the object filenames with the output object file directory path + OBJECT_FILES := $(addprefix $(patsubst %/,%,$(OBJDIR))/, $(notdir $(OBJECT_FILES))) + + # Check if any object file (without path) appears more than once in the object file list + ifneq ($(words $(sort $(OBJECT_FILES))), $(words $(OBJECT_FILES))) + $(error Cannot build with OBJDIR parameter set - one or more object file name is not unique) + endif + + # Create the output object file directory if it does not exist and add it to the virtual path list + $(shell mkdir $(OBJDIR) 2> /dev/null) + VPATH += $(dir $(SRC)) +endif + +# 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 -g$(DEBUG_FORMAT) -g$(DEBUG_LEVEL) +ifneq ($(findstring $(ARCH), AVR8 XMEGA),) + BASE_CC_FLAGS += -mmcu=$(MCU) -fshort-enums -fno-inline-small-functions -fpack-struct +else ifneq ($(findstring $(ARCH), UC3),) + BASE_CC_FLAGS += -mpart=$(MCU:at32%=%) -masm-addr-pseudos +endif +BASE_CC_FLAGS += -Wall -fno-strict-aliasing -funsigned-char -funsigned-bitfields -ffunction-sections +BASE_CC_FLAGS += -I. +BASE_CC_FLAGS += -DARCH=ARCH_$(ARCH) +ifneq ($(F_CPU),) + BASE_CC_FLAGS += -DF_CPU=$(F_CPU)UL +endif +ifeq ($(LINKER_RELAXATIONS), Y) +BASE_CC_FLAGS += -mrelax +endif + +# Additional language specific compiler flags +BASE_C_FLAGS := -x c -O$(OPTIMIZATION) -std=$(C_STANDARD) -Wstrict-prototypes +BASE_CPP_FLAGS := -x c++ -O$(OPTIMIZATION) -std=$(CPP_STANDARD) +BASE_ASM_FLAGS := -x assembler-with-cpp + +# Create a list of flags to pass to the linker +BASE_LD_FLAGS := -lm -Wl,-Map=$(TARGET).map,--cref -Wl,--gc-sections +ifeq ($(LINKER_RELAXATIONS), Y) + BASE_LD_FLAGS += -Wl,--relax +endif +ifneq ($(findstring $(ARCH), AVR8 XMEGA),) + BASE_LD_FLAGS += -mmcu=$(MCU) +else ifneq ($(findstring $(ARCH), UC3),) + BASE_LD_FLAGS += -mpart=$(MCU:at32%=%) --rodata-writable --direct-data +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)\". + +# 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) $< + +# 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 intermediary 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).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 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 + +# 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 $^ -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 -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 + @echo $(MSG_OBJDMP_CMD) Extracting LSS file data from \"$<\" + $(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 $< > $@ + +# Include build dependency files +-include $(DEPENDENCY_FILES) + +# Phony build targets for this module +.PHONY: build_begin build_end $(DMBS_BUILD_TARGETS) diff --git a/LUFA/Build/DMBS/DMBS/hid.mk b/LUFA/Build/DMBS/DMBS/hid.mk new file mode 100644 index 00000000000..3f0d456e1f2 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/hid.mk @@ -0,0 +1,96 @@ +# +# DMBS Build System +# Released into the public domain. +# +# dean [at] fourwalledcubicle [dot] com +# www.fourwalledcubicle.com +# + +DMBS_BUILD_MODULES += HID +DMBS_BUILD_TARGETS += hid hid-ee teensy teensy-ee +DMBS_BUILD_MANDATORY_VARS += MCU TARGET +DMBS_BUILD_OPTIONAL_VARS += +DMBS_BUILD_PROVIDED_VARS += +DMBS_BUILD_PROVIDED_MACROS += + +# ----------------------------------------------------------------------------- +# DMBS HID Bootloader Buildsystem Makefile Module. +# ----------------------------------------------------------------------------- +# DESCRIPTION: +# Provides a set of targets to re-program a device currently running a HID +# class bootloader with a project's FLASH files. +# ----------------------------------------------------------------------------- +# TARGETS: +# +# hid - Program FLASH into target via +# hid_bootloader_cli +# hid-ee - Program EEPROM into target via a temporary +# AVR application and hid_bootloader_cli +# teensy - Program FLASH into target via +# teensy_loader_cli +# teensy-ee - Program EEPROM into target via a temporary +# AVR application and teensy_loader_cli +# +# MANDATORY PARAMETERS: +# +# MCU - Microcontroller device model name +# TARGET - Application name +# +# OPTIONAL PARAMETERS: +# +# (None) +# +# PROVIDED VARIABLES: +# +# (None) +# +# PROVIDED MACROS: +# +# (None) +# +# ----------------------------------------------------------------------------- + +SHELL = /bin/sh + +DMBS_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) + +ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) +ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) +ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) + +# Sanity-check values of mandatory user-supplied variables +$(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) +$(call ERROR_IF_EMPTY, MCU) +$(call ERROR_IF_EMPTY, TARGET) + +# Output Messages +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 $< $(DMBS_MODULE_PATH)/HID_EEPROM_Loader/InputEEData.bin + @echo $(MSG_MAKE_CMD) Making EEPROM loader application for \"$<\" + $(MAKE) -C $(DMBS_MODULE_PATH)/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 $< $(DMBS_MODULE_PATH)/HID_EEPROM_Loader/InputEEData.bin + @echo $(MSG_MAKE_CMD) Making EEPROM loader application for \"$<\" + $(MAKE) -s -C $(DMBS_MODULE_PATH)/HID_EEPROM_Loader/ MCU=$(MCU) clean teensy + +# Phony build targets for this module +.PHONY: $(DMBS_BUILD_TARGETS) diff --git a/LUFA/Build/DMBS/Readme.md b/LUFA/Build/DMBS/Readme.md new file mode 100644 index 00000000000..f5533a9abfe --- /dev/null +++ b/LUFA/Build/DMBS/Readme.md @@ -0,0 +1,105 @@ +DMBS - Dean's Makefile Build System +=================================== + + +Project Overview +---------------- + +GNU Make is scary, and it's tough to get the rules right sometimes. Many +projects get by via simple copy-pasting of old makefiles, resulting in many +redundant copies of the same old rules. DMBS aims to solve this by providing a +simple modular set of makefiles which can be included by your project to quickly +add various build functionality. + +This aims to replace the old WinAVR "mfile" makefile template, giving better +functionality and much simpler user makefiles. + + +Benefits: +---------------- + +Apart from much simpler, cleaner makefiles DMBS carries the aim of making the +process of troubleshooting build issues a little easier. Lots can go wrong, so +DMBS tries to sanity check its inputs wherever possible, and produce +human-readable error messages. Forgotten to set a variable? Get a +`Makefile {X} value not set.` message, rather than a possibly unrelated message. +Have the wrong filename? See `Source file does not exist: {X}` rather than the +infamous `No rule to make target {X}` message. + + +Use: +---------------- + +A template user makefile is provided in the `Template` directory. DMBS modules +are included via a GNU Make `include` directive. While the DMBS `core` module is +always required, you can pick and choose what other modules you wish to add to +your user project. + +Here's an example user makefile: + + MCU = atmega128 + ARCH = AVR8 + F_CPU = 8000000 + OPTIMIZATION = s + TARGET = Template + SRC = $(TARGET).c + CC_FLAGS = + LD_FLAGS = + + # Default target + all: + + # Include DMBS build script makefiles + DMBS_PATH ?= ../DMBS + include $(DMBS_PATH)/core.mk + include $(DMBS_PATH)/gcc.mk + include $(DMBS_PATH)/cppcheck.mk + include $(DMBS_PATH)/doxygen.mk + include $(DMBS_PATH)/dfu.mk + include $(DMBS_PATH)/hid.mk + include $(DMBS_PATH)/avrdude.mk + include $(DMBS_PATH)/atprogram.mk + +Each DMBS module can optionally supply one or more Make variables and macros, +which you can reference in your user makefile. Additionally, modules can require +one or more variables to be set by the user makefile, with (in some cases) sane +defaults used if left out. + +As modules are added, you can get a list of available targets by simply typing +`make help` from the command line. This will produce a formatted list of targets +as well as mandatory and optional variables and exposed variables and macros. + + +License +---------------- + +DMBS is released into the public domain, making is suitable for use everywhere, +by everyone. Contributions are greatly appreciated however, in order to make +DMBS better for everyone. + +The actual license text is as follows: + + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + For more information, please refer to diff --git a/LUFA/Build/DMBS/Template/Template.c b/LUFA/Build/DMBS/Template/Template.c new file mode 100644 index 00000000000..95d36f7dbf7 --- /dev/null +++ b/LUFA/Build/DMBS/Template/Template.c @@ -0,0 +1,12 @@ +/* + DMBS Build System + Released into the public domain. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com + */ + +int main(void) +{ + // Application code here. +} diff --git a/LUFA/Build/DMBS/Template/makefile b/LUFA/Build/DMBS/Template/makefile new file mode 100644 index 00000000000..d88292388c2 --- /dev/null +++ b/LUFA/Build/DMBS/Template/makefile @@ -0,0 +1,32 @@ +# +# DMBS Build System +# Released into the public domain. +# +# dean [at] fourwalledcubicle [dot] com +# www.fourwalledcubicle.com +# + +# Run "make help" for target help. + +MCU = atmega128 +ARCH = AVR8 +F_CPU = 8000000 +OPTIMIZATION = s +TARGET = Template +SRC = $(TARGET).c +CC_FLAGS = +LD_FLAGS = + +# Default target +all: + +# Include DMBS build script makefiles +DMBS_PATH ?= ../DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk From 2fcd50ada8e0916d1ed5addb2567b4bfcee8497c Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 22 Dec 2015 22:14:09 +1100 Subject: [PATCH 04/11] Fix C++ builds, XPLAINBridge project. --- LUFA/Build/lufa_build.mk | 12 ++++++++---- Projects/XPLAINBridge/makefile | 6 +++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/LUFA/Build/lufa_build.mk b/LUFA/Build/lufa_build.mk index 1aae2a38890..d20493ea2d3 100644 --- a/LUFA/Build/lufa_build.mk +++ b/LUFA/Build/lufa_build.mk @@ -66,15 +66,19 @@ else ifeq ($(ARCH), UC3) $(warning The UC3 device support is currently EXPERIMENTAL (incomplete and/or non-functional), and is included for preview purposes only.) endif -# LUFA specific standard build options -C_FLAGS += -I. -I$(patsubst %/,%,$(LUFA_PATH))/.. -C_FLAGS += -DARCH=ARCH_$(ARCH) -DBOARD=BOARD_$(BOARD) -DF_USB=$(F_USB)UL +# Common LUFA C/C++ includes/definitions +LUFA_CXX_INCLUDES = -I. -I$(patsubst %/,%,$(LUFA_PATH))/.. +LUFA_CXX_DEFINES = -DARCH=ARCH_$(ARCH) -DBOARD=BOARD_$(BOARD) -DF_USB=$(F_USB)UL # 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. -C_FLAGS += -fno-jump-tables +LUFA_CXX_FLAGS = -fno-jump-tables + +# LUFA specific standard build options +C_FLAGS += $(LUFA_CXX_INCLUDES) $(LUFA_CXX_DEFINES) $(LUFA_CXX_FLAGS) +CPP_FLAGS += $(LUFA_CXX_INCLUDES) $(LUFA_CXX_DEFINES) $(LUFA_CXX_FLAGS) DMBS_PATH := $(LUFA_PATH)/Build/DMBS/DMBS include $(DMBS_PATH)/gcc.mk diff --git a/Projects/XPLAINBridge/makefile b/Projects/XPLAINBridge/makefile index 65ca730f934..aacca67807e 100644 --- a/Projects/XPLAINBridge/makefile +++ b/Projects/XPLAINBridge/makefile @@ -31,13 +31,13 @@ LD_FLAGS = # Default target all: +OBJDIR := obj + # Since this project borrows files from the AVRISP-MKII project which may also have an # identical OBJDIR directory, we need to enforce the use of this project's object file # directory as the one where the build object files are to be stored by pre-pending the # absolute path of the current project to the OBJDIR variable. -ifneq ($(OBJDIR),) - override OBJDIR:=$(shell pwd)/$(OBJDIR) -endif +override OBJDIR:=$(shell pwd)/$(OBJDIR) # Include LUFA build script makefiles include $(LUFA_PATH)/Build/lufa_core.mk From 9864c02eb4a33b260cc016b7108a12412b9264b5 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Wed, 27 Jan 2016 20:31:11 +1100 Subject: [PATCH 05/11] Minor documentation improvements. --- LUFA/DoxygenPages/LUFAPoweredProjects.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/LUFA/DoxygenPages/LUFAPoweredProjects.txt b/LUFA/DoxygenPages/LUFAPoweredProjects.txt index 853bd3d2cc4..fa94add4969 100644 --- a/LUFA/DoxygenPages/LUFAPoweredProjects.txt +++ b/LUFA/DoxygenPages/LUFAPoweredProjects.txt @@ -169,6 +169,7 @@ * \li BitFury, a Bitcoin ASIC miner: https://github.com/aauer1/LUFA-BitFury/tree/master/Projects/BitfuryBTC * \li Ceberus, a MadCatz Xbox 360 arcade stick modifier: http://www.phreakmods.com/products/cerberus * \li CFFA3000, a CompactFlash interface for the Apple II: http://www.dreher.net/CFforAppleII + * \li ChameleonMini, a RFID monitoring tool: https://github.com/emsec/ChameleonMini/wiki * \li Digital Survey Instruments Magnetometer and Pointer: http://www.digitalsurveyinstruments.com/ * \li FinchRobot, a robot designed for educational use: http://www.finchrobot.com/ * \li Flysight, a GPS logger for wingsuit pilots: http://flysight.ca/ From 3069b7d9d2a01f7f1e68722e722fa8e868154585 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 3 Apr 2016 11:35:25 +1000 Subject: [PATCH 06/11] Update to latest DMBS version. --- LUFA/Build/DMBS/DMBS/atprogram.mk | 2 +- LUFA/Build/DMBS/DMBS/avrdude.mk | 7 +++++-- LUFA/Build/DMBS/DMBS/core.mk | 2 +- LUFA/Build/DMBS/DMBS/gcc.mk | 6 ++++++ LUFA/Build/DMBS/Readme.md | 4 ++++ 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/LUFA/Build/DMBS/DMBS/atprogram.mk b/LUFA/Build/DMBS/DMBS/atprogram.mk index de801b0031f..7e3815e4c8e 100644 --- a/LUFA/Build/DMBS/DMBS/atprogram.mk +++ b/LUFA/Build/DMBS/DMBS/atprogram.mk @@ -55,7 +55,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 -ATPROGRAM_PROGRAMMER ?= jtagice3 +ATPROGRAM_PROGRAMMER ?= atmelice ATPROGRAM_INTERFACE ?= jtag ATPROGRAM_PORT ?= diff --git a/LUFA/Build/DMBS/DMBS/avrdude.mk b/LUFA/Build/DMBS/DMBS/avrdude.mk index d9b4df048f6..149cf5c14b2 100644 --- a/LUFA/Build/DMBS/DMBS/avrdude.mk +++ b/LUFA/Build/DMBS/DMBS/avrdude.mk @@ -9,7 +9,7 @@ DMBS_BUILD_MODULES += AVRDUDE DMBS_BUILD_TARGETS += avrdude avrdude-ee DMBS_BUILD_MANDATORY_VARS += MCU TARGET -DMBS_BUILD_OPTIONAL_VARS += AVRDUDE_PROGRAMMER AVRDUDE_PORT AVRDUDE_FLAGS +DMBS_BUILD_OPTIONAL_VARS += AVRDUDE_PROGRAMMER AVRDUDE_PORT AVRDUDE_FLAGS AVRDUDE_MEMORY DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += @@ -37,6 +37,8 @@ DMBS_BUILD_PROVIDED_MACROS += # AVRDUDE_PROGRAMMER - Name of programming hardware to use # AVRDUDE_PORT - Name of communication port to use # AVRDUDE_FLAGS - Flags to pass to avr-dude +# AVRDUDE_MEMORY - Memory space to program application into (e.g. +# "application" for an XMEGA DFU device) # # PROVIDED VARIABLES: # @@ -58,6 +60,7 @@ ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(s AVRDUDE_PROGRAMMER ?= jtagicemkii AVRDUDE_PORT ?= usb AVRDUDE_FLAGS ?= +AVRDUDE_MEMORY ?= flash # Sanity check user supplied values $(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) @@ -75,7 +78,7 @@ 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 using \"$(AVRDUDE_PROGRAMMER)\" on port \"$(AVRDUDE_PORT)\" - avrdude $(BASE_AVRDUDE_FLAGS) -U flash:w:$< $(AVRDUDE_FLAGS) + avrdude $(BASE_AVRDUDE_FLAGS) -U $(AVRDUDE_MEMORY):w:$< $(AVRDUDE_FLAGS) # Programs in the target EEPROM memory using AVRDUDE avrdude-ee: $(TARGET).eep $(MAKEFILE_LIST) diff --git a/LUFA/Build/DMBS/DMBS/core.mk b/LUFA/Build/DMBS/DMBS/core.mk index 41992566d59..bc85777a711 100644 --- a/LUFA/Build/DMBS/DMBS/core.mk +++ b/LUFA/Build/DMBS/DMBS/core.mk @@ -55,7 +55,7 @@ SHELL = /bin/sh # Current DMBS release version -DMBS_VERSION = 0.3 +DMBS_VERSION = 0.4 # Converts a given input to a printable output using "(None)" if no items are in the list diff --git a/LUFA/Build/DMBS/DMBS/gcc.mk b/LUFA/Build/DMBS/DMBS/gcc.mk index b9347a60bc1..f3c695502fa 100644 --- a/LUFA/Build/DMBS/DMBS/gcc.mk +++ b/LUFA/Build/DMBS/DMBS/gcc.mk @@ -192,6 +192,12 @@ BASE_C_FLAGS := -x c -O$(OPTIMIZATION) -std=$(C_STANDARD) -Wstrict-prototypes BASE_CPP_FLAGS := -x c++ -O$(OPTIMIZATION) -std=$(CPP_STANDARD) BASE_ASM_FLAGS := -x assembler-with-cpp +# 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 + # Create a list of flags to pass to the linker BASE_LD_FLAGS := -lm -Wl,-Map=$(TARGET).map,--cref -Wl,--gc-sections ifeq ($(LINKER_RELAXATIONS), Y) diff --git a/LUFA/Build/DMBS/Readme.md b/LUFA/Build/DMBS/Readme.md index f5533a9abfe..448db1e7033 100644 --- a/LUFA/Build/DMBS/Readme.md +++ b/LUFA/Build/DMBS/Readme.md @@ -35,6 +35,10 @@ are included via a GNU Make `include` directive. While the DMBS `core` module is always required, you can pick and choose what other modules you wish to add to your user project. +DMBS is also used in the LUFA Project which provides a +[detailed documentation](http://www.fourwalledcubicle.com/files/LUFA/Doc/151115/html/_page__build_system.html) +of DMBS. + Here's an example user makefile: MCU = atmega128 From 51d3adfe1869e4a45c8368bb00a485be052eecdb Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 3 Apr 2016 13:52:00 +1000 Subject: [PATCH 07/11] Update to latest version of DMBS. --- LUFA/Build/DMBS/.gitignore | 9 ++ LUFA/Build/DMBS/DMBS/Modules.md | 26 ++++ LUFA/Build/DMBS/DMBS/atprogram.md | 111 +++++++++++++++++ LUFA/Build/DMBS/DMBS/atprogram.mk | 35 ------ LUFA/Build/DMBS/DMBS/avrdude.md | 116 ++++++++++++++++++ LUFA/Build/DMBS/DMBS/avrdude.mk | 37 ------ LUFA/Build/DMBS/DMBS/core.md | 116 ++++++++++++++++++ LUFA/Build/DMBS/DMBS/core.mk | 41 ------- LUFA/Build/DMBS/DMBS/cppcheck.md | 126 +++++++++++++++++++ LUFA/Build/DMBS/DMBS/cppcheck.mk | 41 ------- LUFA/Build/DMBS/DMBS/dfu.md | 114 +++++++++++++++++ LUFA/Build/DMBS/DMBS/dfu.mk | 33 ----- LUFA/Build/DMBS/DMBS/doxygen.md | 110 +++++++++++++++++ LUFA/Build/DMBS/DMBS/doxygen.mk | 42 +------ LUFA/Build/DMBS/DMBS/gcc.md | 196 ++++++++++++++++++++++++++++++ LUFA/Build/DMBS/DMBS/gcc.mk | 67 ---------- LUFA/Build/DMBS/DMBS/hid.md | 121 ++++++++++++++++++ LUFA/Build/DMBS/DMBS/hid.mk | 37 ------ LUFA/Build/DMBS/Readme.md | 4 +- 19 files changed, 1049 insertions(+), 333 deletions(-) create mode 100644 LUFA/Build/DMBS/.gitignore create mode 100644 LUFA/Build/DMBS/DMBS/Modules.md create mode 100644 LUFA/Build/DMBS/DMBS/atprogram.md create mode 100644 LUFA/Build/DMBS/DMBS/avrdude.md create mode 100644 LUFA/Build/DMBS/DMBS/core.md create mode 100644 LUFA/Build/DMBS/DMBS/cppcheck.md create mode 100644 LUFA/Build/DMBS/DMBS/dfu.md create mode 100644 LUFA/Build/DMBS/DMBS/doxygen.md create mode 100644 LUFA/Build/DMBS/DMBS/gcc.md create mode 100644 LUFA/Build/DMBS/DMBS/hid.md diff --git a/LUFA/Build/DMBS/.gitignore b/LUFA/Build/DMBS/.gitignore new file mode 100644 index 00000000000..938768908a1 --- /dev/null +++ b/LUFA/Build/DMBS/.gitignore @@ -0,0 +1,9 @@ +*.lss +*.bin +*.elf +*.hex +*.eep +*.map +*.o +*.d +*.sym diff --git a/LUFA/Build/DMBS/DMBS/Modules.md b/LUFA/Build/DMBS/DMBS/Modules.md new file mode 100644 index 00000000000..65caf8a605a --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/Modules.md @@ -0,0 +1,26 @@ +DMBS - Dean's Makefile Build System +=================================== + + +Modules Overview +--------------- + +The following modules are currently included: + + - [ATPROGRAM](atprogram.md) - Device Programming + - [AVRDUDE](avrdude.md) - Device Programming + - [CORE](core.md) - DMBS Core Functionality + - [CPPCHECK](cppcheck.md) - Static Code Analysis + - [DFU](dfu.md) - Device Programming + - [DOXYGEN](doxygen.md) - Automated Source Code Documentation + - [GCC](gcc.md) - Compiling/Assembling/Linking with GCC + - [HID](hid.md) - Device Programming + +To use a module, you will need to add the following boilerplate to your +makefile: + + # Include DMBS build script makefiles + DMBS_PATH ?= ../DMBS + +Which is then used to indicate the location of your DMBS installation, relative +to the current directory. diff --git a/LUFA/Build/DMBS/DMBS/atprogram.md b/LUFA/Build/DMBS/DMBS/atprogram.md new file mode 100644 index 00000000000..d84cc9860c0 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/atprogram.md @@ -0,0 +1,111 @@ +DMBS - Dean's Makefile Build System +=================================== + + +Module: ATPROGRAM +----------------- + +The ATPROGRAM module provides build targets for use with the official +`ATPROGRAM` back-end utility distributed with the free +[Atmel Studio](http://www.atmel.com) software released by Atmel. + +## Importing This Module into a Makefile: + +To use this module in your application makefile, add the following code to your +makefile: + + include $(DMBS_PATH)/atprogram.mk + +## Prerequisites: + +This module requires the `atprogram.exe` utility to be available in your +system's `PATH` variable. The `atprogram.exe` utility is distributed in Atmel +Studio (usually) inside the application install folder's `atbackend` +subdirectory. + +## Build Targets: + +The following targets are supported by this module: + + + + + + + + + + + + +
atprogramProgram the device FLASH memory with the application's executable data.
atprogram-eeProgram the device EEPROM memory with the application's EEPROM data.
+ +## Mandatory Variables: + +The following variables must be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile to be able to use this module: + + + + + + + + + + + + +
MCUName of the Atmel processor model (e.g. `at90usb1287`).
TARGETName of the application output file prefix (e.g. `TestApplication`).
+ +## Optional Variables: + +The following variables may be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile. If not specified, a default value will +be assumed. + + + + + + + + + + + + + + + + +
ATPROGRAM_PROGRAMMERName of the Atmel programmer or debugger tool to communicate with (e.g. `jtagice3`). Default is `atmelice`.
ATPROGRAM_INTERFACEName of the programming interface to use when programming the target (e.g. `spi`). Default is `jtag`.
ATPROGRAM_PORTName of the communication port to use when when programming with a serially connected tool (e.g. `COM2`). Default is `usb`.
+ +## Provided Variables: + +The following variables may be referenced in a user makefile (via `$(NAME)` +syntax) if desired, as they are provided by this module. + + + + + + + + +
N/AThis module provides no variables.
+ +## Provided Macros: + +The following macros may be referenced in a user makefile (via +`$(call NAME, ARG1, ARG2, ...)` syntax) if desired, as they are provided by +this module. + + + + + + + + +
N/AThis module provides no macros.
diff --git a/LUFA/Build/DMBS/DMBS/atprogram.mk b/LUFA/Build/DMBS/DMBS/atprogram.mk index 7e3815e4c8e..5c433d7dbc0 100644 --- a/LUFA/Build/DMBS/DMBS/atprogram.mk +++ b/LUFA/Build/DMBS/DMBS/atprogram.mk @@ -13,41 +13,6 @@ DMBS_BUILD_OPTIONAL_VARS += ATPROGRAM_PROGRAMMER ATPROGRAM_INTERFACE ATPROGRAM DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -# ----------------------------------------------------------------------------- -# DMBS ATPROGRAM Programmer Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to re-program a device using the Atmel atprogram -# utility in AVR Studio 5.x and Atmel Studio 6.0 onwards. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# atprogram - Program target FLASH with application using -# atprogram -# atprogram-ee - Program target EEPROM with application data -# using atprogram -# -# MANDATORY PARAMETERS: -# -# MCU - Microcontroller device model name -# TARGET - Application name -# -# OPTIONAL PARAMETERS: -# -# ATPROGRAM_PROGRAMMER - Name of programming hardware to use -# ATPROGRAM_INTERFACE - Name of programming interface to use -# ATPROGRAM_PORT - Name of communication port to use -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - SHELL = /bin/sh ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) diff --git a/LUFA/Build/DMBS/DMBS/avrdude.md b/LUFA/Build/DMBS/DMBS/avrdude.md new file mode 100644 index 00000000000..6af6c70fda2 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/avrdude.md @@ -0,0 +1,116 @@ +DMBS - Dean's Makefile Build System +=================================== + + +Module: AVRDUDE +----------------- + +The AVRDUDE module provides build targets for use with the official +open source `AVRDUDE` programmer utility, for the reprogramming of Atmel devices +using a wide variety of official and non-official programming devices and +bootloaders. + +## Importing This Module into a Makefile: + +To use this module in your application makefile, add the following code to your +makefile: + + include $(DMBS_PATH)/avrdude.mk + +## Prerequisites: + +This module requires the `avrdude` utility to be available in your +system's `PATH` variable. The `avrdude` utility is distributed on the project's +[official site](https://savannah.nongnu.org/projects/avrdude) but is also +made available in many *nix operating system's package managers. + +## Build Targets: + +The following targets are supported by this module: + + + + + + + + + + + + +
avrdudeProgram the device FLASH memory with the application's executable data.
avrdude-eeProgram the device EEPROM memory with the application's EEPROM data.
+ +## Mandatory Variables: + +The following variables must be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile to be able to use this module: + + + + + + + + + + + + +
MCUName of the Atmel processor model (e.g. `at90usb1287`).
TARGETName of the application output file prefix (e.g. `TestApplication`).
+ +## Optional Variables: + +The following variables may be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile. If not specified, a default value will +be assumed. + + + + + + + + + + + + + + + + + + + + +
AVRDUDE_PROGRAMMERName of the programmer/debugger tool or bootloader to communicate with (e.g. `jtagicemkii`). Default is `jtagicemkii`.
AVRDUDE_PORTName of the communication port to use when when programming with a serially connected tool (e.g. `COM2`). Default is `usb`.
AVRDUDE_FLAGSAdditional flags to pass to `avrdude` when invoking the tool. Default is empty (no additional flags).
AVRDUDE_MEMORYMemory space to program when executing the `avrdude` target (e.g. 'application` for an XMEGA device). Default is `flash`.
+ +## Provided Variables: + +The following variables may be referenced in a user makefile (via `$(NAME)` +syntax) if desired, as they are provided by this module. + + + + + + + + +
N/AThis module provides no variables.
+ +## Provided Macros: + +The following macros may be referenced in a user makefile (via +`$(call NAME, ARG1, ARG2, ...)` syntax) if desired, as they are provided by +this module. + + + + + + + + +
N/AThis module provides no macros.
diff --git a/LUFA/Build/DMBS/DMBS/avrdude.mk b/LUFA/Build/DMBS/DMBS/avrdude.mk index 149cf5c14b2..6dba68de451 100644 --- a/LUFA/Build/DMBS/DMBS/avrdude.mk +++ b/LUFA/Build/DMBS/DMBS/avrdude.mk @@ -13,43 +13,6 @@ DMBS_BUILD_OPTIONAL_VARS += AVRDUDE_PROGRAMMER AVRDUDE_PORT AVRDUDE_FLAGS AVRD DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -# ----------------------------------------------------------------------------- -# DMBS AVRDUDE Programmer Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to re-program a device using the open source -# avr-dude utility. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# avrdude - Program target FLASH with application using -# avrdude -# avrdude-ee - Program target EEPROM with application data -# using avrdude -# -# MANDATORY PARAMETERS: -# -# MCU - Microcontroller device model name -# TARGET - Application name -# -# OPTIONAL PARAMETERS: -# -# AVRDUDE_PROGRAMMER - Name of programming hardware to use -# AVRDUDE_PORT - Name of communication port to use -# AVRDUDE_FLAGS - Flags to pass to avr-dude -# AVRDUDE_MEMORY - Memory space to program application into (e.g. -# "application" for an XMEGA DFU device) -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - SHELL = /bin/sh ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) diff --git a/LUFA/Build/DMBS/DMBS/core.md b/LUFA/Build/DMBS/DMBS/core.md new file mode 100644 index 00000000000..a6faf74d16a --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/core.md @@ -0,0 +1,116 @@ +DMBS - Dean's Makefile Build System +=================================== + + +Module: CORE +------------ + +The CORE module provides the core DMBS infrastructure used by other DMBS +modules, and must always be imported. Additionally, this module provides the +help system for DMBS. + +## Importing This Module into a Makefile: + +To use this module in your application makefile, add the following code to your +makefile: + + include $(DMBS_PATH)/core.mk + +## Prerequisites: + +None. + +## Build Targets: + +The following targets are supported by this module: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
helpShow help for the current project, including a list of all available targets, variables and macros from the imported modules.
list_targetsShow a list of all build targets from the imported modules.
list_modulesShow a list of all imported modules.
list_mandatoryShow a list of all mandatory variables from the imported modules.
list_optionalShow a list of all optional variables from the imported modules.
list_providedShow a list of all variables provided by the imported modules.
list_macrosShow a list of all macros provided by the imported modules.
+ +## Mandatory Variables: + +The following variables must be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile to be able to use this module: + + + + + + + + +
N/AThis module has no mandatory variables.
+ +## Optional Variables: + +The following variables may be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile. If not specified, a default value will +be assumed. + + + + + + + + +
N/AThis module has no optional variables.
+ +## Provided Variables: + +The following variables may be referenced in a user makefile (via `$(NAME)` +syntax) if desired, as they are provided by this module. + + + + + + + + +
DMBS_VERSIONCurrent version of this DMBS release.
+ +## Provided Macros: + +The following macros may be referenced in a user makefile (via +`$(call NAME, ARG1, ARG2, ...)` syntax) if desired, as they are provided by +this module. + + + + + + + + +
N/AThis module provides no macros.
diff --git a/LUFA/Build/DMBS/DMBS/core.mk b/LUFA/Build/DMBS/DMBS/core.mk index bc85777a711..913731e6971 100644 --- a/LUFA/Build/DMBS/DMBS/core.mk +++ b/LUFA/Build/DMBS/DMBS/core.mk @@ -13,55 +13,14 @@ DMBS_BUILD_OPTIONAL_VARS += DMBS_BUILD_PROVIDED_VARS += DMBS_VERSION DMBS_BUILD_PROVIDED_MACROS += -# ----------------------------------------------------------------------------- -# DMBS Core Build System Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of core build targets for the DMBS build system -# ----------------------------------------------------------------------------- -# TARGETS: -# -# help - Build system help -# list_targets - List all build targets -# list_modules - List all build modules -# list_mandatory - List all mandatory make variables required by -# the included build modules of the application -# list_optional - List all optional make variables required by -# the included build modules of the application -# list_provided - List all provided make variables from the -# included build modules of the application -# list_macros - List all provided make macros from the -# included build modules of the application -# -# MANDATORY PARAMETERS: -# -# (None) -# -# OPTIONAL PARAMETERS: -# -# (None) -# -# PROVIDED VARIABLES: -# -# DMBS_VERSION -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - SHELL = /bin/sh - # Current DMBS release version DMBS_VERSION = 0.4 - # Converts a given input to a printable output using "(None)" if no items are in the list CONVERT_TO_PRINTABLE = $(if $(strip $(1)), $(1), (None)) - # Build sorted and filtered lists of the included build module data SORTED_DMBS_BUILD_MODULES = $(sort $(DMBS_BUILD_MODULES)) SORTED_DMBS_BUILD_TARGETS = $(sort $(DMBS_BUILD_TARGETS)) diff --git a/LUFA/Build/DMBS/DMBS/cppcheck.md b/LUFA/Build/DMBS/DMBS/cppcheck.md new file mode 100644 index 00000000000..d10e39040d2 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/cppcheck.md @@ -0,0 +1,126 @@ +DMBS - Dean's Makefile Build System +=================================== + + +Module: CPPCHECK +----------------- + +The CPPCHECK module provides build targets to perform static analysis of the +user application, using the open source `cppcheck` tool. + +## Importing This Module into a Makefile: + +To use this module in your application makefile, add the following code to your +makefile: + + include $(DMBS_PATH)/cppcheck.mk + +## Prerequisites: + +This module requires the `cppcheck` utility to be available in your system's +`PATH` variable. The `cppcheck` utility is distributed on the project's +[official site](http://cppcheck.sourceforge.net/) but is also +made available in many *nix operating system's package managers. + +## Build Targets: + +The following targets are supported by this module: + + + + + + + + + + + + +
cppcheckScan the project with CPPCHECK, and show all discovered issues.
cppcheck-configCheck the project with CPPCHECK, to find missing header paths.
+ +## Mandatory Variables: + +The following variables must be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile to be able to use this module: + + + + + + + + +
SRCList of all project source files to scan.
+ +## Optional Variables: + +The following variables may be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile. If not specified, a default value will +be assumed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CPPCHECK_INCLUDESExtra include paths to search, for any missing header files. Default is empty (no additional paths).
CPPCHECK_EXCLUDESList of source files, file paths or path fragments to exclude from the scan. Default is empty (no exclusions).
CPPCHECK_MSG_TEMPLATETemplate for error and warning message output. Default is `{file}:{line}: {severity} ({id}): {message}`.
CPPCHECK_ENABLEList of CPPCHECK checks to enable. Default is `all`.
CPPCHECK_SUPPRESSList of CPPCHECK checks to ignore. Default is `variableScope missingInclude`.
CPPCHECK_FAIL_ON_WARNINGBoolean, if `Y` the build will fail if CPPCHECK discovers any errors or warnings. If `N`, fail only on errors. Default is `Y`.
CPPCHECK_QUIETBoolean, if `Y` CPPCHECK will suppress all output except for discovered errors or warnings. If `N`, scan progress will be emitted. Default is `Y`.
CPPCHECK_FLAGS_Additional flags to pass to CPPCHECK when scans are started. Default is empty (no additional flags).
+ +## Provided Variables: + +The following variables may be referenced in a user makefile (via `$(NAME)` +syntax) if desired, as they are provided by this module. + + + + + + + + +
N/AThis module provides no variables.
+ +## Provided Macros: + +The following macros may be referenced in a user makefile (via +`$(call NAME, ARG1, ARG2, ...)` syntax) if desired, as they are provided by +this module. + + + + + + + + +
N/AThis module provides no macros.
diff --git a/LUFA/Build/DMBS/DMBS/cppcheck.mk b/LUFA/Build/DMBS/DMBS/cppcheck.mk index 2e0be12ad19..70b9ed721ee 100644 --- a/LUFA/Build/DMBS/DMBS/cppcheck.mk +++ b/LUFA/Build/DMBS/DMBS/cppcheck.mk @@ -14,47 +14,6 @@ DMBS_BUILD_OPTIONAL_VARS += CPPCHECK_INCLUDES CPPCHECK_EXCLUDES CPPCHECK_MSG_T DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -# ----------------------------------------------------------------------------- -# DMBS CPPCheck Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to scan a project with the free "cppcheck" static -# analysis tool, to check for code errors at runtime -# (see http://cppcheck.sourceforge.net). -# ----------------------------------------------------------------------------- -# TARGETS: -# -# cppcheck - Scan the project with CPPCheck -# cppcheck-config - Use CPPCheck to look for missing include files -# -# MANDATORY PARAMETERS: -# -# SRC - List of source files to statically analyze -# -# OPTIONAL PARAMETERS: -# -# CPPCHECK_INCLUDES - Extra include paths to search for missing -# header files -# CPPCHECK_EXCLUDES - Source file paths to exclude checking (can be -# a path fragment if desired) -# CPPCHECK_MSG_TEMPLATE - Template for cppcheck error and warning output -# CPPCHECK_ENABLE - General cppcheck category checks to enable -# CPPCHECK_SUPPRESS - Specific cppcheck warnings to disable by ID -# CPPCHECK_FAIL_ON_WARNING - Set to Y to fail the build on cppcheck -# warnings, N to continue even if warnings occur -# CPPCHECK_QUIET - Enable cppcheck verbose or quiet output mode -# CPPCHECK_FLAGS - Additional flags to pass to cppcheck -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - SHELL = /bin/sh ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) diff --git a/LUFA/Build/DMBS/DMBS/dfu.md b/LUFA/Build/DMBS/DMBS/dfu.md new file mode 100644 index 00000000000..a674d4e75bb --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/dfu.md @@ -0,0 +1,114 @@ +DMBS - Dean's Makefile Build System +=================================== + + +Module: DFU +----------------- + +The DFU module provides build targets to program a USB connected target running +a DFU class bootloader, via the official Atmel FLIP utility running via the +command line, or the open source `DFU-Programmer` tool. + +## Importing This Module into a Makefile: + +To use this module in your application makefile, add the following code to your +makefile: + + include $(DMBS_PATH)/dfu.mk + +## Prerequisites: + +This module requires the `batchisp` utility to be available in your system's +`PATH` variable. The `batchisp` utility is distributed as part of Atmel's FLIP +software which can be downloaded from the [official site](http://www.atmel.com). + +This module requires the `dfu-programmer` utility to be available in your +system's `PATH` variable. The `dfu-programmer` utility is distributed from the +[official project site](https://dfu-programmer.github.io/). + +## Build Targets: + +The following targets are supported by this module: + + + + + + + + + + + + + + + + + + + + +
flipProgram the application into the device's flash memory, using Atmel FLIP.
flip-eeProgram the application's EEPROM data into the device's EEPROM memory, using Atmel FLIP.
dfuProgram the application into the device's flash memory, using `dfu-programmer`.
dfu-eeProgram the application's EEPROM data into the device's EEPROM memory, using `dfu-programmer`.
+ +## Mandatory Variables: + +The following variables must be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile to be able to use this module: + + + + + + + + + + + + +
MCUName of the Atmel processor model (e.g. `at90usb1287`).
TARGETName of the application output file prefix (e.g. `TestApplication`).
+ +## Optional Variables: + +The following variables may be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile. If not specified, a default value will +be assumed. + + + + + + + + +
N/AThis module has no optional variables.
+ +## Provided Variables: + +The following variables may be referenced in a user makefile (via `$(NAME)` +syntax) if desired, as they are provided by this module. + + + + + + + + +
N/AThis module provides no variables.
+ +## Provided Macros: + +The following macros may be referenced in a user makefile (via +`$(call NAME, ARG1, ARG2, ...)` syntax) if desired, as they are provided by +this module. + + + + + + + + +
N/AThis module provides no macros.
diff --git a/LUFA/Build/DMBS/DMBS/dfu.mk b/LUFA/Build/DMBS/DMBS/dfu.mk index 62365c141a4..1349e17a8c8 100644 --- a/LUFA/Build/DMBS/DMBS/dfu.mk +++ b/LUFA/Build/DMBS/DMBS/dfu.mk @@ -13,39 +13,6 @@ DMBS_BUILD_OPTIONAL_VARS += DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -# ----------------------------------------------------------------------------- -# DMBS DFU Bootloader Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to re-program a device currently running a DFU -# class bootloader with a project's FLASH and EEPROM files. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# flip - Program FLASH into target via Atmel FLIP -# flip-ee - Program EEPROM into target via Atmel FLIP -# dfu - Program FLASH into target via dfu-programmer -# dfu-ee - Program EEPROM into target via dfu-programmer -# -# MANDATORY PARAMETERS: -# -# MCU - Microcontroller device model name -# TARGET - Application name -# -# OPTIONAL PARAMETERS: -# -# (None) -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - SHELL = /bin/sh ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) diff --git a/LUFA/Build/DMBS/DMBS/doxygen.md b/LUFA/Build/DMBS/DMBS/doxygen.md new file mode 100644 index 00000000000..11f6be5e33b --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/doxygen.md @@ -0,0 +1,110 @@ +DMBS - Dean's Makefile Build System +=================================== + + +Module: DOXYGEN +----------------- + +The DOXYGEN module provides build targets to automatically generate API +documentation for a project, using the open-source Doxygen tool. + +## Importing This Module into a Makefile: + +To use this module in your application makefile, add the following code to your +makefile: + + include $(DMBS_PATH)/doxygen.mk + +## Prerequisites: + +This module requires the `doxygen` utility to be available in your system's +`PATH` variable. The `doxygen` utility is distributed on the project's +[official site](http://doxygen.org/) but is also +made available in many *nix operating system's package managers. + +## Build Targets: + +The following targets are supported by this module: + + + + + + + + + + + + + + + + +
doxygenGenerate project documentation, via Doxygen.
doxygen-createCreate a new project Doxygen template, which can then be customized.
doxygen-upgradeUpgrade an existing project Doxygen template to the latest Doxygen version.
+ +## Mandatory Variables: + +The following variables must be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile to be able to use this module: + + + + + + + + +
N/AThis module has no mandatory variables.
+ +## Optional Variables: + +The following variables may be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile. If not specified, a default value will +be assumed. + + + + + + + + + + + + + + + + +
DOXYGEN_CONFName of the Doxygen project configuration file that should be used when generating documentation, or creating/upgrading the configuration file.
DOXYGEN_FAIL_ON_WARNINGBoolean, if `Y` the build will fail if Doxygen encounters any errors or warnings. If `N`, fail only on errors. Default is `Y`.
DOXYGEN_OVERRIDE_PARAMSList of `NAME=VALUE` parameters which should override the values specified in the project configuration file, when building documentation.
+ +## Provided Variables: + +The following variables may be referenced in a user makefile (via `$(NAME)` +syntax) if desired, as they are provided by this module. + + + + + + + + +
N/AThis module provides no variables.
+ +## Provided Macros: + +The following macros may be referenced in a user makefile (via +`$(call NAME, ARG1, ARG2, ...)` syntax) if desired, as they are provided by +this module. + + + + + + + + +
N/AThis module provides no macros.
diff --git a/LUFA/Build/DMBS/DMBS/doxygen.mk b/LUFA/Build/DMBS/DMBS/doxygen.mk index bcde61b473d..73bc7ff401b 100644 --- a/LUFA/Build/DMBS/DMBS/doxygen.mk +++ b/LUFA/Build/DMBS/DMBS/doxygen.mk @@ -7,48 +7,12 @@ # DMBS_BUILD_MODULES += DOXYGEN -DMBS_BUILD_TARGETS += doxygen doxygen_upgrade doxygen_create +DMBS_BUILD_TARGETS += doxygen doxygen-upgrade doxygen-create DMBS_BUILD_MANDATORY_VARS += DMBS_BUILD_OPTIONAL_VARS += DOXYGEN_CONF DOXYGEN_FAIL_ON_WARNING DOXYGEN_OVERRIDE_PARAMS DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -# ----------------------------------------------------------------------------- -# DMBS Doxygen Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to automatically build Doxygen documentation for -# a project (see www.doxygen.org). -# ----------------------------------------------------------------------------- -# TARGETS: -# -# doxygen - Build Doxygen Documentation -# doxygen_create - Create a new Doxygen configuration file using -# the latest template -# doxygen_upgrade - Upgrade an existing Doxygen configuration file -# to the latest template -# -# MANDATORY PARAMETERS: -# -# (None) -# -# OPTIONAL PARAMETERS: -# -# DOXYGEN_CONF - Doxygen configuration filename -# DOXYGEN_FAIL_ON_WARNING - Set to Y to fail the build on Doxygen warnings, -# N to continue even if warnings occur -# DOXYGEN_OVERRIDE_PARAMS - Parameters to override in the doxygen -# configuration file -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - SHELL = /bin/sh ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) @@ -86,12 +50,12 @@ doxygen: $(DOXYGEN_CONF) $(MAKEFILE_LIST) $(DOXYGEN_CMD) # Upgrades an existing Doxygen configuration file to the latest Doxygen template, preserving settings -doxygen_upgrade: $(DOXYGEN_CONF) $(MAKEFILE_LIST) +doxygen-upgrade: $(DOXYGEN_CONF) $(MAKEFILE_LIST) @echo $(MSG_DOXYGEN_CMD) Upgrading configuration file \"$(DOXYGEN_CONF)\" with latest template doxygen -u $(DOXYGEN_CONF) > /dev/null # Creates a new Doxygen configuration file with the set file name -doxygen_create: $(MAKEFILE_LIST) +doxygen-create: $(MAKEFILE_LIST) @echo $(MSG_DOXYGEN_CMD) Creating new configuration file \"$(DOXYGEN_CONF)\" with latest template doxygen -g $(DOXYGEN_CONF) > /dev/null diff --git a/LUFA/Build/DMBS/DMBS/gcc.md b/LUFA/Build/DMBS/DMBS/gcc.md new file mode 100644 index 00000000000..d25085fa678 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/gcc.md @@ -0,0 +1,196 @@ +DMBS - Dean's Makefile Build System +=================================== + + +Module: GCC +----------------- + +The GCC module provides build targets to compile a user application, using a +variant of GCC for a specific target architecture (such as `avr-gcc`). + +## Importing This Module into a Makefile: + +To use this module in your application makefile, add the following code to your +makefile: + + include $(DMBS_PATH)/gcc.mk + +## Prerequisites: + +This module requires the GCC compiler to be installed and available in the +system's `PATH` variable for the desired target architecture. + +## Build Targets: + +The following targets are supported by this module: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sizeShow the compiled binary size for the various memory segments.
symbol-sizesShow the size of each symbol in the compiled binary (useful to find large functions to optimize further).
allBuild application and generate all binary (BIN, ELF, HEX) and auxiliary (LSS, MAP, SYM, etc.) output files.
libGenerate a static `.a` library from the application code, containing the flash region's data.
elfGenerate an ELF debug file from the application code, containing all region's data.
binGenerate a flat BIN binary file from the application code, containing the flash region's data.
hexGenerate a pair of Intel HEX files from the application code, containing the flash region's data (HEX) and EEPROM data (EEP).
lssGenerate a LSS listing file showing the disassembly of the compiled application.
cleanRemove all generated project intermediary and binary output files.
mostlycleanRemove all generated project intermediary output files, but preserve the binary output files.
+ +## Mandatory Variables: + +The following variables must be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile to be able to use this module: + + + + + + + + + + + + + + + + + + + + +
MCUName of the Atmel processor model (e.g. `at90usb1287`).
TARGETName of the application output file prefix (e.g. `TestApplication`).
ARCHTarget device architecture (e.g. `AVR8`).
SRCList of all project source files (C, C++, ASM).
+ +## Optional Variables: + +The following variables may be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile. If not specified, a default value will +be assumed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OPTIMIZATIONOptimization level to use when compiling C and C++ source files. Default is `s` (optimize for smallest size).
C_STANDARDC language standard used when compiling C language source files. Default is `gnu99` (C99 standard with GNU extensions)./td> +
CPP_STANDARDC++ language standard used when compiling C++ language source files. Default is `gnu++98` (C++98 standard with GNU extensions)./td> +
F_CPUProcessor core clock frequency, in Hz. This is used by some architectures for functions such as software spin-loop delays. Default is blank (no value defined).
C_FLAGSCommon GCC flags passed to the compiler for C language (C) input files. Default is blank (no additional flags).
CPP_FLAGSCommon GCC flags passed to the compiler for C++ language (CPP) input files. Default is blank (no additional flags).
ASM_FLAGSCommon GCC flags passed to the assembler for assembly language (S) input files. Default is blank (no additional flags).
CC_FLAGSCommon GCC flags passed to the compiler for all source file types. Default is blank (no additional flags).
LD_FLAGSExtra flags to pass to the GNU linker when linking the compiled object files into the resulting binary. Default is blank (no additional flags).
LINKER_RELAXATIONSBoolean, if `Y` linker relaxations will be enabled to slightly reduce the resulting binary's size. Default is `Y`.
OBJDIRDirectory to store the intermediate object files, as they are generated from the source files. Default is `obj`.
OBJECT_FILESList of additional `.o` object files to link into the final binary. Default is blank (no additional objects).
DEBUG_FORMATDebug ELF file format to generate. Default is `dwarf-2`.
DEBUG_LEVELLevel of the debugging information to generate in the compiled object files. Debug is 2 (medium level debugging information).
COMPILER_PATHPath to the compiler to use, in case a specific compiler should be substituted for the one in the system's `PATH` variable. Default is blank (use `PATH` provided compiler).
+ +## Provided Variables: + +The following variables may be referenced in a user makefile (via `$(NAME)` +syntax) if desired, as they are provided by this module. + + + + + + + + +
N/AThis module provides no variables.
+ +## Provided Macros: + +The following macros may be referenced in a user makefile (via +`$(call NAME, ARG1, ARG2, ...)` syntax) if desired, as they are provided by +this module. + + + + + + + + +
N/AThis module provides no macros.
diff --git a/LUFA/Build/DMBS/DMBS/gcc.mk b/LUFA/Build/DMBS/DMBS/gcc.mk index f3c695502fa..c7299edff82 100644 --- a/LUFA/Build/DMBS/DMBS/gcc.mk +++ b/LUFA/Build/DMBS/DMBS/gcc.mk @@ -13,73 +13,6 @@ DMBS_BUILD_OPTIONAL_VARS += BOARD OPTIMIZATION C_STANDARD CPP_STANDARD F_CPU C DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -# ----------------------------------------------------------------------------- -# DMBS GCC Compiler Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to build a C, C++ and/or Assembly application -# via the AVR-GCC compiler. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# size - List built application size -# symbol-sizes - Print application symbols from the binary ELF -# file as a list sorted by size in bytes -# all - Build application and list size -# lib - Build and archive source files into a library -# elf - Build application ELF debug object file -# bin - Build application BIN binary object file -# hex - Build application HEX object file -# lss - Build application LSS assembly listing file -# clean - Remove all project intermediary and binary -# output files -# mostlyclean - Remove intermediary output files, but -# preserve binaries -# .s - Compile C/C++ source file into an assembly file -# for manual code inspection -# -# MANDATORY PARAMETERS: -# -# TARGET - Application name -# ARCH - Device architecture name -# MCU - Microcontroller device model name -# SRC - List of input source files (*.c, *.cpp, *.S) -# -# OPTIONAL PARAMETERS: -# -# OPTIMIZATION - Optimization level -# C_STANDARD - C Language Standard to use -# CPP_STANDARD - C++ Language Standard to use -# F_CPU - Speed of the CPU, in Hz -# C_FLAGS - Flags to pass to the C compiler only -# CPP_FLAGS - Flags to pass to the C++ compiler only -# ASM_FLAGS - Flags to pass to the assembler only -# CC_FLAGS - Common flags to pass to the C/C++ compiler and -# assembler -# LD_FLAGS - Flags to pass to the linker -# LINKER_RELAXATIONS - Enable or disable linker relaxations to -# decrease binary size (note: can cause link -# failures on systems with an unpatched binutils) -# OBJDIR - Directory for the output object and dependency -# files; if equal to ".", the output files will -# be generated in the same folder as the sources -# OBJECT_FILES - Extra object files to link in to the binaries -# DEBUG_FORMAT - Format of the debugging information to -# 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: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - SHELL = /bin/sh ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) diff --git a/LUFA/Build/DMBS/DMBS/hid.md b/LUFA/Build/DMBS/DMBS/hid.md new file mode 100644 index 00000000000..691a422bab6 --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/hid.md @@ -0,0 +1,121 @@ +DMBS - Dean's Makefile Build System +=================================== + + +Module: HID +----------------- + +The HID module provides build targets to program a target running a PJRC Teensy +or LUFA compatible HID class bootloader. + +## Importing This Module into a Makefile: + +To use this module in your application makefile, add the following code to your +makefile: + + include $(DMBS_PATH)/hid.mk + +## Prerequisites: + +This module requires the `teensy_loader_cli` utility to be available in your +system's `PATH` variable. The `teensy_loader_cli` utility is distributed in +a modified form (from PJRC) in the LUFA project's +[official site](http://www.lufa-lib.org/), but is also +made available in its original form directly from the +[PJRC website](https://www.pjrc.com/teensy/loader_cli.html). Note that the +original tool works with Teensy boards only, and not LUFA HID bootloader +devices. + +This module requires the `hid_bootloader_cli` utility to be available in your +system's `PATH` variable. The `hid_bootloader_cli` Python script utility is +distributed in LUFA project's [official site](http://www.lufa-lib.org/). + +This module requires the AVR-GCC compiler to be installed and available in the +system's `PATH` variable. + +## Build Targets: + +The following targets are supported by this module: + + + + + + + + + + + + + + + + + + + + +
hidProgram a LUFA HID class bootloader device, using the `hid_bootloader_cli.py` Python script.
hid-eeProgram a LUFA HID class bootloader device's EEPROM, using the `hid_bootloader_cli.py` Python script and a shim application which is programmed into the target's flash.
teensyProgram a LUFA HID class bootloader device or Teensy board, using the `teensy_loader_cli` tool.
teensy-eeProgram a LUFA HID class bootloader device's EEPROM, using the `teensy_loader_cli` tool and a shim application which is programmed into the target's flash.
+ +## Mandatory Variables: + +The following variables must be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile to be able to use this module: + + + + + + + + + + + + +
MCUName of the Atmel processor model (e.g. `at90usb1287`).
TARGETName of the application output file prefix (e.g. `TestApplication`).
+ +## Optional Variables: + +The following variables may be defined (with a `NAME = VALUE` syntax, one +variable per line) in the user makefile. If not specified, a default value will +be assumed. + + + + + + + + +
N/AThis module has no optional variables.
+ +## Provided Variables: + +The following variables may be referenced in a user makefile (via `$(NAME)` +syntax) if desired, as they are provided by this module. + + + + + + + + +
N/AThis module provides no variables.
+ +## Provided Macros: + +The following macros may be referenced in a user makefile (via +`$(call NAME, ARG1, ARG2, ...)` syntax) if desired, as they are provided by +this module. + + + + + + + + +
N/AThis module provides no macros.
diff --git a/LUFA/Build/DMBS/DMBS/hid.mk b/LUFA/Build/DMBS/DMBS/hid.mk index 3f0d456e1f2..3575f377732 100644 --- a/LUFA/Build/DMBS/DMBS/hid.mk +++ b/LUFA/Build/DMBS/DMBS/hid.mk @@ -13,43 +13,6 @@ DMBS_BUILD_OPTIONAL_VARS += DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -# ----------------------------------------------------------------------------- -# DMBS HID Bootloader Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of targets to re-program a device currently running a HID -# class bootloader with a project's FLASH files. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# hid - Program FLASH into target via -# hid_bootloader_cli -# hid-ee - Program EEPROM into target via a temporary -# AVR application and hid_bootloader_cli -# teensy - Program FLASH into target via -# teensy_loader_cli -# teensy-ee - Program EEPROM into target via a temporary -# AVR application and teensy_loader_cli -# -# MANDATORY PARAMETERS: -# -# MCU - Microcontroller device model name -# TARGET - Application name -# -# OPTIONAL PARAMETERS: -# -# (None) -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - SHELL = /bin/sh DMBS_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) diff --git a/LUFA/Build/DMBS/Readme.md b/LUFA/Build/DMBS/Readme.md index 448db1e7033..05125ce5b62 100644 --- a/LUFA/Build/DMBS/Readme.md +++ b/LUFA/Build/DMBS/Readme.md @@ -35,9 +35,7 @@ are included via a GNU Make `include` directive. While the DMBS `core` module is always required, you can pick and choose what other modules you wish to add to your user project. -DMBS is also used in the LUFA Project which provides a -[detailed documentation](http://www.fourwalledcubicle.com/files/LUFA/Doc/151115/html/_page__build_system.html) -of DMBS. +[See here for the documentation on the individual modules provided by DMBS.](DMBS/Modules.md) Here's an example user makefile: From 0ecd09c3e1d1ed47c940541c41b79815b16bd627 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 3 Apr 2016 14:51:48 +1000 Subject: [PATCH 08/11] Add LUFA DMBS extension modules, use DMBS in project makefiles. --- Bootloaders/CDC/makefile | 23 +- Bootloaders/DFU/makefile | 23 +- Bootloaders/HID/makefile | 23 +- Bootloaders/MassStorage/makefile | 23 +- Bootloaders/Printer/makefile | 23 +- BuildTests/BoardDriverTest/makefile | 5 +- BuildTests/BoardDriverTest/makefile.test | 12 +- BuildTests/BootloaderTest/makefile | 5 +- BuildTests/ModuleTest/makefile | 5 +- BuildTests/ModuleTest/makefile.test | 12 +- BuildTests/SingleUSBModeTest/makefile | 5 +- BuildTests/SingleUSBModeTest/makefile.test | 12 +- BuildTests/StaticAnalysisTest/makefile | 8 +- Demos/Device/ClassDriver/AudioInput/makefile | 25 +- Demos/Device/ClassDriver/AudioOutput/makefile | 25 +- Demos/Device/ClassDriver/DualMIDI/makefile | 25 +- .../ClassDriver/DualVirtualSerial/makefile | 25 +- Demos/Device/ClassDriver/GenericHID/makefile | 25 +- Demos/Device/ClassDriver/Joystick/makefile | 25 +- Demos/Device/ClassDriver/Keyboard/makefile | 25 +- .../Device/ClassDriver/KeyboardMouse/makefile | 25 +- .../KeyboardMouseMultiReport/makefile | 25 +- Demos/Device/ClassDriver/MIDI/makefile | 25 +- Demos/Device/ClassDriver/MassStorage/makefile | 25 +- .../ClassDriver/MassStorageKeyboard/makefile | 25 +- Demos/Device/ClassDriver/Mouse/makefile | 25 +- .../Device/ClassDriver/RNDISEthernet/makefile | 25 +- .../Device/ClassDriver/VirtualSerial/makefile | 25 +- .../VirtualSerialMassStorage/makefile | 25 +- .../ClassDriver/VirtualSerialMouse/makefile | 25 +- .../Incomplete/TestAndMeasurement/makefile | 25 +- Demos/Device/LowLevel/AudioInput/makefile | 25 +- Demos/Device/LowLevel/AudioOutput/makefile | 25 +- Demos/Device/LowLevel/BulkVendor/makefile | 25 +- .../LowLevel/DualVirtualSerial/makefile | 25 +- Demos/Device/LowLevel/GenericHID/makefile | 25 +- Demos/Device/LowLevel/Joystick/makefile | 25 +- Demos/Device/LowLevel/Keyboard/makefile | 25 +- Demos/Device/LowLevel/KeyboardMouse/makefile | 25 +- Demos/Device/LowLevel/MIDI/makefile | 25 +- Demos/Device/LowLevel/MassStorage/makefile | 25 +- Demos/Device/LowLevel/Mouse/makefile | 25 +- Demos/Device/LowLevel/RNDISEthernet/makefile | 25 +- Demos/Device/LowLevel/VirtualSerial/makefile | 25 +- .../ClassDriver/MouseHostDevice/makefile | 25 +- .../ClassDriver/AndroidAccessoryHost/makefile | 25 +- .../Host/ClassDriver/AudioInputHost/makefile | 25 +- .../Host/ClassDriver/AudioOutputHost/makefile | 25 +- .../JoystickHostWithParser/makefile | 25 +- Demos/Host/ClassDriver/KeyboardHost/makefile | 25 +- .../KeyboardHostWithParser/makefile | 25 +- Demos/Host/ClassDriver/MIDIHost/makefile | 25 +- .../Host/ClassDriver/MassStorageHost/makefile | 25 +- Demos/Host/ClassDriver/MouseHost/makefile | 25 +- .../ClassDriver/MouseHostWithParser/makefile | 25 +- Demos/Host/ClassDriver/PrinterHost/makefile | 25 +- .../ClassDriver/RNDISEthernetHost/makefile | 25 +- .../Host/ClassDriver/StillImageHost/makefile | 25 +- .../ClassDriver/VirtualSerialHost/makefile | 25 +- .../LowLevel/AndroidAccessoryHost/makefile | 25 +- Demos/Host/LowLevel/AudioInputHost/makefile | 25 +- Demos/Host/LowLevel/AudioOutputHost/makefile | 25 +- Demos/Host/LowLevel/GenericHIDHost/makefile | 25 +- .../LowLevel/JoystickHostWithParser/makefile | 25 +- Demos/Host/LowLevel/KeyboardHost/makefile | 25 +- .../LowLevel/KeyboardHostWithParser/makefile | 25 +- Demos/Host/LowLevel/MIDIHost/makefile | 25 +- Demos/Host/LowLevel/MassStorageHost/makefile | 25 +- Demos/Host/LowLevel/MouseHost/makefile | 25 +- .../LowLevel/MouseHostWithParser/makefile | 25 +- Demos/Host/LowLevel/PrinterHost/makefile | 25 +- .../Host/LowLevel/RNDISEthernetHost/makefile | 25 +- Demos/Host/LowLevel/StillImageHost/makefile | 25 +- .../Host/LowLevel/VirtualSerialHost/makefile | 25 +- LUFA/Build/DMBS/Template/makefile | 11 +- LUFA/Build/LUFA/lufa-gcc.mk | 43 + LUFA/Build/LUFA/lufa-sources.mk | 95 ++ LUFA/Build/lufa_build.mk | 78 +- LUFA/Build/lufa_sources.mk | 138 +-- LUFA/CodeTemplates/makefile_template | 25 +- LUFA/DoxygenPages/BuildSystem.txt | 883 ++---------------- LUFA/DoxygenPages/ChangeLog.txt | 2 + LUFA/DoxygenPages/DevelopingWithLUFA.txt | 1 - LUFA/DoxygenPages/ExportingLibrary.txt | 112 --- .../AS5_AS6_Import/AS5_AS6_Import_Step1.png | Bin 98201 -> 0 bytes .../AS5_AS6_Import/AS5_AS6_Import_Step2.png | Bin 100532 -> 0 bytes .../AS5_AS6_Import/AS5_AS6_Import_Step3.png | Bin 32987 -> 0 bytes .../AS5_AS6_Import/AS5_AS6_Import_Step4.png | Bin 161824 -> 0 bytes .../AS5_AS6_Import/AS5_AS6_Import_Step5_1.png | Bin 43666 -> 0 bytes .../AS5_AS6_Import/AS5_AS6_Import_Step5_2.png | Bin 28918 -> 0 bytes .../AS5_AS6_Import/AS5_AS6_Import_Step5_3.png | Bin 23561 -> 0 bytes LUFA/DoxygenPages/ProgrammingApps.txt | 3 - LUFA/doxyfile | 1 + LUFA/makefile | 43 +- Projects/AVRISP-MKII/makefile | 25 +- Projects/Benito/makefile | 25 +- Projects/HIDReportViewer/makefile | 25 +- Projects/LEDNotifier/makefile | 25 +- Projects/MIDIToneGenerator/makefile | 25 +- Projects/Magstripe/makefile | 25 +- Projects/MediaController/makefile | 25 +- Projects/MissileLauncher/makefile | 25 +- Projects/RelayBoard/makefile | 25 +- Projects/SerialToLCD/makefile | 25 +- Projects/TempDataLogger/makefile | 25 +- Projects/USBtoSerial/makefile | 25 +- Projects/Webserver/makefile | 25 +- Projects/XPLAINBridge/makefile | 25 +- 108 files changed, 1514 insertions(+), 1975 deletions(-) create mode 100644 LUFA/Build/LUFA/lufa-gcc.mk create mode 100644 LUFA/Build/LUFA/lufa-sources.mk delete mode 100644 LUFA/DoxygenPages/ExportingLibrary.txt delete mode 100644 LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step1.png delete mode 100644 LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step2.png delete mode 100644 LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step3.png delete mode 100644 LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step4.png delete mode 100644 LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_1.png delete mode 100644 LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_2.png delete mode 100644 LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_3.png diff --git a/Bootloaders/CDC/makefile b/Bootloaders/CDC/makefile index 3e265b8a606..cee20f9fec5 100644 --- a/Bootloaders/CDC/makefile +++ b/Bootloaders/CDC/makefile @@ -45,11 +45,18 @@ BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, Boot # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Bootloaders/DFU/makefile b/Bootloaders/DFU/makefile index 965074b0d0e..4b31f76f533 100644 --- a/Bootloaders/DFU/makefile +++ b/Bootloaders/DFU/makefile @@ -45,11 +45,18 @@ BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, Boot # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Bootloaders/HID/makefile b/Bootloaders/HID/makefile index 8e5ac614901..a76faf06ef3 100644 --- a/Bootloaders/HID/makefile +++ b/Bootloaders/HID/makefile @@ -38,11 +38,18 @@ BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Bootloaders/MassStorage/makefile b/Bootloaders/MassStorage/makefile index 506c941ff6a..59bc9e434ec 100644 --- a/Bootloaders/MassStorage/makefile +++ b/Bootloaders/MassStorage/makefile @@ -58,11 +58,18 @@ endif # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Bootloaders/Printer/makefile b/Bootloaders/Printer/makefile index abdf9c890e9..e8f6a730200 100644 --- a/Bootloaders/Printer/makefile +++ b/Bootloaders/Printer/makefile @@ -45,11 +45,18 @@ BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, Boot # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/BuildTests/BoardDriverTest/makefile b/BuildTests/BoardDriverTest/makefile index 56fdd8f754c..cf4ed6969eb 100644 --- a/BuildTests/BoardDriverTest/makefile +++ b/BuildTests/BoardDriverTest/makefile @@ -64,5 +64,6 @@ clean: .PHONY: all begin end makeboardlist testboards clean -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk diff --git a/BuildTests/BoardDriverTest/makefile.test b/BuildTests/BoardDriverTest/makefile.test index c9ef890b876..c1d84e41a43 100644 --- a/BuildTests/BoardDriverTest/makefile.test +++ b/BuildTests/BoardDriverTest/makefile.test @@ -23,5 +23,13 @@ LUFA_PATH = ../../LUFA CC_FLAGS = -Werror DEBUG_LEVEL = 0 -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_build.mk + +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/gcc.mk diff --git a/BuildTests/BootloaderTest/makefile b/BuildTests/BootloaderTest/makefile index 01d93ce5dec..f3f4fc58613 100644 --- a/BuildTests/BootloaderTest/makefile +++ b/BuildTests/BootloaderTest/makefile @@ -60,5 +60,6 @@ clean: .PHONY: all begin end testbootloaders clean -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk diff --git a/BuildTests/ModuleTest/makefile b/BuildTests/ModuleTest/makefile index 2c696a4dc78..51c45bc85dd 100644 --- a/BuildTests/ModuleTest/makefile +++ b/BuildTests/ModuleTest/makefile @@ -62,5 +62,6 @@ clean: .PHONY: all arch_avr8 arch_xmega arch_uc3 begin end -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk diff --git a/BuildTests/ModuleTest/makefile.test b/BuildTests/ModuleTest/makefile.test index 23615217de2..30bd3aad1e7 100644 --- a/BuildTests/ModuleTest/makefile.test +++ b/BuildTests/ModuleTest/makefile.test @@ -83,6 +83,12 @@ Test_C.c Test_CPP.cpp: CC_FLAGS += -Wc++-compat #CC_FLAGS += -Wsign-conversion #CC_FLAGS += -pedantic -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/gcc.mk diff --git a/BuildTests/SingleUSBModeTest/makefile b/BuildTests/SingleUSBModeTest/makefile index 54f1e1f6fdc..712af0b45c4 100644 --- a/BuildTests/SingleUSBModeTest/makefile +++ b/BuildTests/SingleUSBModeTest/makefile @@ -52,5 +52,6 @@ clean: .PHONY: begin end compile clean -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk diff --git a/BuildTests/SingleUSBModeTest/makefile.test b/BuildTests/SingleUSBModeTest/makefile.test index d85a0b301fa..116c001c431 100644 --- a/BuildTests/SingleUSBModeTest/makefile.test +++ b/BuildTests/SingleUSBModeTest/makefile.test @@ -64,6 +64,12 @@ C_FLAGS += -Wnested-externs #CC_FLAGS += -Wjump-misses-init #CC_FLAGS += -pedantic -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/gcc.mk diff --git a/BuildTests/StaticAnalysisTest/makefile b/BuildTests/StaticAnalysisTest/makefile index e6de603a232..722ba5e8571 100644 --- a/BuildTests/StaticAnalysisTest/makefile +++ b/BuildTests/StaticAnalysisTest/makefile @@ -39,9 +39,9 @@ end: %: - .PHONY: all begin end -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk diff --git a/Demos/Device/ClassDriver/AudioInput/makefile b/Demos/Device/ClassDriver/AudioInput/makefile index 80fa4f4f809..160376a1f06 100644 --- a/Demos/Device/ClassDriver/AudioInput/makefile +++ b/Demos/Device/ClassDriver/AudioInput/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/AudioOutput/makefile b/Demos/Device/ClassDriver/AudioOutput/makefile index 71ecb5cbc6d..24f1e92e938 100644 --- a/Demos/Device/ClassDriver/AudioOutput/makefile +++ b/Demos/Device/ClassDriver/AudioOutput/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/DualMIDI/makefile b/Demos/Device/ClassDriver/DualMIDI/makefile index 481d4c841fd..1c9fe52b1f0 100644 --- a/Demos/Device/ClassDriver/DualMIDI/makefile +++ b/Demos/Device/ClassDriver/DualMIDI/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/DualVirtualSerial/makefile b/Demos/Device/ClassDriver/DualVirtualSerial/makefile index 1a66c1f4093..a644c745542 100644 --- a/Demos/Device/ClassDriver/DualVirtualSerial/makefile +++ b/Demos/Device/ClassDriver/DualVirtualSerial/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/GenericHID/makefile b/Demos/Device/ClassDriver/GenericHID/makefile index 295e8bde0b4..edd200f8ad0 100644 --- a/Demos/Device/ClassDriver/GenericHID/makefile +++ b/Demos/Device/ClassDriver/GenericHID/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/Joystick/makefile b/Demos/Device/ClassDriver/Joystick/makefile index 5f805f5a41a..867b7effcd8 100644 --- a/Demos/Device/ClassDriver/Joystick/makefile +++ b/Demos/Device/ClassDriver/Joystick/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/Keyboard/makefile b/Demos/Device/ClassDriver/Keyboard/makefile index 07791830aa0..0ec9cf8410c 100644 --- a/Demos/Device/ClassDriver/Keyboard/makefile +++ b/Demos/Device/ClassDriver/Keyboard/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/KeyboardMouse/makefile b/Demos/Device/ClassDriver/KeyboardMouse/makefile index 259efc352e9..c60768fd570 100644 --- a/Demos/Device/ClassDriver/KeyboardMouse/makefile +++ b/Demos/Device/ClassDriver/KeyboardMouse/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/KeyboardMouseMultiReport/makefile b/Demos/Device/ClassDriver/KeyboardMouseMultiReport/makefile index 34ca37ba751..406142775b1 100644 --- a/Demos/Device/ClassDriver/KeyboardMouseMultiReport/makefile +++ b/Demos/Device/ClassDriver/KeyboardMouseMultiReport/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/MIDI/makefile b/Demos/Device/ClassDriver/MIDI/makefile index 97ceb1a6f3f..a06862d8820 100644 --- a/Demos/Device/ClassDriver/MIDI/makefile +++ b/Demos/Device/ClassDriver/MIDI/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/MassStorage/makefile b/Demos/Device/ClassDriver/MassStorage/makefile index 74d7eedc22a..cfd8cee21b4 100644 --- a/Demos/Device/ClassDriver/MassStorage/makefile +++ b/Demos/Device/ClassDriver/MassStorage/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/MassStorageKeyboard/makefile b/Demos/Device/ClassDriver/MassStorageKeyboard/makefile index 95afd538193..ca04ddbb7ea 100644 --- a/Demos/Device/ClassDriver/MassStorageKeyboard/makefile +++ b/Demos/Device/ClassDriver/MassStorageKeyboard/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/Mouse/makefile b/Demos/Device/ClassDriver/Mouse/makefile index c5286618dfd..0aca79138ea 100644 --- a/Demos/Device/ClassDriver/Mouse/makefile +++ b/Demos/Device/ClassDriver/Mouse/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/RNDISEthernet/makefile b/Demos/Device/ClassDriver/RNDISEthernet/makefile index e690e5865e2..98739137cb9 100644 --- a/Demos/Device/ClassDriver/RNDISEthernet/makefile +++ b/Demos/Device/ClassDriver/RNDISEthernet/makefile @@ -27,13 +27,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/VirtualSerial/makefile b/Demos/Device/ClassDriver/VirtualSerial/makefile index 305c18ad514..e98daccb207 100644 --- a/Demos/Device/ClassDriver/VirtualSerial/makefile +++ b/Demos/Device/ClassDriver/VirtualSerial/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/VirtualSerialMassStorage/makefile b/Demos/Device/ClassDriver/VirtualSerialMassStorage/makefile index 66978088370..ced39022063 100644 --- a/Demos/Device/ClassDriver/VirtualSerialMassStorage/makefile +++ b/Demos/Device/ClassDriver/VirtualSerialMassStorage/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/ClassDriver/VirtualSerialMouse/makefile b/Demos/Device/ClassDriver/VirtualSerialMouse/makefile index 99e69c3e393..4f520f529bb 100644 --- a/Demos/Device/ClassDriver/VirtualSerialMouse/makefile +++ b/Demos/Device/ClassDriver/VirtualSerialMouse/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/Incomplete/TestAndMeasurement/makefile b/Demos/Device/Incomplete/TestAndMeasurement/makefile index 948060fb0a9..46c0e33aefe 100644 --- a/Demos/Device/Incomplete/TestAndMeasurement/makefile +++ b/Demos/Device/Incomplete/TestAndMeasurement/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/AudioInput/makefile b/Demos/Device/LowLevel/AudioInput/makefile index 8e5d22b697c..961b8fe59cd 100644 --- a/Demos/Device/LowLevel/AudioInput/makefile +++ b/Demos/Device/LowLevel/AudioInput/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/AudioOutput/makefile b/Demos/Device/LowLevel/AudioOutput/makefile index 5b8fb844cfd..7b6bf99c6b2 100644 --- a/Demos/Device/LowLevel/AudioOutput/makefile +++ b/Demos/Device/LowLevel/AudioOutput/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/BulkVendor/makefile b/Demos/Device/LowLevel/BulkVendor/makefile index 1ef9b4c1980..d69959bc25e 100644 --- a/Demos/Device/LowLevel/BulkVendor/makefile +++ b/Demos/Device/LowLevel/BulkVendor/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/DualVirtualSerial/makefile b/Demos/Device/LowLevel/DualVirtualSerial/makefile index 197e19d7008..34d570f9ba1 100644 --- a/Demos/Device/LowLevel/DualVirtualSerial/makefile +++ b/Demos/Device/LowLevel/DualVirtualSerial/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/GenericHID/makefile b/Demos/Device/LowLevel/GenericHID/makefile index 6aefa72be66..013a87ef9a9 100644 --- a/Demos/Device/LowLevel/GenericHID/makefile +++ b/Demos/Device/LowLevel/GenericHID/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/Joystick/makefile b/Demos/Device/LowLevel/Joystick/makefile index 7804e047b51..1069beef87b 100644 --- a/Demos/Device/LowLevel/Joystick/makefile +++ b/Demos/Device/LowLevel/Joystick/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/Keyboard/makefile b/Demos/Device/LowLevel/Keyboard/makefile index 299fdbbc5ba..d72aa22ffce 100644 --- a/Demos/Device/LowLevel/Keyboard/makefile +++ b/Demos/Device/LowLevel/Keyboard/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/KeyboardMouse/makefile b/Demos/Device/LowLevel/KeyboardMouse/makefile index 957c3bc9967..f2800813f6a 100644 --- a/Demos/Device/LowLevel/KeyboardMouse/makefile +++ b/Demos/Device/LowLevel/KeyboardMouse/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/MIDI/makefile b/Demos/Device/LowLevel/MIDI/makefile index b98042d63d7..e3ab3bfabb0 100644 --- a/Demos/Device/LowLevel/MIDI/makefile +++ b/Demos/Device/LowLevel/MIDI/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/MassStorage/makefile b/Demos/Device/LowLevel/MassStorage/makefile index ac5c7cbe65d..e7c7b978657 100644 --- a/Demos/Device/LowLevel/MassStorage/makefile +++ b/Demos/Device/LowLevel/MassStorage/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/Mouse/makefile b/Demos/Device/LowLevel/Mouse/makefile index c23e1e77323..1c9edf0e85b 100644 --- a/Demos/Device/LowLevel/Mouse/makefile +++ b/Demos/Device/LowLevel/Mouse/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/RNDISEthernet/makefile b/Demos/Device/LowLevel/RNDISEthernet/makefile index c8d8e6b293f..9235ab587d6 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/makefile +++ b/Demos/Device/LowLevel/RNDISEthernet/makefile @@ -27,13 +27,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Device/LowLevel/VirtualSerial/makefile b/Demos/Device/LowLevel/VirtualSerial/makefile index 87b16694d5b..a3f546082c0 100644 --- a/Demos/Device/LowLevel/VirtualSerial/makefile +++ b/Demos/Device/LowLevel/VirtualSerial/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/DualRole/ClassDriver/MouseHostDevice/makefile b/Demos/DualRole/ClassDriver/MouseHostDevice/makefile index 62d56403684..158bc959f15 100644 --- a/Demos/DualRole/ClassDriver/MouseHostDevice/makefile +++ b/Demos/DualRole/ClassDriver/MouseHostDevice/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/AndroidAccessoryHost/makefile b/Demos/Host/ClassDriver/AndroidAccessoryHost/makefile index 5614d250219..b1833d30599 100644 --- a/Demos/Host/ClassDriver/AndroidAccessoryHost/makefile +++ b/Demos/Host/ClassDriver/AndroidAccessoryHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/AudioInputHost/makefile b/Demos/Host/ClassDriver/AudioInputHost/makefile index efae028245b..25d506ffcb6 100644 --- a/Demos/Host/ClassDriver/AudioInputHost/makefile +++ b/Demos/Host/ClassDriver/AudioInputHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/AudioOutputHost/makefile b/Demos/Host/ClassDriver/AudioOutputHost/makefile index b11ab480807..5eb75bf297d 100644 --- a/Demos/Host/ClassDriver/AudioOutputHost/makefile +++ b/Demos/Host/ClassDriver/AudioOutputHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/JoystickHostWithParser/makefile b/Demos/Host/ClassDriver/JoystickHostWithParser/makefile index d0d03859fe4..1117d30a186 100644 --- a/Demos/Host/ClassDriver/JoystickHostWithParser/makefile +++ b/Demos/Host/ClassDriver/JoystickHostWithParser/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/KeyboardHost/makefile b/Demos/Host/ClassDriver/KeyboardHost/makefile index 6951c8ce05d..0f6da43038e 100644 --- a/Demos/Host/ClassDriver/KeyboardHost/makefile +++ b/Demos/Host/ClassDriver/KeyboardHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/KeyboardHostWithParser/makefile b/Demos/Host/ClassDriver/KeyboardHostWithParser/makefile index 3663ad7980c..64d5c5d2b47 100644 --- a/Demos/Host/ClassDriver/KeyboardHostWithParser/makefile +++ b/Demos/Host/ClassDriver/KeyboardHostWithParser/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/MIDIHost/makefile b/Demos/Host/ClassDriver/MIDIHost/makefile index 37d5a603a08..602848278ed 100644 --- a/Demos/Host/ClassDriver/MIDIHost/makefile +++ b/Demos/Host/ClassDriver/MIDIHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/MassStorageHost/makefile b/Demos/Host/ClassDriver/MassStorageHost/makefile index f87124e2843..2278fd0d606 100644 --- a/Demos/Host/ClassDriver/MassStorageHost/makefile +++ b/Demos/Host/ClassDriver/MassStorageHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/MouseHost/makefile b/Demos/Host/ClassDriver/MouseHost/makefile index f66efc08974..0b18197bd10 100644 --- a/Demos/Host/ClassDriver/MouseHost/makefile +++ b/Demos/Host/ClassDriver/MouseHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/MouseHostWithParser/makefile b/Demos/Host/ClassDriver/MouseHostWithParser/makefile index d9f35eadf83..9ebfbbd52fb 100644 --- a/Demos/Host/ClassDriver/MouseHostWithParser/makefile +++ b/Demos/Host/ClassDriver/MouseHostWithParser/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/PrinterHost/makefile b/Demos/Host/ClassDriver/PrinterHost/makefile index 5aefa036b40..4fd123ae6c4 100644 --- a/Demos/Host/ClassDriver/PrinterHost/makefile +++ b/Demos/Host/ClassDriver/PrinterHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/RNDISEthernetHost/makefile b/Demos/Host/ClassDriver/RNDISEthernetHost/makefile index 41068539fe2..6f98d0a3be9 100644 --- a/Demos/Host/ClassDriver/RNDISEthernetHost/makefile +++ b/Demos/Host/ClassDriver/RNDISEthernetHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/StillImageHost/makefile b/Demos/Host/ClassDriver/StillImageHost/makefile index d7d35c76a95..462fa2c5e14 100644 --- a/Demos/Host/ClassDriver/StillImageHost/makefile +++ b/Demos/Host/ClassDriver/StillImageHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/ClassDriver/VirtualSerialHost/makefile b/Demos/Host/ClassDriver/VirtualSerialHost/makefile index f4683d36e0e..930700aaa3d 100644 --- a/Demos/Host/ClassDriver/VirtualSerialHost/makefile +++ b/Demos/Host/ClassDriver/VirtualSerialHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/AndroidAccessoryHost/makefile b/Demos/Host/LowLevel/AndroidAccessoryHost/makefile index 3d5a284a07b..58e99ec3417 100644 --- a/Demos/Host/LowLevel/AndroidAccessoryHost/makefile +++ b/Demos/Host/LowLevel/AndroidAccessoryHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/AudioInputHost/makefile b/Demos/Host/LowLevel/AudioInputHost/makefile index 877f1382147..17e381a9ef7 100644 --- a/Demos/Host/LowLevel/AudioInputHost/makefile +++ b/Demos/Host/LowLevel/AudioInputHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/AudioOutputHost/makefile b/Demos/Host/LowLevel/AudioOutputHost/makefile index 19504ee8b9e..2f1f2111f7e 100644 --- a/Demos/Host/LowLevel/AudioOutputHost/makefile +++ b/Demos/Host/LowLevel/AudioOutputHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/GenericHIDHost/makefile b/Demos/Host/LowLevel/GenericHIDHost/makefile index 295ca08d44d..77444236cfc 100644 --- a/Demos/Host/LowLevel/GenericHIDHost/makefile +++ b/Demos/Host/LowLevel/GenericHIDHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/JoystickHostWithParser/makefile b/Demos/Host/LowLevel/JoystickHostWithParser/makefile index 4300e283247..3d3ac563843 100644 --- a/Demos/Host/LowLevel/JoystickHostWithParser/makefile +++ b/Demos/Host/LowLevel/JoystickHostWithParser/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/KeyboardHost/makefile b/Demos/Host/LowLevel/KeyboardHost/makefile index a081ab613f1..d26318623a8 100644 --- a/Demos/Host/LowLevel/KeyboardHost/makefile +++ b/Demos/Host/LowLevel/KeyboardHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/KeyboardHostWithParser/makefile b/Demos/Host/LowLevel/KeyboardHostWithParser/makefile index 47edcbca152..0caa30256d4 100644 --- a/Demos/Host/LowLevel/KeyboardHostWithParser/makefile +++ b/Demos/Host/LowLevel/KeyboardHostWithParser/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/MIDIHost/makefile b/Demos/Host/LowLevel/MIDIHost/makefile index 38cebeaa360..76173cc15cb 100644 --- a/Demos/Host/LowLevel/MIDIHost/makefile +++ b/Demos/Host/LowLevel/MIDIHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/MassStorageHost/makefile b/Demos/Host/LowLevel/MassStorageHost/makefile index b2f4e7dff7a..9677d499d8f 100644 --- a/Demos/Host/LowLevel/MassStorageHost/makefile +++ b/Demos/Host/LowLevel/MassStorageHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/MouseHost/makefile b/Demos/Host/LowLevel/MouseHost/makefile index 87c76078b3e..a5979159cf9 100644 --- a/Demos/Host/LowLevel/MouseHost/makefile +++ b/Demos/Host/LowLevel/MouseHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/MouseHostWithParser/makefile b/Demos/Host/LowLevel/MouseHostWithParser/makefile index 3c643e9ba70..04cd5a44766 100644 --- a/Demos/Host/LowLevel/MouseHostWithParser/makefile +++ b/Demos/Host/LowLevel/MouseHostWithParser/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/PrinterHost/makefile b/Demos/Host/LowLevel/PrinterHost/makefile index f5632af3f42..2a1e973cce2 100644 --- a/Demos/Host/LowLevel/PrinterHost/makefile +++ b/Demos/Host/LowLevel/PrinterHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/RNDISEthernetHost/makefile b/Demos/Host/LowLevel/RNDISEthernetHost/makefile index 2b27089b469..39968202769 100644 --- a/Demos/Host/LowLevel/RNDISEthernetHost/makefile +++ b/Demos/Host/LowLevel/RNDISEthernetHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/StillImageHost/makefile b/Demos/Host/LowLevel/StillImageHost/makefile index db0206b18e0..f2d0fc944ed 100644 --- a/Demos/Host/LowLevel/StillImageHost/makefile +++ b/Demos/Host/LowLevel/StillImageHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/Demos/Host/LowLevel/VirtualSerialHost/makefile b/Demos/Host/LowLevel/VirtualSerialHost/makefile index 9d8eff0a169..f63826a2790 100644 --- a/Demos/Host/LowLevel/VirtualSerialHost/makefile +++ b/Demos/Host/LowLevel/VirtualSerialHost/makefile @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/LUFA/Build/DMBS/Template/makefile b/LUFA/Build/DMBS/Template/makefile index d88292388c2..ba60ab9c2e1 100644 --- a/LUFA/Build/DMBS/Template/makefile +++ b/LUFA/Build/DMBS/Template/makefile @@ -20,13 +20,18 @@ LD_FLAGS = # Default target all: -# Include DMBS build script makefiles -DMBS_PATH ?= ../DMBS +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS include $(DMBS_PATH)/core.mk -include $(DMBS_PATH)/gcc.mk include $(DMBS_PATH)/cppcheck.mk include $(DMBS_PATH)/doxygen.mk include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk include $(DMBS_PATH)/hid.mk include $(DMBS_PATH)/avrdude.mk include $(DMBS_PATH)/atprogram.mk diff --git a/LUFA/Build/LUFA/lufa-gcc.mk b/LUFA/Build/LUFA/lufa-gcc.mk new file mode 100644 index 00000000000..f824362e4d7 --- /dev/null +++ b/LUFA/Build/LUFA/lufa-gcc.mk @@ -0,0 +1,43 @@ +# +# LUFA Library +# Copyright (C) Dean Camera, 2015. +# +# dean [at] fourwalledcubicle [dot] com +# www.lufa-lib.org +# + +DMBS_BUILD_MODULES += LUFA_GCC +DMBS_BUILD_TARGETS += +DMBS_BUILD_MANDATORY_VARS += LUFA_PATH ARCH F_USB +DMBS_BUILD_OPTIONAL_VARS += BOARD +DMBS_BUILD_PROVIDED_VARS += +DMBS_BUILD_PROVIDED_MACROS += + +SHELL = /bin/sh + +ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) +ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) +ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) + +# Sanity check user supplied values +$(call ERROR_IF_EMPTY, LUFA_PATH) +$(call ERROR_IF_EMPTY, ARCH) +$(call ERROR_IF_EMPTY, F_USB) + +# Default values of optionally user-supplied variables +BOARD ?= NONE + +# Determine the utility prefix to use for the selected architecture +ifeq ($(ARCH), XMEGA) + $(warning The XMEGA device support is currently EXPERIMENTAL (incomplete and/or non-functional), and is included for preview purposes only.) +else ifeq ($(ARCH), UC3) + $(warning The UC3 device support is currently EXPERIMENTAL (incomplete and/or non-functional), and is included for preview purposes only.) +endif + +# Common LUFA C/C++ includes/definitions +LUFA_CXX_INCLUDES = -I. -I$(patsubst %/,%,$(LUFA_PATH))/.. +LUFA_CXX_DEFINES = -DARCH=ARCH_$(ARCH) -DBOARD=BOARD_$(BOARD) -DF_USB=$(F_USB)UL + +# LUFA specific standard build options +C_FLAGS += $(LUFA_CXX_INCLUDES) $(LUFA_CXX_DEFINES) $(LUFA_CXX_FLAGS) +CPP_FLAGS += $(LUFA_CXX_INCLUDES) $(LUFA_CXX_DEFINES) $(LUFA_CXX_FLAGS) diff --git a/LUFA/Build/LUFA/lufa-sources.mk b/LUFA/Build/LUFA/lufa-sources.mk new file mode 100644 index 00000000000..7ca9a28dc9a --- /dev/null +++ b/LUFA/Build/LUFA/lufa-sources.mk @@ -0,0 +1,95 @@ +# +# LUFA Library +# Copyright (C) Dean Camera, 2015. +# +# dean [at] fourwalledcubicle [dot] com +# www.lufa-lib.org +# + +DMBS_BUILD_MODULES += LUFA_SOURCES +DMBS_BUILD_TARGETS += +DMBS_BUILD_MANDATORY_VARS += LUFA_PATH ARCH +DMBS_BUILD_OPTIONAL_VARS += +DMBS_BUILD_PROVIDED_VARS += LUFA_SRC_USB_DEVICE LUFA_SRC_USB_HOST \ + LUFA_SRC_USB LUFA_SRC_USBCLASS_DEVICE \ + LUFA_SRC_USBCLASS_HOST LUFA_SRC_USBCLASS \ + LUFA_SRC_TEMPERATURE LUFA_SRC_SERIAL \ + LUFA_SRC_TWI LUFA_SRC_PLATFORM +DMBS_BUILD_PROVIDED_MACROS += + +SHELL = /bin/sh + +ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) +ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) +ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) + +# Sanity check user supplied values +$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) +$(call ERROR_IF_EMPTY, LUFA_PATH) +$(call ERROR_IF_EMPTY, ARCH) + +# Allow LUFA_ROOT_PATH to be overridden elsewhere to support legacy LUFA makefiles +LUFA_ROOT_PATH ?= $(patsubst %/,%,$(LUFA_PATH)) + +# Construct LUFA module source variables +LUFA_SRC_USB_COMMON := $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/USBController_$(ARCH).c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/USBInterrupt_$(ARCH).c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Core/ConfigDescriptors.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Core/Events.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Core/USBTask.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Common/HIDParser.c \ + +LUFA_SRC_USB_HOST := $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Host_$(ARCH).c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Pipe_$(ARCH).c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/PipeStream_$(ARCH).c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Core/HostStandardReq.c \ + $(LUFA_SRC_USB_COMMON) + +LUFA_SRC_USB_DEVICE := $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Device_$(ARCH).c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Endpoint_$(ARCH).c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/EndpointStream_$(ARCH).c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Core/DeviceStandardReq.c \ + $(LUFA_SRC_USB_COMMON) + +LUFA_SRC_USBCLASS_DEVICE := $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/AudioClassDevice.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/CDCClassDevice.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/HIDClassDevice.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/MassStorageClassDevice.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/MIDIClassDevice.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/PrinterClassDevice.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/RNDISClassDevice.c \ + +LUFA_SRC_USBCLASS_HOST := $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/AudioClassHost.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/CDCClassHost.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/HIDClassHost.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/MassStorageClassHost.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/MIDIClassHost.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/PrinterClassHost.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/RNDISClassHost.c \ + $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/StillImageClassHost.c + +LUFA_SRC_USB := $(sort $(LUFA_SRC_USB_COMMON) $(LUFA_SRC_USB_HOST) $(LUFA_SRC_USB_DEVICE)) + +LUFA_SRC_USBCLASS := $(LUFA_SRC_USBCLASS_DEVICE) $(LUFA_SRC_USBCLASS_HOST) + +LUFA_SRC_TEMPERATURE := $(LUFA_ROOT_PATH)/Drivers/Board/Temperature.c + +LUFA_SRC_SERIAL := $(LUFA_ROOT_PATH)/Drivers/Peripheral/$(ARCH)/Serial_$(ARCH).c + +LUFA_SRC_TWI := $(LUFA_ROOT_PATH)/Drivers/Peripheral/$(ARCH)/TWI_$(ARCH).c + +ifeq ($(ARCH), UC3) + LUFA_SRC_PLATFORM := $(LUFA_ROOT_PATH)/Platform/UC3/Exception.S \ + $(LUFA_ROOT_PATH)/Platform/UC3/InterruptManagement.c +else + LUFA_SRC_PLATFORM := +endif + +# Build a list of all available module sources +LUFA_SRC_ALL_FILES := $(LUFA_SRC_USB) \ + $(LUFA_SRC_USBCLASS) \ + $(LUFA_SRC_TEMPERATURE) \ + $(LUFA_SRC_SERIAL) \ + $(LUFA_SRC_TWI) \ + $(LUFA_SRC_PLATFORM) diff --git a/LUFA/Build/lufa_build.mk b/LUFA/Build/lufa_build.mk index d20493ea2d3..f7c496e1831 100644 --- a/LUFA/Build/lufa_build.mk +++ b/LUFA/Build/lufa_build.mk @@ -6,79 +6,7 @@ # www.lufa-lib.org # -DMBS_BUILD_MODULES += -DMBS_BUILD_TARGETS += -DMBS_BUILD_MANDATORY_VARS += LUFA_PATH ARCH F_USB -DMBS_BUILD_OPTIONAL_VARS += BOARD -DMBS_BUILD_PROVIDED_VARS += -DMBS_BUILD_PROVIDED_MACROS += - -# ----------------------------------------------------------------------------- -# LUFA Core Build Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Subclass of the standard DMBS GCC build module, with LUFA specific -# extensions. This module provides the core build rules for the compilation -# of LUFA projects using GCC. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# (None) -# -# MANDATORY PARAMETERS: -# -# LUFA_PATH - Path to the LUFA library core -# ARCH - Device architecture name -# F_USB - Speed of the USB core clock, in Hz -# -# OPTIONAL PARAMETERS: -# -# BOARD - LUFA board drivers to use -# -# PROVIDED VARIABLES: -# -# (None) -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) - -# Sanity check user supplied values -$(call ERROR_IF_EMPTY, LUFA_PATH) -$(call ERROR_IF_EMPTY, ARCH) -$(call ERROR_IF_EMPTY, F_USB) - -# Default values of optionally user-supplied variables -BOARD ?= NONE - -# Determine the utility prefix to use for the selected architecture -ifeq ($(ARCH), XMEGA) - $(warning The XMEGA device support is currently EXPERIMENTAL (incomplete and/or non-functional), and is included for preview purposes only.) -else ifeq ($(ARCH), UC3) - $(warning The UC3 device support is currently EXPERIMENTAL (incomplete and/or non-functional), and is included for preview purposes only.) -endif - -# Common LUFA C/C++ includes/definitions -LUFA_CXX_INCLUDES = -I. -I$(patsubst %/,%,$(LUFA_PATH))/.. -LUFA_CXX_DEFINES = -DARCH=ARCH_$(ARCH) -DBOARD=BOARD_$(BOARD) -DF_USB=$(F_USB)UL - -# 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. -LUFA_CXX_FLAGS = -fno-jump-tables - -# LUFA specific standard build options -C_FLAGS += $(LUFA_CXX_INCLUDES) $(LUFA_CXX_DEFINES) $(LUFA_CXX_FLAGS) -CPP_FLAGS += $(LUFA_CXX_INCLUDES) $(LUFA_CXX_DEFINES) $(LUFA_CXX_FLAGS) - -DMBS_PATH := $(LUFA_PATH)/Build/DMBS/DMBS +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA include $(DMBS_PATH)/gcc.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk diff --git a/LUFA/Build/lufa_sources.mk b/LUFA/Build/lufa_sources.mk index 0764d30f1af..48291c73176 100644 --- a/LUFA/Build/lufa_sources.mk +++ b/LUFA/Build/lufa_sources.mk @@ -6,139 +6,5 @@ # www.lufa-lib.org # -DMBS_BUILD_MODULES += LUFA_SOURCES -DMBS_BUILD_TARGETS += -DMBS_BUILD_MANDATORY_VARS += LUFA_PATH ARCH -DMBS_BUILD_OPTIONAL_VARS += -DMBS_BUILD_PROVIDED_VARS += LUFA_SRC_USB_DEVICE LUFA_SRC_USB_HOST \ - LUFA_SRC_USB LUFA_SRC_USBCLASS_DEVICE \ - LUFA_SRC_USBCLASS_HOST LUFA_SRC_USBCLASS \ - LUFA_SRC_TEMPERATURE LUFA_SRC_SERIAL \ - LUFA_SRC_TWI LUFA_SRC_PLATFORM -DMBS_BUILD_PROVIDED_MACROS += - -# ----------------------------------------------------------------------------- -# LUFA Sources Buildsystem Makefile Module. -# ----------------------------------------------------------------------------- -# DESCRIPTION: -# Provides a set of makefile variables for the various LUFA module sources. -# Once included, the sources required to use a given LUFA module will become -# available using the makefile variable names listed in the LUFA project -# documentation. -# ----------------------------------------------------------------------------- -# TARGETS: -# -# (None) -# -# MANDATORY PARAMETERS: -# -# LUFA_PATH - Path to the LUFA library core -# ARCH - Device architecture name -# -# OPTIONAL PARAMETERS: -# -# (None) -# -# PROVIDED VARIABLES: -# -# LUFA_SRC_USB_DEVICE - List of LUFA USB driver source files required -# for USB Device mode only -# LUFA_SRC_USB_HOST - List of LUFA USB driver source files required -# for USB Host mode only -# LUFA_SRC_USB - List of LUFA USB driver source files for all -# USB modes -# LUFA_SRC_USBCLASS_DEVICE - List of LUFA USB Class driver source files for -# USB Device mode only -# LUFA_SRC_USBCLASS_HOST - List of LUFA USB Class driver source files for -# USB Host mode only -# LUFA_SRC_USBCLASS - List of LUFA USB Class driver source files for -# all USB modes -# LUFA_SRC_TEMPERATURE - List of LUFA temperature sensor driver source -# files -# LUFA_SRC_SERIAL - List of LUFA Serial U(S)ART driver source files -# LUFA_SRC_TWI - List of LUFA TWI driver source files -# LUFA_SRC_PLATFORM - List of LUFA architecture specific platform -# management source files -# -# PROVIDED MACROS: -# -# (None) -# -# ----------------------------------------------------------------------------- - -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) - -# Sanity check user supplied values -$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) -$(call ERROR_IF_EMPTY, LUFA_PATH) -$(call ERROR_IF_EMPTY, ARCH) - -# Allow LUFA_ROOT_PATH to be overridden elsewhere to support legacy LUFA makefiles -LUFA_ROOT_PATH ?= $(patsubst %/,%,$(LUFA_PATH)) - -# Construct LUFA module source variables -LUFA_SRC_USB_COMMON := $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/USBController_$(ARCH).c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/USBInterrupt_$(ARCH).c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Core/ConfigDescriptors.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Core/Events.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Core/USBTask.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Common/HIDParser.c \ - -LUFA_SRC_USB_HOST := $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Host_$(ARCH).c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Pipe_$(ARCH).c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/PipeStream_$(ARCH).c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Core/HostStandardReq.c \ - $(LUFA_SRC_USB_COMMON) - -LUFA_SRC_USB_DEVICE := $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Device_$(ARCH).c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Endpoint_$(ARCH).c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/EndpointStream_$(ARCH).c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Core/DeviceStandardReq.c \ - $(LUFA_SRC_USB_COMMON) - -LUFA_SRC_USBCLASS_DEVICE := $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/AudioClassDevice.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/CDCClassDevice.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/HIDClassDevice.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/MassStorageClassDevice.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/MIDIClassDevice.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/PrinterClassDevice.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/RNDISClassDevice.c \ - -LUFA_SRC_USBCLASS_HOST := $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/AudioClassHost.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/CDCClassHost.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/HIDClassHost.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/MassStorageClassHost.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/MIDIClassHost.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/PrinterClassHost.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/RNDISClassHost.c \ - $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/StillImageClassHost.c - -LUFA_SRC_USB := $(sort $(LUFA_SRC_USB_COMMON) $(LUFA_SRC_USB_HOST) $(LUFA_SRC_USB_DEVICE)) - -LUFA_SRC_USBCLASS := $(LUFA_SRC_USBCLASS_DEVICE) $(LUFA_SRC_USBCLASS_HOST) - -LUFA_SRC_TEMPERATURE := $(LUFA_ROOT_PATH)/Drivers/Board/Temperature.c - -LUFA_SRC_SERIAL := $(LUFA_ROOT_PATH)/Drivers/Peripheral/$(ARCH)/Serial_$(ARCH).c - -LUFA_SRC_TWI := $(LUFA_ROOT_PATH)/Drivers/Peripheral/$(ARCH)/TWI_$(ARCH).c - -ifeq ($(ARCH), UC3) - LUFA_SRC_PLATFORM := $(LUFA_ROOT_PATH)/Platform/UC3/Exception.S \ - $(LUFA_ROOT_PATH)/Platform/UC3/InterruptManagement.c -else - LUFA_SRC_PLATFORM := -endif - -# Build a list of all available module sources -LUFA_SRC_ALL_FILES := $(LUFA_SRC_USB) \ - $(LUFA_SRC_USBCLASS) \ - $(LUFA_SRC_TEMPERATURE) \ - $(LUFA_SRC_SERIAL) \ - $(LUFA_SRC_TWI) \ - $(LUFA_SRC_PLATFORM) +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk diff --git a/LUFA/CodeTemplates/makefile_template b/LUFA/CodeTemplates/makefile_template index dc8fc73567e..291da359cde 100644 --- a/LUFA/CodeTemplates/makefile_template +++ b/LUFA/CodeTemplates/makefile_template @@ -26,13 +26,18 @@ LD_FLAGS = # Default target all: -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk +# Include LUFA-specific DMBS extension modules +DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA +include $(DMBS_LUFA_PATH)/lufa-sources.mk +include $(DMBS_LUFA_PATH)/lufa-gcc.mk + +# Include common DMBS build system modules +DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/cppcheck.mk +include $(DMBS_PATH)/doxygen.mk +include $(DMBS_PATH)/dfu.mk +include $(DMBS_PATH)/gcc.mk +include $(DMBS_PATH)/hid.mk +include $(DMBS_PATH)/avrdude.mk +include $(DMBS_PATH)/atprogram.mk diff --git a/LUFA/DoxygenPages/BuildSystem.txt b/LUFA/DoxygenPages/BuildSystem.txt index d5e051b7988..ef57fcf0c75 100644 --- a/LUFA/DoxygenPages/BuildSystem.txt +++ b/LUFA/DoxygenPages/BuildSystem.txt @@ -14,814 +14,41 @@ * * As it turned out to be fairly generic in nature, it was split out into its * own separate project, called DMBS (Dean's Makefile Build System) - * which is released into the public domain. LUFA specific portions of the + * which is released into the public domain. LUFA-specific portions of the * LUFA build system extend DMBS, and provide a universal build system for all * LUFA projects. * - * The latest DMBS project information can be found at: + * The latest DMBS project information and documentation can be found at: * https://github.com/abcminiuser/dmbs * * DMBS is written in GNU Make, and each module is independent of one-another. * - * \section SSec_BuildSystem_Using Using the LUFA Build System + * LUFA now uses DMBS for its build system, with some LUFA specific extension + * modules. * - * For details on the prerequisites needed for Linux and Windows machines to be able to use the LUFA - * build system, see \ref Sec_CompilingApps_Prerequisites. + * If you have problems building using LUFA, see \subpage Page_BuildTroubleshooting for resolution steps. * - * To use a LUFA build system module, simply add an include to your project makefile. All user projects - * should at a minimum include \ref Page_BuildModule_CORE for base functionality: - * \code - * include $(LUFA_PATH)/Build/lufa_core.mk - * \endcode - * - * Once included in your project makefile, the associated build module targets will be added to your - * project's build makefile targets automatically. To call a build target, run make {TARGET_NAME} - * from the command line, substituting in the appropriate target name. - * - * \see \ref Sec_ConfiguringApps_AppMakefileParams for a copy of the sample LUFA project makefile. - * - * Each build module may have one or more mandatory parameters (GNU Make variables) which must - * be supplied in the project makefile for the module to work, and one or more optional parameters which - * may be defined and which will assume a sensible default if not. - * - * \section SSec_BuildSystem_Modules Available Modules - * - * The following modules are included in this LUFA release: - * - * \li \subpage Page_BuildModule_ATPROGRAM - Device Programming - * \li \subpage Page_BuildModule_AVRDUDE - Device Programming - * \li \subpage Page_BuildModule_BUILD - Compiling/Assembling/Linking - * \li \subpage Page_BuildModule_CORE - Core Build System Functions - * \li \subpage Page_BuildModule_CPPCHECK - Static Code Analysis - * \li \subpage Page_BuildModule_DFU - Device Programming - * \li \subpage Page_BuildModule_DOXYGEN - Automated Source Code Documentation - * \li \subpage Page_BuildModule_HID - Device Programming - * \li \subpage Page_BuildModule_SOURCES - LUFA Module Source Code Variables - * - * If you have problems building using the LUFA build system, see \subpage Page_BuildTroubleshooting for resolution steps. + * \li \subpage Page_BuildModule_LUFA_SOURCES - The LUFA SOURCES extension module for DMBS + * \li \subpage Page_BuildModule_LUFA_GCC - The LUFA GCC extension module for DMBS */ - /** \page Page_BuildModule_BUILD The BUILD build module +/** \page Page_BuildModule_LUFA_SOURCES LUFA SOURCES extension module for DMBS * - * The BUILD LUFA build system module, providing targets for the compilation, - * assembling and linking of an application from source code into binary files - * suitable for programming into a target device, using the GCC compiler. + * The LUFA SOURCES extension more for DMBS provides LUFA specific variables + * listing the various LUFA source files required to be build by a project for + * a given LUFA module. This module gives a way to reference LUFA source files + * symbolically, so that changes to the library structure do not break the + * library makefile. * * To use this module in your application makefile, add the following code: * \code - * include $(LUFA_PATH)/Build/lufa_build.mk + * include $(LUFA_PATH)/Build/LUFA/lufa-sources.mk * \endcode * - * \section SSec_BuildModule_BUILD_Requirements Requirements - * This module requires the the architecture appropriate binaries of the GCC compiler are available in your - * system's PATH variable. The GCC compiler and associated toolchain is distributed in Atmel AVR Studio - * 5.x and Atmel Studio 6.x installation directories, as well as in many third party distribution packages. - * - * \section SSec_BuildModule_BUILD_Targets Targets - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
sizeDisplay size of the compiled application FLASH and SRAM segments.
symbol-sizesDisplay a size-sorted list of symbols from the compiled application, in decimal bytes.
libBuild and archive all source files into a library A binary file.
allBuild and link the application into ELF debug and HEX binary files.
elfBuild and link the application into an ELF debug file.
binBuild and link the application and produce a BIN binary file.
hexBuild and link the application and produce HEX and EEP binary files.
lssBuild and link the application and produce a LSS source code/assembly code mixed listing file.
cleanRemove all intermediary files and binary output files.
mostlycleanRemove all intermediary files but preserve any binary output files.
<filename>.sCreate an assembly listing of a given input C/C++ source file.
- * - * \section SSec_BuildModule_BUILD_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
TARGETName of the application output file prefix (e.g. TestApplication).
ARCHArchitecture of the target processor (see \ref Page_DeviceSupport).
MCUName of the Atmel processor model (e.g. at90usb1287).
SRCList of relative or absolute paths to the application C (.c), C++ (.cpp) and Assembly (.S) source files.
F_USBSpeed in Hz of the input clock frequency to the target's USB controller.
LUFA_PATHPath to the LUFA library core, either relative or absolute (e.g. ../LUFA-000000/LUFA/).
- * - * \section SSec_BuildModule_BUILD_OptionalParams Optional Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
BOARDLUFA board hardware drivers to use (see \ref Page_DeviceSupport).
OPTIMIZATIONOptimization level to use when compiling source files (see GCC manual).
C_STANDARDVersion of the C standard to apply when compiling C++ source files (see GCC manual).
CPP_STANDARDVersion of the C++ standard to apply when compiling C++ source files (see GCC manual).
DEBUG_FORMATFormat of the debug information to embed in the generated object files (see GCC manual).
DEBUG_LEVELLevel of the debugging information to embed in the generated object files (see GCC manual).
F_CPUSpeed of the processor CPU clock, in Hz.
C_FLAGSFlags to pass to the C compiler only, after the automatically generated flags.
CPP_FLAGSFlags to pass to the C++ compiler only, after the automatically generated flags.
ASM_FLAGSFlags to pass to the assembler only, after the automatically generated flags.
CC_FLAGSCommon flags to pass to the C/C++ compiler and assembler, after the automatically generated flags.
COMPILER_PATHDirectory where the C/C++ toolchain is located, if not available in the system PATH.
LD_FLAGSFlags to pass to the linker, after the automatically generated flags.
LINKER_RELAXATIONSEnables or disables linker relaxations when linking the application binary. This can reduce the total size - * of the application by replacing full \c CALL instructions with smaller \c RCALL instructions where possible. - * \note On some unpatched versions of binutils, this can cause link failures in some circumstances. If you - * receive a link error relocation truncated to fit: R_AVR_13_PCREL, disable this setting.
OBJDIRDirectory to place the generated object and dependency files. If set to "." the same folder as the source file will be used. - * \note When this option is enabled, all source filenames must be unique.
OBJECT_FILESList of additional object files that should be linked into the resulting binary.
- * - * \section SSec_BuildModule_BUILD_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_BUILD_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - -/** \page Page_BuildModule_CORE The CORE build module - * - * The core LUFA build system module, providing common build system help and information targets. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_core.mk - * \endcode - * - * \section SSec_BuildModule_CORE_Requirements Requirements - * This module has no requirements outside a standard *nix shell like environment; the sh - * shell, GNU make and *nix CoreUtils (echo, printf, etc.). - * - * \section SSec_BuildModule_CORE_Targets Targets - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
helpDisplay build system help and configuration information.
list_targetsList all available build targets from the build system.
list_modulesList all available build modules from the build system.
list_mandatoryList all mandatory parameters required by the included modules.
list_optionalList all optional parameters required by the included modules.
list_providedList all variables provided by the included modules.
list_macrosList all macros provided by the included modules.
- * - * \section SSec_BuildModule_CORE_MandatoryParams Mandatory Parameters - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_CORE_OptionalParams Optional Parameters - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_CORE_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_CORE_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - -/** \page Page_BuildModule_ATPROGRAM The ATPROGRAM build module - * - * The ATPROGRAM programming utility LUFA build system module, providing targets to reprogram an - * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_atprogram.mk - * \endcode - * - * \section SSec_BuildModule_ATPROGRAM_Requirements Requirements - * This module requires the atprogram.exe utility to be available in your system's PATH - * variable. The atprogram.exe utility is distributed in Atmel AVR Studio 5.x and Atmel Studio 6.x - * inside the application install folder's "\atbackend" subdirectory. - * - * \section SSec_BuildModule_ATPROGRAM_Targets Targets - * - * - * - * - * - * - * - * - * - * - *
atprogramProgram the device FLASH memory with the application's executable data.
atprogram-eeProgram the device EEPROM memory with the application's EEPROM data.
- * - * \section SSec_BuildModule_ATPROGRAM_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - * - * - * - * - *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
- * - * \section SSec_BuildModule_ATPROGRAM_OptionalParams Optional Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
ATPROGRAM_PROGRAMMERName of the Atmel programmer or debugger tool to communicate with (e.g. jtagice3).
ATPROGRAM_INTERFACEName of the programming interface to use when programming the target (e.g. spi).
ATPROGRAM_PORTName of the communication port to use when when programming with a serially connected tool (e.g. COM2).
- * - * \section SSec_BuildModule_ATPROGRAM_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_ATPROGRAM_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - -/** \page Page_BuildModule_AVRDUDE The AVRDUDE build module - * - * The AVRDUDE programming utility LUFA build system module, providing targets to reprogram an - * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_avrdude.mk - * \endcode - * - * \section SSec_BuildModule_AVRDUDE_Requirements Requirements - * This module requires the avrdude utility to be available in your system's PATH - * variable. The avrdude utility is distributed in the old WinAVR project releases for - * Windows (http://winavr.sourceforge.net) or can be installed on *nix systems via the project's - * source code (https://savannah.nongnu.org/projects/avrdude) or through the package manager. - * - * \section SSec_BuildModule_AVRDUDE_Targets Targets - * - * - * - * - * - * - * - * - * - * - *
avrdudeProgram the device FLASH memory with the application's executable data.
avrdude-eeProgram the device EEPROM memory with the application's EEPROM data.
- * - * \section SSec_BuildModule_AVRDUDE_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - * - * - * - * - *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
- * - * \section SSec_BuildModule_AVRDUDE_OptionalParams Optional Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
AVRDUDE_PROGRAMMERName of the programmer or debugger tool to communicate with (e.g. jtagicemkii).
AVRDUDE_PORTName of the communication port to use when when programming with the connected tool (e.g. COM2, /dev/ttyUSB0 or usb).
AVRDUDE_FLAGSAdditional flags to pass to avrdude when programming, applied after the automatically generated flags.
AVRDUDE_MEMORYMain memory space used when programming in an application *e.g. application for a DFU bootloader, or flash for a regular programmer).
- * - * \section SSec_BuildModule_AVRDUDE_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_AVRDUDE_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - - /** \page Page_BuildModule_CPPCHECK The CPPCHECK build module - * - * The CPPCHECK programming utility LUFA build system module, providing targets to statically - * analyze C and C++ source code for errors and performance/style issues. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_cppcheck.mk - * \endcode - * - * \section SSec_BuildModule_CPPCHECK_Requirements Requirements - * This module requires the cppcheck utility to be available in your system's PATH - * variable. The cppcheck utility is distributed through the project's home page - * (http://cppcheck.sourceforge.net) for Windows, and can be installed on *nix systems via - * the project's source code or through the package manager. - * - * \section SSec_BuildModule_CPPCHECK_Targets Targets - * - * - * - * - * - * - * - * - * - * - *
cppcheckStatically analyze the project source code for issues.
cppcheck-configCheck the cppcheck configuration - scan source code and warn about missing header files and other issues.
- * - * \section SSec_BuildModule_CPPCHECK_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - *
SRCList of source files to statically analyze.
- * - * \section SSec_BuildModule_CPPCHECK_OptionalParams Optional Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
CPPCHECK_INCLUDESPath of extra directories to check when attemting to resolve C/C++ header file includes.
CPPCHECK_EXCLUDESPaths or path fragments to exclude when analyzing.
CPPCHECK_MSG_TEMPLATEOutput message template to use when printing errors, warnings and information (see cppcheck documentation).
CPPCHECK_ENABLEAnalysis rule categories to enable (see cppcheck documentation).
CPPCHECK_SUPPRESSSpecific analysis rules to suppress (see cppcheck documentation).
CPPCHECK_FAIL_ON_WARNINGSet to Y to fail the analysis job with an error exit code if warnings are found, N to continue without failing.
CPPCHECK_QUIETSet to Y to suppress all output except warnings and errors, N to show verbose output information.
CPPCHECK_FLAGSExtra flags to pass to cppcheck, after the automatically generated flags.
- * - * \section SSec_BuildModule_CPPCHECK_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_CPPCHECK_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - - /** \page Page_BuildModule_DFU The DFU build module - * - * The DFU programming utility LUFA build system module, providing targets to reprogram an - * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files. - * This module requires a DFU class bootloader to be running in the target, compatible with - * the DFU bootloader protocol as published by Atmel. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_dfu.mk - * \endcode - * - * \section SSec_BuildModule_DFU_Requirements Requirements - * This module requires either the batchisp utility from Atmel's FLIP utility, or the open - * source dfu-programmer utility (http://dfu-programmer.sourceforge.net/) to be - * available in your system's PATH variable. On *nix systems the dfu-programmer utility - * can be installed via the project's source code or through the package manager. - * - * \section SSec_BuildModule_DFU_Targets Targets - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
dfuProgram the device FLASH memory with the application's executable data using dfu-programmer.
dfu-eeProgram the device EEPROM memory with the application's EEPROM data using dfu-programmer.
flipProgram the device FLASH memory with the application's executable data using batchisp.
flip-eeProgram the device EEPROM memory with the application's EEPROM data using batchisp.
- * - * \section SSec_BuildModule_DFU_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - * - * - * - * - *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
- * - * \section SSec_BuildModule_DFU_OptionalParams Optional Parameters - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_DFU_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_DFU_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - - /** \page Page_BuildModule_DOXYGEN The DOXYGEN build module - * - * The DOXYGEN code documentation utility LUFA build system module, providing targets to generate - * project HTML and other format documentation from a set of source files that include special - * Doxygen comments. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_doxygen.mk - * \endcode - * - * \section SSec_BuildModule_DOXYGEN_Requirements Requirements - * This module requires the doxygen utility from the Doxygen website - * (http://www.doxygen.org/) to be available in your system's PATH variable. On *nix - * systems the doxygen utility can be installed via the project's source code or through - * the package manager. - * - * \section SSec_BuildModule_DOXYGEN_Targets Targets - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
doxygenGenerate project documentation.
doxygen_createCreate a new Doxygen configuration file using the latest template.
doxygen_upgradeUpgrade an existing Doxygen configuration file to the latest template
- * - * \section SSec_BuildModule_DOXYGEN_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - *
LUFA_PATHPath to the LUFA library core, either relative or absolute (e.g. ../LUFA-000000/LUFA/).
- * - * \section SSec_BuildModule_DOXYGEN_OptionalParams Optional Parameters - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
DOXYGEN_CONFName and path of the base Doxygen configuration file for the project.
DOXYGEN_FAIL_ON_WARNINGSet to Y to fail the generation with an error exit code if warnings are found other than unsupported configuration parameters, N to continue without failing.
DOXYGEN_OVERRIDE_PARAMSExtra Doxygen configuration parameters to apply, overriding the corresponding config entry in the project's configuration file (e.g. QUIET=YES).
- * - * \section SSec_BuildModule_DOXYGEN_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_DOXYGEN_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - - /** \page Page_BuildModule_HID The HID build module - * - * The HID programming utility LUFA build system module, providing targets to reprogram an - * Atmel processor's FLASH memory with a project's compiled binary output file. This module - * requires a HID class bootloader to be running in the target, using a protocol compatible - * with the PJRC "HalfKay" protocol (http://www.pjrc.com/teensy/halfkay_protocol.html). - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_hid.mk - * \endcode - * - * \section SSec_BuildModule_HID_Requirements Requirements - * This module requires either the hid_bootloader_cli utility from the included LUFA HID - * class bootloader API subdirectory, or the teensy_loader_cli utility from PJRC - * (http://www.pjrc.com/teensy/loader_cli.html) to be available in your system's PATH - * variable. - * - * \section SSec_BuildModule_HID_Targets Targets - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
hidProgram the device FLASH memory with the application's executable data using hid_bootloader_cli.
hid-eeProgram the device EEPROM memory with the application's EEPROM data using hid_bootloader_cli and - * a temporary AVR application programmed into the target's FLASH. - * \note This will erase the currently loaded application in the target.
teensyProgram the device FLASH memory with the application's executable data using teensy_loader_cli.
teensy-eeProgram the device EEPROM memory with the application's EEPROM data using teensy_loader_cli and - * a temporary AVR application programmed into the target's FLASH. - * \note This will erase the currently loaded application in the target.
- * - * \section SSec_BuildModule_HID_MandatoryParams Mandatory Parameters - * - * - * - * - * - * - * - * - * - * - *
MCUName of the Atmel processor model (e.g. at90usb1287).
TARGETName of the application output file prefix (e.g. TestApplication).
- * - * \section SSec_BuildModule_HID_OptionalParams Optional Parameters - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_HID_ProvidedVariables Module Provided Variables - * - * - * - * - * - *
None
- * - * \section SSec_BuildModule_HID_ProvidedMacros Module Provided Macros - * - * - * - * - * - *
None
- */ - - /** \page Page_BuildModule_SOURCES The SOURCES build module - * - * The SOURCES LUFA build system module, providing variables listing the various LUFA source files - * required to be build by a project for a given LUFA module. This module gives a way to reference - * LUFA source files symbolically, so that changes to the library structure do not break the library - * makefile. - * - * To use this module in your application makefile, add the following code: - * \code - * include $(LUFA_PATH)/Build/lufa_sources.mk - * \endcode - * - * \section SSec_BuildModule_SOURCES_Requirements Requirements + * \section SSec_BuildModule_LUFA_SOURCES_Requirements Requirements * None. * - * \section SSec_BuildModule_SOURCES_Targets Targets + * \section SSec_BuildModule_LUFA_SOURCES_Targets Targets * * * @@ -829,7 +56,7 @@ * *
* - * \section SSec_BuildModule_SOURCES_MandatoryParams Mandatory Parameters + * \section SSec_BuildModule_LUFA_SOURCES_MandatoryParams Mandatory Parameters * * * @@ -842,7 +69,7 @@ * *
* - * \section SSec_BuildModule_SOURCES_OptionalParams Optional Parameters + * \section SSec_BuildModule_LUFA_SOURCES_OptionalParams Optional Parameters * * * @@ -850,7 +77,7 @@ * *
* - * \section SSec_BuildModule_SOURCES_ProvidedVariables Module Provided Variables + * \section SSec_BuildModule_LUFA_SOURCES_ProvidedVariables Module Provided Variables * * * @@ -879,7 +106,65 @@ * *
* - * \section SSec_BuildModule_SOURCES_ProvidedMacros Module Provided Macros + * \section SSec_BuildModule_LUFA_SOURCES_ProvidedMacros Module Provided Macros + * + * + * + * + * + *
None
+ */ + +/** \page Page_BuildModule_LUFA_GCC LUFA GCC extension module for DMBS + * + * The LUFA GCC extension module for the standard DMBS GCC module extends the + * latter to support the compilation of LUFA powered projects. It should be + * imported into your LUFA powered project makefiles to ensure that the correct + * build settings are used for the project's configuration. + * + * To use this module in your application makefile, add the following code: + * \code + * include $(LUFA_PATH)/Build/LUFA/lufa-gcc.mk + * \endcode + * + * \section SSec_BuildModule_LUFA_GCC_Requirements Requirements + * This module should be included in your makefile *after* the DMBS GCC module. + * + * \section SSec_BuildModule_LUFA_GCC_Targets Targets + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_LUFA_GCC_MandatoryParams Mandatory Parameters + * + * + * + * + * + * + *
LUFA_PATHPath to the LUFA library core, either relative or absolute (e.g. ../LUFA-000000/LUFA/).
+ * + * \section SSec_BuildModule_LUFA_GCC_OptionalParams Optional Parameters + * + * + * + * + * + * + *
BOARDLUFA board hardware drivers to use (see \ref Page_DeviceSupport).
+ * + * \section SSec_BuildModule_LUFA_GCC_ProvidedVariables Module Provided Variables + * + * + * + * + * + *
None
+ * + * \section SSec_BuildModule_LUFA_GCC_ProvidedMacros Module Provided Macros * * * @@ -890,9 +175,13 @@ /** \page Page_BuildTroubleshooting Troubleshooting Information * - * LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and surrounding binaries. This can sometimes lead to problems compiling applications if one of these - * features is buggy in the version of the tools used in a build environment. Missing utilities and incorrectly set makefile configuration options can also result in different - * errors being produced when compilation or other operations are attempted. The table below lists a set of commonly encountered errors and their resolutions. + * LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and + * surrounding binaries. This can sometimes lead to problems compiling + * applications if one of these features is buggy in the version of the tools + * used in a build environment. Missing utilities and incorrectly set makefile + * configuration options can also result in different errors being produced + * when compilation or other operations are attempted. The table below lists a + * set of commonly encountered errors and their resolutions. * *
* @@ -984,7 +273,7 @@ * * * + * library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_LUFA_SOURCES). * *
Error "undefined reference to `{X}'" shown when compiling.This is usually caused by a missing source file in the user application's SRC configuration parameter. If the indicated symbol is one from the LUFA - * library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_SOURCES).
* diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt index e0471888f57..201a50068bf 100644 --- a/LUFA/DoxygenPages/ChangeLog.txt +++ b/LUFA/DoxygenPages/ChangeLog.txt @@ -29,6 +29,8 @@ * - Added signed alternative libUSB driver for the AVRISP-MKII clone project, to support Atmel Studio 7 (thanks to Atmel) * - Removed no longer required LIBUSB_DRIVER_COMPAT and RESET_TOGGLES_LIBUSB_COMPAT configuration options from the AVRISP-MKII * clone project, as the new libUSB driver works for AVRDUDE and Atmel Studio 7 under Windows + * - Replaced the LUFA build system with its (compatible) successor, DMBS (Dean's Makefile Build System) + * - Removed obsolete library TAR export and associated documentation * * \section Sec_ChangeLog151115 Version 151115 * New: diff --git a/LUFA/DoxygenPages/DevelopingWithLUFA.txt b/LUFA/DoxygenPages/DevelopingWithLUFA.txt index 9a02f95b939..31b58fa2aff 100644 --- a/LUFA/DoxygenPages/DevelopingWithLUFA.txt +++ b/LUFA/DoxygenPages/DevelopingWithLUFA.txt @@ -17,7 +17,6 @@ * \li \subpage Page_VIDPID - Allocated USB VID and PID Values * \li \subpage Page_OSDrivers - Operating System Driver Information * \li \subpage Page_BuildLibrary - Building as a Linkable Library - * \li \subpage Page_ExportingLibrary - Exporting LUFA for IDE Use * \li \subpage Page_WritingBoardDrivers - How to Write Custom Board Drivers * \li \subpage Page_SoftwareBootloaderStart - How to jump to the bootloader in software */ diff --git a/LUFA/DoxygenPages/ExportingLibrary.txt b/LUFA/DoxygenPages/ExportingLibrary.txt deleted file mode 100644 index 09518486225..00000000000 --- a/LUFA/DoxygenPages/ExportingLibrary.txt +++ /dev/null @@ -1,112 +0,0 @@ -/** \file - * - * This file contains special DoxyGen information for the generation of the main page and other special - * documentation pages. It is not a project source file. - */ - -/** \page Page_ExportingLibrary Exporting the Library for IDE Use - * - * While LUFA was designed to allow for easy compilation in a makefile driven environment, - * it is possible to export the library into a form suitable for drop-in use inside of an - * IDE. - * - * \note LUFA is also available as a native Atmel Studio 6.1 extension, which integrates LUFA into - * Atmel Studio including all demos and projects. If you are running Atmel Studio 6.1 or later, the - * below instructions are not required; download and install the native LUFA extension from the - * Atmel Gallery instead. - * - * \section Sec_LibraryExport Exporting the Library - * An export of the library is at its most basic, a direct copy of the main "LUFA" source folder from the - * root download folder; this contains the library core which can be re-used within external projects. - * However, as many IDEs attempt to automatically compile all included source files, it is necessary to - * exclude some directories and files from the library core export to allow for easier integration into - * an IDE project. - * - * \subsection SSec_ManualExport Manual Export - * To manually export the library core, copy over the main LUFA library folder from the LUFA root directory, - * renaming as desired. Within the library core folder, the following directories should be removed or - * excluded from your IDE import: - * - Documentation/ - * - DoxygenPages/ - * - CodeTemplates/ - * - StudioIntegration/ - * - * If required, files from the CodeTemplates/ subdirectory may be copied to your IDE project as needed. - * - * The resulting copy of the library may then be imported into your chosen IDE according to the instructions - * shown in \ref Sec_LibraryImport. - * - * \subsection SSec_AutomaticExport Automatic Export - * If desired, the steps indicated in \ref SSec_ManualExport may be automatically performed, by running the - * command make export_tar from the command line. This will generate two .tar files in the - * current directory, named LUFA_YYMMDD.tar and LUFA_YYMMDD_Code_Templates.tar (where - * "YYMMDD" is the version of the library being exported). The first archive contains the exported LUFA core - * with the non-required files removed, while the second contains an archived copy of the code template files - * for the current LUFA version. - * - * The resulting archived copy of the library may then be extracted to your chosen IDE project source directory - * and imported according to the instructions shown in \ref Sec_LibraryImport. - * - * \section Sec_LibraryImport Importing the Library - * An exported copy of the library may be imported wholesale into an IDE project, if the instructions detailed - * in \ref Sec_LibraryExport are followed. - * - * Specific instructions for importing an exported version of LUFA into various IDEs are listed below. - * - * \subsection SSec_AS56_Import Importing into AVRStudio 5.x/Atmel Studio 6.0 - * To import LUFA into a new or existing project, the following steps must be followed. - * - * \subsubsection SSSec_AS56_Import_Step1 Copy over the exported library - * Copy over the exported library archive created via the steps listed in \ref Sec_LibraryExport to your AS5/AS6 - * project directory. - * - * \image html Images/AS5_AS6_Import/AS5_AS6_Import_Step1.png - * - * \subsubsection SSSec_AS56_Import_Step2 Extract exported library - * Extract out the contents of the archive to a new folder. This may be any name you wish, however keep in mind - * that this name will need to be referenced within your user application under most circumstances. It is - * suggested that this folder be named "LUFA", or "LUFA" followed by the version string for easy reference. - * - * \image html Images/AS5_AS6_Import/AS5_AS6_Import_Step2.png - * - * \subsubsection SSSec_AS56_Import_Step3 Add the library files - * Open your AVRStudio 5/Atmel Studio 6 project. From the "Solution Explorer" pane, click the "Show All Files" - * button on the toolbar to display ghosted icons of files and folders located in the project source directory - * that are not currently added to the project. - * - * \image html Images/AS5_AS6_Import/AS5_AS6_Import_Step3.png - * - * Right-click the ghosted version of the extracted LUFA export folder in the Solution Explorer pane, and - * choose the "Add to Project" option from the context menu. This will add the entire LUFA source tree to the - * current project. - * - * \subsubsection SSSec_AS56_Import_Step4 Open Project Toolchain Properties - * In the Solution Explorer pane, click the project node, and press the "Properties" button in the toolbar to - * open the Project Properties window. This window allows you to configure the various project global compiler, - * assembler and linker options. - * - * \image html Images/AS5_AS6_Import/AS5_AS6_Import_Step4.png - * - * Click the "Toolchain" tab on the left side of the Project Properties window. - * - * \subsubsection SSSec_AS56_Import_Step5 Configure Project Toolchain Properties - * - * In the GNU C Compiler section, open the "Symbols" page. Click the "Add Item" button to the top-right of the - * "Defined Symbols" section to add new symbols. - * - * At a minimum, you will need to define the following symbols (for more information on these symbols, see - * \ref Page_ConfiguringApps): - * - ARCH - * - F_CPU - * - F_USB - * - BOARD - * \image html Images/AS5_AS6_Import/AS5_AS6_Import_Step5_1.png - * - * Next, open the GNU C Compiler section's "Optimization" page. Ensure that the option to prepare functions for - * garbage collection is enabled. - * \image html Images/AS5_AS6_Import/AS5_AS6_Import_Step5_2.png - * - * Finally, in the GNU C Linker section, open the "Optimization" page. Ensure that the option to garbage collect - * unused sections is selected. - * \image html Images/AS5_AS6_Import/AS5_AS6_Import_Step5_3.png - */ diff --git a/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step1.png b/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step1.png deleted file mode 100644 index 4f0c26f374ca20ea74c22fc47a66264cb8d1897a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98201 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�Qmf0fBjLJ~U8);@9@%%svH$AUGTvKBo5^ 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
FPqH^r|^y4RA)#RWsuiSb%AAf1zTW*g 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 YNg#YQXZJ!({000eE2zt(WnTsU57kNqO#lD@ diff --git a/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step2.png b/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step2.png deleted file mode 100644 index 6e309ae4151a4e02a859aca3a48319dd43807a2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100532 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

=!Im=ymD169iP`vb+hF_v1fa#4de6_>3K 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

N`w6 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 HhtK{GPaXat diff --git a/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_2.png b/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_2.png deleted file mode 100644 index 078f4ec8d7b3b3920c1a65a7b0b52d8fbee3b7d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28918 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 diff --git a/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_3.png b/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_3.png deleted file mode 100644 index 8a8571bd86868ef9a1bfb12214138c17221c4bd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23561 zcmb5WWmH^Qw*`s>x8Uv?T!IuX!QF!e2<}k01rNas3s!h=3jqR!CJ>)P?ytM=ci(v9z8?%mRh=zopS9MWYp%IZoQ{?<9yS#=5)u-gs>(AxBqS6KBqU@@ zOcca7LbZ=15&w|A^_1n2>c?qz5g#5o$Z5(UAvLDp{I*6ze8%!rG4V!1!tZ~ zv_*VL<)irAN8iKV$KM)ghooce!J{Uxki`VL4pJ(p;xt z$sCEMJ9fcu-)F|VjPE7@`~GuF5|_?bxC9(XXhldQ;V7hrMP()PF(Z*EI!M^E$Q(Z? z8Da^L5kDY48WhNG9#KV;%p zMZ-kLVIEb7es*~&iZoO+>;o;v!_6`%J&b;~x0zK>O7Ru{^736%<}E?RHX&K1A8 zrJ2IY<#9THS!c@cFsh=8>D}3*X@4HqRk4vJT>69hTy1NT$B zH$W;yudA!ubjf!Oi2H9W zmz4rB_pbO%YwCh(covm~JbfO+-P=AF_5Jc`6($gs8|yoy5&U=z5cK^xLg9BCO}_#1 zS$oDN#~goZ8pW73zoMTf!bNtf90AM#&|1JUNl96g;9?nxy@m!qvKUtljKgUdMCUq5 z>&dZaie;Ulnt39J+j$-ZVqPyv;PyQ;LLuWtQ49{jevve^3CnSwXB)xnNp&3z?cIf)!g4>o|PH6&bq8jVNO3<;9>iCZT23{Q+f9Un4DvHfzv-&fFU&-R(-NbtcZ zyCT@W`t66JUe4kCi^}HOOGV<1)#pZb+AARk;ADJpU8R~F{f{90)cV>@^@59x9nr*t z1DRJp1=%EuWl2d?FaT_@!`3xAG>8d~KaG^l*J6hG)m8UZPAkIXJ5@eEdeM&u6m4Mx z`_g<*-ow|)g1xaQ1lV_SnsMA*HG6Xiw2V)h-=4BKv51=fCZUryjot)v?ii1KDc=Cu z6+2s%Xe~Nfl!p3#t`Zwe1JNUYRvnZNpGlM>mUTY{&)thv*mP|!`X_o^c__T}8eaT- zUROtuFP!W@cbAtvw{@{+c37Zz*x!5YveKTO_SL40 z7`f*r9Ae4x;;zZAZMkGIK}kguWrH>>OcY)WMsGN-+Y5b9*DoxUPX@m-bIW~X zM&kQrKl&+wQ?>?Kyt&ep45@3SoXdVIYrLLZ@@qPWh&kZXU4c$cJ14^@R^hI zFlpj3fb&`|dbHCmUqsVwN|;74*-{E2TAIB3bh+ldW!NoGE9}H=hmdqgv+(``qXJJn zvh{JLu?PXhen*N{;CI6Y%cp%*SC6Yih|zDg==AdYkwEFTQxLP&HDY*-+&CN=?+fU3 zolylR2abEbPXiq45g`SFd$$M&1>u-7Ul_4O_=Gq(ul@MpCy}6~-`ZTi5RSF_%azsN z4$V`Q8KT>m!4AI*JsgV3>kbGU$yD^PyuBB(xH)Wh(XN9Snb}GH8ZKMD-`b>R@1pI6 zymx#;Cln5&_#9V|l|up?3aga)^=05P7FXO4pISnTYB@IX5O2AnqbLnY}Kt zD^IQLEsha=UhDO#WzVbg&#cC;?l#JT?{0hZ@2{_9CS)%AAQkMRlED2Li~IAz{g20` zff$6E1^d?%5p7A4fXwKStGoN=GKZD0kFV;hLrOJV^_Wt1`p%ah~(8#Vy00$7kO3*5%lO9g!4J=UY_&PAh z0?wUlna;#!pIHb@dzyAyrX6Lu`yK#zO%qDwio_KT0C@}5pZM$qjhRRtOBUkQIlPeh zy>GX(O!ngUWDoc@tnjx1ZR;4_@8gt%p7V%9(YppwBlo-M9m`i7Nw|0;zZB)kD|mMy zC~=aC@>(qhBnCWz1IblR1hgzQ-*TvxPZG%14~78vQg!USK{ooeIUS}x&ofXK6^`x( zR|8x=@uv`s-QQV%T6k*ZD)zEg%GT$Cy5=TP6h9l3_cR7!2q&MP4022GG&f9=K}ej< z<)Q{BhE!ig+i|a$m%V|9jEMU+|0i6C8-JQAcXCe!H@z94n~#LG4#oi#w;NA8VvD{* zJa=6R%-ip&iL=Zv*T|Feew>`InUy5ppWSAz{obX&8~H*yB6^MGP(V#KL|91&R~a|C z{Op<#3C3fbWNaG4fMn5M(HA_C-4QL{W5fh}RJN$4CI^DqZMwhI*vA8>DOw59a?v1B zu>{BaG8&?x(>z{2eMmeN@A}!Ek}AikF_{Z77=z~BHr|Ju>%g8vQ`asv_fM!4iLo9W zKh!!q5}2m(I>-p+>mQ!~hz?B^7howOm<`TQ9sko35c1-)L#TS#6H4bH_Kqi8mTbplJC9DZt zyrb|Zx|gkrW0>OQKozxOGa_hJOVLH5#iwu|kow8A^qw>T#jH+5)8u%SV5gSsC!eIQ zfTc#e9yeX1@rNH=miIfk#KKDh0ptZLI9t8M5{Gd3%RBz=#q2HonHOGag zvr0TPNgX-iPp`DzF5$}7&v;m}Ce334PmM!Q&i3i2f6m0GIPhILUgK08-?r-ek5gZ* z!`3CXQzTcrPwRw*jNO*5b^z0FJbSu+Drv6pk2;s5goC%;F+tP6@u;Gbot#$sKwHfIyxe0h-+T?#)?c|U=A#rvT>b*10(o4Iy$`tD4xYEW3 zSk}cMeClNGqmDrFHeXfO(~4!8vA?510!aqyeh18@rIddxEI2!WrW8;V{Dwh~jV@fx zMRG9bTes>(3-8C*ZV%UR=}I+EVaf)G?sSnsE@|&o+wtUi%MYaP9zCG{ub99Q(SvT_ zVZ7vcm~Wu+al|>Fc1E;>U-bTKt_BJdQQo-e+EP3Q<5)+N{EaA@%#1$Nhy37iX}BL~ ze<|=8?XwQwyw>{A^^V5qgc@pxpW0Hk#loCfdry|jtCz*{M7(lP>Ib)vCd)XnkbowH zHOa4#0Bu5uEJg205iQ)7rS(U@ajQoN@cpG+W?AP=Rtnlm39Mq$Oq93!Yi@&UUhOxV zLL%Liu{$mXV+`;IaWs(n`MHt}qJ!orntspY1F_Dll{=g)USfE?MMpdEv)i*a()_&c z;2mZ;OG-mg_ZfMYlFB?7&hRs<_urDIdw+8=WRW)ReILXCl$N1AWEHs_MeI5)QQ&y^ z8&8Lxw%?~!1S=O&agVakSAs1Az2{rmn$cEXB9>5xPi>y|>WY{zBW0O`Grv}`@T zn4K>+Lq(iK6r~PBB@%;Zd}*-VSa7sx{Q8_ft@-UmcWP7C3$qS~pL;7l2Vy5%z4NWH z^2y>!mDCR7WmnEy(Q@NpP`X`*VeD^gJt-0#`!b%tNDrGO0wy#eod>6AdVxib zk0xk<1ggo1?e8b4mz9Tx(p|Lq>`wJ3WOe`Az`17D*ogxKSQfH|rr+sS%z z?(+qxdkami_tQNgO3^nB_dgaouc&!nbW&hLh%wq5yhYL5>Tf>9>8{9KPUQ$?`K2t? zs^USvnR(=^8l9xG;bpkBYQF#2(84--lX)PoHQIUJzGZe}Yg0HDYL;c`@T7rm#G!d= zF#LsUexu~#Ge1`*>M~ zBDbD}V0LP1I63KV*W0`Js3;NSf?}fw8LkCs@ZQX^$UK{(yj*l3tUbY1K6(*idLXll z1<{ZxIkV}#P3EvhhLDVBGZ-670sMpQR^I^nD;-Ta(Wc~&Wbb1`V^czZ4=rN6f@CmU zHsFX5;1R^i@xqt$z5wj^e0gv!UKJ#?z;ii<^=`aA`tHC`xUxu_r-ByDynocopUcd3Y{}DDO z?zNGAi*XYPO7PO2^YA3q*1ks8V9)lq{B|QF$``hR~$;zp?(xQZU|5c z`np?f@jQ1#gSV=Ovz6#Tgar6mT9N9bZ8%U_{)Ywn&ZgKYfEzuWS zXER$WXf&(8meup}f0%w;?B94k1?kZ(F);N|cXJT#yEgv#><(sa@*UP;&wW|-Znel@ zSM61WJ+H+uA<;75bg{;kfq2bC#i{PQ)(Jc%JNwluitI3p9^bC(QNS^C)%q0+Mgt*8 zeO+w7j-7o36T0){wbJwl4iF8H{y^%-uLJy-)VG&e1l>y7-+RdUEW{VWI4}W}phn9d zw=XmC^Jzh|3m183u$|2X=C6e;%(LDA#~&CUJnj_i^?3;FnAkBP@1<`~4U1FFN#GQX zuG)`*5%_lY6ZT4#C#}_rC1Zx@2~I_$uWhgE4XB7`Fc5bkNeZ8uOK+LiK1MSad-m(%mT9o66?eSv* z?#dd1@GbCCv4IBytgaOIgP&1&Nm2%H)>=p>sG^Bep^b*vxiD2{@`B>r@uX z=Z#<&ZS+z4Is5cSmRM1J8^#e&Nr(mZ?ts=b92D#_GN*liGS7Z*R~HHEbPzG`4!P=$ z!5K_0#FS4CYgd~u;^^(ET{KBV2l(UVZH`H~kVO*8{%{C>j5@@)gCiT&^jb3g;`z4N zS&Vi-<}S>jO-loCy)4T-sA)@u*H8*T3DoU;*ZYKi0e)SJlhwM zBSSunT!Kl=Ds5;x^wjX)RiBJgXwVG(W_Vth<>jol7CxljE$n*wBEK-?BukmjLRFOD zYcniXIfZat>ouRGz-<;7O;?98cB9i#{L5Drt#aP{D@M_Xp&V6wA86{&gyK`)gRrfM zL-?+mW#KB!z*b3X1I%qO_j;RO(P$2rn?)aO#;p#X^128`uDymZN`#9caK52J#aJ*l zQd;~|W*e)@+|IgDE~u&Rux`Yo>wM1YJ$0)4Stqx&sk8H(ZCyx~jdta&mvK%;cDf6+e^`Y#Pzpfb=o*y0tJZXYB-Q&^j~@Qp+T{HUE`?NJwrhB`&9_ga zAeZk7X*59R3F4)-Xc6&ZjDAlbdB)cpxR}(|JLs>$?yKHJO8*%7qk2lA8S^gxlJSt3 zJ9wM1=rK#!O~S#;A0m9ByA`rbqu$2akB-xEE}nb{<8*FJ!qO72E_4xcT(^1(ua(u5 zIv{<`M9A(Cbf9!%92xYa?FWlhvAG?w`6KIeL#z$60HV?~4dV}L5oJt2{n-NA>UqI- z8T#*4k7NjIRA4deu3=YvpDF~>a zjY!6*(@r^nCNGW(X#ale9oH7@g-W{~8?|AyXnns{JbJy5qz7eY{TXSqdhrs4OYUQ! z__0L}XH_N(n{1vdspD@vQ)wHenT=E({Y~$8i!Ur}y4Iy312pbk=WwM6F!r{X&5&fx z?9xmEzE#L=o8tBtNpJ_1Vm_8QiBVbZ!QeNms z37h$Y)URP(*iV1aov*NpD5$=iOL*sYI2BWvE)&p1Fj5u;Zbsq?QstfT}prl5lxA0Wc>7 z<0}>dLXsNE@6hA>J`~{C50vl3*apv$4;iw$3&0THx3C*svM*j6k|wg_Ft@2Ed)s6YdDD}MdCyJF zfDpih)uE`pbCHsTb667bo(=;RJk8advR%$Qre~+^DF?qj=~sN9foNum?KvE3xI`^4 zexuNy$BcmkeIi!%_JawY|He=^@64|<5SmL*2L19B0I(BAv3$*ymGBsV$BDa z#zJaev<4myw2F4O#Bf&Web!aru2h4S6o!YJFY_*L;s;t)PU)1r?oHab#!b z?tFZ$rPvd?{=xAPQB;@RUn zddF6x0@FMd`YP7eW{Hsj9o)c9RA;5#260&Pe5@@Nlky4sknO9W%?4IhxMa&gAZ8N7ysQ+U#p(;OfiAkqZSLy({`RPQykiKM6kXZpXkwB_>-?5@O!_ra- zXOrl!qSl*w?(3h~x_D3%yZu`xmq!rS{UO#KE(UG-q(&+O1fX-I<5g)Ba*$c>xJRJz zp@yy?UYBs5wY_Uf#qJ&Z=8w-U`6oy3x+izF7GK<<10&Dc%hU@KDmk{rdGgp%*4Pw&(Nb7Y+l3Z#8}kjgW*@EynFdBnjYo@JwhQiSJFv)r$dE)=Y+m54A!JCae51X zf8(P-JdC27(*ms~y9?(bjSfWzG%f@HY@UkVS?5q!6`&zJ`n^*~e;`9b04Sixme;xx z^wa)*Zj>w=I%XSX_54%ll(80&h~AqF@8lgIPs}|^rvHS{d#C7+Lm2{)i! zm$z_2Gn?=ni|C>pVg*%-e z!UH`|h=8!EAYe_uNP6yD%5BfpHRtUc3M#piWp?Sqql%HM8V##}S6WwlM8=PSBz-?M zQP4VUaSK~eh8UGyp3JHdtG3~g^U_fM@@$S_cmLJD_VyQF=foi3Gl-gTXl-)t5|-}u zvbDd*w$AJ32>7a9%}?!;_SeT{%kv^*;495#x;Tl{p6S{CpwP;jQyB_!&V`W+T^-|6 zzCthZ7?PRSE21OR$bd_Kag5wvT$v>ksj{9kAKfha0Lzf9W6^Nh_AhlrW0&Rhm{$TM zD1frK>AFzGlS7>DOg-CUi~;hwfYE>oWbE$pCOrwy*}!9J(D8ok&0h&yop%3hj-3d zsWegS0gTm)^>rgoVlkqA`%{z%_CNg?8zr+sYfJmlnjr?PJ>@4OIYp)?&g)}NpkcRg zz&as4s+rq*0|N0SmY_^1M}Uvh4?1ZXbKksW^oaK`pPe|N6ynfmTHUu8_h`{&Ais8^ z!2>dSgUe!R_J*7uftfT^@d54h$wy>GEg1+S-Tse}!hd+mL%pt5*!+}Yz~>g{qoq&} zK8GiY_7mv?guKjx7L?hqJXc~#KS+{)T^2fjcogD zOUV~+#2#z>NWYm{2ms#@mBKm**tkNEKO)jyufo#m91gM1Z-5| z(L;RMRzp-mUJz}IV>6xkGy@}P3c1nnZ*Ps{*O!6Xz^ve6Mt1jfxU6wy`1*NC*l7uF_MaA-NzW`}73zs$|b`=Z` zwZ%7t-=KM|zIp6r8p1~QoRa1o-mDP+3Y|6DJnfLnhW1(DJ%!r-$qRgL0$m25M)Zu6 zJ5%8KR~(@4YX9|S)Kkh4L4&&`yJ&-} z1kG0w>mLxLpZMO;5Kjk`+Eks3dPPq#{X`0Kbt@qJn1TE@$#}6q!(CMC$mlB(_V@a5 zB~VR60hj<7?~QjPj{*4XZ9BK>ik*SZS~V8lu}%yxC2m@R7yf4|OGbNpNPA{Nl z_AxTDT0$5o-bLX@*a)yNus@_*p!1TA1PElrYSKL1<#un<$5EQ;C4M2f;l~>#Lr<8m z$i*g%x?;bzH|Q=C4nCqoyO2X3dtg=<=hCS=Xe!S#QGvOD$JwZ8KE{Z77%l-eH$Lbh zfu>hVKS^^G<)DNkBoO3X@KRYKDC=UI;Cs0y`!#jMg zl>GzwmZ9mteO(a=tCzx{T1}^jM1kZW&C2 z(06c9X+v0GsS>btRs1yiR8jaH;QX}yU%o>3o`5RDQ^Z1u)1=T8vb%z+=gHeeuN5c z3~S92NHvz2S;p3>k9lQs-`(YysTvUF8jN;q0GoCGG)P`{P&j&+IXpWTMZ*ZibdRnWNBvo zm`8LD*I#K2oS29pY_pH#ZaLASnkX` zbATjHb15+4&(i5jv~CnBGMyESEx;C+(bBYjNOBF?*EaJH$)YYsVTT|5N%YO$tP8~d zFBriulID#nh;IpQh52luP|$Q|Hzr?4niUh+jNVQqG_f?g8%`FBE_?`1x7C}7;s-T| zO&ErHUds89d^x#dBnMXGDJKcG6MfmZIEpLg4AgE+iqpdaO=sehHmXZN%j($4sonzk za+kHltJH(sqn?487#&)hIljMD$D0x0@A3rIMmo6D4Dk(16#>o+!fnq6DxS;9l*t02 zlPf54y@c@Od@;hpdfR(C(sUET#1Z)+RIZl^u{1V%<=6^AIP$#Na|z*K+lu{)UL+dw zAyqbjxBWVZc+nzQ3;NhhgeZyN=@{pqT%~TCvQtfhr9x) zP$4>*Byjl#u1cb9xKEja;=vR?&}o0De|$(76J4;e!cR4q=V$w4qx8L1+jh=EuabwcXYET!qhm~C z0?+5tg;s37gaYk-3~NkU)=jhh*mP^pneSrQMR0?~1A|75Q?Ox5}e#R}`7Kien#AANyY~jNnm1h55x6BlN~pfWw-y}$?eTG+k)7D|1%T<8?_dId*Z9obu+5ums8`bJ?wK+Pm@0D zKNB|4Zr9TqN1M(BC;0?ylY#Y9S*J3qKxD4C|BQz)q17N@!3~^3{%sgsk)8)dMJp6= zsfFsFq*^z}R`J!KK%ZOEYcT$Kz{>`%^`fyVi`W=;ys0s1TF~?tuTQufI%H^1Bh88T zhU_+E$4|{CCcEQFt%)^V05hTcgdUCx>=v0@|C3lRT&CG4X zdsw(qBnI+ie3u=Pn__nWe^cQcE#_XTr{5Taed5I`mX>fO5)8{z6njZx_LpdT%4*whuRE&QWg$&&K$@88B+p+jhq;O4Gfs}v*;DMnhhNEo# zWwpp(IhH|)%_;^0mj!n)Mppi;mLII0nI!?jJ|1|rP6I*R4KkD4} zP4R^d8#&1utZyLwJ*z*BRqKdAb^mVJS=bOcmagrp9sBv|3si=RnB{Onog&Ex$f~qA zP4I1F99#~q&?%2%^x6RLKsZkdeZ_Og;8sGHx+ z!>?tte%i(M@r| z23)<(m5O;aV{Zj(Lf5Ix#R>s%C}HM; z8^VS5!ax-Rl%=Tu+|3^; z(0D!Sr)6ED9FA%mX)kMlW$}+s=J~bkRvvSt>GihKF`1<}yYV}ihDB9KH0Xc>VloV6 zSuLDaWac8-z`soDYPj>Nrdt61C`m(<>bd&Hk;M zB^De6bU=B@oXPR^znvnvkL?s|i^p!)pru{UR?v`aQp5NfMS_=`cg2MvjadvL{CWDB z%~N-IXwGKMD5qaPZVCQB>w}18h*|;+R#a<3g{XN98U!@4!EH@wT9;^A&*Zf1#Q?Vy zq)9_D{4>^$?Sjp7`9k6+ZyDEV{>O6&+8+vJ`?ORm%yx#EpY9$1X%R;}ATBnY?(Dde z2Asax&)j0lBc3KSNZ`70z^fQn=etwz27B`j!iI?+VwnlThKS zd!Q~C%OWF^I6#{p2Y)qU2S?UIQIL-iuKM!8(pU&gSbZvjpuaORUsdx`AyFtjE zC0y2TQg|2ax!pzWrPQKP;ltsiU9OMd!v}6w5+oe52+6wW{aCs&LbCpK^Tcqo*KQN0 zxH-+2nCd;yDD;{M>@|3q7nL&lO01j@+i!gGy9LE`{P!3#`KzBE+&sh%<`1%+;ddkVOY| zK}K%wf+mX;UVC*@)H~eEa=@Xxt&^H_k+Qlogbf{LZcl=dZGaBE=1nbVv`j8-(~E6Dzucn1YRnUW7HIoygaDLi^nIt zsj15^0sUU408E6aT(^P`FrMBzt* z59=|3KHTo?y^{&Y`A{q%z_En-pF`_wL{ z*@tZ%c3lP|@GWUelT5>z;r+qPL*^Jp(~40Yi8s8pXWXm%eZR9M|kSolwoWq$v&41k7ek?gvMcbBRoNSVPJ zdPPC@ELQ{gy8Xv5AG^oEXJWlHd_A~P91J_0c>g>~RmQB}qE}Jct|4L2BAcD}jhpWp zL!kj4Ul;s(7l5MyHn{ zo4k}D0di`U#F|Dkk=vSPpRF-kwPX$T73T`0K~tJRP1x-S#iTKLB~ZBm8Hn)1P+Wu` z#&9D1&~efB5-TdXQpH`faPsG1Y5H-P+y_Rn`F>*i;(E)E#!okLzkM+KTNSyE)mM45 zTw?!-R{x4j+LW;GO&W2MphXq-w;b>$if>4_9TEculyr}UU+k|y@PE+bmPrNrWWQsr zphV0mxdzMJPBS4xfU2w>$ADXtPzGay>eMTVpWxn<|8 zA+~-b_6Wve*&I^DNu5hAOM7~P9ud217k#=H*G(8%&6>emM;K(!sb06DIv+o!F+CT)J_>T=ESf{+6z4Qvp`|RWjqY%m9 zA?0aHvC!k5{C4kED8UZ?nm`!*=S99pT@J)~dR%5A2cZu;OcE8DNH1}4L%`qvgk=N+ z)oPpfbK|WG&RY8k?DdFt1LQ1Ev^&Uk(YWV@-(8t-uxLZB-}bLgh2vFG|04}1Sn(0h z6k+UKl1o|zUCU#+^Z~`z=K*@*u@Bn>{QtKyb3dI5I71 zVemjC2(S~pjt27%rj%1li`B_stJ@J`*7amsfqnEh%C;+QELu&;BH`w=B@gPutk&31 z0S_}kAm#deMk9x>-(IKt1~`GIK!^=@l@4W7E+UQVp`!dc z*kN#e?D)d6%_oP!|8QwG6UUvox9&UaY(;_|OB`y2=4t5mse`1SdrS#-N;nxm8p8TY z;}JT}k(dNqUYH`w{Nr*e2};o4OVs@TE!dQ@{X?*+C_7Hye3c6@gdAoQfLs#w@$&JY zTZfGNbR--Q1kgOn6h0U4+z6d+A;LYd#MUzNP?74=kq6vORX6 zv>`(UwXtUyDF$XfDB~46n${QKT0_Wx*`Vv_hHIR zNXOA$auz-pEzggpAqOW^lJ204<_qF+j)=cZ!lL?}5T2~4PlAB=6Nx-TK(qS|@!!*7ssdg9*Ck%xzkEL=2z7tAXS67?6}nksEtw8%_rfjV zx?*Kc5#T>IjK!|}{iCZy$$)(- zszlZK9zu*bWb|9dtKfPcL#re+s^^4=17idka&krS92X7S5Me3(^Xa9+Z@alI9iI>I z5w(l?s!ouqz!4?=>avm|=OH0K4Nc)7P;Ht6jJ>B4vx03$?94!$qRZ6*zmntlakzQ$ z5lWOo#L0tXXJdZ|ZKqM58Gu5n4D39LS|mdQ% ztH9Pa5Gx~UE8P4l1eg0Y0>1p!10%T%yYi&jHYlC=6>yd{1q~{kf}rdE9*6KjSBYbh zs`4(ihAU1$P;tl~GcmVbgJ|eVUVPkPINJ8ahm{G^EQZK_c5JK!NH`1-nOWAm0`r*< zHQH%q8Ie3hE_*8Qo&uYs8sSnd=mtoT_{PVezYPNka^1@2gq~TY zE%_2b=Keh=3kHk{e6%!#44!n4_W@rOqWpnP{G=e>%u%W#OiKnD2qY9DjZUTzAy3MI zhd5jyq(u(x(WOr4G}hkU{6@23Eeo$5g}Ka9yOs@w)g=Jz|Z0Mz8+q%%SAxl z=D@so=xS$^i1e?Q(sYHd-5cqADZVZXR3tZ@KzM1DkpD5dE{3f41+Z_8((9gBz%xhc zG(NnGTs|~tR#e{GjJ?C}Afutl*dTFA`;$O?vbRB)|I8EN+F1KTv=USMzSC@Q=a!EE z+N1qvxr(&3F|x_MZ3sG`8S)wxc-~0%&k`Z{jSwja(mK>I7qq{(>+F{AJ?960I1POn zpun0bL*vleNL>lu04?^3{WPAfxQf>R5OraK&zun_cE%Cfo6)yv&d>O$D*V4TDhg8_ zv~)CSH7_lY`TB5g?D&wan@lc6+NBH!14jpMzs7I_9fucnmiXNAMM+-W^nzHbBAJ@KkN>iTKW~%*3aEUaGYEgrzb#!`2~C6>aIhh7 z7P(Z8;bB`O4oSW{kmP*zp;y=vwyl(|yQ}8G;t-qQ>_|VcV2bXy0_T{F`|nvJj?JFF zb>`%KtB@o=PL=Ssz4Bg3nj}_!K63^cU@0U0ok%9Np8KpO`ZMD6`&Zq+{DB*eOWIr& zU7&$09w;L%K?h9TRRdg-wR|jVGCI|qHz9VqGieuRU_W_#!BW`lkO=1?9NPV^Xhlr& z_4!|2NWw8u!A@tIK3?5ZC<>DBnWx#e-xTS)?b3_CpVSL@DR4DTMOzvuw57Z41tLyU zrREubt&CxRshUt&%Bm*MCQ1sLUdZ|Ml%uHhArPucLEx+J7kLtr!3R}?_Lk-Dx2Qnz zAi{-5Xitq0MD6aj_U7TbVOC7GCL=B1Iro?F5_B~9Q$IF-JnZj?lP_6I7B#rmgn1qi z|6??JN_|U3Rc$1=&l%HuENsVGglFh^$S94W|J_1%=s}HXL*hPe_s=**PakT^0?DGj zSK;7+@kixy$g~eTRwX+|Vp27NO)Mpk(A1H&c?kJJdqXDs&jMt&bh|1ml#u>j8wB_s=`5g8(3(*e&hL1XsK9IzFb+4Ofd38_RSqAXpDk+T zNYVW8-dj^Id5otcje-2X2Vc$4FqEId{T33D&#n1sRRjsZJ4O4VLCb*dvTohKfd^2qzs`<%jJ#eQyYD1kIC2{}>-sAP5{zycL1eccMtKcKqu|D(Lw@94y|oR5?V%Sk3FMC(Wp zqUmymY2?2!2` zz)XsdwFr1iB|)5xj^<;4$cCl5u78!)pwqUL-GpFZ8XJ9dv=RNsCjam6tk^kQAwKM3 z6c3oDUirS=acFvE!6af={@OWK)mwq@*zH^MjcVR?x(9W}r#Va44}qd)`o}gnuF#kG zwAUpfNW*=PWwmS^P^OE*ld)&8ASO-rJkQ@V%+!ootX|G1pwkK_p7wi6-C)QwDr-2G z=G7`DO>^wMnO~{TX&-xt&SEtd4ph?+ghpAA`{O z{N?ihcmD1p1h3~iu|d@^hXQdE^gCSs0z_w(yV7wY+F}NkHOhO+_lfyd6@u z$>OpI`gy?v5x8`y(DW4CmzteK*FsLe#1WS=h~AVHtb3!=J_0Oj6T-hghiOG4USuHQ zSmKy6=#*$?eN=Q+{*q5pd=$SDD`S)G9(fohAQ4Jh zk|JEYntz~8Yrhfa{vs<3w>$)9Q(I-r*xOc_X{;WC<`1GWQ9*Ty#R4w`<)QzC|I^O! zBhODeDQ8=jkO{zEyy=sVtJ@{7eZ)vcv-kOD*&#T=4`Yde1j^*uMr(>3qMufpFw+5b z6z@B1SdL`#rYjmW8j==y8N$E_f;zCB;XRuC>GYNNz)YfOMn-YR*K7IPF%3MFgQdiA z{dqG-OXnH3=so5EHyfL&=$*;a(I_S2R|Z4lF~xwbqR??y+vZJ8T8ZwLT<}$mn2SA| zbfbO=0}4Y>lUG8!Y6ex0?~o8)Oq_IdMrT290l91ERwHZsq&Z?TcvsrinOjK3;sN&yBHAE6(8pHm6SRn+rpeV zKnJ=R#;@i^xzkl*$ek3r05i+W_GOGk^Mob6g`Lieqa*K4bc#AYcIFmb`&nEEB zdbx9z2s8)gA5zubsxM79a|)dWsiz#XvtFIL`p<{lsh1&l|BDOqyH)`JVN)i7Zx z=}38iq_8My_w{Hk3v;vbb8Vc!5G=Rad2E!+KNZ>>Q`+rHs!cZ4QS!VwoPk_SRziv# zSkPN%pSf~=u1OZWHkD11PVTFU-h0PZLkCaMjhh6Wg14v}4(RIo`;gRi8FYhONl3{6 zIjLmr+j9d5Lh`%dsl}Z&H|qOeG(|a$<*}N16r>~}=ZCJ8I0;`qODa}8xpb_!*|;D{ zz~aZhnkFDu`OS8hRW&Q^)Z3~k#}52HtqpjaX>0VeS^(hv8|D2-m6r<0?CO6#@2Fx*b(HhIb|qNHBZArt2|e|Ubj4nb<=U8 zuX>YL<&hy48DeSaB4_O0!A*$Sq`)bT#&?VV7Bkl7EBwUhtCe4@XiV#C-AJEu2t5nt zHU9E^N-;NaOJC-JGt(lMzI+E-Yo+@wP+uihMCG?Pu?1Jw@O~d7r->~LCA^YVLGhAH zpn1vRgLuYhG&kp|vS8b5gjd9(fN;6_Q+=D5xWXzLJ3)*>GfdrD|B%dM32ypZytSXC zj_OZQOGH`twf#P({qw*9DmYY_r~dPOTgep5bjr@h2oJN%HKU^V8E1gTArpN$_e4O;`o}Q^CD?go zn2t(jDc5hOg)B8TzM-!CH6TG~m9X4YxnUSueMguV(tZMnTz_r@)a!g-NThP>)tbVH z@;vQt6eI&JllQcHuJxB}*-|8fP0;j@QUhlCy#Wj$HmpoMVeqDbbG~y=5Rc=ebbIZi zYX7P>MZ{4DVaomo2D$R~DX_#9uO!@?sVDj9!))F&2G!2!Sh71Boiz=C0*WyD&dxdd zX?n)lOZnZn@-7wadG2H>D)T{TTz_SvybZheWLvak_l1O2Q_N1tb|w|fJWQ%6>%#UH z=p6h=y5AL4=%obLKFYDUu;UjVvp_rr7w%9ic>`CaBXDz1;>hBAz zI6{7g?y%}jUhCp~4-etO6%QPhtT$D2YG z9ttu3TQ3^(vPo^c26|~g@#&vL+JntcFFwXzYmTY0PmPlK_4q)VAS>|#&UHv^Iz%{0 zTx8khRkrFgDKu|2xF&i~`5p|`Jy<#^Y#MwrWo$1>#6*D(&_F5KM*)T{J$#u%yGGxzTq1EApn@=Vo?qVtgwM8LQf+0#OHAx(|*zLvmGBWPY*V; zF)LWFUO?1Fid{-`-R#*ob>or3$B*#eQaD+!AB2Z}sZ$QoPnADTIyDt;LZu6VnO8H# zw(bksv;Dtj6{jqG8_ZQ7$*i`c4q$!fg)x$ElqnX(nZ#RU0=ga{5K>RDBqCY^&>tdK zt|OQ{5sW|>vNs(@6XIk{k-a%D=ke|4t5;0#mR>F4F5agPHD+rvx>#xgk27?dReQel z+N$MG@IL{2lK#Pf_tdkc?6Y;|nBQ_wE08R*^LH;CUQNBNxNsqTIu^5f;-s6lH+0WS zVIRyY#oOt+Vq%2$wMw=wwc(u9Jo=O8gc7pgFZJ}&ft@6RIIX8P^YK>WG5E!IK|*M& z@$Ff3HN8qfI4h{-80&8phCp!Qdtqc(Y-3}Koi50%@`Mmnx{55>!SLNvp3Lz+M$BX} z4={AOi!lk@cpbR|(^_v2%18DztP5B@Yd0HoZS#-c5BP6o4O#y;A(paVnXnK#Qm)Ec zZ1V18i=-)|;3TZj82SQS-4j2Kx0W z1a~TUzS@}flnhValpK$tZCY>Vbe(nU3CF37@D1)*Y56iAc%FXPH=-=yaivcCaNj*@ z#>e9`Ps_{$E^*fx?{q>L+mxzVMwmxO;@(s(y;n=_Gt9WE3_;*<)C~Ke1sN(SvB|RV zo=_Jy?rNM%%h}YS2D-JHm{6MnjThL|cMAD9kh_SyS+hbt) z1~05}IdznjCs|@>d{AR)f0$+H%6lQQ_~z%cUYSLwK!VL=V@pk4W2)8p90tB4%&f}+|qxr=7mH4y&PoVpX4C#99LTC<#ZPw+!A#Y znz|5Va>Qv&#zFm0w%NN!B|n^V&1;V&LMG@H#UjMtE|{s2wC%L<-e0`(ztz4jzjCd7 zDi^U3yV&K~pkugCLOmjRo&tAcgU=Gmiq}DT#o9Ft1#Qm*O-h-2bEgb7A01+TetxnD z!cLq{TfMsOVb>ai+I9p)Kle>qimwp6GJtGbNG=Hf>WD9 zr;FexHFJGD*|$?Gg%@}qhQ;rANYNxK4G6IRifau@m}Vs>zB9%BTNN!+5#_q1yr9@8ArRNr#|4Ddj9GqW{UTtD&Hq7IB`9Ky}4jO>iQIIF(I4*BwS zlF}}4y;GdIcJ@nQ9XF;VHDqRNJLOci%smG;pHK7{--@D9>jwZR8pg0{90wL-;^QtP0$`I=+3LnolVrnol%( z{(Muwt)_C8rpIQUYiQL+{>!!lp&`y6fQ+JQ#o>*=D1c;bU&pGte1$ZmPG zrzAA<_%mV+SsYgNv@}Se+V>nCls&Fvm;<5=M!uqX2^ODYP*aKU?6RaAsk(hL%0tl# zarN}ZE_XGs1`9MCU?Qg&B!MjZxFJynvhj{=;Du&^`|s_g zn7Mt+R7QH;EHrG8*g~Xw1eN1($gq%63Jkw+ef&;c-D%hao?e&NEL=s(Y((~1k<1~O zDxw`p%}GgTr2oIhhAuCFgPU`;n%iaZ5Djdk^?t%W^2|`FAaZGm82Bw>CfBV>IL4JT zeIouv@9o?%F@4S3aB9+vP!$oHGILngcIP z7lLd*lWb}>K5VC^owPs5cLq0w)LFhYUETn`ZM=G}Qbg>%Du9-jVai9OirhhCQbdu; zixFCo_iw@Bk1zd$WMp~$8Rzr87XhW~|4B0P3yS{uHGt(Fx-{Lhz#hFh_tuj~3TOel z+=e%1pWEAf^Y7bC==n5MbE7|Te1)ktU}O*{bJsnhszQUA=Q6-^Qf3R!yRr|ycZmlj zIZFye-y$^xFPxzt*Z=EzfjX8@wsJ@Dj?bK&o7Hv$(vFtHRK7#vL^}T(*6I?@ zsI(-xSD@>NeR}_0fDL&&05+W8VZh7M+Gu9h!t{dy{eBF7%>7j?u;DqEB~nI7N}6VPFUy*j z2{3BR)k>rf@9?WrZ7+J2V*Cp)*pu@*sVV!GyxJn;IhP(bivpx;)I9 zxOwsGll=_rgC0J9a=Uc@w5)%{h|+s7;?}FbF(MjMuE0oyPZka`{DwJPH2vEQ%V%v1zvii5Q5Nj`j`#$KR?6hF#f1n z$!DHj->K-4L{@L0x6@h1Oq-ksM@ho}pd|~dQzq!~TsogX7w2UNW&tu~R0w+Mk>L1M z;XHa-FyMvzV|f&@R7P(>rA$zD48Z~eU9x0~G Date: Sun, 3 Apr 2016 15:38:03 +1000 Subject: [PATCH 09/11] Don't run the AVRISP-MKII Windows Driver through Doxygen. --- Projects/AVRISP-MKII/doxyfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Projects/AVRISP-MKII/doxyfile b/Projects/AVRISP-MKII/doxyfile index 0f8c6f6774f..faba2c70d2d 100644 --- a/Projects/AVRISP-MKII/doxyfile +++ b/Projects/AVRISP-MKII/doxyfile @@ -805,7 +805,8 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = Documentation/ +EXCLUDE = Documentation/ \ + WindowsDriver/ # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded From 75b68126d01306347626215ec8ad1537c903e4cd Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 3 Apr 2016 17:26:37 +1000 Subject: [PATCH 10/11] Add missing BOARD_POLOLUMICRO definition. --- BuildTests/BoardDriverTest/BoardDeviceMap.cfg | 1 + LUFA/Common/BoardTypes.h | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/BuildTests/BoardDriverTest/BoardDeviceMap.cfg b/BuildTests/BoardDriverTest/BoardDeviceMap.cfg index 18a502f5853..096d88998bf 100644 --- a/BuildTests/BoardDriverTest/BoardDeviceMap.cfg +++ b/BuildTests/BoardDriverTest/BoardDeviceMap.cfg @@ -73,6 +73,7 @@ BOARD_STANGE_ISP = AVR8 : at90usb162 : BOARD_U2S = AVR8 : atmega32u2 : BOARD_YUN = AVR8 : atmega32u4 : BOARD_MICRO = AVR8 : atmega32u4 : +BOARD_POLOLUMICRO = AVR8 : atmega32u4 : BOARD_XPLAINED_MINI = AVR8 : atmega32u4 : # # ----------------- XMEGA Boards ----------------- diff --git a/LUFA/Common/BoardTypes.h b/LUFA/Common/BoardTypes.h index 2c1ea7ba3fe..212374ff32a 100644 --- a/LUFA/Common/BoardTypes.h +++ b/LUFA/Common/BoardTypes.h @@ -240,8 +240,11 @@ /** Selects the Arduino Micro specific board drivers, including the driver for the board LEDs. */ #define BOARD_MICRO 58 + /** Selects the Pololu A-Star Micro specific board drivers, including the driver for the board LEDs. */ + #define BOARD_POLOLUMICRO 59 + /** Selects the Atmel Xplained-MINI specific board drivers, including the driver for the board LEDs. */ - #define BOARD_XPLAINED_MINI 59 + #define BOARD_XPLAINED_MINI 60 #if !defined(__DOXYGEN__) #define BOARD_ BOARD_NONE From 3126cbbf96a24afd447ece00248e5ece39dd088a Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 5 Apr 2016 21:10:07 +1000 Subject: [PATCH 11/11] Update to DMBS release-20160403 release. --- .../DMBS/{Modules.md => ModulesOverview.md} | 20 +++- LUFA/Build/DMBS/DMBS/WritingYourOwnModules.md | 94 +++++++++++++++++++ LUFA/Build/DMBS/DMBS/atprogram.md | 8 ++ LUFA/Build/DMBS/DMBS/atprogram.mk | 10 +- LUFA/Build/DMBS/DMBS/avrdude.md | 8 ++ LUFA/Build/DMBS/DMBS/avrdude.mk | 10 +- LUFA/Build/DMBS/DMBS/core.md | 26 ++++- LUFA/Build/DMBS/DMBS/core.mk | 12 ++- LUFA/Build/DMBS/DMBS/cppcheck.md | 8 ++ LUFA/Build/DMBS/DMBS/cppcheck.mk | 10 +- LUFA/Build/DMBS/DMBS/dfu.md | 8 ++ LUFA/Build/DMBS/DMBS/dfu.mk | 10 +- LUFA/Build/DMBS/DMBS/doxygen.md | 8 ++ LUFA/Build/DMBS/DMBS/doxygen.mk | 13 ++- LUFA/Build/DMBS/DMBS/gcc.md | 8 ++ LUFA/Build/DMBS/DMBS/gcc.mk | 10 +- LUFA/Build/DMBS/DMBS/hid.md | 8 ++ LUFA/Build/DMBS/DMBS/hid.mk | 10 +- LUFA/Build/DMBS/Readme.md | 18 +++- LUFA/Build/DMBS/Template/makefile | 11 +-- 20 files changed, 254 insertions(+), 56 deletions(-) rename LUFA/Build/DMBS/DMBS/{Modules.md => ModulesOverview.md} (50%) create mode 100644 LUFA/Build/DMBS/DMBS/WritingYourOwnModules.md diff --git a/LUFA/Build/DMBS/DMBS/Modules.md b/LUFA/Build/DMBS/DMBS/ModulesOverview.md similarity index 50% rename from LUFA/Build/DMBS/DMBS/Modules.md rename to LUFA/Build/DMBS/DMBS/ModulesOverview.md index 65caf8a605a..1fd9cc11ccc 100644 --- a/LUFA/Build/DMBS/DMBS/Modules.md +++ b/LUFA/Build/DMBS/DMBS/ModulesOverview.md @@ -3,7 +3,7 @@ DMBS - Dean's Makefile Build System Modules Overview ---------------- +---------------- The following modules are currently included: @@ -16,11 +16,23 @@ The following modules are currently included: - [GCC](gcc.md) - Compiling/Assembling/Linking with GCC - [HID](hid.md) - Device Programming -To use a module, you will need to add the following boilerplate to your +## Importing modules into your project makefile + +To use a module, it is recommended to add the following boilerplate to your makefile: # Include DMBS build script makefiles DMBS_PATH ?= ../DMBS -Which is then used to indicate the location of your DMBS installation, relative -to the current directory. +Which can then used to indicate the location of your DMBS installation, relative +to the current directory, when importing modules. For example: + + DMBS_PATH ?= ../DMBS + include $(DMBS_PATH)/core.mk + include $(DMBS_PATH)/gcc.mk + +Imports the `CORE` and `GCC` modules from DMBS using a single path relative to +your project's makefile. + +If you wish to write your own DMBS module(s), +[see the documentation here for more details.](WritingYourOwnModules.md) diff --git a/LUFA/Build/DMBS/DMBS/WritingYourOwnModules.md b/LUFA/Build/DMBS/DMBS/WritingYourOwnModules.md new file mode 100644 index 00000000000..3ecbb33124f --- /dev/null +++ b/LUFA/Build/DMBS/DMBS/WritingYourOwnModules.md @@ -0,0 +1,94 @@ +DMBS - Dean's Makefile Build System +=================================== + + +Writing Your Own Modules +------------------------ + +A DMBS module consists of the several boilerplate sections, explained below. + +## The DMBS module hooks + +Your module needs to advertise to DMBS its name, its makefile targets, the +required and optional variables, and the variables and macros the module +provides for use elsewhere. This is achieved with the following section: + + DMBS_BUILD_MODULES += EXAMPLE + DMBS_BUILD_TARGETS += example-target another-target + DMBS_BUILD_MANDATORY_VARS += MANDATORY_NAME ALSO_MANDATORY + DMBS_BUILD_OPTIONAL_VARS += OPTIONAL_NAME ALSO_OPTIONAL + DMBS_BUILD_PROVIDED_VARS += MEANING_OF_LIFE + DMBS_BUILD_PROVIDED_MACROS += STRIP_WHITESPACE + +The example above declares that this module is called `EXAMPLE`, and exposes the +listed targets, variable requirements and provides variables and macros. + +Your module name and provided variable/macro names must be unique, however you +can (and should) re-use variable names where appropriate if they apply to +several modules (such as `ARCH` to specify the project's microcontroller +architecture). Re-using targets is not recommended, but can be used to extend +the dependencies of another module's targets. + +## Importing the CORE module + +Next, your module should always import the DMBS `CORE` module, via the +following: + + # Conditionally import the CORE module of DMBS if it is not already imported + DMBS_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) + ifeq ($(findstring CORE, $(DMBS_BUILD_MODULES)),) + include $(DMBS_MODULE_PATH)/core.mk + endif + +This ensures that the `make help` target is always available. In addition, the +`CORE` module exposes some [commonly used macros and variables](core.md) to +your module. + +## Setting optional variable's defaults + +If a variable is optional, you should provide a default value. Do this via the +`?=` operator of `make`, which sets a variable's value if it has not yet been +set: + + MY_OPTIONAL_VARIABLE ?= some_default_value + +## Sanity checking user input + +Sanity checks are what make DMBS useful. Where possible, validate user input and +convert generated errors to human-friendly messages. This can be achieved by +enforcing that all the declared module mandatory variables have been set by the +user: + + # Sanity-check values of mandatory user-supplied variables + $(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) + +As well as complaining if they are set, but currently empty: + $(call ERROR_IF_EMPTY, SOME_MANDATORY_VARIABLE) + $(call ERROR_IF_EMPTY, SOME_OPTIONAL_BUT_NON_EMPTY_VARIABLE) + +Or even if they are boolean (`Y` or `N`) variables that have an invalid value: + + $(call ERROR_IF_NONBOOL, SOME_BOOL_VARIABLE) + +## Adding targets + +The meat of a DMBS module is the targets, which are run when the user types +`make {target name}` from the command line. These can be as complex or simple +as you like. See the GNU make manual for information on writing make targets. + + example-target: + echo "Your DMBS module works!" + +## And finally, list the PHONYs + +Important in GNU Make is the concept of phony targets; this special directive +tells make that a given target should never be considered a valid file. Listing +phonies ensures that, for example, if your module had a target called `build`, +it would always run when the user types `make build` from the command line, even +if a file called `build` existed in the user project folder. + +You can list module-internal targets here, as well as mark all public targets +via the module header's `DMBS_BUILD_TARGETS` variable. + + # Phony build targets for this module + .PHONY: $(DMBS_BUILD_TARGETS) some-module-internal-target another-internal-target diff --git a/LUFA/Build/DMBS/DMBS/atprogram.md b/LUFA/Build/DMBS/DMBS/atprogram.md index d84cc9860c0..ea1b0d9194e 100644 --- a/LUFA/Build/DMBS/DMBS/atprogram.md +++ b/LUFA/Build/DMBS/DMBS/atprogram.md @@ -109,3 +109,11 @@ this module. + +## Module Changelog: + +The changes to this module since its initial release are listed below, as of the +DMBS version where the change was made. + +### 20160403 +Initial release. diff --git a/LUFA/Build/DMBS/DMBS/atprogram.mk b/LUFA/Build/DMBS/DMBS/atprogram.mk index 5c433d7dbc0..a505275aeda 100644 --- a/LUFA/Build/DMBS/DMBS/atprogram.mk +++ b/LUFA/Build/DMBS/DMBS/atprogram.mk @@ -13,11 +13,11 @@ DMBS_BUILD_OPTIONAL_VARS += ATPROGRAM_PROGRAMMER ATPROGRAM_INTERFACE ATPROGRAM DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) +# Conditionally import the CORE module of DMBS if it is not already imported +DMBS_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) +ifeq ($(findstring CORE, $(DMBS_BUILD_MODULES)),) + include $(DMBS_MODULE_PATH)/core.mk +endif # Default values of optionally user-supplied variables ATPROGRAM_PROGRAMMER ?= atmelice diff --git a/LUFA/Build/DMBS/DMBS/avrdude.md b/LUFA/Build/DMBS/DMBS/avrdude.md index 6af6c70fda2..d6c71ce6dbf 100644 --- a/LUFA/Build/DMBS/DMBS/avrdude.md +++ b/LUFA/Build/DMBS/DMBS/avrdude.md @@ -114,3 +114,11 @@ this module. + +## Module Changelog: + +The changes to this module since its initial release are listed below, as of the +DMBS version where the change was made. + +### 20160403 +Initial release. diff --git a/LUFA/Build/DMBS/DMBS/avrdude.mk b/LUFA/Build/DMBS/DMBS/avrdude.mk index 6dba68de451..c4bac8fd0e4 100644 --- a/LUFA/Build/DMBS/DMBS/avrdude.mk +++ b/LUFA/Build/DMBS/DMBS/avrdude.mk @@ -13,11 +13,11 @@ DMBS_BUILD_OPTIONAL_VARS += AVRDUDE_PROGRAMMER AVRDUDE_PORT AVRDUDE_FLAGS AVRD DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) +# Conditionally import the CORE module of DMBS if it is not already imported +DMBS_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) +ifeq ($(findstring CORE, $(DMBS_BUILD_MODULES)),) + include $(DMBS_MODULE_PATH)/core.mk +endif # Default values of optionally user-supplied variables AVRDUDE_PROGRAMMER ?= jtagicemkii diff --git a/LUFA/Build/DMBS/DMBS/core.md b/LUFA/Build/DMBS/DMBS/core.md index a6faf74d16a..c7c9767904e 100644 --- a/LUFA/Build/DMBS/DMBS/core.md +++ b/LUFA/Build/DMBS/DMBS/core.md @@ -95,7 +95,7 @@ syntax) if desired, as they are provided by this module. DMBS_VERSION - Current version of this DMBS release. + Current version of this DMBS release, as a ISO 8601 integer (such as `160403` for `2016-04-03`). @@ -109,8 +109,28 @@ this module. - - + + + + + + + + + + + + + +
N/AThis module provides no macros.DMBS_CHECK_VERSIONMacro to check the current DMBS version against the first argument and abort if the required version is newer than the current version.
ERROR_IF_UNSETMacro to check the given makefile variable name passed as the first argument, and abort if it has not been set by any makefile module.
ERROR_IF_EMPTYMacro to check the given makefile variable name passed as the first argument, and abort if it has an empty value.
ERROR_IF_NONBOOLMacro to check the given makefile variable name passed as the first argument, and abort if it has a value other than `Y` or `N`.
+ +## Module Changelog: + +The changes to this module since its initial release are listed below, as of the +DMBS version where the change was made. + +### 20160403 +Initial release. diff --git a/LUFA/Build/DMBS/DMBS/core.mk b/LUFA/Build/DMBS/DMBS/core.mk index 913731e6971..7fdb7f229a4 100644 --- a/LUFA/Build/DMBS/DMBS/core.mk +++ b/LUFA/Build/DMBS/DMBS/core.mk @@ -11,12 +11,20 @@ DMBS_BUILD_TARGETS += help list_targets list_modules list_mandatory list DMBS_BUILD_MANDATORY_VARS += DMBS_BUILD_OPTIONAL_VARS += DMBS_BUILD_PROVIDED_VARS += DMBS_VERSION -DMBS_BUILD_PROVIDED_MACROS += +DMBS_BUILD_PROVIDED_MACROS += DMBS_CHECK_VERSION ERROR_IF_UNSET ERROR_IF_EMPTY ERROR_IF_NONBOOL SHELL = /bin/sh # Current DMBS release version -DMBS_VERSION = 0.4 +DMBS_VERSION := 20160403 + +# Macro to check the DMBS version, aborts if the given DMBS version is below the current version +DMBS_CHECK_VERSION ?= $(if $(filter-out 0, $(shell test $(DMBS_VERSION) -lt $(1); echo $$?)), , $(error DMBS version $(1) or newer required, current version is $(DMBS_VERSION))) + +# Macros to use in other modules to check various conditions +ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) +ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) +ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) # Converts a given input to a printable output using "(None)" if no items are in the list CONVERT_TO_PRINTABLE = $(if $(strip $(1)), $(1), (None)) diff --git a/LUFA/Build/DMBS/DMBS/cppcheck.md b/LUFA/Build/DMBS/DMBS/cppcheck.md index d10e39040d2..ec0e38d020b 100644 --- a/LUFA/Build/DMBS/DMBS/cppcheck.md +++ b/LUFA/Build/DMBS/DMBS/cppcheck.md @@ -124,3 +124,11 @@ this module. + +## Module Changelog: + +The changes to this module since its initial release are listed below, as of the +DMBS version where the change was made. + +### 20160403 +Initial release. diff --git a/LUFA/Build/DMBS/DMBS/cppcheck.mk b/LUFA/Build/DMBS/DMBS/cppcheck.mk index 70b9ed721ee..9b82fc3b08c 100644 --- a/LUFA/Build/DMBS/DMBS/cppcheck.mk +++ b/LUFA/Build/DMBS/DMBS/cppcheck.mk @@ -14,11 +14,11 @@ DMBS_BUILD_OPTIONAL_VARS += CPPCHECK_INCLUDES CPPCHECK_EXCLUDES CPPCHECK_MSG_T DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) +# Conditionally import the CORE module of DMBS if it is not already imported +DMBS_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) +ifeq ($(findstring CORE, $(DMBS_BUILD_MODULES)),) + include $(DMBS_MODULE_PATH)/core.mk +endif # Default values of optionally user-supplied variables CPPCHECK_INCLUDES ?= diff --git a/LUFA/Build/DMBS/DMBS/dfu.md b/LUFA/Build/DMBS/DMBS/dfu.md index a674d4e75bb..456bbf6f5f9 100644 --- a/LUFA/Build/DMBS/DMBS/dfu.md +++ b/LUFA/Build/DMBS/DMBS/dfu.md @@ -112,3 +112,11 @@ this module. + +## Module Changelog: + +The changes to this module since its initial release are listed below, as of the +DMBS version where the change was made. + +### 20160403 +Initial release. diff --git a/LUFA/Build/DMBS/DMBS/dfu.mk b/LUFA/Build/DMBS/DMBS/dfu.mk index 1349e17a8c8..1eb22b864fb 100644 --- a/LUFA/Build/DMBS/DMBS/dfu.mk +++ b/LUFA/Build/DMBS/DMBS/dfu.mk @@ -13,11 +13,11 @@ DMBS_BUILD_OPTIONAL_VARS += DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) +# Conditionally import the CORE module of DMBS if it is not already imported +DMBS_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) +ifeq ($(findstring CORE, $(DMBS_BUILD_MODULES)),) + include $(DMBS_MODULE_PATH)/core.mk +endif # Sanity-check values of mandatory user-supplied variables $(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) diff --git a/LUFA/Build/DMBS/DMBS/doxygen.md b/LUFA/Build/DMBS/DMBS/doxygen.md index 11f6be5e33b..837704aca0b 100644 --- a/LUFA/Build/DMBS/DMBS/doxygen.md +++ b/LUFA/Build/DMBS/DMBS/doxygen.md @@ -108,3 +108,11 @@ this module. + +## Module Changelog: + +The changes to this module since its initial release are listed below, as of the +DMBS version where the change was made. + +### 20160403 +Initial release. diff --git a/LUFA/Build/DMBS/DMBS/doxygen.mk b/LUFA/Build/DMBS/DMBS/doxygen.mk index 73bc7ff401b..45639ad1565 100644 --- a/LUFA/Build/DMBS/DMBS/doxygen.mk +++ b/LUFA/Build/DMBS/DMBS/doxygen.mk @@ -13,11 +13,11 @@ DMBS_BUILD_OPTIONAL_VARS += DOXYGEN_CONF DOXYGEN_FAIL_ON_WARNING DOXYGEN_OVERR DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) +# Conditionally import the CORE module of DMBS if it is not already imported +DMBS_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) +ifeq ($(findstring CORE, $(DMBS_BUILD_MODULES)),) + include $(DMBS_MODULE_PATH)/core.mk +endif # Default values of optionally user-supplied variables DOXYGEN_CONF ?= doxyfile @@ -59,5 +59,4 @@ doxygen-create: $(MAKEFILE_LIST) @echo $(MSG_DOXYGEN_CMD) Creating new configuration file \"$(DOXYGEN_CONF)\" with latest template doxygen -g $(DOXYGEN_CONF) > /dev/null -# Phony build targets for this module -.PHONY: $(DMBS_BUILD_TARGETS) + diff --git a/LUFA/Build/DMBS/DMBS/gcc.md b/LUFA/Build/DMBS/DMBS/gcc.md index d25085fa678..f516da5ff13 100644 --- a/LUFA/Build/DMBS/DMBS/gcc.md +++ b/LUFA/Build/DMBS/DMBS/gcc.md @@ -194,3 +194,11 @@ this module. + +## Module Changelog: + +The changes to this module since its initial release are listed below, as of the +DMBS version where the change was made. + +### 20160403 +Initial release. diff --git a/LUFA/Build/DMBS/DMBS/gcc.mk b/LUFA/Build/DMBS/DMBS/gcc.mk index c7299edff82..e33c9c0843a 100644 --- a/LUFA/Build/DMBS/DMBS/gcc.mk +++ b/LUFA/Build/DMBS/DMBS/gcc.mk @@ -13,11 +13,11 @@ DMBS_BUILD_OPTIONAL_VARS += BOARD OPTIMIZATION C_STANDARD CPP_STANDARD F_CPU C DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -SHELL = /bin/sh - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) +# Conditionally import the CORE module of DMBS if it is not already imported +DMBS_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) +ifeq ($(findstring CORE, $(DMBS_BUILD_MODULES)),) + include $(DMBS_MODULE_PATH)/core.mk +endif # Default values of optionally user-supplied variables COMPILER_PATH ?= diff --git a/LUFA/Build/DMBS/DMBS/hid.md b/LUFA/Build/DMBS/DMBS/hid.md index 691a422bab6..b2dfbf7136e 100644 --- a/LUFA/Build/DMBS/DMBS/hid.md +++ b/LUFA/Build/DMBS/DMBS/hid.md @@ -119,3 +119,11 @@ this module. + +## Module Changelog: + +The changes to this module since its initial release are listed below, as of the +DMBS version where the change was made. + +### 20160403 +Initial release. diff --git a/LUFA/Build/DMBS/DMBS/hid.mk b/LUFA/Build/DMBS/DMBS/hid.mk index 3575f377732..7a0ad9d0e6d 100644 --- a/LUFA/Build/DMBS/DMBS/hid.mk +++ b/LUFA/Build/DMBS/DMBS/hid.mk @@ -13,13 +13,11 @@ DMBS_BUILD_OPTIONAL_VARS += DMBS_BUILD_PROVIDED_VARS += DMBS_BUILD_PROVIDED_MACROS += -SHELL = /bin/sh - +# Conditionally import the CORE module of DMBS if it is not already imported DMBS_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) - -ERROR_IF_UNSET ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set)) -ERROR_IF_EMPTY ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank)) -ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N)) +ifeq ($(findstring CORE, $(DMBS_BUILD_MODULES)),) + include $(DMBS_MODULE_PATH)/core.mk +endif # Sanity-check values of mandatory user-supplied variables $(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR))) diff --git a/LUFA/Build/DMBS/Readme.md b/LUFA/Build/DMBS/Readme.md index 05125ce5b62..f4f7a5f15c5 100644 --- a/LUFA/Build/DMBS/Readme.md +++ b/LUFA/Build/DMBS/Readme.md @@ -35,7 +35,8 @@ are included via a GNU Make `include` directive. While the DMBS `core` module is always required, you can pick and choose what other modules you wish to add to your user project. -[See here for the documentation on the individual modules provided by DMBS.](DMBS/Modules.md) +[See here for the documentation on the individual modules provided by DMBS.](DMBS/ModulesOverview.md) +If you're interested in writing your own DMBS module(s), [see here.](DMBS/WritingYourOwnModules.md) Here's an example user makefile: @@ -72,6 +73,21 @@ As modules are added, you can get a list of available targets by simply typing as well as mandatory and optional variables and exposed variables and macros. +Distribution +---------------- + +You can embed DMBS in your project any way you like - some options are: +1. A git submodule +2. A source tarball +3. A manually copied extracted archive + +The intention of DMBS is that users can just import it from whatever source +they like. If your project needs to extend the existing modules in an unusual +manner, or if you want to provide your own modules, you can include them in +your project repository (or submit a patch to DMBS if your module is generic +enough to warrant wide use). + + License ---------------- diff --git a/LUFA/Build/DMBS/Template/makefile b/LUFA/Build/DMBS/Template/makefile index ba60ab9c2e1..d88292388c2 100644 --- a/LUFA/Build/DMBS/Template/makefile +++ b/LUFA/Build/DMBS/Template/makefile @@ -20,18 +20,13 @@ LD_FLAGS = # Default target all: -# Include LUFA-specific DMBS extension modules -DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA -include $(DMBS_LUFA_PATH)/lufa-sources.mk -include $(DMBS_LUFA_PATH)/lufa-gcc.mk - -# Include common DMBS build system modules -DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS +# Include DMBS build script makefiles +DMBS_PATH ?= ../DMBS include $(DMBS_PATH)/core.mk +include $(DMBS_PATH)/gcc.mk include $(DMBS_PATH)/cppcheck.mk include $(DMBS_PATH)/doxygen.mk include $(DMBS_PATH)/dfu.mk -include $(DMBS_PATH)/gcc.mk include $(DMBS_PATH)/hid.mk include $(DMBS_PATH)/avrdude.mk include $(DMBS_PATH)/atprogram.mk