aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Sundvik <fsundvik@gmail.com>2016-08-15 08:20:16 +0300
committerFred Sundvik <fsundvik@gmail.com>2016-08-20 03:56:39 +0300
commit3aac4e95c91be3244d68f27159c2667904c8fddd (patch)
tree2f2fc72341a17242943f1287412b34954022ff2e
parent87bf34a5d341c3a2381f57c19fcb94c21c8d0122 (diff)
downloadqmk_firmware-3aac4e95c91be3244d68f27159c2667904c8fddd.tar.gz
qmk_firmware-3aac4e95c91be3244d68f27159c2667904c8fddd.zip
More general system for generating several outputs
-rw-r--r--build_keyboard.mk44
-rw-r--r--message.mk29
-rw-r--r--tmk_core/chibios.mk4
-rw-r--r--tmk_core/rules.mk125
4 files changed, 98 insertions, 104 deletions
diff --git a/build_keyboard.mk b/build_keyboard.mk
index 7d284cfa7..d10412ea5 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -43,6 +43,9 @@ ifneq ($(SUBPROJECT),)
43 endif 43 endif
44endif 44endif
45 45
46# Save the defs here, so we don't include any keymap specific ones
47PROJECT_DEFS := $(OPT_DEFS)
48
46MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP) 49MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
47MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c 50MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c
48SUBPROJ_KEYMAP_PATH := $(SUBPROJECT_PATH)/keymaps/$(KEYMAP) 51SUBPROJ_KEYMAP_PATH := $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
@@ -59,18 +62,33 @@ else
59 $(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist) 62 $(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist)
60endif 63endif
61 64
65BUILD_DIR = $(TOP_DIR)/.build
66
62ifneq ($(SUBPROJECT),) 67ifneq ($(SUBPROJECT),)
63 TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) 68 TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
69 KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)_$(SUBPROJECT)
64else 70else
65 TARGET ?= $(KEYBOARD)_$(KEYMAP) 71 TARGET ?= $(KEYBOARD)_$(KEYMAP)
72 KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)
66endif 73endif
67 74
68BUILD_DIR = $(TOP_DIR)/.build 75# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
76ifdef MCU_FAMILY
77 PLATFORM=CHIBIOS
78else
79 PLATFORM=AVR
80endif
81
82ifeq ($(PLATFORM),CHIBIOS)
83 include $(TMK_PATH)/protocol/chibios.mk
84 include $(TMK_PATH)/chibios.mk
85 OPT_OS = chibios
86endif
69 87
70# Object files directory 88# Object files directory
71# To put object files in current directory, use a dot (.), do NOT make 89# To put object files in current directory, use a dot (.), do NOT make
72# this an empty or blank macro! 90# this an empty or blank macro!
73OBJDIR := $(BUILD_DIR)/obj_$(TARGET) 91KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
74 92
75 93
76ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") 94ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
@@ -156,23 +174,10 @@ VPATH += $(QUANTUM_PATH)/audio
156VPATH += $(QUANTUM_PATH)/process_keycode 174VPATH += $(QUANTUM_PATH)/process_keycode
157 175
158 176
159# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
160ifdef MCU_FAMILY
161 PLATFORM=CHIBIOS
162else
163 PLATFORM=AVR
164endif
165
166include $(TMK_PATH)/common.mk 177include $(TMK_PATH)/common.mk
167ifeq ($(PLATFORM),AVR) 178ifeq ($(PLATFORM),AVR)
168 include $(TMK_PATH)/protocol/lufa.mk 179 include $(TMK_PATH)/protocol/lufa.mk
169 include $(TMK_PATH)/avr.mk 180 include $(TMK_PATH)/avr.mk
170else ifeq ($(PLATFORM),CHIBIOS)
171 include $(TMK_PATH)/protocol/chibios.mk
172 include $(TMK_PATH)/chibios.mk
173 OPT_OS = chibios
174else
175 $(error Unknown platform)
176endif 181endif
177 182
178ifeq ($(strip $(VISUALIZER_ENABLE)), yes) 183ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
@@ -181,6 +186,13 @@ ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
181 include $(VISUALIZER_PATH)/visualizer.mk 186 include $(VISUALIZER_PATH)/visualizer.mk
182endif 187endif
183 188
189
190OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)
191$(KEYMAP_OUTPUT)_SRC := $(SRC)
192$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
193$(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC)
194$(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS)
195
196
184include $(TMK_PATH)/rules.mk 197include $(TMK_PATH)/rules.mk
185 198
186OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
diff --git a/message.mk b/message.mk
index aefb46de8..6abc78215 100644
--- a/message.mk
+++ b/message.mk
@@ -29,4 +29,31 @@ PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $
29PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) 29PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN)
30PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS) 30PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS)
31BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi; 31BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi;
32MSG_NO_CMP = $(ERROR_COLOR)Error:$(NO_COLOR)$(BOLD) cmp command not found, please install diffutils\n$(NO_COLOR) \ No newline at end of file 32MSG_NO_CMP = $(ERROR_COLOR)Error:$(NO_COLOR)$(BOLD) cmp command not found, please install diffutils\n$(NO_COLOR)
33
34# Define Messages
35# English
36MSG_ERRORS_NONE = Errors: none
37MSG_BEGIN = -------- begin --------
38MSG_END = -------- end --------
39MSG_SIZE_BEFORE = Size before:
40MSG_SIZE_AFTER = Size after:
41MSG_COFF = Converting to AVR COFF:
42MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
43MSG_FLASH = Creating load file for Flash:
44MSG_EEPROM = Creating load file for EEPROM:
45MSG_BIN = Creating binary load file for Flash:
46MSG_EXTENDED_LISTING = Creating Extended Listing:
47MSG_SYMBOL_TABLE = Creating Symbol Table:
48MSG_LINKING = Linking:
49MSG_COMPILING = Compiling:
50MSG_COMPILING_CPP = Compiling:
51MSG_ASSEMBLING = Assembling:
52MSG_CLEANING = Cleaning project:
53MSG_CREATING_LIBRARY = Creating library:
54MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \
55 Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\
56 git submodule sync --recursive\n\
57 git submodule update --init --recursive$(NO_COLOR)\n\n\
58 You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\
59 or if you have modified the ChibiOS libraries yourself. \n\n \ No newline at end of file
diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk
index cb67ac6f2..b05d59ee8 100644
--- a/tmk_core/chibios.mk
+++ b/tmk_core/chibios.mk
@@ -89,9 +89,9 @@ CHIBISRC = $(STARTUPSRC) \
89 $(STARTUPASM) \ 89 $(STARTUPASM) \
90 $(PORTASM) \ 90 $(PORTASM) \
91 $(OSALASM) 91 $(OSALASM)
92
93SRC += $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC))
94 92
93CHIBISRC := $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC))
94
95EXTRAINCDIRS += $(CHIBIOS)/os/license \ 95EXTRAINCDIRS += $(CHIBIOS)/os/license \
96 $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \ 96 $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \
97 $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \ 97 $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \
diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk
index e8e3de571..9f6d8d9df 100644
--- a/tmk_core/rules.mk
+++ b/tmk_core/rules.mk
@@ -25,6 +25,18 @@ vpath %.hpp $(VPATH_SRC)
25vpath %.S $(VPATH_SRC) 25vpath %.S $(VPATH_SRC)
26VPATH := 26VPATH :=
27 27
28# Convert all SRC to OBJ
29define OBJ_FROM_SRC
30$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.S,$1/%.o,$($1_SRC))))
31endef
32$(foreach OUTPUT,$(OUTPUTS),$(eval $(OUTPUT)_OBJ +=$(call OBJ_FROM_SRC,$(OUTPUT))))
33
34# Define a list of all objects
35OBJ := $(foreach OUTPUT,$(OUTPUTS),$($(OUTPUT)_OBJ))
36
37MASTER_OUTPUT := $(firstword $(OUTPUTS))
38
39
28 40
29# Output format. (can be srec, ihex, binary) 41# Output format. (can be srec, ihex, binary)
30FORMAT = ihex 42FORMAT = ihex
@@ -53,17 +65,18 @@ CSTANDARD = -std=gnu99
53 65
54 66
55# Place -D or -U options here for C sources 67# Place -D or -U options here for C sources
56CDEFS += $(OPT_DEFS) 68#CDEFS +=
57 69
58 70
59# Place -D or -U options here for ASM sources 71# Place -D or -U options here for ASM sources
60ADEFS += $(OPT_DEFS) 72#ADEFS +=
61 73
62 74
63# Place -D or -U options here for C++ sources 75# Place -D or -U options here for C++ sources
64#CPPDEFS += -D__STDC_LIMIT_MACROS 76#CPPDEFS += -D__STDC_LIMIT_MACROS
65#CPPDEFS += -D__STDC_CONSTANT_MACROS 77#CPPDEFS += -D__STDC_CONSTANT_MACROS
66CPPDEFS += $(OPT_DEFS) 78#CPPDEFS +=
79
67 80
68 81
69 82
@@ -134,7 +147,8 @@ endif
134# files -- see avr-libc docs [FIXME: not yet described there] 147# files -- see avr-libc docs [FIXME: not yet described there]
135# -listing-cont-lines: Sets the maximum number of continuation lines of hex 148# -listing-cont-lines: Sets the maximum number of continuation lines of hex
136# dump that will be displayed for a given single line of source input. 149# dump that will be displayed for a given single line of source input.
137ASFLAGS += $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100 150ASFLAGS += $(ADEFS)
151ASFLAGS += -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100
138ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) 152ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
139ifdef CONFIG_H 153ifdef CONFIG_H
140 ASFLAGS += -include $(CONFIG_H) 154 ASFLAGS += -include $(CONFIG_H)
@@ -193,48 +207,6 @@ COPY = cp
193WINSHELL = cmd 207WINSHELL = cmd
194SECHO = $(SILENT) || echo 208SECHO = $(SILENT) || echo
195 209
196# Define Messages
197# English
198MSG_ERRORS_NONE = Errors: none
199MSG_BEGIN = -------- begin --------
200MSG_END = -------- end --------
201MSG_SIZE_BEFORE = Size before:
202MSG_SIZE_AFTER = Size after:
203MSG_COFF = Converting to AVR COFF:
204MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
205MSG_FLASH = Creating load file for Flash:
206MSG_EEPROM = Creating load file for EEPROM:
207MSG_BIN = Creating binary load file for Flash:
208MSG_EXTENDED_LISTING = Creating Extended Listing:
209MSG_SYMBOL_TABLE = Creating Symbol Table:
210MSG_LINKING = Linking:
211MSG_COMPILING = Compiling:
212MSG_COMPILING_CPP = Compiling:
213MSG_ASSEMBLING = Assembling:
214MSG_CLEANING = Cleaning project:
215MSG_CREATING_LIBRARY = Creating library:
216MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \
217 Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\
218 git submodule sync --recursive\n\
219 git submodule update --init --recursive$(NO_COLOR)\n\n\
220 You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\
221 or if you have modified the ChibiOS libraries yourself. \n\n
222
223
224# Define all object files.
225OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC))))
226# The files in the lib folder are shared between all keymaps, so generate that folder name by removing
227# the keymap from the name
228KBOBJDIR=$(subst _$(KEYMAP),,$(OBJDIR))
229# And fixup the object files to match
230LIBOBJ = $(foreach v,$(OBJ),$(if $(findstring /lib/,$v),$v))
231NONLIBOBJ := $(filter-out $(LIBOBJ),$(OBJ))
232LIBOBJ := $(subst _$(KEYMAP)/,/,$(LIBOBJ))
233OBJ := $(LIBOBJ) $(NONLIBOBJ)
234
235# Define all listing files.
236LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC))))
237
238 210
239# Compiler flags to generate dependency files. 211# Compiler flags to generate dependency files.
240#GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d 212#GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
@@ -320,68 +292,66 @@ gccversion :
320 $(eval CMD=$(BIN) $< $@ || exit 0) 292 $(eval CMD=$(BIN) $< $@ || exit 0)
321 @$(BUILD_CMD) 293 @$(BUILD_CMD)
322 294
323# Create library from object files.
324.SECONDARY : $(BUILD_DIR)/$(TARGET).a
325.PRECIOUS : $(OBJ)
326%.a: $(OBJ)
327 @$(SILENT) || printf "$(MSG_CREATING_LIBRARY) $@" | $(AWK_CMD)
328 $(eval CMD=$(AR) $@ $(OBJ) )
329 @$(BUILD_CMD)
330
331BEGIN = gccversion sizebefore 295BEGIN = gccversion sizebefore
332 296
333# Link: create ELF output file from object files. 297# Link: create ELF output file from object files.
334.SECONDARY : $(BUILD_DIR)/$(TARGET).elf 298.SECONDARY : $(BUILD_DIR)/$(TARGET).elf
335.PRECIOUS : $(OBJ) 299.PRECIOUS : $(OBJ)
336# Note the obj.txt depeendency is there to force linking if a source file is deleted 300# Note the obj.txt depeendency is there to force linking if a source file is deleted
337%.elf: $(OBJ) $(OBJDIR)/cflags.txt $(OBJDIR)/ldflags.txt $(OBJDIR)/obj.txt | $(BEGIN) 301%.elf: $(OBJ) $(MASTER_OUTPUT)/cflags.txt $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/obj.txt | $(BEGIN)
338 @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) 302 @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD)
339 $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS)) 303 $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS))
340 @$(BUILD_CMD) 304 @$(BUILD_CMD)
305
341 306
342define GEN_OBJRULE 307define GEN_OBJRULE
308$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS)
309$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS)
310$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS)
311
343# Compile: create object files from C source files. 312# Compile: create object files from C source files.
344$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN) 313$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN)
345 @mkdir -p $$(@D) 314 @mkdir -p $$(@D)
346 @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) 315 @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
347 $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) 316 $$(eval CMD := $$(CC) -c $$($1_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
348 @$$(BUILD_CMD) 317 @$$(BUILD_CMD)
349 318
350# Compile: create object files from C++ source files. 319# Compile: create object files from C++ source files.
351$1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN) 320$1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN)
352 @mkdir -p $$(@D) 321 @mkdir -p $$(@D)
353 @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) 322 @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD)
354 $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) 323 $$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
355 @$(BUILD_CMD) 324 @$(BUILD_CMD)
356 325
357# Assemble: create object files from assembler source files. 326# Assemble: create object files from assembler source files.
358$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN) 327$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN)
359 @mkdir -p $$(@D) 328 @mkdir -p $$(@D)
360 @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) 329 @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD)
361 $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) 330 $$(eval CMD=$$(CC) -c $$($1_ASFLAGS) $$< -o $$@)
362 @$$(BUILD_CMD) 331 @$$(BUILD_CMD)
363 332
364$1/force: 333$1/force:
365 334
366$1/cflags.txt: $1/force 335$1/cflags.txt: $1/force
367 echo '$$(ALL_CFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CFLAGS)' > $$@ 336 echo '$$($1_CFLAGS)' | cmp -s - $$@ || echo '$$($1_CFLAGS)' > $$@
368 337
369$1/cppflags.txt: $1/force 338$1/cppflags.txt: $1/force
370 echo '$$(ALL_CPPFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CPPFLAGS)' > $$@ 339 echo '$$($1_CPPFLAGS)' | cmp -s - $$@ || echo '$$($1_CPPFLAGS)' > $$@
371 340
372$1/asflags.txt: $1/force 341$1/asflags.txt: $1/force
373 echo '$$(ALL_ASFLAGS)' | cmp -s - $$@ || echo '$$(ALL_ASFLAGS)' > $$@ 342 echo '$$($1_ASFLAGS)' | cmp -s - $$@ || echo '$$($1_ASFLAGS)' > $$@
374
375$1/ldflags.txt: $1/force
376 echo '$$(LDFLAGS)' | cmp -s - $$@ || echo '$$(LDFLAGS)' > $$@
377
378$1/obj.txt: $1/force
379 echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@
380 343
381$1/compiler.txt: $1/force 344$1/compiler.txt: $1/force
382 $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@ 345 $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@
383endef 346endef
384 347
348$(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force
349 echo '$(OBJ)' | cmp -s - $$@ || echo '$(OBJ)' > $$@
350
351$(MASTER_OUTPUT)/ldflags.txt: $(MASTER_OUTPUT)/force
352 echo '$(LDFLAGS)' | cmp -s - $$@ || echo '$(LDFLAGS)' > $$@
353
354
385# We have to use static rules for the .d files for some reason 355# We have to use static rules for the .d files for some reason
386DEPS = $(patsubst %.o,%.d,$(OBJ)) 356DEPS = $(patsubst %.o,%.d,$(OBJ))
387# Keep the .d files 357# Keep the .d files
@@ -390,22 +360,7 @@ DEPS = $(patsubst %.o,%.d,$(OBJ))
390$(DEPS): 360$(DEPS):
391 361
392 362
393# Since the object files could be in two different folders, generate 363$(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT))))
394# separate rules for them, rather than having too generic rules
395$(eval $(call GEN_OBJRULE,$(OBJDIR)))
396$(eval $(call GEN_OBJRULE,$(KBOBJDIR)))
397
398# Compile: create assembler files from C source files.
399%.s : %.c | $(BEGIN)
400 @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD)
401 $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@)
402 @$(BUILD_CMD)
403
404# Compile: create assembler files from C++ source files.
405%.s : %.cpp | $(BEGIN)
406 @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD)
407 $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@)
408 @$(BUILD_CMD)
409 364
410# Create preprocessed source for use in sending a bug report. 365# Create preprocessed source for use in sending a bug report.
411%.i : %.c | $(BEGIN) 366%.i : %.c | $(BEGIN)
@@ -420,13 +375,13 @@ clean:
420show_path: 375show_path:
421 @echo VPATH=$(VPATH) 376 @echo VPATH=$(VPATH)
422 @echo SRC=$(SRC) 377 @echo SRC=$(SRC)
378 @echo OBJ=$(OBJ)
423 379
424# Create build directory 380# Create build directory
425$(shell mkdir $(BUILD_DIR) 2>/dev/null) 381$(shell mkdir $(BUILD_DIR) 2>/dev/null)
426 382
427# Create object files directory 383# Create object files directory
428$(shell mkdir $(OBJDIR) 2>/dev/null) 384$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir $(OUTPUT) 2>/dev/null)))
429$(shell mkdir $(KBOBJDIR) 2>/dev/null)
430 385
431# Include the dependency files. 386# Include the dependency files.
432-include $(patsubst %.o,%.d,$(OBJ)) 387-include $(patsubst %.o,%.d,$(OBJ))