source: trunk/kBuild/footer-pass1.kmk@ 3406

Last change on this file since 3406 was 3300, checked in by bird, 6 years ago

footer-pass1.kmk: Corrected build program no-install default. Was ignoring new properties for controlling installation.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 14.7 KB
RevLine 
[72]1# $Id: footer-pass1.kmk 3300 2019-10-25 14:54:11Z bird $
2## @file
[2521]3# kBuild - Footer - Target lists - Pass 1.
[72]4#
[2521]5# This pass is for defining variables that might be referenced in
6# properties of other targets.
7#
[1547]8
9#
[3121]10# Copyright (c) 2004-2017 knut st. osmundsen <bird-kBuild-spam-xviiv@anduin.net>
[72]11#
12# This file is part of kBuild.
13#
14# kBuild is free software; you can redistribute it and/or modify
15# it under the terms of the GNU General Public License as published by
[106]16# the Free Software Foundation; either version source of the License, or
[72]17# (at your option) any later version.
18#
19# kBuild is distributed in the hope that it will be useful,
20# but WITHOUT ANY WARRANTY; without even the implied warranty of
21# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22# GNU General Public License for more details.
23#
24# You should have received a copy of the GNU General Public License
25# along with kBuild; if not, write to the Free Software
[353]26# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
[72]27#
28#
[1547]29# As a special exception you are granted permission to include this file, via
[1599]30# the kmk include directive, as you wish without this in itself causing the
31# resulting makefile, program or whatever to be covered by the GPL license.
[1547]32# This exception does not however invalidate any other reasons why the makefile,
33# program, whatever should not be covered the GPL.
34#
35#
[72]36
37
[828]38# Don't do anything for fetch targets (yet).
39
40##
41# Link prolog for Pass 1.
42#
43# @param $(target) Normalized target name.
44# @param $(EXT) EXE,DLL,SYS,LIB.
45# @param $(EXTPRE) HOST or nothing.
46# @param $(definst) The default _INST value.
47# @param $(tool_prefix) LD or AR.
48# @param $(bld_trg_base_var) TARGET or PLATFORM.
49define def_pass1_link_common
50
[1504]51local bld_type := $(firstword $($(target)_BLD_TYPE) $(KBUILD_TYPE))
[1496]52local bld_trg := $(firstword $($(target)_BLD_TRG) $(BUILD_$(bld_trg_base_var)))
53local bld_trg_arch:= $(firstword $($(target)_BLD_TRG_ARCH) $(BUILD_$(bld_trg_base_var)_ARCH))
54local bld_trg_cpu := $(firstword $($(target)_BLD_TRG_CPU) $(BUILD_$(bld_trg_base_var)_CPU))
[828]55
[1496]56local tool := $(call _TARGET_TOOL,$(target),$(tool_prefix))
57local name := $(firstword\
[2433]58 $($(target)_NAME.$(bld_trg).$(bld_trg_arch).$(bld_type))\
[889]59 $($(target)_NAME.$(bld_trg).$(bld_trg_arch))\
[2433]60 $($(target)_NAME.$(bld_trg).$(bld_type))\
[889]61 $($(target)_NAME.$(bld_trg_arch))\
62 $($(target)_NAME.$(bld_trg))\
63 $($(target)_NAME.$(bld_type))\
64 $($(target)_NAME)\
65 $(target))
[1496]66local outbase := $(call TARGET_BASE,$(name),$(target))
[2239]67$(target)_0_OUTDIR:= $(patsubst %/,%,$(dir $(outbase)))
[2436]68$(call KB_FN_ASSIGN_DEPRECATED,PATH_$(target),$($(target)_0_OUTDIR), $(target)_0_OUTDIR)
69
[2143]70## @todo fix the fun at the last line (AR != LIB => mess).
71local suff := $(firstword \
[828]72 $($(target)_$(EXT)SUFF.$(bld_trg).$(bld_trg_arch))\
73 $($(target)_$(EXT)SUFF.$(bld_trg))\
74 $($(target)_$(EXT)SUFF)\
75 $(TOOL_$(tool)_$(tool_prefix)$(EXT)SUFF.$(bld_trg).$(bld_trg_arch))\
76 $(TOOL_$(tool)_$(tool_prefix)$(EXT)SUFF.$(bld_trg))\
77 $(TOOL_$(tool)_$(tool_prefix)$(EXT)SUFF)\
[2143]78 $(if $(eq $(tool_prefix),AR),$(SUFF_LIB),$($(EXTPRE)SUFF_$(EXT))) )
[1496]79local out := $(outbase)$(suff)
[828]80
[2475]81# Object directory target variable.
[2238]82$(target)_1_TARGET := $(out)
[2436]83$(call KB_FN_ASSIGN_DEPRECATED,TARGET_$(target),$($(target)_1_TARGET), $(target)_1_TARGET)
[828]84
[2475]85# Staging and install directory target variables.
86local insttype := $(firstword \
[2523]87 $($(target)_INSTTYPE.$(bld_trg).$(bld_trg_arch).$(bld_type)) \
[2475]88 $($(target)_INSTTYPE.$(bld_trg).$(bld_trg_arch)) \
[2523]89 $($(target)_INSTTYPE.$(bld_trg).$(bld_type)) \
[2475]90 $($(target)_INSTTYPE.$(bld_trg_arch)) \
91 $($(target)_INSTTYPE.$(bld_trg_cpu)) \
[2523]92 $($(target)_INSTTYPE.$(bld_trg)) \
[2475]93 $($(target)_INSTTYPE.$(bld_type)) \
[2523]94 $($(target)_INSTTYPE) \
[2475]95 )
96ifeq ($(insttype),)
97 ifneq ($(firstword \
98 $($(target)_NOINST) \
99 $($(target)_NOINST.$(bld_trg)) \
100 $($(target)_NOINST.$(bld_trg).$(bld_trg_arch)) \
101 $($(target)_NOINST.$(bld_trg).$(bld_trg_arch).$(bld_type)) \
102 $($(target)_NOINST.$(bld_trg_arch)) \
103 $($(target)_NOINST.$(bld_trg_cpu)) \
104 $($(target)_NOINST.$(bld_type)) ),)
105 local insttype := none
[1697]106 else
[2475]107 local insttype := both
[1697]108 endif
[2475]109endif
110$(target)_1_INSTTYPE := $(insttype)
[828]111
[2764]112local inst := $(strip $(firstdefined \
[2488]113 $(target)_INST.$(bld_trg).$(bld_trg_arch).$(bld_type) \
114 $(target)_INST.$(bld_trg).$(bld_trg_arch) \
115 $(target)_INST.$(bld_trg).$(bld_type) \
116 $(target)_INST.$(bld_trg_arch) \
[2523]117 $(target)_INST.$(bld_trg_cpu) \
[2488]118 $(target)_INST.$(bld_trg) \
119 $(target)_INST.$(bld_type) \
120 $(target)_INST \
[2517]121 definst \
122 ,value))
[2764]123local stage := $(strip $(firstdefined \
[2523]124 $(target)_STAGE.$(bld_trg).$(bld_trg_arch).$(bld_type) \
125 $(target)_STAGE.$(bld_trg).$(bld_trg_arch) \
126 $(target)_STAGE.$(bld_trg).$(bld_type) \
127 $(target)_STAGE.$(bld_trg_arch) \
128 $(target)_STAGE.$(bld_trg_cpu) \
129 $(target)_STAGE.$(bld_trg) \
130 $(target)_STAGE.$(bld_type) \
131 $(target)_STAGE \
132 inst \
133 ,value))
[2764]134if1of ($(insttype), stage both)
[2475]135 $(target)_1_STAGE := $(stage)
[2511]136 if "$(substr $(stage),-1,1)" == "/" # Multicast support requires addprefix/suffix.
[2510]137 $(target)_1_STAGE_TARGET := $(addprefix $(PATH_STAGE)/,$(addsuffix $(notdir $(out)),$(stage)))
[2511]138 else if "$(stage)" == ""
139 $(target)_1_STAGE_TARGET := $(PATH_STAGE)/$(notdir $(out))
[2510]140 else
141 $(target)_1_STAGE_TARGET := $(addprefix $(PATH_STAGE)/,$(stage))
142 endif
[2764]143else if1of ($(insttype), none)
[2475]144 $(target)_1_STAGE :=
145 $(target)_1_STAGE_TARGET :=
[2764]146else
147 $(error kBuild: Unknown value '$(insttype)' for '$(target)_INSTTYPE'. Valid values are 'none', 'both' and 'stage'.)
[2475]148endif
149INSTARGET_$(target) := $($(target)_1_STAGE_TARGET)
[828]150
[2475]151if1of ($(insttype), both)
152 $(target)_1_INST := $(inst)
[2511]153 if "$(substr $(inst),-1,1)" == "/" # Multicast support requires addprefix/suffix.
[2510]154 $(target)_1_INST_TARGET := $(addprefix $(PATH_INS)/,$(addsuffix $(notdir $(out)),$(inst)))
[2511]155 else if "$(inst)" == ""
156 $(target)_1_INST_TARGET := $(PATH_INS)/$(notdir $(out))
[2510]157 else
158 $(target)_1_INST_TARGET := $(addprefix $(PATH_INS)/,$(inst))
159 endif
[2475]160else
161 $(target)_1_INST :=
162 $(target)_1_INST_TARGET :=
163endif
164
[2523]165# Debug info related stuff.
166local debug_insttype := $(firstword \
167 $($(target)_DEBUG_INSTTYPE.$(bld_trg).$(bld_trg_arch).$(bld_type)) \
168 $($(target)_DEBUG_INSTTYPE.$(bld_trg).$(bld_trg_arch)) \
169 $($(target)_DEBUG_INSTTYPE.$(bld_trg).$(bld_type)) \
170 $($(target)_DEBUG_INSTTYPE.$(bld_trg_arch)) \
171 $($(target)_DEBUG_INSTTYPE.$(bld_trg_cpu)) \
172 $($(target)_DEBUG_INSTTYPE.$(bld_trg)) \
173 $($(target)_DEBUG_INSTTYPE.$(bld_type)) \
174 $($(target)_DEBUG_INSTTYPE) \
175 $(insttype) )
176$(target)_1_DEBUG_INSTTYPE := $(debug_insttype)
177
178if1of ($(debug_insttype), stage both)
179 local debug_stage := $(firstdefined \
180 $(target)_DEBUG_STAGE.$(bld_trg).$(bld_trg_arch).$(bld_type) \
181 $(target)_DEBUG_STAGE.$(bld_trg).$(bld_trg_arch) \
182 $(target)_DEBUG_STAGE.$(bld_trg).$(bld_type) \
183 $(target)_DEBUG_STAGE.$(bld_trg_arch) \
184 $(target)_DEBUG_STAGE.$(bld_trg_cpu) \
185 $(target)_DEBUG_STAGE.$(bld_trg) \
186 $(target)_DEBUG_STAGE.$(bld_type) \
187 $(target)_DEBUG_STAGE \
188 $(target)_DEBUG_INST.$(bld_trg).$(bld_trg_arch).$(bld_type) \
189 $(target)_DEBUG_INST.$(bld_trg).$(bld_trg_arch) \
190 $(target)_DEBUG_INST.$(bld_trg).$(bld_type) \
191 $(target)_DEBUG_INST.$(bld_trg_arch) \
192 $(target)_DEBUG_INST.$(bld_trg_cpu) \
193 $(target)_DEBUG_INST.$(bld_trg) \
194 $(target)_DEBUG_INST.$(bld_type) \
195 $(target)_DEBUG_INST)
196 ifneq ($(debug_stage),)
197 $(target)_1_DEBUG_STAGE := $($(debug_stage))
198 else
199 $(target)_1_DEBUG_STAGE := $(addprefix $(STAGE_DEBUG),$(stage))
200 endif
201 ifndef $(target)_1_DEBUG_STAGE
202 $(target)_1_DEBUG_STAGE := ./
203 endif
[2764]204else if1of ($(debug_insttype), none)
205 $(target)_1_DEBUG_STAGE :=
[2523]206else
[2764]207 $(error kBuild: Unknown value '$(debug_insttype)' for '$(target)_DEBUG_INSTTYPE'. Valid values are 'none', 'both' and 'stage'.)
[2523]208endif
209
210if1of ($(debug_insttype), both)
211 local debug_inst := $(firstdefined \
212 $(target)_DEBUG_INST.$(bld_trg).$(bld_trg_arch).$(bld_type) \
213 $(target)_DEBUG_INST.$(bld_trg).$(bld_trg_arch) \
214 $(target)_DEBUG_INST.$(bld_trg).$(bld_type) \
215 $(target)_DEBUG_INST.$(bld_trg_arch) \
216 $(target)_DEBUG_INST.$(bld_trg_cpu) \
217 $(target)_DEBUG_INST.$(bld_trg) \
218 $(target)_DEBUG_INST.$(bld_type) \
219 $(target)_DEBUG_INST)
220 ifneq ($(debug_inst),)
221 $(target)_1_DEBUG_INST := $($(debug_inst))
222 else
223 $(target)_1_DEBUG_INST := $(addprefix $(INST_DEBUG),$(inst))
224 endif
225 ifndef $(target)_1_DEBUG_INST
226 $(target)_1_DEBUG_INST := ./
227 endif
228else
229 $(target)_1_DEBUG_INST :=
230endif
231#$(warning $(NLTAB)$(target)_1_DEBUG_INST=$($(target)_1_DEBUG_INST)$(NLTAB)$(target)_1_DEBUG_STAGE=$($(target)_1_DEBUG_STAGE)$(NLTAB)insttype=$(insttype)$(NLTAB)debug_insttype=$(debug_insttype))
232
[2475]233endef # def_pass1_link_common
[1936]234$(eval-opt-var def_pass1_link_common)
[828]235
236
237#
238# BLDPROGS (Pass 1)
239#
240define def_pass1_bldprog
241# set NOINST if not forced installation before doing the usual stuff.
[3300]242ifndef $(target)_INSTTYPE
243 ifndef $(target)_INST
244 ifndef $(target)_STAGE
[2475]245$(target)_INSTTYPE := none
[3300]246 endif
247 endif
[828]248endif
[2762]249$(evalvalctx def_pass1_link_common)
[828]250endef
251
252EXT := EXE
253EXTPRE := HOST
[2475]254definst := $(INST_BIN)
[828]255tool_prefix := LD
256bld_trg_base_var := PLATFORM
[1648]257$(foreach target, $(_ALL_BLDPROGS), \
[2762]258 $(evalvalctx def_pass1_bldprog))
[828]259
260
261#
262# LIBRARIES (Pass 1)
263#
264EXT := LIB
265EXTPRE :=
[2475]266definst := $(INST_LIB)
[828]267tool_prefix := AR
268bld_trg_base_var := TARGET
[1648]269$(foreach target, $(_ALL_LIBRARIES), \
[2762]270 $(evalvalctx def_pass1_link_common))
[828]271
272
273#
274# DLLS (Pass 1)
275#
276EXT := DLL
277EXTPRE :=
[2475]278definst := $(INST_DLL)
[828]279tool_prefix := LD
280bld_trg_base_var := TARGET
[1648]281$(foreach target, $(_ALL_DLLS), \
[2762]282 $(evalvalctx def_pass1_link_common))
[828]283
284
285#
286# IMPORT LIBRARIES (Pass 1)
287#
288# - On OS/2 and windows these are libraries.
289# - On other platforms they are fake DLLs.
290#
[1504]291if1of ($(KBUILD_TARGET), nt os2 win win64 win32)
[828]292 EXT := LIB
293 EXTPRE :=
[2475]294 definst := $(INST_LIB)
[828]295 tool_prefix := AR
296 bld_trg_base_var := TARGET
[1648]297 $(foreach target, $(_ALL_IMPORT_LIBS), \
[2762]298 $(evalvalctx def_pass1_link_common))
[828]299else
300 EXT := DLL
301 EXTPRE :=
[2475]302 definst := $(INST_DLL)
[828]303 tool_prefix := LD
304 bld_trg_base_var := TARGET
[1648]305 $(foreach target, $(_ALL_IMPORT_LIBS), \
[2762]306 $(evalvalctx def_pass1_link_common))
[828]307endif
308
309
310#
311# PROGRAMS (Pass 1)
312#
313EXT := EXE
314EXTPRE :=
[2475]315definst := $(INST_BIN)
[828]316tool_prefix := LD
317bld_trg_base_var := TARGET
[1648]318$(foreach target, $(_ALL_PROGRAMS), \
[2762]319 $(evalvalctx def_pass1_link_common))
[828]320
321
322#
323# SYSMODS (Pass 1)
324#
325EXT := SYS
326EXTPRE :=
[2475]327definst := $(INST_SYS)
[828]328tool_prefix := LD
329bld_trg_base_var := TARGET
[1648]330$(foreach target, $(_ALL_SYSMODS), \
[2762]331 $(evalvalctx def_pass1_link_common))
[828]332
333
334#
[2084]335# MISCBINS (Pass 1)
336#
337EXT := BIN
338EXTPRE :=
[2475]339definst := $(INST_BIN)
[2084]340tool_prefix := LD
341bld_trg_base_var := TARGET
342$(foreach target, $(_ALL_MISCBINS), \
[2762]343 $(evalvalctx def_pass1_link_common))
[2084]344
345
346#
[828]347# INSTALLS (Pass 1)
348# Note! INSTARGET_* for INSTALLS aren't available until later.
349#
350define def_pass1_install
[2241]351local bld_type := $(firstword $($(target)_BLD_TYPE) $(KBUILD_TYPE))
352local bld_trg := $(firstword $($(target)_BLD_TRG) $(KBUILD_TARGET))
353local bld_trg_arch := $(firstword $($(target)_BLD_TRG_ARCH) $(KBUILD_TARGET_ARCH))
354local bld_trg_cpu := $(firstword $($(target)_BLD_TRG_CPU) $(KBUILD_TARGET_CPU))
[2475]355# _1_TARGET
[2241]356$(target)_1_TARGET := $(PATH_TARGET)/$(target).ins
[2436]357$(call KB_FN_ASSIGN_DEPRECATED,TARGET_$(target),$($(target)_1_TARGET), $(target)_1_TARGET)
[2238]358
[2475]359# Determine and set 1_INSTTYPE.
360local insttype := $(firstword \
[2523]361 $($(target)_INSTTYPE.$(bld_trg).$(bld_trg_arch).$(bld_type)) \
[2475]362 $($(target)_INSTTYPE.$(bld_trg).$(bld_trg_arch)) \
[2523]363 $($(target)_INSTTYPE.$(bld_trg).$(bld_type)) \
[2475]364 $($(target)_INSTTYPE.$(bld_trg_arch)) \
365 $($(target)_INSTTYPE.$(bld_trg_cpu)) \
[2523]366 $($(target)_INSTTYPE.$(bld_trg)) \
[2475]367 $($(target)_INSTTYPE.$(bld_type)) \
[2523]368 $($(target)_INSTTYPE) \
[2475]369 )
370ifeq ($(insttype),)
371 ifneq ($(firstword \
372 $($(target)_NOINST) \
373 $($(target)_NOINST.$(bld_trg)) \
374 $($(target)_NOINST.$(bld_trg).$(bld_trg_arch)) \
375 $($(target)_NOINST.$(bld_trg).$(bld_trg_arch).$(bld_type)) \
376 $($(target)_NOINST.$(bld_trg_arch)) \
377 $($(target)_NOINST.$(bld_trg_cpu)) \
378 $($(target)_NOINST.$(bld_type)) ),)
379 local insttype := none
380 else
381 local insttype := both
382 endif
383endif
384ifn1of ($(insttype), none both stage)
385 $(error kBuild: Unknown value '$(insttype)' for '$(target)_INSTTYPE'. Valid values are 'none', 'both' and 'stage'.)
386endif
387$(target)_1_INSTTYPE := $(insttype)
388
389# Determine the actual INST and STAGE sub-dirs to use for this target.
390if1of ($(insttype), stage both)
[2517]391 local stage := $(strip $(firstdefined \
[2488]392 $(target)_STAGE.$(bld_trg).$(bld_trg_arch).$(bld_type) \
[2523]393 $(target)_STAGE.$(bld_trg).$(bld_trg_arch) \
394 $(target)_STAGE.$(bld_trg).$(bld_type) \
395 $(target)_STAGE.$(bld_trg_arch) \
396 $(target)_STAGE.$(bld_trg_cpu) \
397 $(target)_STAGE.$(bld_trg) \
398 $(target)_STAGE.$(bld_type) \
399 $(target)_STAGE \
[2488]400 $(target)_INST.$(bld_trg).$(bld_trg_arch).$(bld_type) \
401 $(target)_INST.$(bld_trg).$(bld_trg_arch) \
402 $(target)_INST.$(bld_trg).$(bld_type) \
403 $(target)_INST.$(bld_trg_arch) \
[2523]404 $(target)_INST.$(bld_trg_cpu) \
[2488]405 $(target)_INST.$(bld_trg) \
406 $(target)_INST.$(bld_type) \
407 $(target)_INST \
[2517]408 definst \
409 ,value))
[2488]410 if $(words $(stage)) > 1
411 $(warning kBuild: The STAGE/INST property of install '$(target)' specifies multiple location, that is not supported.)
412 local stage := $(word 1, $(stage))
413 endif
[2475]414 $(target)_1_STAGE := $(stage)
415else
416 $(target)_1_STAGE = $(error _1_STAGE not used)
417endif
418
419if1of ($(insttype), both)
[2517]420 local inst := $(strip $(firstdefined \
[2488]421 $(target)_INST.$(bld_trg).$(bld_trg_arch).$(bld_type) \
422 $(target)_INST.$(bld_trg).$(bld_trg_arch) \
423 $(target)_INST.$(bld_trg).$(bld_type) \
424 $(target)_INST.$(bld_trg_arch) \
[2523]425 $(target)_INST.$(bld_trg_cpu) \
[2488]426 $(target)_INST.$(bld_trg) \
427 $(target)_INST.$(bld_type) \
428 $(target)_INST \
[2517]429 definst \
430 ,value))
[2488]431 if $(words $(inst)) > 1
432 $(warning kBuild: The INST property of install '$(target)' specifies multiple location, that is not supported.)
433 local inst := $(word 1, $(inst))
434 endif
[2517]435 ifneq ($(root $(stage)),)
[2518]436 $(error kBuild: The effective INST property of install '$(target)' should not start with a root specification)
[2517]437 endif
[2475]438 $(target)_1_INST := $(inst)
439else
440 $(target)_1_INST = $(error _1_INST not used)
441endif
442
443# Block properties that we put off setting until pass 2 for INSTALLS.
444$(target)_1_STAGE_TARGET = $(error The '_1_STAGE_TARGET' property is not present on install targets. Use '_2_STAGE_TARGETS' instead (set by pass 2!).)
445$(target)_1_INST_TARGET = $(error The '_1_INST_TARGET' property is not present on install targets. Use '_2_INST_TARGETS' instead (set by pass 2!).)
446INSTARGET_$(target) = $(error The 'INSTARGET_' is deprecated and besides, it is being accessed to early. Consider '_2_STAGE_TARGETS' or '_2_INST_TARGETS'.)
447
[828]448# INSTARGET_ later.
[1754]449# PATH_*
[2241]450local outbase := $(call TARGET_BASE,$(target),$(target))
451$(target)_0_OUTDIR := $(patsubst %/,%,$(dir $(outbase)))
[2436]452$(call KB_FN_ASSIGN_DEPRECATED,PATH_$(target),$($(target)_0_OUTDIR), $(target)_0_OUTDIR)
[1754]453endef # def_pass1_install
[1936]454$(eval-opt-var def_pass1_install)
[2475]455
[1648]456$(foreach target, $(_ALL_INSTALLS), \
[2762]457 $(evalvalctx def_pass1_install))
[828]458
[988]459ifdef KBUILD_PROFILE_SELF
[2008]460 $(evalcall def_profile_self, done pass 1)
[988]461endif
[828]462
463
Note: See TracBrowser for help on using the repository browser.