source: trunk/kBuild/footer.kmk@ 183

Last change on this file since 183 was 183, checked in by bird, 21 years ago

TARGET_stuff and .$(BUILD_TARGET) variants for SUBDIRS and MAKEFILES.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 44.9 KB
RevLine 
[72]1# $Id: footer.kmk 183 2004-12-02 20:39:03Z bird $
2## @file
3#
4# kBuild - File included at top of makefile.
5#
[106]6# Copyright (c) source004 knut st. osmundsen <bird-srcspam@anduin.net>
[72]7#
8#
9# This file is part of kBuild.
10#
11# kBuild is free software; you can redistribute it and/or modify
12# it under the terms of the GNU General Public License as published by
[106]13# the Free Software Foundation; either version source of the License, or
[72]14# (at your option) any later version.
15#
16# kBuild is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19# GNU General Public License for more details.
20#
21# You should have received a copy of the GNU General Public License
22# along with kBuild; if not, write to the Free Software
[106]23# Foundation, Inc., 59 Temple Place, Suite typetype0, Boston, MA 0sourcetargettargettarget-targettype07 USA
[72]24#
25#
26
27ifndef __footer_kmk__
28# start-of-file-content
29
30#
31# Variables.
[73]32# (Some of these need initialization before including definitions using them.)
[72]33#
34
35# all targets.
[138]36ALL_TARGETS := \
37 $(LIBRARIES) $(LIBRARIES.$(BUILD_TARGET)) \
38 $(PROGRAMS) $(PROGRAMS.$(BUILD_TARGET)) \
39 $(DLLS) $(DLLS.$(BUILD_TARGET)) \
40 $(SYSMODS) $(SYSMODS.$(BUILD_TARGET)) \
41 $(OTHERS) $(OTHERS.$(BUILD_TARGET))
[72]42
[75]43# dependency files.
44_DEPFILES :=
45
46# All kind of output files except for _OBJS and _DEPFILES.
47# Compiling or linking definition outputting other things that $@ and any
48# required dependency file must add those output files to this variable.
49_OUT_FILES :=
50
[72]51# all of a type
52_OBJS :=
53_LIBS :=
54_DLLS :=
55_EXES :=
[83]56_SYSMODS:=
[72]57_DIRS :=
58
59# all objs of a specific target
60define def_objs_var
[106]61_OBJS_$target :=
[72]62endef
63$(foreach target, $(ALL_TARGETS), $(eval _OBJS_$(target) := ))
64
65#
[73]66# Basic macros
67#
68
69## Figure out the tool for a source
[106]70# @param $target source file
71# @param $source normalized main target
72# @param $type tooltype
[79]73_SOURCE_TOOL = $(strip $(firstword \
[106]74 $($(target)_$(source)_$(type)TOOL.$(BUILD_TARGET)) \
75 $($(target)_$(source)_$(type)TOOL) \
76 $($(target)_$(source)_TOOL.$(BUILD_TARGET)) \
77 $($(target)_$(source)_TOOL) \
78 $($(target)_$(type)TOOL.$(BUILD_TARGET)) \
79 $($(target)_$(type)TOOL) \
80 $($(target)_TOOL.$(BUILD_TARGET)) \
81 $($(target)_TOOL) \
82 $($(source)_$(type)TOOL.$(BUILD_TARGET)) \
83 $($(source)_$(type)TOOL) \
84 $($(source)_TOOL.$(BUILD_TARGET)) \
85 $($(source)_TOOL) \
86 $($(type)TOOL.$(BUILD_TARGET)) \
87 $($(type)TOOL) \
88 $(TOOL.$(BUILD_TARGET)) \
89 $(TOOL) ))
[73]90
[106]91_SOURCE_TOOL_OLD = $(strip $(firstword \
92 $($(target)_$(source)_$(type)TOOL.$(BUILD_TARGET)) $($(target)_$(source)_TOOL.$(BUILD_TARGET)) \
93 $($(target)_$(source)_$(type)TOOL) $($target_$source_TOOL) \
94 $($(target)_$(type)TOOL.$(BUILD_TARGET)) $($(target)_TOOL.$(BUILD_TARGET)) \
95 $($(target)_$(type)TOOL) $($target_TOOL) \
96 $($(source)_$(type)TOOL.$(BUILD_TARGET)) $($(source)_TOOL.$(BUILD_TARGET)) \
97 $($(source)_$(type)TOOL) $($(source)_TOOL) \
98 $($(type)TOOL.$(BUILD_TARGET)) $(TOOL.$(BUILD_TARGET)) \
99 $($(type)TOOL) $(TOOL) ))
[183]100
[78]101## Figure out the tool for a target.
[106]102# @param $target normalized target.
103# @param $source tooltype.
[79]104_TARGET_TOOL = $(strip $(firstword \
[106]105 $($(target)_$(source)TOOL.$(BUILD_TARGET)) \
106 $($(target)_$(source)TOOL) \
107 $($(target)_TOOL.$(BUILD_TARGET)) \
108 $($(target)_TOOL) \
109 $($(source)TOOL) \
110 $($(source)TOOL.$(BUILD_TARGET)) \
111 $(TOOL.$(BUILD_TARGET)) \
112 $(TOOL) \
[79]113 ))
[183]114
[148]115## Removes the drive letter from a path (if it has one)
116# @param $1 the path
117no-drive=$(word $(words $(subst :, ,$(1))),$(subst :, ,$(1)))
[78]118
[148]119## Removes the root slash from a path (if it has one)
120# @param $1 the path
121no-root-slash=$(patsubst /%,%,$(1))
122
[73]123## Figure out where to put object files.
[110]124# @param $1 source file
125# @param $2 normalized main target
[148]126_OBJECT_BASE = $(PATH_TARGET)/$(2)/$(call no-root-slash,$(call no-drive,$(basename $(patsubst $(PATH_TARGET)/$(2)/%,gen/%,$(1)))))
[73]127
128## Figure out where to put object files.
[110]129# @param $1 real target name.
130# @param $2 normalized main target
[148]131_TARGET_BASE = $(PATH_TARGET)/$(2)/$(call no-root-slash,$(call no-drive,$(basename $(1))))
[73]132
133
134#
[72]135# Include templates
136#
137_TEMPLATES := $(TEMPLATE)
138define def_templates
139ifdef $(target)_TEMPLATE
140_TEMPLATES += $($(target)_TEMPLATE)
141endif
142endef
143$(foreach target, $(ALL_TARGETS), $(eval $(def_templates)))
144_TEMPLATES := $(sort $(_TEMPLATES))
145# $ (warning dbg: _TEMPLATES=$(_TEMPLATES))
146
147define def_templates_include
148ifndef TEMPLATE_$(template)
149include $(firstword $(wildcard $(PATH_KBUILD)/templates/$(template).kmk))
150endif
151endef
152$(foreach template, $(_TEMPLATES), $(eval $(def_templates)))
153
[74]154
[72]155#
156# Common Inheritance
157#
158
159## Inherit defaults property
160# @param $(prop) Property name
161# @param $(target) Target name.
162define def_inherit_defaults_one
[74]163ifndef $(target)_$(prop)
[109]164ifndef $(target)_$(prop).$(BUILD_TARGET)
[72]165ifdef $(prop)
[105]166$$(eval $(target)_$(prop) := $($(prop)))
[72]167endif
[109]168ifdef $(prop).$(BUILD_TARGET)
169$$(eval $(target)_$(prop).$(BUILD_TARGET) := $($(prop).$(BUILD_TARGET)))
[72]170endif
[109]171endif
172endif
[72]173endef
174
175## Inherit default properties for one target.
176# A bit tricky this one, but it depends a bit on whether or not TEMPLATE
177# is inherited from the default properties.
178# @param $(target) Target name
[78]179#
[72]180define def_inherit_defaults
181ifdef $(target)_TEMPLATE
[107]182ifeq ($(strip $(TEMPLATE_$($(target)_TEMPLATE)_TOOL) $(TEMPLATE_$($(target)_TEMPLATE)_TOOL.$(BUILD_TARGET))),)
[109]183$$(foreach prop,TOOL, $$(eval $$(def_inherit_defaults_one)))
[72]184endif
[107]185ifeq ($(strip $(TEMPLATE_$($(target)_TEMPLATE)_SDKS) $(TEMPLATE_$($(target)_TEMPLATE)_SDKS.$(BUILD_TARGET))),)
[109]186$$(foreach prop,SDKS, $$(eval $$(def_inherit_defaults_one)))
[72]187endif
188else
[109]189$$(foreach prop,TEMPLATE TOOL SDKS, $$(eval $$(def_inherit_defaults_one)))
[72]190endif
191endef
192# Inherit default properties.
[109]193# !!!!!!THIS IS MESSY AND NOT NECESSARY!!!!!!
[105]194$(foreach target, $(ALL_TARGETS),$(eval $(def_inherit_defaults)))
[72]195
196
[78]197## Inherit one template property in a accumulative manner.
[72]198# @param $(prop) Property name
199# @param $(target) Target name
[78]200# @todo fix the precedence order for some properties.
[72]201define def_inherit_template_one
[78]202ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop)
[72]203ifndef $(target)_$(prop)
[106]204#$$ (warning dbgtarget: $(target)_$(prop):='$(TEMPLATE_$($(target)_TEMPLATE)_$(prop))' TEMPLATE_$($(target)_TEMPLATE)_$(prop))
[105]205$$(target)_$$(prop) := $$(TEMPLATE_$$($$(target)_TEMPLATE)_$$(prop))
[72]206endif
207endif
[79]208ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET)
209ifndef $(target)_$(prop).$(BUILD_TARGET)
[106]210#$$ (warning dbgsource: $(target)_$(prop).$(BUILD_TARGET)="TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET)" TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET))
[105]211$$(target)_$$(prop).$$(BUILD_TARGET) := $$(TEMPLATE_$$($$(target)_TEMPLATE)_$$(prop).$$(BUILD_TARGET))
[79]212endif
213endif
[72]214endef
215
[183]216## Inherit one template property.
[78]217# @param $(prop) Property name
218# @param $(target) Target name
219define def_inherit_template_one_accumulate
220ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop)
[106]221#$$ (warning dbgtype: TEMPLATE_$($(target)_TEMPLATE)_$(prop) $(target)_$(prop)=$($(target)_$(prop)) $(TEMPLATE_$($(target)_TEMPLATE)_$(prop)))
[105]222$$(eval $(target)_$(prop) := $($(target)_$(prop)) $(TEMPLATE_$($(target)_TEMPLATE)_$(prop)))
[106]223#$$ (warning dbgtype: $(target)_$(prop)=$($(target)_$(prop)))
[78]224endif
[79]225ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET)
[105]226#$$ (warning dbg4: TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET))
227$$(eval $(target)_$(prop).$(BUILD_TARGET) := $($(target)_$(prop).$(BUILD_TARGET)) $(TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET)))
[79]228endif
229ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_CPU)
[105]230#$$ (warning dbg5: TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_CPU))
231$$(eval $(target)_$(prop).$(BUILD_TARGET_CPU) := $($(target)_$(prop).$(BUILD_TARGET)) $(TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_CPU)))
[79]232endif
233ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_ARCH)
[105]234#$$ (warning dbg6: TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_ARCH))
235$$(eval $(target)_$(prop).$(BUILD_TARGET_ARCH) := $($(target)_$(prop).$(BUILD_TARGET)) $(TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_ARCH)))
[79]236endif
[78]237endef
238
[106]239
[72]240## Inherit template properties for on target.
241# @param $(target) Target name.
242define def_inherit_template
[105]243$$(foreach prop, TOOL ARTOOL CTOOL CXXTOOL ASTOOL LDTOOL\
244 ,$$(eval $$(def_inherit_template_one)))
245$$(foreach prop,SDKS DEFS INCS COPTS CFLAGS CDEFS CINCS CXXOPTS CXXFLAGS CXXDEFS CXXINCS ASOPTS ASFLAGS ASDEFS ASINCS LDFLAGS LIBS LIBPATH \
246 ,$$(eval $$(def_inherit_template_one_accumulate)))
[72]247endef
248# Inherit template properties
[105]249$(foreach target, $(ALL_TARGETS),$(eval $(def_inherit_template)))
[72]250
251
252#
253# Include tools
[183]254#
[72]255_TOOLS := $(TOOL)
256define def_tools_target_source
[78]257$(foreach tool,\
[79]258 $($(source)_TOOL.$(BUILD_TARGET)) $($(target)_$(source)_TOOL.$(BUILD_TARGET))\
[78]259 $($(source)_TOOL) $($(target)_$(source)_TOOL)\
[79]260 $($(source)_CTOOL.$(BUILD_TARGET)) $($(target)_$(source)_CTOOL.$(BUILD_TARGET))\
[78]261 $($(source)_CTOOL) $($(target)_$(source)_CTOOL)\
[79]262 $($(source)_CXXTOOL.$(BUILD_TARGET)) $($(target)_$(source)_CXXTOOL.$(BUILD_TARGET))\
[78]263 $($(source)_CXXTOOL) $($(target)_$(source)_CXXTOOL)\
[79]264 $($(source)_ASTOOL.$(BUILD_TARGET)) $($(target)_$(source)_ASTOOL.$(BUILD_TARGET))\
[78]265 $($(source)_ASTOOL) $($(target)_$(source)_ASTOOL)\
[79]266 $($(source)_ARTOOL.$(BUILD_TARGET)) $($(target)_$(source)_ARTOOL.$(BUILD_TARGET))\
[78]267 $($(source)_ARTOOL) $($(target)_$(source)_ARTOOL)\
[79]268 $($(source)_LDTOOL.$(BUILD_TARGET)) $($(target)_$(source)_LDTOOL.$(BUILD_TARGET))\
[78]269 $($(source)_LDTOOL) $($(target)_$(source)_LDTOOL)\
270 ,$(eval _TOOLS += $(tool)))
[72]271endef
272define def_tools_target
[78]273$(foreach tool,\
[79]274 $($(target)_TOOL.$(BUILD_TARGET))\
[78]275 $($(target)_TOOL)\
[79]276 $($(target)_CTOOL.$(BUILD_TARGET))\
[78]277 $($(target)_CTOOL)\
[79]278 $($(target)_CXXTOOL.$(BUILD_TARGET))\
[78]279 $($(target)_CXXTOOL)\
[79]280 $($(target)_ASTOOL.$(BUILD_TARGET))\
[78]281 $($(target)_ASTOOL)\
[79]282 $($(target)_ARTOOL.$(BUILD_TARGET))\
[78]283 $($(target)_ARTOOL)\
[79]284 $($(target)_LDTOOL.$(BUILD_TARGET))\
[78]285 $($(target)_LDTOOL)\
[79]286 ,$(eval _TOOLS += $(tool)))
[120]287$(foreach source, $($(target)_SOURCES) $($(target)_SOURCES.$(BUILD_TARGET)) $($(target)_SOURCES.$(BUILD_MODE)) \
288 , $(eval $(def_tools_target_source)))
[72]289endef
290$(foreach target, $(ALL_TARGETS), $(eval $(def_tools_target)))
291_TOOLS := $(sort $(_TOOLS))
292
293define def_tools_include
294ifndef TOOL_$(tool)
295include $(firstword $(wildcard $(PATH_KBUILD)/tools/$(tool).kmk))
296endif
297endef
298$(foreach tool, $(_TOOLS), $(eval $(def_tools_include)))
299
300
301#
302# Include SDKs
[73]303#
[72]304_SDKS := $(SDKS)
305define def_sdks_target_source
[122]306$(foreach sdk, $($(source)_SDKS) $($(source)_SDKS.$(BUILD_TARGET)) $($(source)_SDKS.$(BUILD_MODE)) \
307 $($(target)_$(source)_SDKS) $($(target)_$(source)_SDKS.$(BUILD_TARGET)) $($(target)_$(source)_SDKS.$(BUILD_MODE)), \
[72]308 $(eval _SDKS += $(sdk)))
309endef
310define def_sdks_target
[122]311$(foreach sdk, $($(target)_SDKS) $($(target)_SDKS.$(BUILD_TARGET)) $($(target)_SDKS.$(BUILD_MODE))\
312 , $(eval _SDKS += $(sdk)))
[120]313$(foreach source, $($(target)_SOURCES) $($(target)_SOURCES.$(BUILD_TARGET)) $($(target)_SOURCES.$(BUILD_MODE))\
314 , $(eval $(def_sdks_target_source)))
[72]315endef
316$(foreach target, $(ALL_TARGETS), $(eval $(def_sdks_target)))
317_SDKS := $(sort $(_SDKS))
318
[122]319define def_sdks_include_one
[72]320ifndef SDK_$(sdk)
321include $(firstword $(wildcard $(PATH_KBUILD)/sdks/$(sdk).kmk))
322endif
323endef
[122]324$(foreach sdk, $(_SDKS), $(eval $(def_sdks_include_one)))
[72]325
[73]326#
327# Object processing.
328#
[72]329
[73]330## Generic macro for processing C, C++ and Assembly sources.
331# @param $(target) Normalized target name.
332# @param $(source) Source file name.
333# @param $(type) Source type. {C,CXX,AS}
[72]334#
[73]335# @remark I've no clue why I've to $(eval ..) everything in this define. MAKE bug?
[105]336# @remark I now have a clue. Have to use $$ if not.
[73]337define def_target_source_c_cpp_asm
[105]338#$ (warning dbg: def_target_source_c_cpp_asm: source='$(source)' target='$(target)' type='$(type)')
[73]339
[78]340$(eval tool:=$(call _SOURCE_TOOL,$(source),$(target),$(type)))
[111]341$(eval outbase := $(call _OBJECT_BASE,$(source),$(target)))
342$(eval PATH_$(target)_$(source) := $(patsubst %/,%,$(dir $(outbase))))
343$(eval dirdep := $(dir $(outbase)).dir_created)
[73]344$(eval defs :=\
[78]345 $(TOOL_$(tool)_DEFS)\
346 $(TOOL_$(tool)_DEFS.$(BUILD_TYPE))\
347 $(TOOL_$(tool)_DEFS.$(BUILD_TARGET))\
348 $(TOOL_$(tool)_DEFS.$(BUILD_TARGET_ARCH))\
349 $(TOOL_$(tool)_DEFS.$(BUILD_TARGET_CPU))\
[74]350 $(TOOL_$(tool)_$(type)DEFS)\
351 $(TOOL_$(tool)_$(type)DEFS.$(BUILD_TYPE))\
[78]352 $(foreach sdk, $(SDKS.$(BUILD_TARGET)) \
353 $(SDKS.$(BUILD_TYPE)) \
354 $(SDKS),\
355 $(SDK_$(sdk)_DEFS)\
356 $(SDK_$(sdk)_DEFS.$(BUILD_TYPE))\
357 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET))\
358 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET_ARCH))\
[133]359 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET_CPU))\
[78]360 $(SDK_$(sdk)_$(type)DEFS)\
361 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TYPE))\
362 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET))\
363 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET_ARCH))\
364 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET_CPU)))\
[74]365 $(DEFS)\
366 $(DEFS.$(BUILD_TYPE))\
[78]367 $(DEFS.$(BUILD_TARGET))\
368 $(DEFS.$(BUILD_TARGET_ARCH))\
369 $(DEFS.$(BUILD_TARGET_CPU))\
370 $($(type)DEFS)\
371 $($(type)DEFS.$(BUILD_TYPE))\
372 $($(type)DEFS.$(BUILD_TARGET))\
373 $($(type)DEFS.$(BUILD_TARGET_ARCH))\
374 $($(type)DEFS.$(BUILD_TARGET_CPU))\
375 $(foreach sdk, $($(target)_SDKS.$(BUILD_TARGET)) \
376 $($(target)_SDKS.$(BUILD_TYPE)) \
377 $($(target)_SDKS),\
378 $(SDK_$(sdk)_DEFS)\
379 $(SDK_$(sdk)_DEFS.$(BUILD_TYPE))\
380 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET))\
381 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET_ARCH))\
[133]382 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET_CPU))\
[78]383 $(SDK_$(sdk)_$(type)DEFS)\
384 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TYPE))\
385 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET))\
386 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET_ARCH))\
387 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET_CPU)))\
[74]388 $($(target)_DEFS)\
389 $($(target)_DEFS.$(BUILD_TYPE))\
390 $($(target)_DEFS.$(BUILD_TARGET))\
[78]391 $($(target)_DEFS.$(BUILD_TARGET_ARCH))\
392 $($(target)_DEFS.$(BUILD_TARGET_CPU))\
393 $($(target)_$(type)DEFS)\
394 $($(target)_$(type)DEFS.$(BUILD_TYPE))\
395 $($(target)_$(type)DEFS.$(BUILD_TARGET))\
396 $($(target)_$(type)DEFS.$(BUILD_TARGET_ARCH))\
397 $($(target)_$(type)DEFS.$(BUILD_TARGET_CPU))\
398 $(foreach sdk, $($(source)_SDKS.$(BUILD_TARGET)) \
399 $($(source)_SDKS.$(BUILD_TYPE)) \
400 $($(source)_SDKS),\
401 $(SDK_$(sdk)_DEFS)\
402 $(SDK_$(sdk)_DEFS.$(BUILD_TYPE))\
403 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET))\
404 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET_ARCH))\
[133]405 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET_CPU))\
[78]406 $(SDK_$(sdk)_$(type)DEFS)\
407 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TYPE))\
408 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET))\
409 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET_ARCH))\
410 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET_CPU)))\
[74]411 $($(source)_DEFS)\
412 $($(source)_DEFS.$(BUILD_TYPE))\
413 $($(source)_DEFS.$(BUILD_TARGET))\
[78]414 $($(source)_DEFS.$(BUILD_TARGET_ARCH))\
415 $($(source)_DEFS.$(BUILD_TARGET_CPU))\
[73]416 $($(source)_$(type)DEFS)\
[74]417 $($(source)_$(type)DEFS.$(BUILD_TYPE))\
418 $($(source)_$(type)DEFS.$(BUILD_TARGET))\
[78]419 $($(source)_$(type)DEFS.$(BUILD_TARGET_ARCH))\
420 $($(source)_$(type)DEFS.$(BUILD_TARGET_CPU))\
421 $(foreach sdk, $($(target)_$(source)_SDKS.$(BUILD_TARGET)) \
422 $($(target)_$(source)_SDKS.$(BUILD_TYPE)) \
423 $($(target)_$(source)_SDKS),\
424 $(SDK_$(sdk)_DEFS)\
425 $(SDK_$(sdk)_DEFS.$(BUILD_TYPE))\
426 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET))\
427 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET_ARCH))\
[133]428 $(SDK_$(sdk)_DEFS.$(BUILD_TARGET_CPU))\
[78]429 $(SDK_$(sdk)_$(type)DEFS)\
430 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TYPE))\
431 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET))\
432 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET_ARCH))\
433 $(SDK_$(sdk)_$(type)DEFS.$(BUILD_TARGET_CPU)))\
[74]434 $($(target)_$(source)_DEFS)\
435 $($(target)_$(source)_DEFS.$(BUILD_TYPE))\
436 $($(target)_$(source)_DEFS.$(BUILD_TARGET))\
[78]437 $($(target)_$(source)_DEFS.$(BUILD_TARGET_ARCH))\
438 $($(target)_$(source)_DEFS.$(BUILD_TARGET_CPU))\
[74]439 $($(target)_$(source)_$(type)DEFS)\
440 $($(target)_$(source)_$(type)DEFS.$(BUILD_TYPE))\
441 $($(target)_$(source)_$(type)DEFS.$(BUILD_TARGET))\
[78]442 $($(target)_$(source)_$(type)DEFS.$(BUILD_TARGET_ARCH))\
443 $($(target)_$(source)_$(type)DEFS.$(BUILD_TARGET_CPU))\
[73]444 )
445$(eval incs :=\
[78]446 $($(target)_$(source)_$(type)INCS.$(BUILD_TARGET_CPU))\
447 $($(target)_$(source)_$(type)INCS.$(BUILD_TARGET_ARCH))\
[74]448 $($(target)_$(source)_$(type)INCS.$(BUILD_TARGET))\
449 $($(target)_$(source)_$(type)INCS.$(BUILD_TYPE))\
[73]450 $($(target)_$(source)_$(type)INCS)\
[78]451 $($(target)_$(source)_INCS.$(BUILD_TARGET_CPU))\
452 $($(target)_$(source)_INCS.$(BUILD_TARGET_ARCH))\
[74]453 $($(target)_$(source)_INCS.$(BUILD_TARGET))\
454 $($(target)_$(source)_INCS.$(BUILD_TYPE))\
[73]455 $($(target)_$(source)_INCS)\
[78]456 $(foreach sdk, $($(target)_$(source)_SDKS.$(BUILD_TARGET)) \
457 $($(target)_$(source)_SDKS.$(BUILD_TYPE)) \
[133]458 $($(target)_$(source)_SDKS),\
[78]459 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET_CPU))\
460 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET_ARCH))\
461 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET))\
462 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TYPE))\
463 $(SDK_$(sdk)_$(type)INCS)\
464 $(SDK_$(sdk)_INCS.$(BUILD_TARGET_CPU))\
465 $(SDK_$(sdk)_INCS.$(BUILD_TARGET_ARCH))\
466 $(SDK_$(sdk)_INCS.$(BUILD_TARGET))\
467 $(SDK_$(sdk)_INCS.$(BUILD_TYPE))\
468 $(SDK_$(sdk)_INCS))\
469 $($(source)_$(type)INCS.$(BUILD_TARGET_CPU))\
470 $($(source)_$(type)INCS.$(BUILD_TARGET_ARCH))\
[74]471 $($(source)_$(type)INCS.$(BUILD_TARGET))\
472 $($(source)_$(type)INCS.$(BUILD_TYPE))\
[73]473 $($(source)_$(type)INCS)\
[78]474 $($(source)_INCS.$(BUILD_TARGET_CPU))\
475 $($(source)_INCS.$(BUILD_TARGET_ARCH))\
[74]476 $($(source)_INCS.$(BUILD_TARGET))\
477 $($(source)_INCS.$(BUILD_TYPE))\
[73]478 $($(source)_INCS)\
[78]479 $(foreach sdk, $($(source)_SDKS.$(BUILD_TARGET)) \
480 $($(source)_SDKS.$(BUILD_TYPE)) \
481 $($(source)_SDKS),\
482 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET_CPU))\
483 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET_ARCH))\
484 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET))\
485 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TYPE))\
486 $(SDK_$(sdk)_$(type)INCS)\
487 $(SDK_$(sdk)_INCS.$(BUILD_TARGET_CPU))\
488 $(SDK_$(sdk)_INCS.$(BUILD_TARGET_ARCH))\
489 $(SDK_$(sdk)_INCS.$(BUILD_TARGET))\
490 $(SDK_$(sdk)_INCS.$(BUILD_TYPE))\
491 $(SDK_$(sdk)_INCS))\
492 $($(target)_$(type)INCS.$(BUILD_TARGET_CPU))\
493 $($(target)_$(type)INCS.$(BUILD_TARGET_ARCH))\
[74]494 $($(target)_$(type)INCS.$(BUILD_TARGET))\
495 $($(target)_$(type)INCS.$(BUILD_TYPE))\
[73]496 $($(target)_$(type)INCS)\
[78]497 $($(target)_INCS.$(BUILD_TARGET_CPU))\
498 $($(target)_INCS.$(BUILD_TARGET_ARCH))\
[74]499 $($(target)_INCS.$(BUILD_TARGET))\
500 $($(target)_INCS.$(BUILD_TYPE))\
[73]501 $($(target)_INCS)\
[78]502 $(foreach sdk, $($(target)_SDKS.$(BUILD_TARGET)) \
503 $($(target)_SDKS.$(BUILD_TYPE)) \
504 $($(target)_SDKS),\
505 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET_CPU))\
506 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET_ARCH))\
507 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET))\
508 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TYPE))\
509 $(SDK_$(sdk)_$(type)INCS)\
510 $(SDK_$(sdk)_INCS.$(BUILD_TARGET_CPU))\
511 $(SDK_$(sdk)_INCS.$(BUILD_TARGET_ARCH))\
512 $(SDK_$(sdk)_INCS.$(BUILD_TARGET))\
513 $(SDK_$(sdk)_INCS.$(BUILD_TYPE))\
514 $(SDK_$(sdk)_INCS))\
515 $(INCS.$(BUILD_TARGET_CPU))\
516 $(INCS.$(BUILD_TARGET_ARCH))\
[74]517 $(INCS.$(BUILD_TARGET))\
518 $(INCS.$(BUILD_TYPE))\
[73]519 $(INCS)\
[78]520 $(foreach sdk, $(SDKS.$(BUILD_TARGET)) \
521 $(SDKS.$(BUILD_TYPE)) \
522 $(SDKS),\
523 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET_CPU))\
524 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET_ARCH))\
525 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TARGET))\
526 $(SDK_$(sdk)_$(type)INCS.$(BUILD_TYPE))\
527 $(SDK_$(sdk)_$(type)INCS)\
528 $(SDK_$(sdk)_INCS.$(BUILD_TARGET_CPU))\
529 $(SDK_$(sdk)_INCS.$(BUILD_TARGET_ARCH))\
530 $(SDK_$(sdk)_INCS.$(BUILD_TARGET))\
531 $(SDK_$(sdk)_INCS.$(BUILD_TYPE))\
532 $(SDK_$(sdk)_INCS))\
533 $(TOOL_$(tool)_$(type)INCS.$(BUILD_TARGET_CPU))\
534 $(TOOL_$(tool)_$(type)INCS.$(BUILD_TARGET_ARCH))\
[74]535 $(TOOL_$(tool)_$(type)INCS.$(BUILD_TARGET))\
536 $(TOOL_$(tool)_$(type)INCS.$(BUILD_TYPE))\
[73]537 $(TOOL_$(tool)_$(type)INCS)\
538 )
539$(eval flags :=\
540 $(TOOL_$(tool)_$(type)FLAGS)\
541 $(TOOL_$(tool)_$(type)FLAGS.$(BUILD_TYPE))\
[74]542 $(TOOL_$(tool)_$(type)FLAGS.$(BUILD_TARGET))\
[78]543 $(TOOL_$(tool)_$(type)FLAGS.$(BUILD_TARGET_ARCH))\
544 $(TOOL_$(tool)_$(type)FLAGS.$(BUILD_TARGET_CPU))\
[73]545 $($(type)FLAGS)\
546 $($(type)FLAGS.$(BUILD_TYPE))\
[74]547 $($(type)FLAGS.$(BUILD_TARGET))\
[78]548 $($(type)FLAGS.$(BUILD_TARGET_ARCH))\
549 $($(type)FLAGS.$(BUILD_TARGET_CPU))\
[73]550 $($(target)_$(type)FLAGS)\
551 $($(target)_$(type)FLAGS.$(BUILD_TYPE))\
[74]552 $($(target)_$(type)FLAGS.$(BUILD_TARGET))\
[78]553 $($(target)_$(type)FLAGS.$(BUILD_TARGET_ARCH))\
554 $($(target)_$(type)FLAGS.$(BUILD_TARGET_CPU))\
[73]555 $($(source)_$(type)FLAGS)\
556 $($(source)_$(type)FLAGS.$(BUILD_TYPE))\
[74]557 $($(source)_$(type)FLAGS.$(BUILD_TARGET))\
[78]558 $($(source)_$(type)FLAGS.$(BUILD_TARGET_ARCH))\
559 $($(source)_$(type)FLAGS.$(BUILD_TARGET_CPU))\
[73]560 $($(target)_$(source)_$(type)FLAGS)\
561 $($(target)_$(source)_$(type)FLAGS.$(BUILD_TYPE))\
[74]562 $($(target)_$(source)_$(type)FLAGS.$(BUILD_TARGET))\
[78]563 $($(target)_$(source)_$(type)FLAGS.$(BUILD_TARGET_ARCH))\
564 $($(target)_$(source)_$(type)FLAGS.$(BUILD_TARGET_CPU))\
[73]565 )
[74]566$(eval objsuff := $(firstword \
567 $($(target)_$(source)_OBJSUFF.$(BUILD_TARGET))\
568 $($(target)_$(source)_OBJSUFF)\
569 $($(source)_OBJSUFF.$(BUILD_TARGET))\
570 $($(source)_OBJSUFF)\
571 $($(target)_OBJSUFF.$(BUILD_TARGET))\
572 $($(target)_OBJSUFF)\
573 $(TOOL_$(tool)_$(type)OBJSUFF.$(BUILD_TARGET))\
574 $(TOOL_$(tool)_$(type)OBJSUFF)\
575 $(SUFF_OBJ)\
576 ))
[73]577$(eval obj := $(outbase)$(objsuff))
[74]578$(eval dep := $(outbase)$(SUFF_DEP))
[73]579
580#$ (warning dbg: target=$(target) source=$(source) tool=$(tool) obj=$(obj) dep=$(dep) flags=$(flags) defs=$(defs) incs=$(incs) dirdep=$(dirdep) outbase=$(outbase) objsuff=$(objsuff))
[97]581ifndef TOOL_$(tool)_COMPILE_$(type)
582$$(warning kBuild: TOOL_$(tool)_COMPILE_$(type) is not defined. source=$(source) target=$(target) )
583$$(warning kBuild: tools: \
[106]584 1 $($(target)_$(source)_$(type)TOOL.$(BUILD_TARGET)) \
585 2 $($(target)_$(source)_$(type)TOOL) \
586 3 $($(target)_$(source)_TOOL.$(BUILD_TARGET)) \
587 4 $($(target)_$(source)_TOOL) \
588 5 $($(target)_$(type)TOOL.$(BUILD_TARGET)) \
589 6 $($(target)_$(type)TOOL) \
590 7 $($(target)_TOOL.$(BUILD_TARGET)) \
591 8 $($(target)_TOOL) \
592 9 $($(source)_$(type)TOOL.$(BUILD_TARGET)) \
593 10 $($(source)_$(type)TOOL) \
594 11 $($(source)_TOOL.$(BUILD_TARGET)) \
595 12 $($(source)_TOOL) \
596 13 $($(type)TOOL.$(BUILD_TARGET)) \
597 14 $($(type)TOOL) \
598 15 $(TOOL.$(BUILD_TARGET)) \
599 16 $(TOOL) )
[97]600endif
[73]601$(eval $(TOOL_$(tool)_COMPILE_$(type)))
602
603$(eval _OBJS_$(target) += $(obj))
604$(eval _DEPFILES += $(dep))
605
606endef
607
608## Generic macro for processing all target sources.
[74]609# @param $(target) Normalized target name.
[73]610define def_target_sources
611#$ (warning def_target_sources)
612# C sources
[120]613$(foreach type,C,$(foreach source, $(filter %.c, $($(target)_SOURCES) $($(target)_SOURCES.$(BUILD_TARGET)) $($(target)_SOURCES.$(BUILD_MODE)))\
[73]614 ,$(eval $(def_target_source_c_cpp_asm)) ))
615
616# C++ sources
[120]617$(foreach type,CXX,$(foreach source, $(filter %.cpp %.cxx %.xx, $($(target)_SOURCES) $($(target)_SOURCES.$(BUILD_TARGET)) $($(target)_SOURCES.$(BUILD_MODE)))\
[73]618 ,$(eval $(def_target_source_c_cpp_asm)) ))
619
620# ASM sources
[120]621$(foreach type,AS,$(foreach source, $(filter %.asm %.s %.S, $($(target)_SOURCES) $($(target)_SOURCES.$(BUILD_TARGET)) $($(target)_SOURCES.$(BUILD_MODE)))\
[73]622 ,$(eval $(def_target_source_c_cpp_asm)) ))
623endef
624
625
626#
[72]627# LIBRARIES
[73]628#
[72]629
630## Library (one).
[74]631# @param $(target) Normalized library (target) name.
[72]632define def_lib
[145]633# library basics
[78]634$(eval tool := $(call _TARGET_TOOL,$(target),AR))
635ifeq ($(tool),)
636$$(error kBuild: Library target $(target) doesn't have a tool defined!)
637endif
[111]638## @todo prefix
639$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
640$(eval PATH_$(target) := $(patsubst %/,%,$(dir $(outbase))))
[126]641$(eval libsuff := $(firstword\
642 $($(target)_LIBSUFF.$(BUILD_TARGET))\
643 $($(target)_LIBSUFF)\
644 $(TOOL_$(tool)_ARLIBSUFF.$(BUILD_TARGET))\
645 $(TOOL_$(tool)_ARLIBSUFF)\
646 $(SUFF_LIB)\
647))
[111]648$(eval lib := $(outbase)$(libsuff))
[183]649$(eval TARGET_$(target) := $(lib))
[145]650
651# source -> object
652$(eval $(def_target_sources))
653
654# library linking
655$(eval tool := $(call _TARGET_TOOL,$(target),AR))
[146]656$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
[74]657$(eval flags :=\
658 $(TOOL_$(tool)_ARFLAGS)\
659 $(TOOL_$(tool)_ARFLAGS.$(BUILD_TYPE))\
660 $(ARFLAGS)\
661 $(ARFLAGS.$(BUILD_TYPE))\
662 $($(target)_ARFLAGS)\
663 $($(target)_ARFLAGS.$(BUILD_TYPE))\
664 )
[73]665$(eval objs = $(_OBJS_$(target)))
[120]666$(eval othersrc := $(filter-out %.c %.cpp %.cxx %.cc %.s %.S %.asm,$($(target)_SOURCES) $($(target)_SOURCES.$(BUILD_TARGET)) $($(target)_SOURCES.$(BUILD_MODE))))
[73]667$(eval dirdep := $(dir $(lib)).dir_created)
[78]668## @todo fix dependencies on makefiles an such
[73]669$(eval deps := )
[72]670
[73]671$(eval $(TOOL_$(tool)_LINK_LIBRARY))
[72]672
[126]673# publish rule (still need work)
[131]674ifndef $(target)_NOINST
[126]675$(eval publib := $(PATH_LIB)/$(notdir $(lib)))
676$(publib) : $(lib) $(dir $(publib)).dir_created
[130]677 $(CP) $(lib) $(publib)
[183]678
[126]679_LIBS += $(publib)
680_OUT_FILES += $(lib) $(publib)
681else
[73]682_LIBS += $(lib)
[75]683_OUT_FILES += $(lib)
[126]684endif
685_OBJS += $(_OBJS_$(target))
[72]686endef
687
688# Process libraries
[138]689$(foreach target, $(LIBRARIES) $(LIBRARIES.$(BUILD_TARGET)), $(eval $(def_lib)))
[72]690
691
692
693#
694# PROGRAMS
695#
696
[74]697## Program (one).
698# @param $(target) Normalized target (program) name.
699define def_program
[145]700# basics
[78]701$(eval tool := $(call _TARGET_TOOL,$(target),LD))
[111]702$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
703$(eval PATH_$(target) := $(patsubst %/,%,$(dir $(outbase))))
704$(eval exesuff := $(firstword $($(target)_EXESUFF) $($(target)_EXESUFF) $(TOOL_$(tool)_LDEXESUFF) $(SUFF_EXE)))
705$(eval exe := $(outbase)$(exesuff))
[183]706$(eval TARGET_$(target) := $(exe))
[145]707
708# source -> object
709$(eval $(def_target_sources))
710
711# more library stuff.
712$(eval tool := $(call _TARGET_TOOL,$(target),LD))
[146]713$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
[111]714$(eval objs = $(_OBJS_$(target)))
[74]715$(eval flags :=\
716 $(TOOL_$(tool)_LDFLAGS)\
717 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TYPE))\
[89]718 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TARGET))\
719 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TARGET_ARCH))\
720 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TARGET_CPU))\
[74]721 $(LDFLAGS)\
722 $(LDFLAGS.$(BUILD_TYPE))\
[89]723 $(LDFLAGS.$(BUILD_TARGET))\
724 $(LDFLAGS.$(BUILD_TARGET_ARCH))\
725 $(LDFLAGS.$(BUILD_TARGET_CPU))\
[74]726 $($(target)_LDFLAGS)\
727 $($(target)_LDFLAGS.$(BUILD_TYPE))\
[89]728 $($(target)_LDFLAGS.$(BUILD_TARGET))\
729 $($(target)_LDFLAGS.$(BUILD_TARGET_ARCH))\
730 $($(target)_LDFLAGS.$(BUILD_TARGET_CPU))\
[74]731)
732$(eval libs :=\
[87]733 $($(target)_LIBS.$(BUILD_TARGET_CPU))\
734 $($(target)_LIBS.$(BUILD_TARGET_ARCH))\
735 $($(target)_LIBS.$(BUILD_TARGET))\
[74]736 $($(target)_LIBS.$(BUILD_TYPE))\
737 $($(target)_LIBS)\
[122]738 $(foreach sdk, $($(target)_SDKS.$(BUILD_TARGET)) \
739 $($(target)_SDKS.$(BUILD_TYPE)) \
740 $($(target)_SDKS),\
741 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_CPU))\
742 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_ARCH))\
743 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET))\
744 $(SDK_$(sdk)_LIBS.$(BUILD_TYPE))\
745 $(SDK_$(sdk)_LIBS))\
[87]746 $(LIBS.$(BUILD_TARGET_CPU))\
747 $(LIBS.$(BUILD_TARGET_ARCH))\
748 $(LIBS.$(BUILD_TARGET))\
[74]749 $(LIBS.$(BUILD_TYPE))\
750 $(LIBS)\
[122]751 $(foreach sdk, $(SDKS.$(BUILD_TARGET)) \
752 $(SDKS.$(BUILD_TYPE)) \
753 $(SDKS),\
754 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_CPU))\
755 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_ARCH))\
756 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET))\
757 $(SDK_$(sdk)_LIBS.$(BUILD_TYPE))\
758 $(SDK_$(sdk)_LIBS))\
759 $(TOOL_$(tool)_LIBS.$(BUILD_TARGET_CPU))\
760 $(TOOL_$(tool)_LIBS.$(BUILD_TARGET_ARCH))\
761 $(TOOL_$(tool)_LIBS.$(BUILD_TARGET))\
[74]762 $(TOOL_$(tool)_LIBS.$(BUILD_TYPE))\
763 $(TOOL_$(tool)_LIBS)\
764)
765$(eval libpath :=\
[87]766 $($(target)_LIBPATH.$(BUILD_TARGET_CPU))\
767 $($(target)_LIBPATH.$(BUILD_TARGET_ARCH))\
768 $($(target)_LIBPATH.$(BUILD_TARGET))\
[74]769 $($(target)_LIBPATH.$(BUILD_TYPE))\
770 $($(target)_LIBPATH)\
[122]771 $(foreach sdk, $($(target)_SDKS.$(BUILD_TARGET)) \
772 $($(target)_SDKS.$(BUILD_TYPE)) \
773 $($(target)_SDKS),\
774 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_CPU))\
775 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_ARCH))\
776 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET))\
777 $(SDK_$(sdk)_LIBPATH.$(BUILD_TYPE))\
778 $(SDK_$(sdk)_LIBPATH))\
[87]779 $(LIBPATH.$(BUILD_TARGET_CPU))\
780 $(LIBPATH.$(BUILD_TARGET_ARCH))\
781 $(LIBPATH.$(BUILD_TARGET))\
[74]782 $(LIBPATH.$(BUILD_TYPE))\
783 $(LIBPATH)\
[122]784 $(foreach sdk, $(SDKS.$(BUILD_TARGET)) \
785 $(SDKS.$(BUILD_TYPE)) \
786 $(SDKS),\
787 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_CPU))\
788 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_ARCH))\
789 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET))\
790 $(SDK_$(sdk)_LIBPATH.$(BUILD_TYPE))\
791 $(SDK_$(sdk)_LIBPATH))\
[87]792 $(TOOL_$(tool)_LIBPATH.$(BUILD_TARGET_CPU))\
793 $(TOOL_$(tool)_LIBPATH.$(BUILD_TARGET_ARCH))\
794 $(TOOL_$(tool)_LIBPATH.$(BUILD_TARGET))\
[74]795 $(TOOL_$(tool)_LIBPATH.$(BUILD_TYPE))\
796 $(TOOL_$(tool)_LIBPATH)\
797)
798$(eval dirdep := $(dir $(exe)).dir_created)
799## @todo fix dependencies
800$(eval deps := )
801#
802$(eval custom_pre := $(strip $(firstword
803 $($(target)_CUSTOM_PRE.$(BUILD_TARGET).$(BUILD_TYPE))\
804 $($(target)_CUSTOM_PRE.$(BUILD_TARGET))\
805 $($(target)_CUSTOM_PRE.$(BUILD_TYPE))\
806 $($(target)_CUSTOM_PRE)\
807 $(CUSTOM_PRE.$(BUILD_TARGET).$(BUILD_TYPE))\
808 $(CUSTOM_PRE.$(BUILD_TARGET))\
809 $(CUSTOM_PRE.$(BUILD_TYPE))\
810 $(CUSTOM_PRE)\
811)))
812$(eval custom_post := $(strip $(firstword
813 $($(target)_CUSTOM_POST.$(BUILD_TARGET).$(BUILD_TYPE))\
814 $($(target)_CUSTOM_POST.$(BUILD_TARGET))\
815 $($(target)_CUSTOM_POST.$(BUILD_TYPE))\
816 $($(target)_CUSTOM_POST)\
817 $(CUSTOM_POST.$(BUILD_TARGET).$(BUILD_TYPE))\
818 $(CUSTOM_POST.$(BUILD_TARGET))\
819 $(CUSTOM_POST.$(BUILD_TYPE))\
820 $(CUSTOM_POST)\
821)))
[120]822$(eval othersrc := $(filter-out %.c %.cpp %.cxx %.cc %.s %.S %.asm,$($(target)_SOURCES) $($(target)_SOURCES.$(BUILD_TARGET)) $($(target)_SOURCES.$(BUILD_MODE))))
[72]823
[74]824$(eval $(TOOL_$(tool)_LINK_PROGRAM))
[130]825# publish rule (still need work)
[131]826ifndef $(target)_NOINST
827$(eval pubexe := $(PATH_BIN)/$(notdir $(exe)))
[130]828$(pubexe) : $(exe) $(dir $(pubexe)).dir_created
829 $(CP) $(exe) $(pubexe)
[183]830
[130]831_DLLS += $(pubexe)
832_OUT_FILES += $(exe) $(pubexe)
833else
834_DLLS += $(exe)
835_OUT_FILES += $(exe)
836endif
[74]837_OBJS += $(_OBJS_$(target))
838endef
839
840# Process libraries
[138]841$(foreach target, $(PROGRAMS) $(PROGRAMS.$(BUILD_TARGET)), $(eval $(def_program)))
[74]842
843
844
[72]845#
846# DLLS
847#
848
[130]849## DLL (one).
850# @param $(target) Normalized target (program) name.
851define def_dll
[145]852# dllmod basics
[130]853$(eval tool := $(call _TARGET_TOOL,$(target),LD))
854$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
855$(eval PATH_$(target) := $(patsubst %/,%,$(dir $(outbase))))
856$(eval dllsuff := $(firstword $($(target)_DLLSUFF) $($(target)_DLLSUFF) $(TOOL_$(tool)_LDDLLSUFF) $(SUFF_DLL)))
857$(eval dll := $(outbase)$(dllsuff))
[183]858$(eval TARGET_$(target) := $(dll))
[145]859
860# source -> object
861$(eval $(def_target_sources))
862
[183]863# dllmod linking.
[145]864$(eval tool := $(call _TARGET_TOOL,$(target),LD))
[146]865$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
[130]866$(eval objs = $(_OBJS_$(target)))
867$(eval flags :=\
868 $(TOOL_$(tool)_LDFLAGS)\
869 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TYPE))\
870 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TARGET))\
871 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TARGET_ARCH))\
872 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TARGET_CPU))\
873 $(LDFLAGS)\
874 $(LDFLAGS.$(BUILD_TYPE))\
875 $(LDFLAGS.$(BUILD_TARGET))\
876 $(LDFLAGS.$(BUILD_TARGET_ARCH))\
877 $(LDFLAGS.$(BUILD_TARGET_CPU))\
878 $($(target)_LDFLAGS)\
879 $($(target)_LDFLAGS.$(BUILD_TYPE))\
880 $($(target)_LDFLAGS.$(BUILD_TARGET))\
881 $($(target)_LDFLAGS.$(BUILD_TARGET_ARCH))\
882 $($(target)_LDFLAGS.$(BUILD_TARGET_CPU))\
883)
884$(eval libs :=\
885 $($(target)_LIBS.$(BUILD_TARGET_CPU))\
886 $($(target)_LIBS.$(BUILD_TARGET_ARCH))\
887 $($(target)_LIBS.$(BUILD_TARGET))\
888 $($(target)_LIBS.$(BUILD_TYPE))\
889 $($(target)_LIBS)\
890 $(foreach sdk, $($(target)_SDKS.$(BUILD_TARGET)) \
891 $($(target)_SDKS.$(BUILD_TYPE)) \
892 $($(target)_SDKS),\
893 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_CPU))\
894 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_ARCH))\
895 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET))\
896 $(SDK_$(sdk)_LIBS.$(BUILD_TYPE))\
897 $(SDK_$(sdk)_LIBS))\
898 $(LIBS.$(BUILD_TARGET_CPU))\
899 $(LIBS.$(BUILD_TARGET_ARCH))\
900 $(LIBS.$(BUILD_TARGET))\
901 $(LIBS.$(BUILD_TYPE))\
902 $(LIBS)\
903 $(foreach sdk, $(SDKS.$(BUILD_TARGET)) \
904 $(SDKS.$(BUILD_TYPE)) \
905 $(SDKS),\
906 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_CPU))\
907 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_ARCH))\
908 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET))\
909 $(SDK_$(sdk)_LIBS.$(BUILD_TYPE))\
910 $(SDK_$(sdk)_LIBS))\
911 $(TOOL_$(tool)_LIBS.$(BUILD_TARGET_CPU))\
912 $(TOOL_$(tool)_LIBS.$(BUILD_TARGET_ARCH))\
913 $(TOOL_$(tool)_LIBS.$(BUILD_TARGET))\
914 $(TOOL_$(tool)_LIBS.$(BUILD_TYPE))\
915 $(TOOL_$(tool)_LIBS)\
916)
917$(eval libpath :=\
918 $($(target)_LIBPATH.$(BUILD_TARGET_CPU))\
919 $($(target)_LIBPATH.$(BUILD_TARGET_ARCH))\
920 $($(target)_LIBPATH.$(BUILD_TARGET))\
921 $($(target)_LIBPATH.$(BUILD_TYPE))\
922 $($(target)_LIBPATH)\
923 $(foreach sdk, $($(target)_SDKS.$(BUILD_TARGET)) \
924 $($(target)_SDKS.$(BUILD_TYPE)) \
925 $($(target)_SDKS),\
926 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_CPU))\
927 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_ARCH))\
928 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET))\
929 $(SDK_$(sdk)_LIBPATH.$(BUILD_TYPE))\
930 $(SDK_$(sdk)_LIBPATH))\
931 $(LIBPATH.$(BUILD_TARGET_CPU))\
932 $(LIBPATH.$(BUILD_TARGET_ARCH))\
933 $(LIBPATH.$(BUILD_TARGET))\
934 $(LIBPATH.$(BUILD_TYPE))\
935 $(LIBPATH)\
936 $(foreach sdk, $(SDKS.$(BUILD_TARGET)) \
937 $(SDKS.$(BUILD_TYPE)) \
938 $(SDKS),\
939 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_CPU))\
940 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_ARCH))\
941 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET))\
942 $(SDK_$(sdk)_LIBPATH.$(BUILD_TYPE))\
943 $(SDK_$(sdk)_LIBPATH))\
944 $(TOOL_$(tool)_LIBPATH.$(BUILD_TARGET_CPU))\
945 $(TOOL_$(tool)_LIBPATH.$(BUILD_TARGET_ARCH))\
946 $(TOOL_$(tool)_LIBPATH.$(BUILD_TARGET))\
947 $(TOOL_$(tool)_LIBPATH.$(BUILD_TYPE))\
948 $(TOOL_$(tool)_LIBPATH)\
949)
950$(eval dirdep := $(dir $(dll)).dir_created)
951## @todo fix dependencies
952$(eval deps := )
953#
954$(eval custom_pre := $(strip $(firstword
955 $($(target)_CUSTOM_PRE.$(BUILD_TARGET).$(BUILD_TYPE))\
956 $($(target)_CUSTOM_PRE.$(BUILD_TARGET))\
957 $($(target)_CUSTOM_PRE.$(BUILD_TYPE))\
958 $($(target)_CUSTOM_PRE)\
959 $(CUSTOM_PRE.$(BUILD_TARGET).$(BUILD_TYPE))\
960 $(CUSTOM_PRE.$(BUILD_TARGET))\
961 $(CUSTOM_PRE.$(BUILD_TYPE))\
962 $(CUSTOM_PRE)\
963)))
964$(eval custom_post := $(strip $(firstword
965 $($(target)_CUSTOM_POST.$(BUILD_TARGET).$(BUILD_TYPE))\
966 $($(target)_CUSTOM_POST.$(BUILD_TARGET))\
967 $($(target)_CUSTOM_POST.$(BUILD_TYPE))\
968 $($(target)_CUSTOM_POST)\
969 $(CUSTOM_POST.$(BUILD_TARGET).$(BUILD_TYPE))\
970 $(CUSTOM_POST.$(BUILD_TARGET))\
971 $(CUSTOM_POST.$(BUILD_TYPE))\
972 $(CUSTOM_POST)\
973)))
974$(eval othersrc := $(filter-out %.c %.cpp %.cxx %.cc %.s %.S %.asm,$($(target)_SOURCES) $($(target)_SOURCES.$(BUILD_TARGET)) $($(target)_SOURCES.$(BUILD_MODE))))
[72]975
[130]976ifndef TOOL_$(tool)_LINK_DLL
977$$(warning kBuild: TOOL_$(tool)_LINK_DLL is not defined. target=$(target) )
978$$(warning kBuild: tools: \
979 1 $($(target)_$(source)TOOL.$(BUILD_TARGET)) \
980 2 $($(target)_$(source)TOOL) \
981 3 $($(target)_TOOL.$(BUILD_TARGET)) \
982 4 $($(target)_TOOL) \
983 5 $($(source)TOOL) \
984 6 $($(source)TOOL.$(BUILD_TARGET)) \
985 7 $(TOOL.$(BUILD_TARGET)) \
986 8 $(TOOL) )
[183]987endif
[130]988
989$(eval $(TOOL_$(tool)_LINK_DLL))
990
[183]991
[130]992# publish rule (still need work)
[131]993ifndef $(target)_NOINST
994$(eval pubdll := $(PATH_BIN)/$(notdir $(dll)))
[130]995$(pubdll) : $(dll) $(dir $(pubdll)).dir_created
996 $(CP) $(dll) $(pubdll)
[183]997
[130]998_DLLS += $(pubdll)
999_OUT_FILES += $(dll) $(pubdll)
1000else
1001_DLLS += $(dll)
1002_OUT_FILES += $(dll)
1003endif
1004_OBJS += $(_OBJS_$(target))
1005endef
1006
1007# Process dlls
[138]1008$(foreach target, $(DLLS) $(DLLS.$(BUILD_TARGET)), $(eval $(def_dll)))
[130]1009
1010
[72]1011#
[83]1012# SYSMODS
[72]1013#
1014
[130]1015## System module (one).
[83]1016# @param $(target) Normalized target (program) name.
1017define def_sysmod
[145]1018# sysmod basics
[83]1019$(eval tool := $(call _TARGET_TOOL,$(target),LD))
[111]1020$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
1021$(eval PATH_$(target) := $(patsubst %/,%,$(dir $(outbase))))
1022$(eval syssuff := $(firstword $($(target)_SYSSUFF) $($(target)_SYSSUFF) $(TOOL_$(tool)_LDSYSSUFF) $(SUFF_SYS)))
1023$(eval sys := $(outbase)$(syssuff))
[183]1024$(eval TARGET_$(target) := $(sys))
[145]1025
1026# source -> object
1027$(eval $(def_target_sources))
1028
1029# sysmod linking
1030$(eval tool := $(call _TARGET_TOOL,$(target),LD))
[146]1031$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
[111]1032$(eval objs = $(_OBJS_$(target)))
[83]1033$(eval flags :=\
1034 $(TOOL_$(tool)_LDFLAGS)\
1035 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TYPE))\
[89]1036 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TARGET))\
1037 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TARGET_ARCH))\
1038 $(TOOL_$(tool)_LDFLAGS.$(BUILD_TARGET_CPU))\
[83]1039 $(LDFLAGS)\
1040 $(LDFLAGS.$(BUILD_TYPE))\
[89]1041 $(LDFLAGS.$(BUILD_TARGET))\
1042 $(LDFLAGS.$(BUILD_TARGET_ARCH))\
1043 $(LDFLAGS.$(BUILD_TARGET_CPU))\
[83]1044 $($(target)_LDFLAGS)\
1045 $($(target)_LDFLAGS.$(BUILD_TYPE))\
[89]1046 $($(target)_LDFLAGS.$(BUILD_TARGET))\
1047 $($(target)_LDFLAGS.$(BUILD_TARGET_ARCH))\
1048 $($(target)_LDFLAGS.$(BUILD_TARGET_CPU))\
[83]1049)
1050$(eval libs :=\
[87]1051 $($(target)_LIBS.$(BUILD_TARGET_CPU))\
1052 $($(target)_LIBS.$(BUILD_TARGET_ARCH))\
1053 $($(target)_LIBS.$(BUILD_TARGET))\
[83]1054 $($(target)_LIBS.$(BUILD_TYPE))\
1055 $($(target)_LIBS)\
[122]1056 $(foreach sdk, $($(target)_SDKS.$(BUILD_TARGET)) \
1057 $($(target)_SDKS.$(BUILD_TYPE)) \
1058 $($(target)_SDKS),\
1059 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_CPU))\
1060 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_ARCH))\
1061 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET))\
1062 $(SDK_$(sdk)_LIBS.$(BUILD_TYPE))\
1063 $(SDK_$(sdk)_LIBS))\
[87]1064 $(LIBS.$(BUILD_TARGET_CPU))\
1065 $(LIBS.$(BUILD_TARGET_ARCH))\
1066 $(LIBS.$(BUILD_TARGET))\
[83]1067 $(LIBS.$(BUILD_TYPE))\
1068 $(LIBS)\
[122]1069 $(foreach sdk, $(SDKS.$(BUILD_TARGET)) \
1070 $(SDKS.$(BUILD_TYPE)) \
1071 $(SDKS),\
1072 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_CPU))\
1073 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET_ARCH))\
1074 $(SDK_$(sdk)_LIBS.$(BUILD_TARGET))\
1075 $(SDK_$(sdk)_LIBS.$(BUILD_TYPE))\
1076 $(SDK_$(sdk)_LIBS))\
1077 $(TOOL_$(tool)_LIBS.$(BUILD_TARGET_CPU))\
1078 $(TOOL_$(tool)_LIBS.$(BUILD_TARGET_ARCH))\
1079 $(TOOL_$(tool)_LIBS.$(BUILD_TARGET))\
[83]1080 $(TOOL_$(tool)_LIBS.$(BUILD_TYPE))\
1081 $(TOOL_$(tool)_LIBS)\
1082)
1083$(eval libpath :=\
[87]1084 $($(target)_LIBPATH.$(BUILD_TARGET_CPU))\
1085 $($(target)_LIBPATH.$(BUILD_TARGET_ARCH))\
1086 $($(target)_LIBPATH.$(BUILD_TARGET))\
[83]1087 $($(target)_LIBPATH.$(BUILD_TYPE))\
1088 $($(target)_LIBPATH)\
[122]1089 $(foreach sdk, $($(target)_SDKS.$(BUILD_TARGET)) \
1090 $($(target)_SDKS.$(BUILD_TYPE)) \
1091 $($(target)_SDKS),\
1092 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_CPU))\
1093 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_ARCH))\
1094 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET))\
1095 $(SDK_$(sdk)_LIBPATH.$(BUILD_TYPE))\
1096 $(SDK_$(sdk)_LIBPATH))\
[87]1097 $(LIBPATH.$(BUILD_TARGET_CPU))\
1098 $(LIBPATH.$(BUILD_TARGET_ARCH))\
1099 $(LIBPATH.$(BUILD_TARGET))\
[83]1100 $(LIBPATH.$(BUILD_TYPE))\
1101 $(LIBPATH)\
[122]1102 $(foreach sdk, $(SDKS.$(BUILD_TARGET)) \
1103 $(SDKS.$(BUILD_TYPE)) \
1104 $(SDKS),\
1105 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_CPU))\
1106 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET_ARCH))\
1107 $(SDK_$(sdk)_LIBPATH.$(BUILD_TARGET))\
1108 $(SDK_$(sdk)_LIBPATH.$(BUILD_TYPE))\
1109 $(SDK_$(sdk)_LIBPATH))\
[87]1110 $(TOOL_$(tool)_LIBPATH.$(BUILD_TARGET_CPU))\
1111 $(TOOL_$(tool)_LIBPATH.$(BUILD_TARGET_ARCH))\
1112 $(TOOL_$(tool)_LIBPATH.$(BUILD_TARGET))\
[83]1113 $(TOOL_$(tool)_LIBPATH.$(BUILD_TYPE))\
1114 $(TOOL_$(tool)_LIBPATH)\
1115)
1116$(eval dirdep := $(dir $(sys)).dir_created)
1117## @todo fix dependencies
1118$(eval deps := )
1119#
1120$(eval custom_pre := $(strip $(firstword
1121 $($(target)_CUSTOM_PRE.$(BUILD_TARGET).$(BUILD_TYPE))\
1122 $($(target)_CUSTOM_PRE.$(BUILD_TARGET))\
1123 $($(target)_CUSTOM_PRE.$(BUILD_TYPE))\
1124 $($(target)_CUSTOM_PRE)\
1125 $(CUSTOM_PRE.$(BUILD_TARGET).$(BUILD_TYPE))\
1126 $(CUSTOM_PRE.$(BUILD_TARGET))\
1127 $(CUSTOM_PRE.$(BUILD_TYPE))\
1128 $(CUSTOM_PRE)\
1129)))
1130$(eval custom_post := $(strip $(firstword
1131 $($(target)_CUSTOM_POST.$(BUILD_TARGET).$(BUILD_TYPE))\
1132 $($(target)_CUSTOM_POST.$(BUILD_TARGET))\
1133 $($(target)_CUSTOM_POST.$(BUILD_TYPE))\
1134 $($(target)_CUSTOM_POST)\
1135 $(CUSTOM_POST.$(BUILD_TARGET).$(BUILD_TYPE))\
1136 $(CUSTOM_POST.$(BUILD_TARGET))\
1137 $(CUSTOM_POST.$(BUILD_TYPE))\
1138 $(CUSTOM_POST)\
1139)))
[120]1140$(eval othersrc := $(filter-out %.c %.cpp %.cxx %.cc %.s %.S %.asm,$($(target)_SOURCES) $($(target)_SOURCES.$(BUILD_TARGET)) $($(target)_SOURCES.$(BUILD_MODE))))
[72]1141
[106]1142ifndef TOOL_$(tool)_LINK_SYSMOD
1143$$(warning kBuild: TOOL_$(tool)_LINK_SYSMOD is not defined. target=$(target) )
1144$$(warning kBuild: tools: \
1145 1 $($(target)_$(source)TOOL.$(BUILD_TARGET)) \
1146 2 $($(target)_$(source)TOOL) \
1147 3 $($(target)_TOOL.$(BUILD_TARGET)) \
1148 4 $($(target)_TOOL) \
1149 5 $($(source)TOOL) \
1150 6 $($(source)TOOL.$(BUILD_TARGET)) \
1151 7 $(TOOL.$(BUILD_TARGET)) \
1152 8 $(TOOL) )
[183]1153endif
[106]1154
[83]1155$(eval $(TOOL_$(tool)_LINK_SYSMOD))
1156
[130]1157# publish rule (still need work)
[131]1158ifndef $(target)_NOINST
1159$(eval pubsys := $(PATH_BIN)/$(notdir $(sys)))
1160$(pubsys): $(sys) $(dir $(pubsys)).dir_created
[130]1161 $(CP) $(sys) $(pubsys)
[183]1162
[131]1163$(eval _SYSMODS += $(pubsys))
1164$(eval _OUT_FILES += $(sys) $(pubsys))
[130]1165else
[131]1166$(eval _SYSMODS += $(sys))
1167$(eval _OUT_FILES += $(sys))
[130]1168endif
1169_OBJS += $(_OBJS_$(target))
[83]1170endef
1171
[130]1172# Process sysmods
[138]1173$(foreach target, $(SYSMODS) $(SYSMODS.$(BUILD_TARGET)), $(eval $(def_sysmod)))
[83]1174
1175
1176
[72]1177#
1178# OTHERS
1179#
[140]1180_OTHERS = $(OTHERS)
[72]1181
1182
1183
1184#
1185# DOCS
1186#
1187
1188
1189#
1190# Directories.
1191#
[130]1192_DIRFILES := $(sort $(addsuffix /.dir_created,$(_DIRS)) $(addsuffix .dir_created,$(sort $(dir $(_OUT_FILES) $(_OBJS)))))
[72]1193
1194define def_createdir
1195$(dirfile):
[106]1196 $(call MSG_Ltarget,Creating directory $$(@D))
[72]1197 $(MKDIR) -p $$(@D)
[73]1198 @echo dir_created > $$@
[72]1199endef
1200
1201$(foreach dirfile,$(_DIRFILES),$(eval $(def_createdir)))
1202
[183]1203
[72]1204#
[75]1205# Include dependency files.
[72]1206#
[75]1207$(foreach dep,$(wildcard $(_DEPFILES)),$(eval include $(dep)))
[72]1208
[183]1209
[75]1210#
1211# PASSES (including directory and makefile walking)
1212#
1213# Do all the default passes if it's unspecified.
[72]1214
[98]1215#PASSES ?= needed libraries binaries others publish
[139]1216PASSES ?= libraries binaries others
[98]1217
[75]1218## Proritized list of the default makefile when walking subdirectories.
1219# The user can overload this list.
1220DEFAULT_MAKEFILE ?= Makefile.kmk makefile.kmk Makefile makefile
[72]1221
[75]1222## Subdir
1223# @param $(pass) Lowercase pass name.
1224# @param $(PASS) Uppercase pass name.
1225# @param $(subdir) Subdirectory
1226# @param $(tag) tag to attach to the rule name.
1227define def_pass_subdir
1228pass_$(pass)$(tag)::
1229 $(QUIET)$$(MAKE) -C $(subdir) -f $$(notdir $$(firstword $$(wildcard $$(addprefix $(subdir)/,$$(DEFAULT_MAKEFILE))))) pass_$(pass)
1230endef
[72]1231
[75]1232## Submakefile
1233# @param $(pass) Lowercase pass name.
1234# @param $(PASS) Uppercase pass name.
1235# @param $(makefile) Makefile.
1236# @param $(tag) tag to attach to the rule name.
1237define def_pass_makefile
1238pass_$(pass)$(tag)::
1239 $(QUIET)$$(MAKE) -C $(patsubst %/,%,$(dir $(makefile))) -f $(notdir $(makefile)) pass_$(pass)
1240endef
[73]1241
[74]1242
[75]1243## Execute a pass.
1244# @param $(pass) Lowercase pass name.
1245# @param $(PASS) Uppercase pass name.
1246define def_pass
[183]1247$(eval SUBDIRS_$(PASS) ?= $(SUBDIRS) $(SUBDIRS.$(BUILD_TARGET)))
1248$(eval SUBDIRS_AFTER_$(PASS) ?= $(SUBDIRS_AFTER) $(SUBDIRS_AFTER.$(BUILD_TARGET)))
1249$(eval MAKEFILES_BEFORE_$(PASS) ?= $(MAKEFILES_BEFORE) $(MAKEFILES_BEFORE.$(BUILD_TARGET)))
1250$(eval MAKEFILES_AFTER_$(PASS) ?= $(MAKEFILES_AFTER) $(MAKEFILES_AFTER.$(BUILD_TARGET)))
[75]1251
1252$(eval tag:=_before)
[183]1253$(foreach subdir,$(SUBDIRS_$(PASS)) $(SUBDIRS_$(PASS).$(BUILD_TARGET)) ,$(eval $(def_pass_subdir)))
1254$(foreach makefile,$(MAKEFILES_BEFORE_$(PASS)) $(MAKEFILES_BEFORE_$(PASS).$(BUILD_TARGET)),$(eval $(def_pass_makefile)))
[75]1255
1256$(eval tag:=_after)
[183]1257$(foreach subdir,$(SUBDIRS_AFTER_$(PASS)) $(SUBDIRS_AFTER_$(PASS).$(BUILD_TARGET)) ,$(eval $(def_pass_subdir)))
1258$(foreach makefile,$(MAKEFILES_AFTER_$(PASS)) $(MAKEFILES_AFTER_$(PASS).$(BUILD_TARGET)) ,$(eval $(def_pass_makefile)))
[75]1259
1260.NOTPARALLEL: pass_$(pass)_before pass_$(pass)_after
1261.PHONY: pass_$(pass) pass_$(pass)_before pass_$(pass)_doit pass_$(pass)_after
1262pass_$(pass): \
1263 pass_$(pass)_before \
1264 pass_$(pass)_doit \
1265 pass_$(pass)_after
1266
[183]1267endef
1268
1269
[75]1270## PASS: needed
1271# This pass builds targets which are required for building the rest.
1272pass_needed_doit: $(_NEEDEDS)
1273pass := needed
1274PASS := NEEDED
1275$(eval $(def_pass))
1276
1277## PASS: libraries
1278# This pass builds library targets.
1279pass_libraries_doit: $(_LIBS) $(_IMPORT_LIBS) $(_OTHER_LIBRARIES)
1280pass := libraries
1281PASS := LIBRARIES
1282$(eval $(def_pass))
1283
1284## PASS: binaries
[83]1285# This pass builds binary targets, i.e. programs, dlls, system modules and stuff.
1286pass_binaries_doit: $(_DLLS) $(_EXES) $(_SYSMODS) $(_OTHER_BINARIES)
[75]1287pass := binaries
1288PASS := BINARIES
1289$(eval $(def_pass))
1290
1291## PASS: others
[83]1292# This pass builds other targets.
[75]1293pass_others_doit: $(_OTHERS)
1294pass := others
1295PASS := OTHERS
1296$(eval $(def_pass))
1297
1298## PASS: publish
1299# This pass installs the built entities to a sandbox area.
1300pass_publish_doit: publish
1301publish::
1302pass := publish
1303PASS := PUBLISH
[76]1304# $(sort).. not nice.
[183]1305SUBDIRS_PUBLISH ?= $(sort $(SUBDIRS) $(SUBDIRS.$(BUILD_TARGET)) $(SUBDIRS_LIBRARIES) $(SUBDIRS_LIBRARIES.$(BUILD_TARGET)) $(SUBDIRS_BINARIES) $(SUBDIRS_BINARIES.$(BUILD_TARGET)) $(SUBDIRS_OTHERS) $(SUBDIRS_OTHERS.$(BUILD_TARGET)))
1306SUBDIRS_AFTER_PUBLISH ?= $(sort $(SUBDIRS_AFTER) $(SUBDIRS_AFTER.$(BUILD_TARGET)) $(SUBDIRS_AFTER_LIBRARIES) $(SUBDIRS_AFTER_LIBRARIES.$(BUILD_TARGET)) $(SUBDIRS_AFTER_BINARIES) $(SUBDIRS_AFTER_BINARIES.$(BUILD_TARGET)) $(SUBDIRS_AFTER_OTHERS) $(SUBDIRS_AFTER_OTHERS.$(BUILD_TARGET)))
1307MAKEFILES_BEFORE_PUBLISH?= $(sort $(MAKEFILES_BEFORE) $(MAKEFILES_BEFORE.$(BUILD_TARGET)) $(MAKEFILES_BEFORE_LIBRARIES) $(MAKEFILES_BEFORE_LIBRARIES.$(BUILD_TARGET)) $(MAKEFILES_BEFORE_BINARIES) $(MAKEFILES_BEFORE_BINARIES.$(BUILD_TARGET)) $(MAKEFILES_BEFORE_OTHERS) $(MAKEFILES_BEFORE_OTHERS.$(BUILD_TARGET)))
1308MAKEFILES_AFTER_PUBLISH ?= $(sort $(MAKEFILES_AFTER) $(MAKEFILES_AFTER.$(BUILD_TARGET)) $(MAKEFILES_AFTER_LIBRARIES) $(MAKEFILES_AFTER_LIBRARIES.$(BUILD_TARGET)) $(MAKEFILES_AFTER_BINARIES) $(MAKEFILES_AFTER_BINARIES.$(BUILD_TARGET)) $(MAKEFILES_AFTER_OTHERS) $(MAKEFILES_AFTER_OTHERS.$(BUILD_TARGET)))
[75]1309$(eval $(def_pass))
1310
1311## PASS: packing
1312# This pass processes custom packing rules.
1313pass_packing_doit: packing
1314packing::
1315pass := packing
1316PASS := PACKING
1317$(eval $(def_pass))
1318
1319## PASS: clean
1320# This pass removes all generated files.
1321pass_clean_doit:
[136]1322 $(RM) -f $(_OUT_FILES) $(_OBJS) $(_DEPFILES) $(_DIRFILES) $(OTHER_CLEAN)
[75]1323pass := clean
1324PASS := CLEAN
1325$(eval $(def_pass))
1326clean: pass_clean
[183]1327
[75]1328## PASS: nothing
1329# This pass just walks the tree.
1330pass_nothing_doit:
[106]1331 $(call MSG_Ltarget,Did nothing in $(CURDIR))
[75]1332pass := nothing
1333PASS := NOTHING
1334$(eval $(def_pass))
1335nothing: pass_nothing
1336
[78]1337
[183]1338
[75]1339#
1340# THE MAIN RULES
1341#
1342all_recursive: $(foreach pass,$(PASSES),pass_$(pass))
1343
[130]1344rebuild: clean
[120]1345 $(MAKE) -f $(firstword $(MAKEFILE_LIST)) all_recursive
[78]1346
1347
[75]1348# misc shortcuts.
1349target: needed libraries binaries others
1350objects: $(_OBJS)
1351programs: $(_EXES)
[183]1352dlls: $(_DLLS)
[83]1353sysmods: $(_SYSMODS)
[75]1354
1355
[72]1356# end-of-file-content
[106]1357__footer_kmk__ := target
[72]1358endif # __footer_kmk__
Note: See TracBrowser for help on using the repository browser.