source: trunk/kBuild/footer.kmk@ 274

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

Fixed bustage. ifdef's aren't good enough in defines.

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