source: trunk/kBuild/footer.kmk@ 250

Last change on this file since 250 was 250, checked in by bird, 20 years ago

fixed some directory dependency trouble.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 52.4 KB
RevLine 
[72]1# $Id: footer.kmk 250 2005-04-05 12:46:40Z bird $
2## @file
3#
4# kBuild - File included at top of makefile.
5#
[189]6# Copyright (c) 2004 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 := \
[239]37 $(BLDPROGS) $(BLDPROGS.$(BUILD_PLATFORM)) \
[189]38 $(LIBRARIES) $(LIBRARIES.$(BUILD_TARGET)) \
39 $(IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)) \
40 $(DLLS) $(DLLS.$(BUILD_TARGET)) \
41 $(PROGRAMS) $(PROGRAMS.$(BUILD_TARGET)) \
42 $(SYSMODS) $(SYSMODS.$(BUILD_TARGET)) \
43 $(OTHERS) $(OTHERS.$(BUILD_TARGET))
[72]44
[75]45# dependency files.
46_DEPFILES :=
47
48# All kind of output files except for _OBJS and _DEPFILES.
49# Compiling or linking definition outputting other things that $@ and any
50# required dependency file must add those output files to this variable.
51_OUT_FILES :=
52
[72]53# all of a type
[219]54_OBJS :=
[222]55_BLDPROGS :=
[219]56_LIBS :=
57_DLLS :=
58_PROGRAMS :=
59_SYSMODS :=
60_DIRS :=
[189]61_IMPORT_LIBS :=
[72]62
[220]63# misc
64pass_prev :=
65
66
[72]67# all objs of a specific target
68define def_objs_var
[106]69_OBJS_$target :=
[72]70endef
71$(foreach target, $(ALL_TARGETS), $(eval _OBJS_$(target) := ))
72
73#
[73]74# Basic macros
75#
76
77## Figure out the tool for a source
[106]78# @param $target source file
79# @param $source normalized main target
80# @param $type tooltype
[222]81# @param bld_trg build target.
[79]82_SOURCE_TOOL = $(strip $(firstword \
[222]83 $($(target)_$(source)_$(type)TOOL.$(bld_trg)) \
[106]84 $($(target)_$(source)_$(type)TOOL) \
[222]85 $($(target)_$(source)_TOOL.$(bld_trg)) \
[106]86 $($(target)_$(source)_TOOL) \
[222]87 $($(target)_$(type)TOOL.$(bld_trg)) \
[106]88 $($(target)_$(type)TOOL) \
[222]89 $($(target)_TOOL.$(bld_trg)) \
[106]90 $($(target)_TOOL) \
[222]91 $($(source)_$(type)TOOL.$(bld_trg)) \
[106]92 $($(source)_$(type)TOOL) \
[222]93 $($(source)_TOOL.$(bld_trg)) \
[106]94 $($(source)_TOOL) \
[222]95 $($(type)TOOL.$(bld_trg)) \
[106]96 $($(type)TOOL) \
[222]97 $(TOOL.$(bld_trg)) \
[106]98 $(TOOL) ))
[73]99
[78]100## Figure out the tool for a target.
[106]101# @param $target normalized target.
102# @param $source tooltype.
[222]103# @param bld_trg build target.
[79]104_TARGET_TOOL = $(strip $(firstword \
[222]105 $($(target)_$(source)TOOL.$(bld_trg)) \
[106]106 $($(target)_$(source)TOOL) \
[222]107 $($(target)_TOOL.$(bld_trg)) \
[106]108 $($(target)_TOOL) \
[238]109 $($(source)TOOL.$(bld_trg)) \
[106]110 $($(source)TOOL) \
[222]111 $(TOOL.$(bld_trg)) \
[106]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#
[185]135# Check syntax which leads to weird syntax errors.
136#
137
138## Check
139# @param $(target) Target name.
140define def_check_target
141ifneq ("$($(target)_TEMPLATE)","$(strip $($(target)_TEMPLATE))")
142$$(error $(target) have an incorrect template name. Remove any tabs!)
143endif
144endef
145$(foreach target, $(ALL_TARGETS),$(eval $(def_check_target)))
146
147
148#
[72]149# Include templates
150#
151_TEMPLATES := $(TEMPLATE)
152define def_templates
153ifdef $(target)_TEMPLATE
154_TEMPLATES += $($(target)_TEMPLATE)
155endif
156endef
157$(foreach target, $(ALL_TARGETS), $(eval $(def_templates)))
158_TEMPLATES := $(sort $(_TEMPLATES))
159# $ (warning dbg: _TEMPLATES=$(_TEMPLATES))
160
161define def_templates_include
162ifndef TEMPLATE_$(template)
163include $(firstword $(wildcard $(PATH_KBUILD)/templates/$(template).kmk))
164endif
165endef
166$(foreach template, $(_TEMPLATES), $(eval $(def_templates)))
167
[74]168
[72]169#
170# Common Inheritance
171#
172
173## Inherit defaults property
174# @param $(prop) Property name
175# @param $(target) Target name.
176define def_inherit_defaults_one
[74]177ifndef $(target)_$(prop)
[109]178ifndef $(target)_$(prop).$(BUILD_TARGET)
[72]179ifdef $(prop)
[105]180$$(eval $(target)_$(prop) := $($(prop)))
[72]181endif
[109]182ifdef $(prop).$(BUILD_TARGET)
183$$(eval $(target)_$(prop).$(BUILD_TARGET) := $($(prop).$(BUILD_TARGET)))
[72]184endif
[109]185endif
186endif
[72]187endef
188
189## Inherit default properties for one target.
190# A bit tricky this one, but it depends a bit on whether or not TEMPLATE
191# is inherited from the default properties.
192# @param $(target) Target name
[78]193#
[72]194define def_inherit_defaults
195ifdef $(target)_TEMPLATE
[107]196ifeq ($(strip $(TEMPLATE_$($(target)_TEMPLATE)_TOOL) $(TEMPLATE_$($(target)_TEMPLATE)_TOOL.$(BUILD_TARGET))),)
[109]197$$(foreach prop,TOOL, $$(eval $$(def_inherit_defaults_one)))
[72]198endif
[107]199ifeq ($(strip $(TEMPLATE_$($(target)_TEMPLATE)_SDKS) $(TEMPLATE_$($(target)_TEMPLATE)_SDKS.$(BUILD_TARGET))),)
[109]200$$(foreach prop,SDKS, $$(eval $$(def_inherit_defaults_one)))
[72]201endif
202else
[109]203$$(foreach prop,TEMPLATE TOOL SDKS, $$(eval $$(def_inherit_defaults_one)))
[72]204endif
205endef
206# Inherit default properties.
[109]207# !!!!!!THIS IS MESSY AND NOT NECESSARY!!!!!!
[105]208$(foreach target, $(ALL_TARGETS),$(eval $(def_inherit_defaults)))
[72]209
210
[78]211## Inherit one template property in a accumulative manner.
[72]212# @param $(prop) Property name
213# @param $(target) Target name
[78]214# @todo fix the precedence order for some properties.
[72]215define def_inherit_template_one
[78]216ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop)
[72]217ifndef $(target)_$(prop)
[106]218#$$ (warning dbgtarget: $(target)_$(prop):='$(TEMPLATE_$($(target)_TEMPLATE)_$(prop))' TEMPLATE_$($(target)_TEMPLATE)_$(prop))
[105]219$$(target)_$$(prop) := $$(TEMPLATE_$$($$(target)_TEMPLATE)_$$(prop))
[72]220endif
221endif
[79]222ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET)
223ifndef $(target)_$(prop).$(BUILD_TARGET)
[106]224#$$ (warning dbgsource: $(target)_$(prop).$(BUILD_TARGET)="TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET)" TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET))
[105]225$$(target)_$$(prop).$$(BUILD_TARGET) := $$(TEMPLATE_$$($$(target)_TEMPLATE)_$$(prop).$$(BUILD_TARGET))
[79]226endif
227endif
[72]228endef
229
[183]230## Inherit one template property.
[78]231# @param $(prop) Property name
232# @param $(target) Target name
233define def_inherit_template_one_accumulate
234ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop)
[106]235#$$ (warning dbgtype: TEMPLATE_$($(target)_TEMPLATE)_$(prop) $(target)_$(prop)=$($(target)_$(prop)) $(TEMPLATE_$($(target)_TEMPLATE)_$(prop)))
[105]236$$(eval $(target)_$(prop) := $($(target)_$(prop)) $(TEMPLATE_$($(target)_TEMPLATE)_$(prop)))
[106]237#$$ (warning dbgtype: $(target)_$(prop)=$($(target)_$(prop)))
[78]238endif
[243]239ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TYPE)
240#$$ (warning dbg4: TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TYPE))
241$$(eval $(target)_$(prop).$(BUILD_TYPE) := $($(target)_$(prop).$(BUILD_TYPE)) $(TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TYPE)))
242endif
[79]243ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET)
[105]244#$$ (warning dbg4: TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET))
245$$(eval $(target)_$(prop).$(BUILD_TARGET) := $($(target)_$(prop).$(BUILD_TARGET)) $(TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET)))
[79]246endif
247ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_CPU)
[105]248#$$ (warning dbg5: TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_CPU))
249$$(eval $(target)_$(prop).$(BUILD_TARGET_CPU) := $($(target)_$(prop).$(BUILD_TARGET)) $(TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_CPU)))
[79]250endif
251ifdef TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_ARCH)
[105]252#$$ (warning dbg6: TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_ARCH))
253$$(eval $(target)_$(prop).$(BUILD_TARGET_ARCH) := $($(target)_$(prop).$(BUILD_TARGET)) $(TEMPLATE_$($(target)_TEMPLATE)_$(prop).$(BUILD_TARGET_ARCH)))
[79]254endif
[78]255endef
256
[106]257
[72]258## Inherit template properties for on target.
259# @param $(target) Target name.
260define def_inherit_template
[105]261$$(foreach prop, TOOL ARTOOL CTOOL CXXTOOL ASTOOL LDTOOL\
262 ,$$(eval $$(def_inherit_template_one)))
263$$(foreach prop,SDKS DEFS INCS COPTS CFLAGS CDEFS CINCS CXXOPTS CXXFLAGS CXXDEFS CXXINCS ASOPTS ASFLAGS ASDEFS ASINCS LDFLAGS LIBS LIBPATH \
[247]264 BLD_TYPE BLD_TRG BLD_TRG_ARCH BLD_TRG_CPU SYSSUFF EXESUFF DLLSUFF LIBSUFF ARLIBSUFF \
[105]265 ,$$(eval $$(def_inherit_template_one_accumulate)))
[72]266endef
267# Inherit template properties
[105]268$(foreach target, $(ALL_TARGETS),$(eval $(def_inherit_template)))
[72]269
270
271#
272# Include tools
[183]273#
[72]274_TOOLS := $(TOOL)
275define def_tools_target_source
[78]276$(foreach tool,\
[79]277 $($(source)_TOOL.$(BUILD_TARGET)) $($(target)_$(source)_TOOL.$(BUILD_TARGET))\
[78]278 $($(source)_TOOL) $($(target)_$(source)_TOOL)\
[79]279 $($(source)_CTOOL.$(BUILD_TARGET)) $($(target)_$(source)_CTOOL.$(BUILD_TARGET))\
[78]280 $($(source)_CTOOL) $($(target)_$(source)_CTOOL)\
[79]281 $($(source)_CXXTOOL.$(BUILD_TARGET)) $($(target)_$(source)_CXXTOOL.$(BUILD_TARGET))\
[78]282 $($(source)_CXXTOOL) $($(target)_$(source)_CXXTOOL)\
[79]283 $($(source)_ASTOOL.$(BUILD_TARGET)) $($(target)_$(source)_ASTOOL.$(BUILD_TARGET))\
[78]284 $($(source)_ASTOOL) $($(target)_$(source)_ASTOOL)\
[79]285 $($(source)_ARTOOL.$(BUILD_TARGET)) $($(target)_$(source)_ARTOOL.$(BUILD_TARGET))\
[78]286 $($(source)_ARTOOL) $($(target)_$(source)_ARTOOL)\
[79]287 $($(source)_LDTOOL.$(BUILD_TARGET)) $($(target)_$(source)_LDTOOL.$(BUILD_TARGET))\
[78]288 $($(source)_LDTOOL) $($(target)_$(source)_LDTOOL)\
289 ,$(eval _TOOLS += $(tool)))
[72]290endef
291define def_tools_target
[78]292$(foreach tool,\
[79]293 $($(target)_TOOL.$(BUILD_TARGET))\
[78]294 $($(target)_TOOL)\
[79]295 $($(target)_CTOOL.$(BUILD_TARGET))\
[78]296 $($(target)_CTOOL)\
[79]297 $($(target)_CXXTOOL.$(BUILD_TARGET))\
[78]298 $($(target)_CXXTOOL)\
[79]299 $($(target)_ASTOOL.$(BUILD_TARGET))\
[78]300 $($(target)_ASTOOL)\
[79]301 $($(target)_ARTOOL.$(BUILD_TARGET))\
[78]302 $($(target)_ARTOOL)\
[79]303 $($(target)_LDTOOL.$(BUILD_TARGET))\
[78]304 $($(target)_LDTOOL)\
[79]305 ,$(eval _TOOLS += $(tool)))
[220]306$(foreach source, $($(target)_SOURCES) $($(target)_SOURCES.$(BUILD_TARGET)) $($(target)_SOURCES.$(BUILD_TYPE)) \
[120]307 , $(eval $(def_tools_target_source)))
[72]308endef
309$(foreach target, $(ALL_TARGETS), $(eval $(def_tools_target)))
310_TOOLS := $(sort $(_TOOLS))
311
312define def_tools_include
313ifndef TOOL_$(tool)
314include $(firstword $(wildcard $(PATH_KBUILD)/tools/$(tool).kmk))
315endif
316endef
317$(foreach tool, $(_TOOLS), $(eval $(def_tools_include)))
318
319
320#
321# Include SDKs
[73]322#
[72]323_SDKS := $(SDKS)
324define def_sdks_target_source
[220]325$(foreach sdk, $($(source)_SDKS) $($(source)_SDKS.$(BUILD_TARGET)) $($(source)_SDKS.$(BUILD_TYPE)) \
326 $($(target)_$(source)_SDKS) $($(target)_$(source)_SDKS.$(BUILD_TARGET)) $($(target)_$(source)_SDKS.$(BUILD_TYPE)), \
[72]327 $(eval _SDKS += $(sdk)))
328endef
329define def_sdks_target
[220]330$(foreach sdk, $($(target)_SDKS) $($(target)_SDKS.$(BUILD_TARGET)) $($(target)_SDKS.$(BUILD_TYPE))\
[122]331 , $(eval _SDKS += $(sdk)))
[220]332$(foreach source, $($(target)_SOURCES) $($(target)_SOURCES.$(BUILD_TARGET)) $($(target)_SOURCES.$(BUILD_TYPE))\
[120]333 , $(eval $(def_sdks_target_source)))
[72]334endef
335$(foreach target, $(ALL_TARGETS), $(eval $(def_sdks_target)))
336_SDKS := $(sort $(_SDKS))
337
[122]338define def_sdks_include_one
[72]339ifndef SDK_$(sdk)
340include $(firstword $(wildcard $(PATH_KBUILD)/sdks/$(sdk).kmk))
341endif
342endef
[122]343$(foreach sdk, $(_SDKS), $(eval $(def_sdks_include_one)))
[72]344
[73]345#
346# Object processing.
347#
[72]348
[205]349
[73]350## Generic macro for processing C, C++ and Assembly sources.
351# @param $(target) Normalized target name.
352# @param $(source) Source file name.
353# @param $(type) Source type. {C,CXX,AS}
[221]354# @param bld_type Build type.
355# @param bld_trg Build target.
356# @param bld_trg_arch Build target arch.
357# @param bld_trg_cpu Build target cpu.
[72]358#
[73]359# @remark I've no clue why I've to $(eval ..) everything in this define. MAKE bug?
[105]360# @remark I now have a clue. Have to use $$ if not.
[73]361define def_target_source_c_cpp_asm
[105]362#$ (warning dbg: def_target_source_c_cpp_asm: source='$(source)' target='$(target)' type='$(type)')
[73]363
[78]364$(eval tool:=$(call _SOURCE_TOOL,$(source),$(target),$(type)))
[111]365$(eval outbase := $(call _OBJECT_BASE,$(source),$(target)))
366$(eval PATH_$(target)_$(source) := $(patsubst %/,%,$(dir $(outbase))))
367$(eval dirdep := $(dir $(outbase)).dir_created)
[73]368$(eval defs :=\
[78]369 $(TOOL_$(tool)_DEFS)\
[221]370 $(TOOL_$(tool)_DEFS.$(bld_type))\
371 $(TOOL_$(tool)_DEFS.$(bld_trg))\
372 $(TOOL_$(tool)_DEFS.$(bld_trg_arch))\
373 $(TOOL_$(tool)_DEFS.$(bld_trg_cpu))\
[74]374 $(TOOL_$(tool)_$(type)DEFS)\
[221]375 $(TOOL_$(tool)_$(type)DEFS.$(bld_type))\
376 $(foreach sdk, $(SDKS.$(bld_trg)) \
377 $(SDKS.$(bld_type)) \
[78]378 $(SDKS),\
379 $(SDK_$(sdk)_DEFS)\
[221]380 $(SDK_$(sdk)_DEFS.$(bld_type))\
381 $(SDK_$(sdk)_DEFS.$(bld_trg))\
382 $(SDK_$(sdk)_DEFS.$(bld_trg_arch))\
383 $(SDK_$(sdk)_DEFS.$(bld_trg_cpu))\
[78]384 $(SDK_$(sdk)_$(type)DEFS)\
[221]385 $(SDK_$(sdk)_$(type)DEFS.$(bld_type))\
386 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg))\
387 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg_arch))\
388 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg_cpu)))\
[74]389 $(DEFS)\
[221]390 $(DEFS.$(bld_type))\
391 $(DEFS.$(bld_trg))\
392 $(DEFS.$(bld_trg_arch))\
393 $(DEFS.$(bld_trg_cpu))\
[78]394 $($(type)DEFS)\
[221]395 $($(type)DEFS.$(bld_type))\
396 $($(type)DEFS.$(bld_trg))\
397 $($(type)DEFS.$(bld_trg_arch))\
398 $($(type)DEFS.$(bld_trg_cpu))\
399 $(foreach sdk, $($(target)_SDKS.$(bld_trg)) \
400 $($(target)_SDKS.$(bld_type)) \
[78]401 $($(target)_SDKS),\
402 $(SDK_$(sdk)_DEFS)\
[221]403 $(SDK_$(sdk)_DEFS.$(bld_type))\
404 $(SDK_$(sdk)_DEFS.$(bld_trg))\
405 $(SDK_$(sdk)_DEFS.$(bld_trg_arch))\
406 $(SDK_$(sdk)_DEFS.$(bld_trg_cpu))\
[78]407 $(SDK_$(sdk)_$(type)DEFS)\
[221]408 $(SDK_$(sdk)_$(type)DEFS.$(bld_type))\
409 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg))\
410 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg_arch))\
411 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg_cpu)))\
[74]412 $($(target)_DEFS)\
[221]413 $($(target)_DEFS.$(bld_type))\
414 $($(target)_DEFS.$(bld_trg))\
415 $($(target)_DEFS.$(bld_trg_arch))\
416 $($(target)_DEFS.$(bld_trg_cpu))\
[78]417 $($(target)_$(type)DEFS)\
[221]418 $($(target)_$(type)DEFS.$(bld_type))\
419 $($(target)_$(type)DEFS.$(bld_trg))\
420 $($(target)_$(type)DEFS.$(bld_trg_arch))\
421 $($(target)_$(type)DEFS.$(bld_trg_cpu))\
422 $(foreach sdk, $($(source)_SDKS.$(bld_trg)) \
423 $($(source)_SDKS.$(bld_type)) \
[78]424 $($(source)_SDKS),\
425 $(SDK_$(sdk)_DEFS)\
[221]426 $(SDK_$(sdk)_DEFS.$(bld_type))\
427 $(SDK_$(sdk)_DEFS.$(bld_trg))\
428 $(SDK_$(sdk)_DEFS.$(bld_trg_arch))\
429 $(SDK_$(sdk)_DEFS.$(bld_trg_cpu))\
[78]430 $(SDK_$(sdk)_$(type)DEFS)\
[221]431 $(SDK_$(sdk)_$(type)DEFS.$(bld_type))\
432 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg))\
433 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg_arch))\
434 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg_cpu)))\
[74]435 $($(source)_DEFS)\
[221]436 $($(source)_DEFS.$(bld_type))\
437 $($(source)_DEFS.$(bld_trg))\
438 $($(source)_DEFS.$(bld_trg_arch))\
439 $($(source)_DEFS.$(bld_trg_cpu))\
[73]440 $($(source)_$(type)DEFS)\
[221]441 $($(source)_$(type)DEFS.$(bld_type))\
442 $($(source)_$(type)DEFS.$(bld_trg))\
443 $($(source)_$(type)DEFS.$(bld_trg_arch))\
444 $($(source)_$(type)DEFS.$(bld_trg_cpu))\
445 $(foreach sdk, $($(target)_$(source)_SDKS.$(bld_trg)) \
446 $($(target)_$(source)_SDKS.$(bld_type)) \
[78]447 $($(target)_$(source)_SDKS),\
448 $(SDK_$(sdk)_DEFS)\
[221]449 $(SDK_$(sdk)_DEFS.$(bld_type))\
450 $(SDK_$(sdk)_DEFS.$(bld_trg))\
451 $(SDK_$(sdk)_DEFS.$(bld_trg_arch))\
452 $(SDK_$(sdk)_DEFS.$(bld_trg_cpu))\
[78]453 $(SDK_$(sdk)_$(type)DEFS)\
[221]454 $(SDK_$(sdk)_$(type)DEFS.$(bld_type))\
455 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg))\
456 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg_arch))\
457 $(SDK_$(sdk)_$(type)DEFS.$(bld_trg_cpu)))\
[74]458 $($(target)_$(source)_DEFS)\
[221]459 $($(target)_$(source)_DEFS.$(bld_type))\
460 $($(target)_$(source)_DEFS.$(bld_trg))\
461 $($(target)_$(source)_DEFS.$(bld_trg_arch))\
462 $($(target)_$(source)_DEFS.$(bld_trg_cpu))\
[74]463 $($(target)_$(source)_$(type)DEFS)\
[221]464 $($(target)_$(source)_$(type)DEFS.$(bld_type))\
465 $($(target)_$(source)_$(type)DEFS.$(bld_trg))\
466 $($(target)_$(source)_$(type)DEFS.$(bld_trg_arch))\
467 $($(target)_$(source)_$(type)DEFS.$(bld_trg_cpu))\
[73]468 )
469$(eval incs :=\
[221]470 $($(target)_$(source)_$(type)INCS.$(bld_trg_cpu))\
471 $($(target)_$(source)_$(type)INCS.$(bld_trg_arch))\
472 $($(target)_$(source)_$(type)INCS.$(bld_trg))\
473 $($(target)_$(source)_$(type)INCS.$(bld_type))\
[73]474 $($(target)_$(source)_$(type)INCS)\
[221]475 $($(target)_$(source)_INCS.$(bld_trg_cpu))\
476 $($(target)_$(source)_INCS.$(bld_trg_arch))\
477 $($(target)_$(source)_INCS.$(bld_trg))\
478 $($(target)_$(source)_INCS.$(bld_type))\
[73]479 $($(target)_$(source)_INCS)\
[221]480 $(foreach sdk, $($(target)_$(source)_SDKS.$(bld_trg)) \
481 $($(target)_$(source)_SDKS.$(bld_type)) \
[133]482 $($(target)_$(source)_SDKS),\
[221]483 $(SDK_$(sdk)_$(type)INCS.$(bld_trg_cpu))\
484 $(SDK_$(sdk)_$(type)INCS.$(bld_trg_arch))\
485 $(SDK_$(sdk)_$(type)INCS.$(bld_trg))\
486 $(SDK_$(sdk)_$(type)INCS.$(bld_type))\
[78]487 $(SDK_$(sdk)_$(type)INCS)\
[221]488 $(SDK_$(sdk)_INCS.$(bld_trg_cpu))\
489 $(SDK_$(sdk)_INCS.$(bld_trg_arch))\
490 $(SDK_$(sdk)_INCS.$(bld_trg))\
491 $(SDK_$(sdk)_INCS.$(bld_type))\
[78]492 $(SDK_$(sdk)_INCS))\
[221]493 $($(source)_$(type)INCS.$(bld_trg_cpu))\
494 $($(source)_$(type)INCS.$(bld_trg_arch))\
495 $($(source)_$(type)INCS.$(bld_trg))\
496 $($(source)_$(type)INCS.$(bld_type))\
[73]497 $($(source)_$(type)INCS)\
[221]498 $($(source)_INCS.$(bld_trg_cpu))\
499 $($(source)_INCS.$(bld_trg_arch))\
500 $($(source)_INCS.$(bld_trg))\
501 $($(source)_INCS.$(bld_type))\
[73]502 $($(source)_INCS)\
[221]503 $(foreach sdk, $($(source)_SDKS.$(bld_trg)) \
504 $($(source)_SDKS.$(bld_type)) \
[78]505 $($(source)_SDKS),\
[221]506 $(SDK_$(sdk)_$(type)INCS.$(bld_trg_cpu))\
507 $(SDK_$(sdk)_$(type)INCS.$(bld_trg_arch))\
508 $(SDK_$(sdk)_$(type)INCS.$(bld_trg))\
509 $(SDK_$(sdk)_$(type)INCS.$(bld_type))\
[78]510 $(SDK_$(sdk)_$(type)INCS)\
[221]511 $(SDK_$(sdk)_INCS.$(bld_trg_cpu))\
512 $(SDK_$(sdk)_INCS.$(bld_trg_arch))\
513 $(SDK_$(sdk)_INCS.$(bld_trg))\
514 $(SDK_$(sdk)_INCS.$(bld_type))\
[78]515 $(SDK_$(sdk)_INCS))\
[221]516 $($(target)_$(type)INCS.$(bld_trg_cpu))\
517 $($(target)_$(type)INCS.$(bld_trg_arch))\
518 $($(target)_$(type)INCS.$(bld_trg))\
519 $($(target)_$(type)INCS.$(bld_type))\
[73]520 $($(target)_$(type)INCS)\
[221]521 $($(target)_INCS.$(bld_trg_cpu))\
522 $($(target)_INCS.$(bld_trg_arch))\
523 $($(target)_INCS.$(bld_trg))\
524 $($(target)_INCS.$(bld_type))\
[73]525 $($(target)_INCS)\
[221]526 $(foreach sdk, $($(target)_SDKS.$(bld_trg)) \
527 $($(target)_SDKS.$(bld_type)) \
[78]528 $($(target)_SDKS),\
[221]529 $(SDK_$(sdk)_$(type)INCS.$(bld_trg_cpu))\
530 $(SDK_$(sdk)_$(type)INCS.$(bld_trg_arch))\
531 $(SDK_$(sdk)_$(type)INCS.$(bld_trg))\
532 $(SDK_$(sdk)_$(type)INCS.$(bld_type))\
[78]533 $(SDK_$(sdk)_$(type)INCS)\
[221]534 $(SDK_$(sdk)_INCS.$(bld_trg_cpu))\
535 $(SDK_$(sdk)_INCS.$(bld_trg_arch))\
536 $(SDK_$(sdk)_INCS.$(bld_trg))\
537 $(SDK_$(sdk)_INCS.$(bld_type))\
[78]538 $(SDK_$(sdk)_INCS))\
[221]539 $(INCS.$(bld_trg_cpu))\
540 $(INCS.$(bld_trg_arch))\
541 $(INCS.$(bld_trg))\
542 $(INCS.$(bld_type))\
[73]543 $(INCS)\
[221]544 $(foreach sdk, $(SDKS.$(bld_trg)) \
545 $(SDKS.$(bld_type)) \
[78]546 $(SDKS),\
[221]547 $(SDK_$(sdk)_$(type)INCS.$(bld_trg_cpu))\
548 $(SDK_$(sdk)_$(type)INCS.$(bld_trg_arch))\
549 $(SDK_$(sdk)_$(type)INCS.$(bld_trg))\
550 $(SDK_$(sdk)_$(type)INCS.$(bld_type))\
[78]551 $(SDK_$(sdk)_$(type)INCS)\
[221]552 $(SDK_$(sdk)_INCS.$(bld_trg_cpu))\
553 $(SDK_$(sdk)_INCS.$(bld_trg_arch))\
554 $(SDK_$(sdk)_INCS.$(bld_trg))\
555 $(SDK_$(sdk)_INCS.$(bld_type))\
[78]556 $(SDK_$(sdk)_INCS))\
[221]557 $(TOOL_$(tool)_$(type)INCS.$(bld_trg_cpu))\
558 $(TOOL_$(tool)_$(type)INCS.$(bld_trg_arch))\
559 $(TOOL_$(tool)_$(type)INCS.$(bld_trg))\
560 $(TOOL_$(tool)_$(type)INCS.$(bld_type))\
[73]561 $(TOOL_$(tool)_$(type)INCS)\
562 )
563$(eval flags :=\
564 $(TOOL_$(tool)_$(type)FLAGS)\
[221]565 $(TOOL_$(tool)_$(type)FLAGS.$(bld_type))\
566 $(TOOL_$(tool)_$(type)FLAGS.$(bld_trg))\
567 $(TOOL_$(tool)_$(type)FLAGS.$(bld_trg_arch))\
568 $(TOOL_$(tool)_$(type)FLAGS.$(bld_trg_cpu))\
[73]569 $($(type)FLAGS)\
[221]570 $($(type)FLAGS.$(bld_type))\
571 $($(type)FLAGS.$(bld_trg))\
572 $($(type)FLAGS.$(bld_trg_arch))\
573 $($(type)FLAGS.$(bld_trg_cpu))\
[73]574 $($(target)_$(type)FLAGS)\
[221]575 $($(target)_$(type)FLAGS.$(bld_type))\
576 $($(target)_$(type)FLAGS.$(bld_trg))\
577 $($(target)_$(type)FLAGS.$(bld_trg_arch))\
578 $($(target)_$(type)FLAGS.$(bld_trg_cpu))\
[73]579 $($(source)_$(type)FLAGS)\
[221]580 $($(source)_$(type)FLAGS.$(bld_type))\
581 $($(source)_$(type)FLAGS.$(bld_trg))\
582 $($(source)_$(type)FLAGS.$(bld_trg_arch))\
583 $($(source)_$(type)FLAGS.$(bld_trg_cpu))\
[73]584 $($(target)_$(source)_$(type)FLAGS)\
[221]585 $($(target)_$(source)_$(type)FLAGS.$(bld_type))\
586 $($(target)_$(source)_$(type)FLAGS.$(bld_trg))\
587 $($(target)_$(source)_$(type)FLAGS.$(bld_trg_arch))\
588 $($(target)_$(source)_$(type)FLAGS.$(bld_trg_cpu))\
[73]589 )
[74]590$(eval objsuff := $(firstword \
[221]591 $($(target)_$(source)_OBJSUFF.$(bld_trg))\
[74]592 $($(target)_$(source)_OBJSUFF)\
[221]593 $($(source)_OBJSUFF.$(bld_trg))\
[74]594 $($(source)_OBJSUFF)\
[221]595 $($(target)_OBJSUFF.$(bld_trg))\
[74]596 $($(target)_OBJSUFF)\
[221]597 $(TOOL_$(tool)_$(type)OBJSUFF.$(bld_trg))\
[74]598 $(TOOL_$(tool)_$(type)OBJSUFF)\
599 $(SUFF_OBJ)\
600 ))
[73]601$(eval obj := $(outbase)$(objsuff))
[74]602$(eval dep := $(outbase)$(SUFF_DEP))
[184]603$(eval deps := \
604 $($(target)_$(source)_DEPS)\
[221]605 $($(target)_$(source)_DEPS.$(bld_type))\
606 $($(target)_$(source)_DEPS.$(bld_trg))\
607 $($(target)_$(source)_DEPS.$(bld_trg_arch))\
608 $($(target)_$(source)_DEPS.$(bld_trg_cpu))\
[184]609 $($(source)_DEPS)\
[221]610 $($(source)_DEPS.$(bld_type))\
611 $($(source)_DEPS.$(bld_trg))\
[184]612 $($(target)_DEPS)\
[221]613 $($(target)_DEPS.$(bld_trg_arch))\
614 $($(target)_DEPS.$(bld_trg_cpu)))
[73]615
[184]616
617#$ (warning dbg: target=$(target) source=$(source) tool=$(tool) obj=$(obj) dep=$(dep) flags=$(flags) defs=$(defs) incs=$(incs) dirdep=$(dirdep) outbase=$(outbase) objsuff=$(objsuff) deps=$(deps))
[97]618ifndef TOOL_$(tool)_COMPILE_$(type)
619$$(warning kBuild: TOOL_$(tool)_COMPILE_$(type) is not defined. source=$(source) target=$(target) )
620$$(warning kBuild: tools: \
[221]621 1 $($(target)_$(source)_$(type)TOOL.$(bld_trg)) \
[106]622 2 $($(target)_$(source)_$(type)TOOL) \
[221]623 3 $($(target)_$(source)_TOOL.$(bld_trg)) \
[106]624 4 $($(target)_$(source)_TOOL) \
[221]625 5 $($(target)_$(type)TOOL.$(bld_trg)) \
[106]626 6 $($(target)_$(type)TOOL) \
[221]627 7 $($(target)_TOOL.$(bld_trg)) \
[106]628 8 $($(target)_TOOL) \
[221]629 9 $($(source)_$(type)TOOL.$(bld_trg)) \
[106]630 10 $($(source)_$(type)TOOL) \
[221]631 11 $($(source)_TOOL.$(bld_trg)) \
[106]632 12 $($(source)_TOOL) \
[221]633 13 $($(type)TOOL.$(bld_trg)) \
[106]634 14 $($(type)TOOL) \
[221]635 15 $(TOOL.$(bld_trg)) \
[106]636 16 $(TOOL) )
[97]637endif
[73]638$(eval $(TOOL_$(tool)_COMPILE_$(type)))
639
[207]640$$(basename $$(notdir $$(obj))).o::
[219]641 + $$(MAKE) -B -f $$(MAKEFILE) $(obj)
[207]642$$(basename $$(notdir $$(obj))).obj::
[219]643 + $$(MAKE) -B -f $$(MAKEFILE) $(obj)
[205]644
[73]645$(eval _OBJS_$(target) += $(obj))
646$(eval _DEPFILES += $(dep))
647
648endef
649
650## Generic macro for processing all target sources.
[74]651# @param $(target) Normalized target name.
[73]652define def_target_sources
653#$ (warning def_target_sources)
654# C sources
[221]655$(foreach type,C,$(foreach source, $(filter %.c, $($(target)_SOURCES) $($(target)_SOURCES.$(bld_trg)) $($(target)_SOURCES.$(bld_type)))\
[73]656 ,$(eval $(def_target_source_c_cpp_asm)) ))
657
658# C++ sources
[221]659$(foreach type,CXX,$(foreach source, $(filter %.cpp %.cxx %.xx, $($(target)_SOURCES) $($(target)_SOURCES.$(bld_trg)) $($(target)_SOURCES.$(bld_type)))\
[73]660 ,$(eval $(def_target_source_c_cpp_asm)) ))
661
662# ASM sources
[221]663$(foreach type,AS,$(foreach source, $(filter %.asm %.s %.S, $($(target)_SOURCES) $($(target)_SOURCES.$(bld_trg)) $($(target)_SOURCES.$(bld_type)))\
[73]664 ,$(eval $(def_target_source_c_cpp_asm)) ))
665endef
666
667
668#
[222]669# BLDPROGS
[219]670#
671
[222]672## Build program (one).
[219]673# @param $(target) Normalized target (program) name.
[222]674define def_bldprog
[219]675# basics
[220]676$(eval bld_type := $(firstword $($(target)_BLD_TYPE) $(BUILD_TYPE)))
[221]677$(eval bld_trg := $(firstword $($(target)_BLD_TRG) $(BUILD_PLATFORM)))
678$(eval bld_trg_arch:= $(firstword $($(target)_BLD_TRG_ARCH) $(BUILD_PLATFORM_ARCH)))
679$(eval bld_trg_cpu := $(firstword $($(target)_BLD_TRG_CPU) $(BUILD_PLATFORM_CPU)))
[222]680$(eval tool := $(call _TARGET_TOOL,$(target),LD))
681$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
682$(eval PATH_$(target) := $(patsubst %/,%,$(dir $(outbase))))
[219]683$(eval exesuff := $(firstword $($(target)_EXESUFF) $($(target)_EXESUFF) $(TOOL_$(tool)_LDEXESUFF) $(HOSTSUFF_EXE)))
684$(eval exe := $(outbase)$(exesuff))
685$(eval TARGET_$(target) := $(exe))
686
687# source -> object
688$(eval $(def_target_sources))
689
690# more library stuff.
691$(eval tool := $(call _TARGET_TOOL,$(target),LD))
692$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
693$(eval objs = $(_OBJS_$(target)))
694$(eval flags :=\
695 $(TOOL_$(tool)_LDFLAGS)\
[220]696 $(TOOL_$(tool)_LDFLAGS.$(bld_type))\
697 $(TOOL_$(tool)_LDFLAGS.$(bld_trg))\
[221]698 $(TOOL_$(tool)_LDFLAGS.$(bld_trg_arch))\
699 $(TOOL_$(tool)_LDFLAGS.$(bld_trg_cpu))\
[219]700 $(LDFLAGS)\
[220]701 $(LDFLAGS.$(bld_type))\
702 $(LDFLAGS.$(bld_trg))\
[221]703 $(LDFLAGS.$(bld_trg_arch))\
704 $(LDFLAGS.$(bld_trg_cpu))\
[219]705 $($(target)_LDFLAGS)\
[220]706 $($(target)_LDFLAGS.$(bld_type))\
707 $($(target)_LDFLAGS.$(bld_trg))\
[221]708 $($(target)_LDFLAGS.$(bld_trg_arch))\
709 $($(target)_LDFLAGS.$(bld_trg_cpu))\
[219]710)
711$(eval libs :=\
[221]712 $($(target)_LIBS.$(bld_trg_cpu))\
713 $($(target)_LIBS.$(bld_trg_arch))\
[220]714 $($(target)_LIBS.$(bld_trg))\
715 $($(target)_LIBS.$(bld_type))\
[219]716 $($(target)_LIBS)\
[220]717 $(foreach sdk, $($(target)_SDKS.$(bld_trg)) \
718 $($(target)_SDKS.$(bld_type)) \
[219]719 $($(target)_SDKS),\
[221]720 $(SDK_$(sdk)_LIBS.$(bld_trg_cpu))\
721 $(SDK_$(sdk)_LIBS.$(bld_trg_arch))\
[220]722 $(SDK_$(sdk)_LIBS.$(bld_trg))\
723 $(SDK_$(sdk)_LIBS.$(bld_type))\
[219]724 $(SDK_$(sdk)_LIBS))\
[221]725 $(LIBS.$(bld_trg_cpu))\
726 $(LIBS.$(bld_trg_arch))\
[220]727 $(LIBS.$(bld_trg))\
728 $(LIBS.$(bld_type))\
[219]729 $(LIBS)\
[220]730 $(foreach sdk, $(SDKS.$(bld_trg)) \
731 $(SDKS.$(bld_type)) \
[219]732 $(SDKS),\
[221]733 $(SDK_$(sdk)_LIBS.$(bld_trg_cpu))\
734 $(SDK_$(sdk)_LIBS.$(bld_trg_arch))\
[220]735 $(SDK_$(sdk)_LIBS.$(bld_trg))\
736 $(SDK_$(sdk)_LIBS.$(bld_type))\
[219]737 $(SDK_$(sdk)_LIBS))\
[221]738 $(TOOL_$(tool)_LIBS.$(bld_trg_cpu))\
739 $(TOOL_$(tool)_LIBS.$(bld_trg_arch))\
[220]740 $(TOOL_$(tool)_LIBS.$(bld_trg))\
741 $(TOOL_$(tool)_LIBS.$(bld_type))\
[219]742 $(TOOL_$(tool)_LIBS)\
743)
744$(eval libpath :=\
[221]745 $($(target)_LIBPATH.$(bld_trg_cpu))\
746 $($(target)_LIBPATH.$(bld_trg_arch))\
[220]747 $($(target)_LIBPATH.$(bld_trg))\
748 $($(target)_LIBPATH.$(bld_type))\
[219]749 $($(target)_LIBPATH)\
[220]750 $(foreach sdk, $($(target)_SDKS.$(bld_trg)) \
751 $($(target)_SDKS.$(bld_type)) \
[219]752 $($(target)_SDKS),\
[221]753 $(SDK_$(sdk)_LIBPATH.$(bld_trg_cpu))\
754 $(SDK_$(sdk)_LIBPATH.$(bld_trg_arch))\
[220]755 $(SDK_$(sdk)_LIBPATH.$(bld_trg))\
756 $(SDK_$(sdk)_LIBPATH.$(bld_type))\
[219]757 $(SDK_$(sdk)_LIBPATH))\
[221]758 $(LIBPATH.$(bld_trg_cpu))\
759 $(LIBPATH.$(bld_trg_arch))\
[220]760 $(LIBPATH.$(bld_trg))\
761 $(LIBPATH.$(bld_type))\
[219]762 $(LIBPATH)\
[220]763 $(foreach sdk, $(SDKS.$(bld_trg)) \
764 $(SDKS.$(bld_type)) \
[219]765 $(SDKS),\
[221]766 $(SDK_$(sdk)_LIBPATH.$(bld_trg_cpu))\
767 $(SDK_$(sdk)_LIBPATH.$(bld_trg_arch))\
[220]768 $(SDK_$(sdk)_LIBPATH.$(bld_trg))\
769 $(SDK_$(sdk)_LIBPATH.$(bld_type))\
[219]770 $(SDK_$(sdk)_LIBPATH))\
[221]771 $(TOOL_$(tool)_LIBPATH.$(bld_trg_cpu))\
772 $(TOOL_$(tool)_LIBPATH.$(bld_trg_arch))\
[220]773 $(TOOL_$(tool)_LIBPATH.$(bld_trg))\
774 $(TOOL_$(tool)_LIBPATH.$(bld_type))\
[219]775 $(TOOL_$(tool)_LIBPATH)\
776)
777$(eval dirdep := $(dir $(exe)).dir_created)
778## @todo fix dependencies
779$(eval deps := $($(target)_DEPS))
780#
781$(eval custom_pre := $(strip $(firstword
[220]782 $($(target)_CUSTOM_PRE.$(bld_trg).$(bld_type))\
783 $($(target)_CUSTOM_PRE.$(bld_trg))\
784 $($(target)_CUSTOM_PRE.$(bld_type))\
[219]785 $($(target)_CUSTOM_PRE)\
[220]786 $(CUSTOM_PRE.$(bld_trg).$(bld_type))\
787 $(CUSTOM_PRE.$(bld_trg))\
788 $(CUSTOM_PRE.$(bld_type))\
[219]789 $(CUSTOM_PRE)\
790)))
791$(eval custom_post := $(strip $(firstword
[220]792 $($(target)_CUSTOM_POST.$(bld_trg).$(bld_type))\
793 $($(target)_CUSTOM_POST.$(bld_trg))\
794 $($(target)_CUSTOM_POST.$(bld_type))\
[219]795 $($(target)_CUSTOM_POST)\
[220]796 $(CUSTOM_POST.$(bld_trg).$(bld_type))\
797 $(CUSTOM_POST.$(bld_trg))\
798 $(CUSTOM_POST.$(bld_type))\
[219]799 $(CUSTOM_POST)\
800)))
[220]801$(eval othersrc := $(filter-out %.c %.cpp %.cxx %.cc %.s %.S %.asm,$($(target)_SOURCES) $($(target)_SOURCES.$(bld_trg)) $($(target)_SOURCES.$(bld_type))))
[219]802
[239]803ifndef TOOL_$(tool)_LINK_PROGRAM
804$$(warning kBuild: TOOL_$(tool)_LINK_PROGRAM is not defined. target=$(target) )
805$$(warning kBuild: tools: \
806 1 $($(target)_$(source)TOOL.$(bld_trg)) \
807 2 $($(target)_$(source)TOOL) \
808 3 $($(target)_TOOL.$(bld_trg)) \
809 4 $($(target)_TOOL) \
810 5 $(TOOL.$(bld_trg)) \
811 6 $(TOOL) )
812endif
813
[219]814$(eval $(TOOL_$(tool)_LINK_PROGRAM))
815# publish rule (still need work)
[222]816ifdef $(target)_INST
[219]817$(eval pubexe := $(PATH_BIN)/$(notdir $(exe)))
818$(pubexe) : $(exe) $(dir $(pubexe)).dir_created
[246]819 $(RM) -f $(pubexe)
[219]820 $(CP) $(exe) $(pubexe)
821
[250]822_BLDPROGS += $(pubexe)
[219]823_OUT_FILES += $(exe) $(pubexe)
[250]824_DIRS += $(dir $(pubexe))
[219]825else
[250]826_BLDPROGS += $(exe)
[219]827_OUT_FILES += $(exe)
828endif
829_OBJS += $(_OBJS_$(target))
830endef
831
[222]832# Process build programs.
833$(foreach target, $(BLDPROGS) $(BLDPROGS.$(BUILD_PLATFORM)), $(eval $(def_bldprog)))
[219]834
835
836
837#
[72]838# LIBRARIES
[73]839#
[72]840
841## Library (one).
[74]842# @param $(target) Normalized library (target) name.
[72]843define def_lib
[145]844# library basics
[222]845## @todo prefix
846$(eval bld_type := $(firstword $($(target)_BLD_TYPE) $(BUILD_TYPE)))
847$(eval bld_trg := $(firstword $($(target)_BLD_TRG) $(BUILD_TARGET)))
848$(eval bld_trg_arch:= $(firstword $($(target)_BLD_TRG_ARCH) $(BUILD_TARGET_ARCH)))
849$(eval bld_trg_cpu := $(firstword $($(target)_BLD_TRG_CPU) $(BUILD_TARGET_CPU)))
[78]850$(eval tool := $(call _TARGET_TOOL,$(target),AR))
851ifeq ($(tool),)
852$$(error kBuild: Library target $(target) doesn't have a tool defined!)
853endif
[111]854$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
855$(eval PATH_$(target) := $(patsubst %/,%,$(dir $(outbase))))
[126]856$(eval libsuff := $(firstword\
[221]857 $($(target)_LIBSUFF.$(bld_trg))\
[126]858 $($(target)_LIBSUFF)\
[221]859 $(TOOL_$(tool)_ARLIBSUFF.$(bld_trg))\
[126]860 $(TOOL_$(tool)_ARLIBSUFF)\
861 $(SUFF_LIB)\
862))
[111]863$(eval lib := $(outbase)$(libsuff))
[183]864$(eval TARGET_$(target) := $(lib))
[145]865
866# source -> object
867$(eval $(def_target_sources))
868
869# library linking
870$(eval tool := $(call _TARGET_TOOL,$(target),AR))
[146]871$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
[74]872$(eval flags :=\
873 $(TOOL_$(tool)_ARFLAGS)\
[221]874 $(TOOL_$(tool)_ARFLAGS.$(bld_type))\
[74]875 $(ARFLAGS)\
[221]876 $(ARFLAGS.$(bld_type))\
[74]877 $($(target)_ARFLAGS)\
[221]878 $($(target)_ARFLAGS.$(bld_type))\
[74]879 )
[73]880$(eval objs = $(_OBJS_$(target)))
[221]881$(eval othersrc := $(filter-out %.c %.cpp %.cxx %.cc %.s %.S %.asm,$($(target)_SOURCES) $($(target)_SOURCES.$(bld_trg)) $($(target)_SOURCES.$(bld_type))))
[73]882$(eval dirdep := $(dir $(lib)).dir_created)
[78]883## @todo fix dependencies on makefiles an such
[184]884$(eval deps := $($(target)_DEPS))
[72]885
[73]886$(eval $(TOOL_$(tool)_LINK_LIBRARY))
[72]887
[126]888# publish rule (still need work)
[131]889ifndef $(target)_NOINST
[126]890$(eval publib := $(PATH_LIB)/$(notdir $(lib)))
891$(publib) : $(lib) $(dir $(publib)).dir_created
[246]892 $(RM) -f $(publib)
[130]893 $(CP) $(lib) $(publib)
[250]894
895_LIBS += $(publib)
[126]896_OUT_FILES += $(lib) $(publib)
[250]897_DIRS += $(dir $(publib))
[126]898else
[73]899_LIBS += $(lib)
[75]900_OUT_FILES += $(lib)
[126]901endif
902_OBJS += $(_OBJS_$(target))
[72]903endef
904
905# Process libraries
[138]906$(foreach target, $(LIBRARIES) $(LIBRARIES.$(BUILD_TARGET)), $(eval $(def_lib)))
[72]907
908
909
910#
[189]911# DLLS
[72]912#
913
[189]914## DLL (one).
[74]915# @param $(target) Normalized target (program) name.
[189]916define def_dll
917# dllmod basics
[221]918$(eval bld_type := $(firstword $($(target)_BLD_TYPE) $(BUILD_TYPE)))
919$(eval bld_trg := $(firstword $($(target)_BLD_TRG) $(BUILD_TARGET)))
920$(eval bld_trg_arch:= $(firstword $($(target)_BLD_TRG_ARCH) $(BUILD_TARGET_ARCH)))
921$(eval bld_trg_cpu := $(firstword $($(target)_BLD_TRG_CPU) $(BUILD_TARGET_CPU)))
[222]922$(eval tool := $(call _TARGET_TOOL,$(target),LD))
923$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
924$(eval PATH_$(target) := $(patsubst %/,%,$(dir $(outbase))))
[189]925$(eval dllsuff := $(firstword $($(target)_DLLSUFF) $($(target)_DLLSUFF) $(TOOL_$(tool)_LDDLLSUFF) $(SUFF_DLL)))
926$(eval dll := $(outbase)$(dllsuff))
927$(eval TARGET_$(target) := $(dll))
[145]928
929# source -> object
930$(eval $(def_target_sources))
931
[189]932# dllmod linking.
[145]933$(eval tool := $(call _TARGET_TOOL,$(target),LD))
[146]934$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
[111]935$(eval objs = $(_OBJS_$(target)))
[74]936$(eval flags :=\
937 $(TOOL_$(tool)_LDFLAGS)\
[221]938 $(TOOL_$(tool)_LDFLAGS.$(bld_type))\
939 $(TOOL_$(tool)_LDFLAGS.$(bld_trg))\
940 $(TOOL_$(tool)_LDFLAGS.$(bld_trg_arch))\
941 $(TOOL_$(tool)_LDFLAGS.$(bld_trg_cpu))\
[74]942 $(LDFLAGS)\
[221]943 $(LDFLAGS.$(bld_type))\
944 $(LDFLAGS.$(bld_trg))\
945 $(LDFLAGS.$(bld_trg_arch))\
946 $(LDFLAGS.$(bld_trg_cpu))\
[74]947 $($(target)_LDFLAGS)\
[221]948 $($(target)_LDFLAGS.$(bld_type))\
949 $($(target)_LDFLAGS.$(bld_trg))\
950 $($(target)_LDFLAGS.$(bld_trg_arch))\
951 $($(target)_LDFLAGS.$(bld_trg_cpu))\
[74]952)
953$(eval libs :=\
[221]954 $($(target)_LIBS.$(bld_trg_cpu))\
955 $($(target)_LIBS.$(bld_trg_arch))\
956 $($(target)_LIBS.$(bld_trg))\
957 $($(target)_LIBS.$(bld_type))\
[74]958 $($(target)_LIBS)\
[221]959 $(foreach sdk, $($(target)_SDKS.$(bld_trg)) \
960 $($(target)_SDKS.$(bld_type)) \
[122]961 $($(target)_SDKS),\
[221]962 $(SDK_$(sdk)_LIBS.$(bld_trg_cpu))\
963 $(SDK_$(sdk)_LIBS.$(bld_trg_arch))\
964 $(SDK_$(sdk)_LIBS.$(bld_trg))\
965 $(SDK_$(sdk)_LIBS.$(bld_type))\
[122]966 $(SDK_$(sdk)_LIBS))\
[221]967 $(LIBS.$(bld_trg_cpu))\
968 $(LIBS.$(bld_trg_arch))\
969 $(LIBS.$(bld_trg))\
970 $(LIBS.$(bld_type))\
[74]971 $(LIBS)\
[221]972 $(foreach sdk, $(SDKS.$(bld_trg)) \
973 $(SDKS.$(bld_type)) \
[122]974 $(SDKS),\
[221]975 $(SDK_$(sdk)_LIBS.$(bld_trg_cpu))\
976 $(SDK_$(sdk)_LIBS.$(bld_trg_arch))\
977 $(SDK_$(sdk)_LIBS.$(bld_trg))\
978 $(SDK_$(sdk)_LIBS.$(bld_type))\
[122]979 $(SDK_$(sdk)_LIBS))\
[221]980 $(TOOL_$(tool)_LIBS.$(bld_trg_cpu))\
981 $(TOOL_$(tool)_LIBS.$(bld_trg_arch))\
982 $(TOOL_$(tool)_LIBS.$(bld_trg))\
983 $(TOOL_$(tool)_LIBS.$(bld_type))\
[74]984 $(TOOL_$(tool)_LIBS)\
985)
986$(eval libpath :=\
[221]987 $($(target)_LIBPATH.$(bld_trg_cpu))\
988 $($(target)_LIBPATH.$(bld_trg_arch))\
989 $($(target)_LIBPATH.$(bld_trg))\
990 $($(target)_LIBPATH.$(bld_type))\
[74]991 $($(target)_LIBPATH)\
[221]992 $(foreach sdk, $($(target)_SDKS.$(bld_trg)) \
993 $($(target)_SDKS.$(bld_type)) \
[122]994 $($(target)_SDKS),\
[221]995 $(SDK_$(sdk)_LIBPATH.$(bld_trg_cpu))\
996 $(SDK_$(sdk)_LIBPATH.$(bld_trg_arch))\
997 $(SDK_$(sdk)_LIBPATH.$(bld_trg))\
998 $(SDK_$(sdk)_LIBPATH.$(bld_type))\
[122]999 $(SDK_$(sdk)_LIBPATH))\
[221]1000 $(LIBPATH.$(bld_trg_cpu))\
1001 $(LIBPATH.$(bld_trg_arch))\
1002 $(LIBPATH.$(bld_trg))\
1003 $(LIBPATH.$(bld_type))\
[74]1004 $(LIBPATH)\
[221]1005 $(foreach sdk, $(SDKS.$(bld_trg)) \
1006 $(SDKS.$(bld_type)) \
[122]1007 $(SDKS),\
[221]1008 $(SDK_$(sdk)_LIBPATH.$(bld_trg_cpu))\
1009 $(SDK_$(sdk)_LIBPATH.$(bld_trg_arch))\
1010 $(SDK_$(sdk)_LIBPATH.$(bld_trg))\
1011 $(SDK_$(sdk)_LIBPATH.$(bld_type))\
[122]1012 $(SDK_$(sdk)_LIBPATH))\
[221]1013 $(TOOL_$(tool)_LIBPATH.$(bld_trg_cpu))\
1014 $(TOOL_$(tool)_LIBPATH.$(bld_trg_arch))\
1015 $(TOOL_$(tool)_LIBPATH.$(bld_trg))\
1016 $(TOOL_$(tool)_LIBPATH.$(bld_type))\
[74]1017 $(TOOL_$(tool)_LIBPATH)\
1018)
[189]1019$(eval dirdep := $(dir $(dll)).dir_created)
[74]1020## @todo fix dependencies
[184]1021$(eval deps := $($(target)_DEPS))
[74]1022#
1023$(eval custom_pre := $(strip $(firstword
[221]1024 $($(target)_CUSTOM_PRE.$(bld_trg).$(bld_type))\
1025 $($(target)_CUSTOM_PRE.$(bld_trg))\
1026 $($(target)_CUSTOM_PRE.$(bld_type))\
[74]1027 $($(target)_CUSTOM_PRE)\
[221]1028 $(CUSTOM_PRE.$(bld_trg).$(bld_type))\
1029 $(CUSTOM_PRE.$(bld_trg))\
1030 $(CUSTOM_PRE.$(bld_type))\
[74]1031 $(CUSTOM_PRE)\
1032)))
1033$(eval custom_post := $(strip $(firstword
[221]1034 $($(target)_CUSTOM_POST.$(bld_trg).$(bld_type))\
1035 $($(target)_CUSTOM_POST.$(bld_trg))\
1036 $($(target)_CUSTOM_POST.$(bld_type))\
[74]1037 $($(target)_CUSTOM_POST)\
[221]1038 $(CUSTOM_POST.$(bld_trg).$(bld_type))\
1039 $(CUSTOM_POST.$(bld_trg))\
1040 $(CUSTOM_POST.$(bld_type))\
[74]1041 $(CUSTOM_POST)\
1042)))
[221]1043$(eval othersrc := $(filter-out %.c %.cpp %.cxx %.cc %.s %.S %.asm,$($(target)_SOURCES) $($(target)_SOURCES.$(bld_trg)) $($(target)_SOURCES.$(bld_type))))
[72]1044
[189]1045ifndef TOOL_$(tool)_LINK_DLL
1046$$(warning kBuild: TOOL_$(tool)_LINK_DLL is not defined. target=$(target) )
1047$$(warning kBuild: tools: \
[221]1048 1 $($(target)_$(source)TOOL.$(bld_trg)) \
[189]1049 2 $($(target)_$(source)TOOL) \
[221]1050 3 $($(target)_TOOL.$(bld_trg)) \
[189]1051 4 $($(target)_TOOL) \
1052 5 $($(source)TOOL) \
[221]1053 6 $($(source)TOOL.$(bld_trg)) \
1054 7 $(TOOL.$(bld_trg)) \
[189]1055 8 $(TOOL) )
1056endif
1057
1058$(eval $(TOOL_$(tool)_LINK_DLL))
1059
1060
[130]1061# publish rule (still need work)
[131]1062ifndef $(target)_NOINST
[189]1063$(eval pubdll := $(PATH_BIN)/$(notdir $(dll)))
1064$(pubdll) : $(dll) $(dir $(pubdll)).dir_created
[246]1065 $(RM) -f $(pubdll)
[189]1066 $(CP) $(dll) $(pubdll)
[183]1067
[189]1068$(eval TARGET_PUB_$(target) := $(pubdll))
[250]1069_DLLS += $(pubdll)
[189]1070_OUT_FILES += $(dll) $(pubdll)
[250]1071_DIRS += $(dir $(pubdll))
[130]1072else
[250]1073_DLLS += $(dll)
[189]1074_OUT_FILES += $(dll)
[130]1075endif
[74]1076_OBJS += $(_OBJS_$(target))
1077endef
1078
[189]1079# Process dlls
1080$(foreach target, $(DLLS) $(DLLS.$(BUILD_TARGET)), $(eval $(def_dll)))
[74]1081
1082
1083
[72]1084#
[189]1085# Process import libraries.
[72]1086#
[219]1087# - On OS/2 and windows these are libraries.
[189]1088# - On other platforms they are fake DLLs.
1089ifeq ($(subst win32,os2,$(BUILD_TARGET)),os2)
1090$(foreach target, $(IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)), $(eval $(def_lib)))
1091else
1092$(foreach target, $(IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)), $(eval $(def_dll)))
1093endif
1094$(foreach target, $(IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)), $(eval _IMPORT_LIBS += $(firstword $(TARGET_PUB_$(target)) $(TARGET_$(target)))))
[72]1095
[219]1096
[189]1097
1098#
1099# PROGRAMS
1100#
1101
1102## Program (one).
[130]1103# @param $(target) Normalized target (program) name.
[189]1104define def_program
1105# basics
[221]1106$(eval bld_type := $(firstword $($(target)_BLD_TYPE) $(BUILD_TYPE)))
1107$(eval bld_trg := $(firstword $($(target)_BLD_TRG) $(BUILD_TARGET)))
1108$(eval bld_trg_arch:= $(firstword $($(target)_BLD_TRG_ARCH) $(BUILD_TARGET_ARCH)))
1109$(eval bld_trg_cpu := $(firstword $($(target)_BLD_TRG_CPU) $(BUILD_TARGET_CPU)))
[222]1110$(eval tool := $(call _TARGET_TOOL,$(target),LD))
1111$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
1112$(eval PATH_$(target) := $(patsubst %/,%,$(dir $(outbase))))
[189]1113$(eval exesuff := $(firstword $($(target)_EXESUFF) $($(target)_EXESUFF) $(TOOL_$(tool)_LDEXESUFF) $(SUFF_EXE)))
1114$(eval exe := $(outbase)$(exesuff))
1115$(eval TARGET_$(target) := $(exe))
[145]1116
1117# source -> object
1118$(eval $(def_target_sources))
1119
[189]1120# more library stuff.
[145]1121$(eval tool := $(call _TARGET_TOOL,$(target),LD))
[146]1122$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
[130]1123$(eval objs = $(_OBJS_$(target)))
1124$(eval flags :=\
1125 $(TOOL_$(tool)_LDFLAGS)\
[221]1126 $(TOOL_$(tool)_LDFLAGS.$(bld_type))\
1127 $(TOOL_$(tool)_LDFLAGS.$(bld_trg))\
1128 $(TOOL_$(tool)_LDFLAGS.$(bld_trg_arch))\
1129 $(TOOL_$(tool)_LDFLAGS.$(bld_trg_cpu))\
[130]1130 $(LDFLAGS)\
[221]1131 $(LDFLAGS.$(bld_type))\
1132 $(LDFLAGS.$(bld_trg))\
1133 $(LDFLAGS.$(bld_trg_arch))\
1134 $(LDFLAGS.$(bld_trg_cpu))\
[130]1135 $($(target)_LDFLAGS)\
[221]1136 $($(target)_LDFLAGS.$(bld_type))\
1137 $($(target)_LDFLAGS.$(bld_trg))\
1138 $($(target)_LDFLAGS.$(bld_trg_arch))\
1139 $($(target)_LDFLAGS.$(bld_trg_cpu))\
[130]1140)
1141$(eval libs :=\
[221]1142 $($(target)_LIBS.$(bld_trg_cpu))\
1143 $($(target)_LIBS.$(bld_trg_arch))\
1144 $($(target)_LIBS.$(bld_trg))\
1145 $($(target)_LIBS.$(bld_type))\
[130]1146 $($(target)_LIBS)\
[221]1147 $(foreach sdk, $($(target)_SDKS.$(bld_trg)) \
1148 $($(target)_SDKS.$(bld_type)) \
[130]1149 $($(target)_SDKS),\
[221]1150 $(SDK_$(sdk)_LIBS.$(bld_trg_cpu))\
1151 $(SDK_$(sdk)_LIBS.$(bld_trg_arch))\
1152 $(SDK_$(sdk)_LIBS.$(bld_trg))\
1153 $(SDK_$(sdk)_LIBS.$(bld_type))\
[130]1154 $(SDK_$(sdk)_LIBS))\
[221]1155 $(LIBS.$(bld_trg_cpu))\
1156 $(LIBS.$(bld_trg_arch))\
1157 $(LIBS.$(bld_trg))\
1158 $(LIBS.$(bld_type))\
[130]1159 $(LIBS)\
[221]1160 $(foreach sdk, $(SDKS.$(bld_trg)) \
1161 $(SDKS.$(bld_type)) \
[130]1162 $(SDKS),\
[221]1163 $(SDK_$(sdk)_LIBS.$(bld_trg_cpu))\
1164 $(SDK_$(sdk)_LIBS.$(bld_trg_arch))\
1165 $(SDK_$(sdk)_LIBS.$(bld_trg))\
1166 $(SDK_$(sdk)_LIBS.$(bld_type))\
[130]1167 $(SDK_$(sdk)_LIBS))\
[221]1168 $(TOOL_$(tool)_LIBS.$(bld_trg_cpu))\
1169 $(TOOL_$(tool)_LIBS.$(bld_trg_arch))\
1170 $(TOOL_$(tool)_LIBS.$(bld_trg))\
1171 $(TOOL_$(tool)_LIBS.$(bld_type))\
[130]1172 $(TOOL_$(tool)_LIBS)\
1173)
1174$(eval libpath :=\
[221]1175 $($(target)_LIBPATH.$(bld_trg_cpu))\
1176 $($(target)_LIBPATH.$(bld_trg_arch))\
1177 $($(target)_LIBPATH.$(bld_trg))\
1178 $($(target)_LIBPATH.$(bld_type))\
[130]1179 $($(target)_LIBPATH)\
[221]1180 $(foreach sdk, $($(target)_SDKS.$(bld_trg)) \
1181 $($(target)_SDKS.$(bld_type)) \
[130]1182 $($(target)_SDKS),\
[221]1183 $(SDK_$(sdk)_LIBPATH.$(bld_trg_cpu))\
1184 $(SDK_$(sdk)_LIBPATH.$(bld_trg_arch))\
1185 $(SDK_$(sdk)_LIBPATH.$(bld_trg))\
1186 $(SDK_$(sdk)_LIBPATH.$(bld_type))\
[130]1187 $(SDK_$(sdk)_LIBPATH))\
[221]1188 $(LIBPATH.$(bld_trg_cpu))\
1189 $(LIBPATH.$(bld_trg_arch))\
1190 $(LIBPATH.$(bld_trg))\
1191 $(LIBPATH.$(bld_type))\
[130]1192 $(LIBPATH)\
[221]1193 $(foreach sdk, $(SDKS.$(bld_trg)) \
1194 $(SDKS.$(bld_type)) \
[130]1195 $(SDKS),\
[221]1196 $(SDK_$(sdk)_LIBPATH.$(bld_trg_cpu))\
1197 $(SDK_$(sdk)_LIBPATH.$(bld_trg_arch))\
1198 $(SDK_$(sdk)_LIBPATH.$(bld_trg))\
1199 $(SDK_$(sdk)_LIBPATH.$(bld_type))\
[130]1200 $(SDK_$(sdk)_LIBPATH))\
[221]1201 $(TOOL_$(tool)_LIBPATH.$(bld_trg_cpu))\
1202 $(TOOL_$(tool)_LIBPATH.$(bld_trg_arch))\
1203 $(TOOL_$(tool)_LIBPATH.$(bld_trg))\
1204 $(TOOL_$(tool)_LIBPATH.$(bld_type))\
[130]1205 $(TOOL_$(tool)_LIBPATH)\
1206)
[189]1207$(eval dirdep := $(dir $(exe)).dir_created)
[130]1208## @todo fix dependencies
[184]1209$(eval deps := $($(target)_DEPS))
[130]1210#
1211$(eval custom_pre := $(strip $(firstword
[221]1212 $($(target)_CUSTOM_PRE.$(bld_trg).$(bld_type))\
1213 $($(target)_CUSTOM_PRE.$(bld_trg))\
1214 $($(target)_CUSTOM_PRE.$(bld_type))\
[130]1215 $($(target)_CUSTOM_PRE)\
[221]1216 $(CUSTOM_PRE.$(bld_trg).$(bld_type))\
1217 $(CUSTOM_PRE.$(bld_trg))\
1218 $(CUSTOM_PRE.$(bld_type))\
[130]1219 $(CUSTOM_PRE)\
1220)))
1221$(eval custom_post := $(strip $(firstword
[221]1222 $($(target)_CUSTOM_POST.$(bld_trg).$(bld_type))\
1223 $($(target)_CUSTOM_POST.$(bld_trg))\
1224 $($(target)_CUSTOM_POST.$(bld_type))\
[130]1225 $($(target)_CUSTOM_POST)\
[221]1226 $(CUSTOM_POST.$(bld_trg).$(bld_type))\
1227 $(CUSTOM_POST.$(bld_trg))\
1228 $(CUSTOM_POST.$(bld_type))\
[130]1229 $(CUSTOM_POST)\
1230)))
[221]1231$(eval othersrc := $(filter-out %.c %.cpp %.cxx %.cc %.s %.S %.asm,$($(target)_SOURCES) $($(target)_SOURCES.$(bld_trg)) $($(target)_SOURCES.$(bld_type))))
[72]1232
[189]1233$(eval $(TOOL_$(tool)_LINK_PROGRAM))
[130]1234# publish rule (still need work)
[131]1235ifndef $(target)_NOINST
[189]1236$(eval pubexe := $(PATH_BIN)/$(notdir $(exe)))
1237$(pubexe) : $(exe) $(dir $(pubexe)).dir_created
[246]1238 $(RM) -f $(pubexe)
[189]1239 $(CP) $(exe) $(pubexe)
[183]1240
[219]1241_PROGRAMS += $(pubexe)
[189]1242_OUT_FILES += $(exe) $(pubexe)
[250]1243_DIRS += $(dir $(pubexe))
[130]1244else
[219]1245_PROGRAMS += $(exe)
[189]1246_OUT_FILES += $(exe)
[130]1247endif
1248_OBJS += $(_OBJS_$(target))
1249endef
1250
[189]1251# Process libraries
1252$(foreach target, $(PROGRAMS) $(PROGRAMS.$(BUILD_TARGET)), $(eval $(def_program)))
[130]1253
1254
[189]1255
[72]1256#
[83]1257# SYSMODS
[72]1258#
1259
[130]1260## System module (one).
[83]1261# @param $(target) Normalized target (program) name.
1262define def_sysmod
[145]1263# sysmod basics
[221]1264$(eval bld_type := $(firstword $($(target)_BLD_TYPE) $(BUILD_TYPE)))
1265$(eval bld_trg := $(firstword $($(target)_BLD_TRG) $(BUILD_TARGET)))
1266$(eval bld_trg_arch:= $(firstword $($(target)_BLD_TRG_ARCH) $(BUILD_TARGET_ARCH)))
1267$(eval bld_trg_cpu := $(firstword $($(target)_BLD_TRG_CPU) $(BUILD_TARGET_CPU)))
[222]1268$(eval tool := $(call _TARGET_TOOL,$(target),LD))
1269$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
1270$(eval PATH_$(target) := $(patsubst %/,%,$(dir $(outbase))))
[111]1271$(eval syssuff := $(firstword $($(target)_SYSSUFF) $($(target)_SYSSUFF) $(TOOL_$(tool)_LDSYSSUFF) $(SUFF_SYS)))
1272$(eval sys := $(outbase)$(syssuff))
[183]1273$(eval TARGET_$(target) := $(sys))
[145]1274
1275# source -> object
1276$(eval $(def_target_sources))
1277
1278# sysmod linking
1279$(eval tool := $(call _TARGET_TOOL,$(target),LD))
[146]1280$(eval outbase := $(call _TARGET_BASE,$(target),$(target)))
[111]1281$(eval objs = $(_OBJS_$(target)))
[83]1282$(eval flags :=\
1283 $(TOOL_$(tool)_LDFLAGS)\
[221]1284 $(TOOL_$(tool)_LDFLAGS.$(bld_type))\
1285 $(TOOL_$(tool)_LDFLAGS.$(bld_trg))\
1286 $(TOOL_$(tool)_LDFLAGS.$(bld_trg_arch))\
1287 $(TOOL_$(tool)_LDFLAGS.$(bld_trg_cpu))\
[83]1288 $(LDFLAGS)\
[221]1289 $(LDFLAGS.$(bld_type))\
1290 $(LDFLAGS.$(bld_trg))\
1291 $(LDFLAGS.$(bld_trg_arch))\
1292 $(LDFLAGS.$(bld_trg_cpu))\
[83]1293 $($(target)_LDFLAGS)\
[221]1294 $($(target)_LDFLAGS.$(bld_type))\
1295 $($(target)_LDFLAGS.$(bld_trg))\
1296 $($(target)_LDFLAGS.$(bld_trg_arch))\
1297 $($(target)_LDFLAGS.$(bld_trg_cpu))\
[83]1298)
1299$(eval libs :=\
[221]1300 $($(target)_LIBS.$(bld_trg_cpu))\
1301 $($(target)_LIBS.$(bld_trg_arch))\
1302 $($(target)_LIBS.$(bld_trg))\
1303 $($(target)_LIBS.$(bld_type))\
[83]1304 $($(target)_LIBS)\
[221]1305 $(foreach sdk, $($(target)_SDKS.$(bld_trg)) \
1306 $($(target)_SDKS.$(bld_type)) \
[122]1307 $($(target)_SDKS),\
[221]1308 $(SDK_$(sdk)_LIBS.$(bld_trg_cpu))\
1309 $(SDK_$(sdk)_LIBS.$(bld_trg_arch))\
1310 $(SDK_$(sdk)_LIBS.$(bld_trg))\
1311 $(SDK_$(sdk)_LIBS.$(bld_type))\
[122]1312 $(SDK_$(sdk)_LIBS))\
[221]1313 $(LIBS.$(bld_trg_cpu))\
1314 $(LIBS.$(bld_trg_arch))\
1315 $(LIBS.$(bld_trg))\
1316 $(LIBS.$(bld_type))\
[83]1317 $(LIBS)\
[221]1318 $(foreach sdk, $(SDKS.$(bld_trg)) \
1319 $(SDKS.$(bld_type)) \
[122]1320 $(SDKS),\
[221]1321 $(SDK_$(sdk)_LIBS.$(bld_trg_cpu))\
1322 $(SDK_$(sdk)_LIBS.$(bld_trg_arch))\
1323 $(SDK_$(sdk)_LIBS.$(bld_trg))\
1324 $(SDK_$(sdk)_LIBS.$(bld_type))\
[122]1325 $(SDK_$(sdk)_LIBS))\
[221]1326 $(TOOL_$(tool)_LIBS.$(bld_trg_cpu))\
1327 $(TOOL_$(tool)_LIBS.$(bld_trg_arch))\
1328 $(TOOL_$(tool)_LIBS.$(bld_trg))\
1329 $(TOOL_$(tool)_LIBS.$(bld_type))\
[83]1330 $(TOOL_$(tool)_LIBS)\
1331)
1332$(eval libpath :=\
[221]1333 $($(target)_LIBPATH.$(bld_trg_cpu))\
1334 $($(target)_LIBPATH.$(bld_trg_arch))\
1335 $($(target)_LIBPATH.$(bld_trg))\
1336 $($(target)_LIBPATH.$(bld_type))\
[83]1337 $($(target)_LIBPATH)\
[221]1338 $(foreach sdk, $($(target)_SDKS.$(bld_trg)) \
1339 $($(target)_SDKS.$(bld_type)) \
[122]1340 $($(target)_SDKS),\
[221]1341 $(SDK_$(sdk)_LIBPATH.$(bld_trg_cpu))\
1342 $(SDK_$(sdk)_LIBPATH.$(bld_trg_arch))\
1343 $(SDK_$(sdk)_LIBPATH.$(bld_trg))\
1344 $(SDK_$(sdk)_LIBPATH.$(bld_type))\
[122]1345 $(SDK_$(sdk)_LIBPATH))\
[221]1346 $(LIBPATH.$(bld_trg_cpu))\
1347 $(LIBPATH.$(bld_trg_arch))\
1348 $(LIBPATH.$(bld_trg))\
1349 $(LIBPATH.$(bld_type))\
[83]1350 $(LIBPATH)\
[221]1351 $(foreach sdk, $(SDKS.$(bld_trg)) \
1352 $(SDKS.$(bld_type)) \
[122]1353 $(SDKS),\
[221]1354 $(SDK_$(sdk)_LIBPATH.$(bld_trg_cpu))\
1355 $(SDK_$(sdk)_LIBPATH.$(bld_trg_arch))\
1356 $(SDK_$(sdk)_LIBPATH.$(bld_trg))\
1357 $(SDK_$(sdk)_LIBPATH.$(bld_type))\
[122]1358 $(SDK_$(sdk)_LIBPATH))\
[221]1359 $(TOOL_$(tool)_LIBPATH.$(bld_trg_cpu))\
1360 $(TOOL_$(tool)_LIBPATH.$(bld_trg_arch))\
1361 $(TOOL_$(tool)_LIBPATH.$(bld_trg))\
1362 $(TOOL_$(tool)_LIBPATH.$(bld_type))\
[83]1363 $(TOOL_$(tool)_LIBPATH)\
1364)
1365$(eval dirdep := $(dir $(sys)).dir_created)
1366## @todo fix dependencies
[184]1367$(eval deps := $($(target)_DEPS))
[83]1368#
1369$(eval custom_pre := $(strip $(firstword
[221]1370 $($(target)_CUSTOM_PRE.$(bld_trg).$(bld_type))\
1371 $($(target)_CUSTOM_PRE.$(bld_trg))\
1372 $($(target)_CUSTOM_PRE.$(bld_type))\
[83]1373 $($(target)_CUSTOM_PRE)\
[221]1374 $(CUSTOM_PRE.$(bld_trg).$(bld_type))\
1375 $(CUSTOM_PRE.$(bld_trg))\
1376 $(CUSTOM_PRE.$(bld_type))\
[83]1377 $(CUSTOM_PRE)\
1378)))
1379$(eval custom_post := $(strip $(firstword
[221]1380 $($(target)_CUSTOM_POST.$(bld_trg).$(bld_type))\
1381 $($(target)_CUSTOM_POST.$(bld_trg))\
1382 $($(target)_CUSTOM_POST.$(bld_type))\
[83]1383 $($(target)_CUSTOM_POST)\
[221]1384 $(CUSTOM_POST.$(bld_trg).$(bld_type))\
1385 $(CUSTOM_POST.$(bld_trg))\
1386 $(CUSTOM_POST.$(bld_type))\
[83]1387 $(CUSTOM_POST)\
1388)))
[221]1389$(eval othersrc := $(filter-out %.c %.cpp %.cxx %.cc %.s %.S %.asm,$($(target)_SOURCES) $($(target)_SOURCES.$(bld_trg)) $($(target)_SOURCES.$(bld_type))))
[72]1390
[106]1391ifndef TOOL_$(tool)_LINK_SYSMOD
1392$$(warning kBuild: TOOL_$(tool)_LINK_SYSMOD is not defined. target=$(target) )
1393$$(warning kBuild: tools: \
[221]1394 1 $($(target)_$(source)TOOL.$(bld_trg)) \
[106]1395 2 $($(target)_$(source)TOOL) \
[221]1396 3 $($(target)_TOOL.$(bld_trg)) \
[106]1397 4 $($(target)_TOOL) \
1398 5 $($(source)TOOL) \
[221]1399 6 $($(source)TOOL.$(bld_trg)) \
1400 7 $(TOOL.$(bld_trg)) \
[106]1401 8 $(TOOL) )
[183]1402endif
[106]1403
[83]1404$(eval $(TOOL_$(tool)_LINK_SYSMOD))
1405
[130]1406# publish rule (still need work)
[131]1407ifndef $(target)_NOINST
1408$(eval pubsys := $(PATH_BIN)/$(notdir $(sys)))
1409$(pubsys): $(sys) $(dir $(pubsys)).dir_created
[246]1410 $(RM) -f $(pubsys)
[130]1411 $(CP) $(sys) $(pubsys)
[183]1412
[131]1413$(eval _SYSMODS += $(pubsys))
1414$(eval _OUT_FILES += $(sys) $(pubsys))
[250]1415_DIRS += $(dir $(pubsys))
[130]1416else
[131]1417$(eval _SYSMODS += $(sys))
1418$(eval _OUT_FILES += $(sys))
[130]1419endif
1420_OBJS += $(_OBJS_$(target))
[83]1421endef
1422
[130]1423# Process sysmods
[138]1424$(foreach target, $(SYSMODS) $(SYSMODS.$(BUILD_TARGET)), $(eval $(def_sysmod)))
[83]1425
1426
1427
[72]1428#
1429# OTHERS
1430#
[190]1431_OTHERS = $(OTHERS) $(OTHERS.$(BUILD_TARGET))
[72]1432
1433
1434
1435#
1436# DOCS
1437#
1438
1439
1440#
1441# Directories.
1442#
[130]1443_DIRFILES := $(sort $(addsuffix /.dir_created,$(_DIRS)) $(addsuffix .dir_created,$(sort $(dir $(_OUT_FILES) $(_OBJS)))))
[72]1444
1445define def_createdir
1446$(dirfile):
[219]1447 $(call MSG_L1,Creating directory $$(@D))
[72]1448 $(MKDIR) -p $$(@D)
[73]1449 @echo dir_created > $$@
[72]1450endef
1451
1452$(foreach dirfile,$(_DIRFILES),$(eval $(def_createdir)))
1453
[183]1454
[72]1455#
[75]1456# Include dependency files.
[72]1457#
[75]1458$(foreach dep,$(wildcard $(_DEPFILES)),$(eval include $(dep)))
[72]1459
[183]1460
[75]1461#
1462# PASSES (including directory and makefile walking)
1463#
1464# Do all the default passes if it's unspecified.
[72]1465
[222]1466#PASSES ?= bldprogs libraries binaries others publish
1467PASSES ?= bldprogs libraries dlls binaries others
[98]1468
[221]1469## @todo figure out a generic way of configuring how pass works!
1470
[75]1471## Proritized list of the default makefile when walking subdirectories.
1472# The user can overload this list.
1473DEFAULT_MAKEFILE ?= Makefile.kmk makefile.kmk Makefile makefile
[72]1474
[75]1475## Subdir
1476# @param $(pass) Lowercase pass name.
1477# @param $(PASS) Uppercase pass name.
1478# @param $(subdir) Subdirectory
1479# @param $(tag) tag to attach to the rule name.
1480define def_pass_subdir
[219]1481pass_$(pass)$(tag):: $(dep)
1482 + $(QUIET)$$(MAKE) -C $(subdir) -f $$(notdir $$(firstword $$(wildcard $$(addprefix $(subdir)/,$$(DEFAULT_MAKEFILE))))) pass_$(pass)
[75]1483endef
[72]1484
[75]1485## Submakefile
1486# @param $(pass) Lowercase pass name.
1487# @param $(PASS) Uppercase pass name.
1488# @param $(makefile) Makefile.
1489# @param $(tag) tag to attach to the rule name.
1490define def_pass_makefile
[219]1491pass_$(pass)$(tag):: $(dep)
1492 + $(QUIET)$$(MAKE) -C $(patsubst %/,%,$(dir $(makefile))) -f $(notdir $(makefile)) pass_$(pass)
[75]1493endef
[73]1494
[74]1495
[75]1496## Execute a pass.
1497# @param $(pass) Lowercase pass name.
1498# @param $(PASS) Uppercase pass name.
1499define def_pass
[183]1500$(eval SUBDIRS_$(PASS) ?= $(SUBDIRS) $(SUBDIRS.$(BUILD_TARGET)))
1501$(eval SUBDIRS_AFTER_$(PASS) ?= $(SUBDIRS_AFTER) $(SUBDIRS_AFTER.$(BUILD_TARGET)))
1502$(eval MAKEFILES_BEFORE_$(PASS) ?= $(MAKEFILES_BEFORE) $(MAKEFILES_BEFORE.$(BUILD_TARGET)))
1503$(eval MAKEFILES_AFTER_$(PASS) ?= $(MAKEFILES_AFTER) $(MAKEFILES_AFTER.$(BUILD_TARGET)))
[75]1504
1505$(eval tag:=_before)
[219]1506$(eval dep:=)
[183]1507$(foreach subdir,$(SUBDIRS_$(PASS)) $(SUBDIRS_$(PASS).$(BUILD_TARGET)) ,$(eval $(def_pass_subdir)))
1508$(foreach makefile,$(MAKEFILES_BEFORE_$(PASS)) $(MAKEFILES_BEFORE_$(PASS).$(BUILD_TARGET)),$(eval $(def_pass_makefile)))
[75]1509
1510$(eval tag:=_after)
[219]1511$(eval dep:=pass_$(pass)_doit)
[183]1512$(foreach subdir,$(SUBDIRS_AFTER_$(PASS)) $(SUBDIRS_AFTER_$(PASS).$(BUILD_TARGET)) ,$(eval $(def_pass_subdir)))
1513$(foreach makefile,$(MAKEFILES_AFTER_$(PASS)) $(MAKEFILES_AFTER_$(PASS).$(BUILD_TARGET)) ,$(eval $(def_pass_makefile)))
[75]1514
1515.NOTPARALLEL: pass_$(pass)_before pass_$(pass)_after
1516.PHONY: pass_$(pass) pass_$(pass)_before pass_$(pass)_doit pass_$(pass)_after
[220]1517pass_$(pass)_this: pass_$(pass)_before
1518 + $(QUIET)$$(MAKE) -f $$(MAKEFILE) pass_$(pass)_doit
1519pass_$(pass)_after:: pass_$(pass)_this
[219]1520pass_$(pass): pass_$(pass)_after
[75]1521
[183]1522endef
1523
1524
[222]1525## PASS: bldprogs
[75]1526# This pass builds targets which are required for building the rest.
[222]1527pass_bldprogs_doit: $(_BLDPROGS)
1528pass := bldprogs
1529PASS := BLDPROGS
[75]1530$(eval $(def_pass))
1531
1532## PASS: libraries
1533# This pass builds library targets.
1534pass_libraries_doit: $(_LIBS) $(_IMPORT_LIBS) $(_OTHER_LIBRARIES)
1535pass := libraries
1536PASS := LIBRARIES
1537$(eval $(def_pass))
1538
1539## PASS: binaries
[189]1540# This pass builds dll targets.
1541pass_dlls_doit: $(_DLLS) $(_OTHER_DLLS)
1542pass := dlls
1543PASS := DLLS
1544$(eval $(def_pass))
1545
1546## PASS: binaries
1547# This pass builds binary targets, i.e. programs, system modules and stuff.
[219]1548pass_binaries_doit: $(_PROGRAMS) $(_SYSMODS) $(_OTHER_BINARIES)
[75]1549pass := binaries
1550PASS := BINARIES
1551$(eval $(def_pass))
1552
1553## PASS: others
[83]1554# This pass builds other targets.
[75]1555pass_others_doit: $(_OTHERS)
1556pass := others
1557PASS := OTHERS
1558$(eval $(def_pass))
1559
1560## PASS: publish
1561# This pass installs the built entities to a sandbox area.
1562pass_publish_doit: publish
1563publish::
1564pass := publish
1565PASS := PUBLISH
[76]1566# $(sort).. not nice.
[183]1567SUBDIRS_PUBLISH ?= $(sort $(SUBDIRS) $(SUBDIRS.$(BUILD_TARGET)) $(SUBDIRS_LIBRARIES) $(SUBDIRS_LIBRARIES.$(BUILD_TARGET)) $(SUBDIRS_BINARIES) $(SUBDIRS_BINARIES.$(BUILD_TARGET)) $(SUBDIRS_OTHERS) $(SUBDIRS_OTHERS.$(BUILD_TARGET)))
1568SUBDIRS_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)))
1569MAKEFILES_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)))
1570MAKEFILES_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]1571$(eval $(def_pass))
1572
1573## PASS: packing
1574# This pass processes custom packing rules.
1575pass_packing_doit: packing
1576packing::
1577pass := packing
1578PASS := PACKING
1579$(eval $(def_pass))
1580
1581## PASS: clean
1582# This pass removes all generated files.
1583pass_clean_doit:
[136]1584 $(RM) -f $(_OUT_FILES) $(_OBJS) $(_DEPFILES) $(_DIRFILES) $(OTHER_CLEAN)
[75]1585pass := clean
1586PASS := CLEAN
1587$(eval $(def_pass))
1588clean: pass_clean
[183]1589
[75]1590## PASS: nothing
1591# This pass just walks the tree.
1592pass_nothing_doit:
[219]1593 $(call MSG_L1,Did nothing in $(CURDIR))
[75]1594pass := nothing
1595PASS := NOTHING
1596$(eval $(def_pass))
1597nothing: pass_nothing
1598
[78]1599
[219]1600## Pass order
1601# @param $(pass) Current pass name.
1602# @param $(prev_pass) The previous pass name.
1603define def_pass_order
1604pass_$(pass)_order: $(pass_prev)
1605 $(call MSG_L1,Pass $(pass))
1606 + $(QUIET)$$(MAKE) -f $$(MAKEFILE) pass_$(pass)
1607.NOTPARALLEL: pass_$(pass)_order
1608$(eval pass_prev := pass_$(pass)_order)
1609endef
[183]1610
[219]1611## PASS: order
1612# Use dependencies to ensure correct pass order.
1613pass_prev :=
1614$(foreach pass,$(PASSES),$(eval $(def_pass_order)))
1615
1616
[75]1617#
1618# THE MAIN RULES
1619#
[219]1620all_recursive: $(pass_prev)
[75]1621
[130]1622rebuild: clean
[219]1623 + $(MAKE) -f $(firstword $(MAKEFILE_LIST)) all_recursive
[78]1624
1625
[75]1626# misc shortcuts.
[222]1627target: bldprogs libraries binaries others
[75]1628objects: $(_OBJS)
[222]1629bldprogs: $(_BLDPROGS)
[189]1630libraries: $(_LIBS) $(_IMPORT_LIBS) $(_OTHER_LIBRARIES)
[205]1631dlls: $(_DLLS)
[219]1632programs: $(_PROGRAMS)
[205]1633sysmods: $(_SYSMODS)
[75]1634
1635
[72]1636# end-of-file-content
[106]1637__footer_kmk__ := target
[72]1638endif # __footer_kmk__
Note: See TracBrowser for help on using the repository browser.