aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDean <Dean@d5102386-fcda-11dd-9fdb-3debd5008f28>2012-06-10 19:39:40 +0000
committerDean <Dean@d5102386-fcda-11dd-9fdb-3debd5008f28>2012-06-10 19:39:40 +0000
commit7771bb30bef4d5d0ddd027e76a75efa4f077dbab (patch)
tree5a165f8c29757a54577b0366f44b4978b17ec205
parent67590f1a951992d6273cfdd6984a8a6c3634629f (diff)
Add OBJDIR optional build variable to the BULD build system module, to allow the user project to relocate the output object and dependency files to a different directory.
git-svn-id: http://lufa-lib.googlecode.com/svn/trunk@2335 d5102386-fcda-11dd-9fdb-3debd5008f28
-rw-r--r--Bootloaders/makefile2
-rw-r--r--Demos/Device/ClassDriver/makefile2
-rw-r--r--Demos/Device/Incomplete/TestAndMeasurement/makefile2
-rw-r--r--Demos/Device/LowLevel/makefile2
-rw-r--r--Demos/DualRole/ClassDriver/makefile2
-rw-r--r--Demos/Host/ClassDriver/makefile2
-rw-r--r--Demos/Host/LowLevel/makefile2
-rw-r--r--LUFA/Build/lufa.build.in22
-rw-r--r--LUFA/DoxygenPages/BuildSystem.txt5
-rw-r--r--Projects/makefile2
10 files changed, 37 insertions, 6 deletions
diff --git a/Bootloaders/makefile b/Bootloaders/makefile
index 0c183e73..bffee425 100644
--- a/Bootloaders/makefile
+++ b/Bootloaders/makefile
@@ -23,7 +23,9 @@ ifeq ($(MAKELEVEL), 10)
endif
all:
+ifeq ($(OBJDIR),)
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
+endif
%:
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) $@;)
diff --git a/Demos/Device/ClassDriver/makefile b/Demos/Device/ClassDriver/makefile
index 99e7c24a..0e1dfae0 100644
--- a/Demos/Device/ClassDriver/makefile
+++ b/Demos/Device/ClassDriver/makefile
@@ -23,7 +23,9 @@ ifeq ($(MAKELEVEL), 10)
endif
all:
+ifeq ($(OBJDIR),)
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
+endif
%:
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) $@;)
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/makefile b/Demos/Device/Incomplete/TestAndMeasurement/makefile
index 14950623..cbd43194 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/makefile
+++ b/Demos/Device/Incomplete/TestAndMeasurement/makefile
@@ -19,7 +19,7 @@ TARGET = TestAndMeasurement
SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
LUFA_PATH = ../../../../LUFA/
CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/
-LD_FLAGS =
+LD_FLAGS =
# Default target
all:
diff --git a/Demos/Device/LowLevel/makefile b/Demos/Device/LowLevel/makefile
index 99e7c24a..0e1dfae0 100644
--- a/Demos/Device/LowLevel/makefile
+++ b/Demos/Device/LowLevel/makefile
@@ -23,7 +23,9 @@ ifeq ($(MAKELEVEL), 10)
endif
all:
+ifeq ($(OBJDIR),)
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
+endif
%:
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) $@;)
diff --git a/Demos/DualRole/ClassDriver/makefile b/Demos/DualRole/ClassDriver/makefile
index a6ccbf1c..dc41c9b4 100644
--- a/Demos/DualRole/ClassDriver/makefile
+++ b/Demos/DualRole/ClassDriver/makefile
@@ -23,7 +23,9 @@ ifeq ($(MAKELEVEL), 10)
endif
all:
+ifeq ($(OBJDIR),)
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
+endif
%:
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) $@;)
diff --git a/Demos/Host/ClassDriver/makefile b/Demos/Host/ClassDriver/makefile
index 776fa18d..128a22f5 100644
--- a/Demos/Host/ClassDriver/makefile
+++ b/Demos/Host/ClassDriver/makefile
@@ -23,7 +23,9 @@ ifeq ($(MAKELEVEL), 10)
endif
all:
+ifeq ($(OBJDIR),)
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
+endif
%:
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) $@;)
diff --git a/Demos/Host/LowLevel/makefile b/Demos/Host/LowLevel/makefile
index 776fa18d..128a22f5 100644
--- a/Demos/Host/LowLevel/makefile
+++ b/Demos/Host/LowLevel/makefile
@@ -23,7 +23,9 @@ ifeq ($(MAKELEVEL), 10)
endif
all:
+ifeq ($(OBJDIR),)
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
+endif
%:
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) $@;)
diff --git a/LUFA/Build/lufa.build.in b/LUFA/Build/lufa.build.in
index 1c5df4f2..6e348d99 100644
--- a/LUFA/Build/lufa.build.in
+++ b/LUFA/Build/lufa.build.in
@@ -9,7 +9,7 @@
LUFA_BUILD_MODULES += BUILD
LUFA_BUILD_TARGETS += size symbol-sizes all elf hex lss clean
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
+LUFA_BUILD_OPTIONAL_VARS += BOARD OPTIMIZATION C_STANDARD CPP_STANDARD F_CPU C_FLAGS CPP_FLAGS ASM_FLAGS CC_FLAGS LD_FLAGS OBJDIR
LUFA_BUILD_PROVIDED_VARS +=
LUFA_BUILD_PROVIDED_MACROS +=
@@ -54,6 +54,9 @@ LUFA_BUILD_PROVIDED_MACROS +=
# CC_FLAGS - Common flags to pass to the C/C++ compiler and
# assembler
# LD_FLAGS - Flags to pass to the linker
+# 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
#
# PROVIDED VARIABLES:
#
@@ -79,6 +82,7 @@ C_FLAGS ?=
CPP_FLAGS ?=
ASM_FLAGS ?=
CC_FLAGS ?=
+OBJDIR ?= .
# Sanity check user supplied values
$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR)))
@@ -91,6 +95,7 @@ $(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)
# Determine the utility prefix to use for the selected architecture
ifeq ($(ARCH), AVR8)
@@ -129,7 +134,14 @@ ifneq ($(UNKNOWN_SOURCE),)
endif
# Convert input source filenames into a list of required output object files
-OBJECT_FILES = $(filter %.o, $(C_SOURCE:%.c=%.o) $(CPP_SOURCE:%.cpp=%.o) $(ASM_SOURCE:%.S=%.o))
+OBJECT_FILES = $(filter %.o, $(C_SOURCE:%.c=%.o) $(CPP_SOURCE:%.cpp=%.o) $(ASM_SOURCE:%.S=%.o))
+ifneq ($(OBJDIR),.)
+ $(shell mkdir $(OBJDIR) 2>&1 | /dev/null)
+ VPATH += $(dir $(SRC))
+
+ OBJECT_FILES := $(addprefix $(patsubst %/,%,$(OBJDIR))/, $(notdir $(OBJECT_FILES)))
+endif
+
DEPENDENCY_FILES = $(OBJECT_FILES:%.o=%.d)
# Create a list of common flags to pass to the compiler/linker/assembler
@@ -211,15 +223,15 @@ elf: $(TARGET).elf
hex: $(TARGET).hex $(TARGET).eep
lss: $(TARGET).lss
-%.o: %.c $(MAKEFILE_LIST)
+$(OBJDIR)/%.o: %.c $(MAKEFILE_LIST)
@echo $(MSG_COMPILE_CMD) Compiling C file \"$<\"
$(CROSS)gcc -c $(BASE_CC_FLAGS) $(BASE_C_FLAGS) $(CC_FLAGS) $(C_FLAGS) -MMD -MP -MF $(@:%.o=%.d) $< -o $@
-%.o: %.cpp $(MAKEFILE_LIST)
+$(OBJDIR)/%.o: %.cpp $(MAKEFILE_LIST)
@echo $(MSG_COMPILE_CMD) Compiling C++ file \"$<\"
$(CROSS)gcc -c $(BASE_CC_FLAGS) $(BASE_CPP_FLAGS) $(CC_FLAGS) $(CPP_FLAGS) -MMD -MP -MF $(@:%.o=%.d) $< -o $@
-%.o: %.S $(MAKEFILE_LIST)
+$(OBJDIR)/%.o: %.S $(MAKEFILE_LIST)
@echo $(MSG_ASSEMBLE_CMD) Assembling \"$<\"
$(CROSS)gcc -c $(BASE_CC_FLAGS) $(BASE_ASM_FLAGS) $(CC_FLAGS) $(ASM_FLAGS) $< -o $@
diff --git a/LUFA/DoxygenPages/BuildSystem.txt b/LUFA/DoxygenPages/BuildSystem.txt
index fe29aeb0..61087a5c 100644
--- a/LUFA/DoxygenPages/BuildSystem.txt
+++ b/LUFA/DoxygenPages/BuildSystem.txt
@@ -162,6 +162,11 @@
* <td><tt>LD_FLAGS</tt></td>
* <td>Flags to pass to the linker, after the automatically generated flags.</td>
* </tr>
+ * <tr>
+ * <td><tt>OBJDIR</tt></td>
+ * <td>Directory 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.</td>
+ * </tr>
* </table>
*
* \section SSec_BuildModule_BUILD_ProvideVariables Module Provided Variables
diff --git a/Projects/makefile b/Projects/makefile
index 5c30bc98..e169689b 100644
--- a/Projects/makefile
+++ b/Projects/makefile
@@ -23,7 +23,9 @@ ifeq ($(MAKELEVEL), 10)
endif
all:
+ifeq ($(OBJDIR),)
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
+endif
%:
@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) $@;)