source: trunk/kBuild/header.kmk@ 979

Last change on this file since 979 was 978, checked in by bird, 18 years ago

We can drop all the hacks required to make it work with GNU make 3.81 since we no longer need this for bootstrapping. Also drop feature tests for kmk features present in the current code.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 25.7 KB
Line 
1# $Id: header.kmk 978 2007-05-27 18:58:51Z bird $
2## @file
3#
4# kBuild - File included at top of a makefile.
5#
6# Copyright (c) 2004-2007 knut st. osmundsen <bird-kBuild-spam@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 2 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 330, Boston, MA 02111-1307 USA
24#
25#
26
27ifndef __header_kmk__
28# start-of-file-content
29
30
31#
32# Check make version before we do anything else.
33#
34ifndef KMK_VERSION
35 $(error kBuild: The kmk default variable KMK_VERSION isn't defined! Make sure you are using 'kmk' and not 'make', 'gmake', 'kmk_gmake', 'dmake' or any other make program.)
36endif
37ifneq ($(KBUILD_VERSION_MAJOR).$(KBUILD_VERSION_MINOR),0.1)
38 ifneq ($(KBUILD_VERSION_MAJOR),0)
39 $(warning kBuild: kmk major version mismatch, expected '0' found '$(KBUILD_VERSION_MAJOR)'!)
40 else
41 $(warning kBuild: kmk minor version mismatch, expected '1' found '$(KBUILD_VERSION_MINOR)'!)
42 endif
43endif
44
45#
46# The revision in which this file was last modified.
47# This can be useful when using development versions of kBuild.
48#
49KMK_REVISION := $(patsubst %:,, $Rev: 978 $ )
50
51
52#
53# Define the default goal.
54#
55all: all_recursive
56
57#
58# The phony FORCE target.
59#
60FORCE:
61
62
63#
64# Enable delete on error and second expansion of prerequisites.
65#
66.DELETE_ON_ERROR:
67
68.SECONDEXPANSION:
69
70
71#
72# General purpose macros.
73#
74
75##
76# Newline character(s).
77define NL
78
79
80endef
81
82##
83# Tab character.
84TAB := $(subst ., ,.)
85
86##
87# Newline + tab characters (for generating commands).
88NLTAB = $(NL)$(TAB)
89
90##
91# Space character.
92SP := $(subst ., ,.)
93
94##
95# Hash character.
96define HASH
97#
98endef
99
100##
101# Colon character.
102COLON := :
103
104##
105# Semicolon character.
106SEMICOLON := ;
107
108##
109# Comma character.
110COMMA := ,
111
112##
113# Dot character.
114DOT := .
115
116##
117# Dollar character.
118DOLLAR := $$
119
120##
121# Equal character.
122EQUAL := =
123
124
125#
126# The OSes and Architectures that kBuild recognizes.
127#
128# When kBuild is ported to a new OS or architecture a unique keyword needs
129# to be assigned to it and added here. This strictness is required because
130# this keyword namespace is shared between OSes, architectures, cpus and
131# build types.
132#
133KBUILD_OSES = darwin freebsd l4 linux netbsd nt openbsd os2 solaris win
134KBUILD_ARCHES = x86 amd64 sparc32 sparc64 mips32 mips64 ppc32 ppc64
135
136
137#
138# Set default build type.
139#
140ifndef BUILD_TYPE
141 BUILD_TYPE := release
142else
143 ifneq ($(filter $(BUILD_TYPE),$(KBUILD_OSES) $(KBUILD_ARCHES)),)
144 $(error kBuild: The BUILD_TYPE value '$(BUILD_TYPE)' is an OS or architecture!)
145 endif
146 ifneq (.$(words $(BUILD_TYPE)).$(BUILD_TYPE).,.1.$(strip $(BUILD_TYPE)).)
147 $(error kBuild: The BUILD_TYPE value '$(BUILD_TYPE)' contains spaces/tabs!)
148 endif
149endif
150
151
152#
153# Assert valid build platform variables.
154#
155# All these are set by kmk so they shouldn't be any trouble
156# unless the user starts messing about with environment variables.
157#
158ifneq (.$(words $(BUILD_PLATFORM)).$(BUILD_PLATFORM).,.1.$(strip $(BUILD_PLATFORM)).)
159 $(error kBuild: The BUILD_PLATFORM value '$(BUILD_PLATFORM)' contains spaces/tabs!)
160endif
161ifneq ($(words $(filter $(BUILD_PLATFORM),$(KBUILD_OSES))),1)
162 $(error kBuild: BUILD_PLATFORM value '$(BUILD_PLATFORM)' is not recognized (valid: $(KBUILD_OSES)))
163endif
164
165ifneq (.$(BUILD_PLATFORM_ARCH).,.$(strip $(BUILD_PLATFORM_ARCH)).)
166 $(error kBuild: The BUILD_PLATFORM_ARCH value '$(BUILD_PLATFORM_ARCH)' contains spaces/tabs!)
167endif
168ifneq ($(words $(filter $(BUILD_PLATFORM_ARCH),$(KBUILD_ARCHES))),1)
169 $(error kBuild: BUILD_PLATFORM_ARCH value '$(BUILD_PLATFORM_ARCH)' is not recognized (valid: $(KBUILD_ARCHES)))
170endif
171
172ifeq ($(strip $(BUILD_PLATFORM_CPU)),)
173 $(error kBuild: The BUILD_PLATFORM_CPU value is missing (should be set by kmk)!)
174endif
175ifneq (.$(words $(BUILD_PLATFORM_CPU)).$(BUILD_PLATFORM_CPU).,.1.$(strip $(BUILD_PLATFORM_CPU)).)
176 $(error kBuild: The BUILD_PLATFORM_CPU value '$(BUILD_PLATFORM_CPU)' contains spaces/tabs!)
177endif
178ifneq ($(filter $(BUILD_PLATFORM_CPU), $(KBUILD_OSES) $(BUILD_ARCHES)),)
179 $(error kBuild: The BUILD_PLATFORM_CPU value '$(BUILD_PLATFORM_CPU)' was found in the OS or architecture keywords!)
180endif
181ifeq ($(BUILD_PLATFORM_CPU),$(BUILD_TYPE))
182 $(error kBuild: The BUILD_PLATFORM_CPU value '$(BUILD_PLATFORM_CPU)' is the same as the BUILD_TYPE!)
183endif
184
185
186#
187# Assert or set default target platform.
188# When not defined use the corresponding BUILD_PLATFORM value.
189#
190ifndef BUILD_TARGET
191 BUILD_TARGET := $(BUILD_PLATFORM)
192else
193 ifneq (.$(words $(BUILD_TARGET)).$(BUILD_TARGET).,.$(strip $(BUILD_TARGET)).)
194 $(error kBuild: The BUILD_TARGET value '$(BUILD_TARGET)' contains spaces/tabs!)
195 endif
196 ifneq ($(words $(filter $(BUILD_TARGET),$(KBUILD_OSES))),1)
197 $(error kBuild: BUILD_TARGET value '$(BUILD_TARGET)' is not recognized (valid: $(KBUILD_OSES)))
198 endif
199endif
200
201ifndef BUILD_TARGET_ARCH
202 BUILD_TARGET_ARCH := $(BUILD_PLATFORM_ARCH)
203else
204 ifneq (.$(BUILD_TARGET_ARCH).,.$(strip $(BUILD_TARGET_ARCH)).)
205 $(error kBuild: The BUILD_TARGET_ARCH value '$(BUILD_TARGET_ARCH)' contains spaces/tabs!)
206 endif
207 ifneq ($(words $(filter $(BUILD_TARGET_ARCH),$(KBUILD_ARCHES))),1)
208 $(error kBuild: BUILD_TARGET_ARCH value '$(BUILD_TARGET_ARCH)' is not recognized (valid: $(KBUILD_ARCHES)))
209 endif
210endif
211
212ifndef BUILD_TARGET_CPU
213 BUILD_TARGET_CPU := $(BUILD_PLATFORM_CPU)
214else
215 ifeq ($(strip $(BUILD_TARGET_CPU)),)
216 $(error kBuild: The BUILD_TARGET_CPU value is missing (should be set by kmk)!)
217 endif
218 ifneq (.$(words $(BUILD_TARGET_CPU)).$(BUILD_TARGET_CPU).,.1.$(strip $(BUILD_TARGET_CPU)).)
219 $(error kBuild: The BUILD_TARGET_CPU value '$(BUILD_TARGET_CPU)' contains spaces/tabs!)
220 endif
221 ifneq ($(filter $(BUILD_TARGET_CPU), $(KBUILD_OSES) $(BUILD_ARCHES)),)
222 $(error kBuild: The BUILD_TARGET_CPU value was found in the OS or architecture keywords!)
223 endif
224 ifeq ($(BUILD_TARGET_CPU),$(BUILD_TYPE))
225 $(error kBuild: The BUILD_TARGET_CPU value '$(BUILD_TARGET_CPU)' is the same as the BUILD_TYPE!)
226 endif
227endif
228
229
230#
231# Paths and stuff.
232#
233
234# Adjust DEPTH first.
235DEPTH := $(strip $(DEPTH))
236ifeq ($(DEPTH),)
237 DEPTH := .
238endif
239
240## PATH_CURRENT is the current directory (getcwd).
241PATH_CURRENT := $(abspath $(CURDIR))
242## PATH_SUB_CURRENT points to current directory of the current makefile.
243# Meaning that it will change value as we enter and exit sub-makefiles.
244PATH_SUB_CURRENT := $(PATH_CURRENT)
245## PATH_ROOT points to the project root directory.
246PATH_ROOT := $(abspath $(PATH_CURRENT)/$(DEPTH))
247## PATH_SUB_ROOT points to the directory of the top-level makefile.
248ifneq ($(strip $(SUB_DEPTH)),)
249 SUB_DEPTH := $(strip $(SUB_DEPTH))
250 PATH_SUB_ROOT := $(abspath $(PATH_CURRENT)/$(SUB_DEPTH))
251else
252 PATH_SUB_ROOT := $(PATH_CURRENT)
253endif
254
255## CURSUBDIR is PATH_SUB_ROOT described relative to PATH_ROOT.
256# This variable is used to determin where the object files and other output goes.
257ifneq ($(PATH_ROOT),$(PATH_CURRENT))
258CURSUBDIR := $(patsubst $(PATH_ROOT)/%,%,$(PATH_SUB_ROOT))
259else
260CURSUBDIR := .
261endif
262
263# Output directories.
264ifndef PATH_OUT_BASE
265 PATH_OUT_BASE := $(PATH_ROOT)/out
266endif
267ifndef PATH_OUT
268 ifdef BUILD_TARGET_SUB # (BUILD_TARGET_SUB is not currently recognized by kBuild in any other places.)
269 PATH_OUT := $(PATH_OUT_BASE)/$(BUILD_TARGET).$(BUILD_TARGET_ARCH).$(BUILD_TARGET_SUB)/$(BUILD_TYPE)
270 else
271 PATH_OUT := $(PATH_OUT_BASE)/$(BUILD_TARGET).$(BUILD_TARGET_ARCH)/$(BUILD_TYPE)
272 endif
273endif # !define PATH_OUT
274PATH_OBJ = $(PATH_OUT)/obj
275PATH_TARGET = $(PATH_OBJ)/$(CURSUBDIR)
276PATH_INS = $(PATH_OUT)
277PATH_BIN = $(PATH_INS)/bin
278PATH_DLL = $(PATH_INS)/bin
279PATH_SYS = $(PATH_INS)/bin
280PATH_LIB = $(PATH_INS)/lib
281PATH_DOC = $(PATH_INS)/doc
282
283# PATH_KBUILD is determined by kmk.
284ifeq ($(strip $(PATH_KBUILD)),)
285 $(error kBuild: PATH_KBUILD is missing or empty! kmk is supposed to set it.)
286endif
287# PATH_KBUILD_BIN is determined by kmk.
288ifeq ($(strip $(PATH_KBUILD_BIN)),)
289 $(error kBuild: PATH_KBUILD_BIN is missing or empty! kmk is supposed to set it.)
290endif
291
292# kBuild files which might be of interest.
293FILE_KBUILD_HEADER := $(PATH_KBUILD)/header.kmk
294#FILE_KBUILD_CONFIG := $(PATH_KBUILD)/config.kmk
295FILE_KBUILD_FOOTER := $(PATH_KBUILD)/footer.kmk
296
297## MAKEFILE is the name of the main makefile.
298MAKEFILE := $(firstword $(MAKEFILE_LIST))
299## MAKEFILE_CURRENT is the name of the current makefile.
300# This is updated everything a sub-makefile is included.
301MAKEFILE_CURRENT := $(MAKEFILE)
302
303
304#
305# Build platform setup.
306#
307# OS/2
308ifeq ($(BUILD_PLATFORM),os2)
309EXEC_X86_WIN32 := innopec.exe
310HOSTSUFF_EXE := .exe
311endif
312
313# Linux
314ifeq ($(BUILD_PLATFORM),linux)
315EXEC_X86_WIN32 := wine
316HOSTSUFF_EXE :=
317endif
318
319# Win, Win32, Win64, NT.
320ifeq ($(filter-out win32 win64 win nt,$(BUILD_PLATFORM)),)
321EXEC_X86_WIN32 :=
322HOSTSUFF_EXE := .exe
323endif
324
325# FreeBSD
326ifeq ($(BUILD_PLATFORM),freebsd)
327EXEC_X86_WIN32 := wine
328HOSTSUFF_EXE :=
329endif
330
331# Darwin / Mac OS X
332ifeq ($(BUILD_PLATFORM),darwin)
333EXEC_X86_WIN32 := false
334HOSTSUFF_EXE :=
335endif
336
337# Solaris
338ifeq ($(BUILD_PLATFORM),solaris)
339EXEC_X86_WIN32 := false
340HOSTSUFF_EXE :=
341endif
342
343
344#
345# Build target setup.
346#
347SUFF_DEP := .dep
348ifeq ($(filter-out win32 win64 win nt os2,$(BUILD_TARGET)),)
349SUFF_OBJ := .obj
350SUFF_LIB := .lib
351SUFF_DLL := .dll
352SUFF_EXE := .exe
353SUFF_SYS := .sys
354SUFF_RES := .res
355endif
356ifeq ($(BUILD_TARGET),l4)
357SUFF_OBJ := .o
358SUFF_LIB := .a
359SUFF_DLL := .s.so
360SUFF_EXE :=
361SUFF_SYS := .a
362SUFF_RES :=
363endif
364ifeq ($(BUILD_TARGET),darwin)
365SUFF_OBJ := .o
366SUFF_LIB := .a
367SUFF_DLL := .dylib
368SUFF_EXE :=
369SUFF_SYS :=
370SUFF_RES :=
371endif
372ifndef SUFF_OBJ
373SUFF_OBJ := .o
374SUFF_LIB := .a
375SUFF_DLL := .so
376SUFF_EXE :=
377SUFF_SYS := .a
378SUFF_RES :=
379endif
380
381#
382# Standard kBuild tools.
383#
384ifeq ($(KMK),kmk)
385KMK := $(PATH_KBUILD_BIN)/kmk$(HOSTSUFF_EXE)
386endif
387MAKE := $(KMK)
388
389DEP_EXT := $(PATH_KBUILD_BIN)/kDep$(HOSTSUFF_EXE)
390ifeq ($(filter kDep,$(KMK_BUILTIN)),kDep)
391DEP := kmk_builtin_kDep
392else
393DEP := $(DEP_EXT)
394endif
395
396DEP_IDB_EXT := $(PATH_KBUILD_BIN)/kDepIDB$(HOSTSUFF_EXE)
397ifeq ($(filter kDepPre,$(KMK_BUILTIN)),kDepIDB)
398DEP_IDB := $(if kmk_builtin_kDepIDB
399else
400DEP_IDB := $(DEP_IDB_EXT)
401endif
402
403DEP_PRE_EXT := $(PATH_KBUILD_BIN)/kDepPre$(HOSTSUFF_EXE)
404ifeq ($(filter kDepPre,$(KMK_BUILTIN)),kDepPre)
405DEP_PRE := $(if kmk_builtin_kDepPre
406else
407DEP_PRE := $(DEP_PRE_EXT)
408endif
409
410APPEND_EXT := $(PATH_KBUILD_BIN)/kmk_append$(HOSTSUFF_EXE)
411APPEND := kmk_builtin_append
412
413CAT_EXT := $(PATH_KBUILD_BIN)/kmk_cat$(HOSTSUFF_EXE)
414CAT := kmk_builtin_cat
415
416CP_EXT := $(PATH_KBUILD_BIN)/kmk_cp$(HOSTSUFF_EXE)
417CP := kmk_builtin_cp
418
419ECHO_EXT := $(PATH_KBUILD_BIN)/kmk_echo$(HOSTSUFF_EXE)
420ECHO := kmk_builtin_echo
421
422INSTALL_EXT := $(PATH_KBUILD_BIN)/kmk_install$(HOSTSUFF_EXE)
423INSTALL := kmk_builtin_install
424
425LN_EXT := $(PATH_KBUILD_BIN)/kmk_ln$(HOSTSUFF_EXE)
426LN := kmk_builtin_ln
427
428MKDIR_EXT := $(PATH_KBUILD_BIN)/kmk_mkdir$(HOSTSUFF_EXE)
429MKDIR := kmk_builtin_mkdir
430
431MV_EXT := $(PATH_KBUILD_BIN)/kmk_mv$(HOSTSUFF_EXE)
432MV := kmk_builtin_mv
433
434PRINTF_EXT := $(PATH_KBUILD_BIN)/kmk_printf$(HOSTSUFF_EXE)
435PRINTF := kmk_builtin_printf
436
437RM_EXT := $(PATH_KBUILD_BIN)/kmk_rm$(HOSTSUFF_EXE)
438RM := kmk_builtin_rm
439
440RMDIR_EXT := $(PATH_KBUILD_BIN)/kmk_rmdir$(HOSTSUFF_EXE)
441RMDIR := kmk_builtin_rmdir
442
443SED_EXT := $(PATH_KBUILD_BIN)/kmk_sed$(HOSTSUFF_EXE)
444ifeq ($(filter sed,$(KMK_BUILTIN)),sed)
445SED_INT := kmk_builtin_sed
446else
447SED_INT := $(SED_EXT)
448endif
449SED := $(SED_EXT)
450
451# Our default shell is the Almquist shell from *BSD.
452ASH := $(PATH_KBUILD_BIN)/kmk_ash$(HOSTSUFF_EXE)
453MAKESHELL := $(ASH)
454SHELL := $(ASH)
455export SHELL MAKESHELL
456
457# Symlinking is problematic on some platforms...
458LN_SYMLINK := $(LN) -s
459
460
461#
462# Some Functions.
463# The lower cased ones are either fallbacks or candidates for functions.c.
464#
465
466## ABSPATH - make paths absolute.
467# This implementation is clumsy and doesn't resolve '..' and '.' components.
468#
469# @param $1 The paths to make absolute.
470# @obsolete Use the GNU make function $(abspath) directly now.
471ABSPATH = $(abspath $(1))
472
473## DIRDEP - make create directory dependencies.
474#
475# @param $1 The paths to the directories which must be created.
476DIRDEP = $(foreach path,$(patsubst %/,%,$(1)),$(path)/)
477
478## Cygwin kludge.
479# This converts /cygdrive/x/% to x:%.
480#
481# @param $1 The paths to make native.
482# @remark This macro is pretty much obsolete since we don't use cygwin base make.
483ifneq ($(patsubst /cygdrive/%,%,$(CURDIR)),$(CURDIR))
484 CYGPATHMIXED = $(foreach path,$(1)\
485 ,$(if $(patsubst /cygdrive/%,,$(path)),$(path),$(patsubst $(strip $(firstword $(subst /, ,$(patsubst /cygdrive/%,%,$(path)))))/%,$(strip $(firstword $(subst /, ,$(patsubst /cygdrive/%,%,$(path))))):/%,$(patsubst /cygdrive/%,%,$(path)))))
486else
487 CYGPATHMIXED = $(1)
488endif
489
490## Removes the drive letter from a path (if it has one)
491# @param $1 the path
492no-drive = $(word $(words $(subst :, ,$(1))),$(subst :, ,$(1)))
493
494## Removes the root slash from a path (if it has one)
495# @param $1 the path
496no-root-slash = $(patsubst /%,%,$(1))
497
498## Figure out where to put object files.
499# @param $1 real target name.
500# @param $2 normalized main target
501TARGET_BASE = $(PATH_TARGET)/$(2)/$(call no-root-slash,$(call no-drive,$(1)))
502
503## Figure out where to put object files.
504# @param $1 normalized main target
505TARGET_PATH = $(PATH_TARGET)/$(1)
506
507
508#
509# Initialize some of the globals which the Config.kmk and
510# others can add stuff to if they like for processing in the footer.
511#
512
513## ALL_TARGET
514# This is the list of all targets.
515ALL_TARGETS :=
516
517## TEMPLATE_PATHS
518# List a paths (separated by space) where templates can be found.
519TEMPLATE_PATHS :=
520
521## TOOL_PATHS
522# List of paths (separated by space) where tools can be found.
523TOOL_PATHS :=
524
525## SDK_PATHS
526# List of paths (separated by space) where SDKs can be found.
527SDK_PATHS :=
528
529## Proritized list of the default makefile when walking subdirectories.
530# The user can overload this list.
531DEFAULT_MAKEFILE := Makefile.kmk makefile.kmk Makefile makefile
532
533## PROPS_TOOLS
534# This is a subset of the other PROPS
535PROPS_TOOLS := TOOL CTOOL CXXTOOL ASTOOL RCTOOL ARTOOL LDTOOL FETCHTOOL UNPACKTOOL PATCHTOOL
536
537## PROPS_SINGLE
538# The list of non-accumulative target properties.
539# A Config.kmk file can add it's own properties to this list and kBuild
540# will do the necessary inheritance from templates to targets.
541PROPS_SINGLE := $(PROPS_TOOLS) INST NOINST BLD_TYPE BLD_TRG BLD_TRG_ARCH BLD_TRG_CPU FETCHDIR \
542 OBJSUFF COBJSUFF CXXOBJSUFF ASOBJSUFF RCOBJSUFF SYSSUFF EXESUFF DLLSUFF LIBSUFF ARLIBSUFF
543
544## PROPS_DEFERRED
545# This list of non-accumulative target properties which are or may be
546# functions, and thus should not be expanded until the very last moment.
547PROPS_DEFERRED := INSTFUN INSTALLER PRE_CMDS POST_CMDS NAME
548
549## PROPS_ACCUMULATE_R
550# The list of accumulative target properties where the right most value/flag
551# is the 'most significant'.
552# A Config.kmk file can add it's own properties to this list and kBuild
553# will do the necessary inheritance from templates to targets.
554PROPS_ACCUMULATE_R := \
555 DEFS DEPS ORDERDEPS \
556 CFLAGS CDEFS \
557 CXXFLAGS CXXDEFS \
558 ASFLAGS ASDEFS \
559 RCFLAGS RCDEFS \
560 LDFLAGS \
561 IDFLAGS IFDLAGS ISFLAGS \
562 FETCHFLAGS UNPACKFLAGS PATCHFLAGS
563
564## PROPS_ACCUMULATE
565# The list of accumulative target properties where the left most value/flag
566# is the 'most significant'.
567# A Config.kmk file can add it's own properties to this list and kBuild
568# will do the necessary inheritance from templates to targets.
569PROPS_ACCUMULATE_L := \
570 SDKS SOURCES \
571 INCS CINCS CXXINCX ASINCS RCINCS \
572 LIBS LIBPATH \
573 DIRS BLDDIRS \
574 CLEAN
575
576## PROPS_ALL
577# List of all the properties.
578PROPS_ALL = $(PROPS_SINGLE) $(PROPS_DEFERRED) $(PROPS_ACCUMULATE_L) $(PROPS_ACCUMULATE_R)
579
580
581#
582# Here is a special 'hack' to prevent innocent environment variables being
583# picked up and treated as properties. (The most annoying example of why
584# this is necessary is the Visual C++ commandline with it's LIBPATH.)
585#
586# Define KBUILD_DONT_KILL_ENV_PROPS in the env. or on the commandline to
587# disable this 'hack'.
588#
589ifndef KBUILD_DONT_KILL_ENV_PROPS
590
591define def_nuke_environment_prop
592ifeq ($(origin $(prop)),environment)
593$(prop) =
594endif
595endef
596$(foreach prop, $(PROPS_ALL) \
597 FETCHES PATCHES BLDPROGS LIBRARIES IMPORT_LIBS DLLS PROGRAMS SYSMODS INSTALLS OTHERS \
598 SUBDIRS MAKEFILES BLDDIRS \
599 ,$(eval $(value def_nuke_environment_prop)))
600
601endif # KBUILD_DONT_KILL_ENV_PROPS
602
603
604#
605# Pass configuration.
606#
607# The PASS_<passname>_trgs variable is listing the targets.
608# The PASS_<passname>_vars variable is listing the target variables.
609# The PASS_<passname>_pass variable is the lowercased passname.
610#
611
612## PASS: fetches
613# This pass fetches and unpacks things needed to complete the build.
614PASS_FETCHES := Fetches
615PASS_FETCHES_trgs :=
616PASS_FETCHES_vars := _FETCHES
617PASS_FETCHES_pass := fetches
618
619## PASS: patches
620# This pass applies patches.
621PASS_PATCHES := Patches
622PASS_PATCHES_trgs :=
623PASS_PATCHES_vars := _PATCHES
624PASS_PATCHES_pass := patches
625
626## PASS: bldprogs
627# This pass builds targets which are required for building the rest.
628PASS_BLDPROGS := Build Programs
629PASS_BLDPROGS_trgs :=
630PASS_BLDPROGS_vars := _BLDPROGS
631PASS_BLDPROGS_pass := bldprogs
632
633## PASS: libraries
634# This pass builds library targets.
635PASS_LIBRARIES := Libraries
636PASS_LIBRARIES_trgs :=
637PASS_LIBRARIES_vars := _LIBS _IMPORT_LIBS _OTHER_LIBRARIES
638PASS_LIBRARIES_pass := libraries
639
640## PASS: binaries
641# This pass builds dll targets.
642PASS_DLLS := DLLs
643PASS_DLLS_trgs :=
644PASS_DLLS_vars := _DLLS _OTHER_DLLS
645PASS_DLLS_pass := dlls
646
647## PASS: binaries
648# This pass builds binary targets, i.e. programs, system modules and stuff.
649PASS_BINARIES := Programs
650PASS_BINARIES_trgs :=
651PASS_BINARIES_vars := _PROGRAMS _SYSMODS _OTHER_BINARIES
652PASS_BINARIES_pass := binaries
653
654## PASS: others
655# This pass builds other targets.
656PASS_OTHERS := Other Stuff
657PASS_OTHERS_trgs :=
658PASS_OTHERS_vars := _OTHERS
659PASS_OTHERS_pass := others
660
661## PASS: install
662# This pass installs the built entities to a sandbox area.
663PASS_INSTALLS := Install
664PASS_INSTALLS_trgs :=
665PASS_INSTALLS_vars := _INSTALLS_DIRS _INSTALLS _INSTALLS_FILES
666PASS_INSTALLS_pass := installs
667
668## PASS: packing
669# This pass processes custom packing rules.
670PASS_PACKING := Packing
671PASS_PACKING_trgs :=
672PASS_PACKING_vars := _PACKING
673PASS_PACKING_pass := packing
674#alias
675packing: pass_packing
676
677## PASS: clean
678# This pass removes all generated files.
679PASS_CLEAN := Clean
680PASS_CLEAN_trgs := do-clean
681PASS_CLEAN_vars :=
682PASS_CLEAN_pass := clean
683# alias
684clean: pass_clean
685
686## PASS: nothing
687# This pass just walks the tree.
688PASS_NOTHING := Nothing
689PASS_NOTHING_trgs := do-nothing
690PASS_NOTHING_vars :=
691PASS_NOTHING_pass := nothing
692# alias
693nothing: pass_nothing
694
695## DEFAULT_PASSES
696# The default passes and their order.
697DEFAULT_PASSES := BLDPROGS LIBRARIES DLLS BINARIES OTHERS INSTALLS
698
699## PASSES
700# The passes that should be defined. This must include
701# all passes mentioned by DEFAULT_PASSES.
702PASSES := FETCHES PATCHES $(DEFAULT_PASSES) NOTHING CLEAN
703
704
705#
706# This is how we find the closest config.kmk.
707# It's a little hacky but I think it works fine.
708#
709_CFGDIR := .
710_CFGFILES := ./Config.kmk ./config.kmk
711define def_include_config
712$(eval _CFGDIR := $(_CFGDIR)/$(dir))
713_CFGFILES += $(_CFGDIR)/Config.kmk $(_CFGDIR)/config.kmk
714endef
715# walk down the _RELATIVE_ path specified by DEPTH.
716$(foreach dir,$(subst /, ,$(DEPTH)), $(eval $(def_include_config)) )
717# add the default config file.
718_CFGFILE := $(firstword $(wildcard $(_CFGFILES) $(FILE_KBUILD_CONFIG)))
719_CFGFILES :=
720_CFGDIR :=
721ifeq ($(_CFGFILE),)
722$(error kBuild: no Config.kmk file found! Check the DEPTH: DEPTH='$(DEPTH)' PATH_CURRENT='$(PATH_CURRENT)')
723endif
724
725
726#
727# Check for --pretty-command-printing before including the Config.kmk
728# so that anyone overriding the message macros can take the implied
729# verbosity level change into account.
730#
731ifndef KBUILD_VERBOSE
732 ifndef KBUILD_QUIET
733 ifneq ($(filter --pretty-command-printing,$(MAKEFLAGS)),)
734 export KBUILD_VERBOSE := 2
735 endif
736 endif
737endif
738
739
740# Include the config.kmk we found file (or the default one).
741include $(_CFGFILE)
742
743
744#
745# Finalize a the central path variables now that we've included the Config.kmk file.
746#
747# This prevents some trouble when users override the defaults for these
748# variables and uses relative paths or paths with incorrect case.
749#
750PATH_OUT := $(abspath $(PATH_OUT))
751PATH_OBJ := $(abspath $(PATH_OBJ))
752PATH_TARGET := $(abspath $(PATH_TARGET))
753PATH_INS := $(abspath $(PATH_INS))
754PATH_BIN := $(abspath $(PATH_BIN))
755PATH_DLL := $(abspath $(PATH_DLL))
756PATH_SYS := $(abspath $(PATH_SYS))
757PATH_LIB := $(abspath $(PATH_LIB))
758PATH_DOC := $(abspath $(PATH_DOC))
759
760
761#
762# Setup the message style. The default one is inlined.
763#
764# See kBuild/msgstyles for more styles or use KBUILD_MSG_STYLE_PATHS
765# to create your own message style.
766#
767KBUILD_MSG_STYLE ?= default
768ifeq ($(KBUILD_MSG_STYLE),default)
769 #
770 # The 'default' style.
771 #
772
773 ## Fetch starting.
774 # @param 1 Target name.
775 MSG_FETCH ?= $(call MSG_L1,Fetching $1...)
776 ## Re-fetch starting.
777 # @param 1 Target name.
778 MSG_REFETCH ?= $(call MSG_L1,Re-fetching $1...)
779 ## Downloading a fetch component.
780 # @param 1 Target name.
781 # @param 2 The source URL.
782 # @param 3 The destination file name.
783 MSG_FETCH_DL ?= $(call MSG_L1,Downloading $1 - $2,=> $3)
784 ## Checking a fetch component.
785 # @param 1 Target name.
786 # @param 2 The source URL.
787 # @param 3 The destination file name.
788 MSG_FETCH_CHK?= $(call MSG_L1,Checking $1 - $3, ($2))
789 ## Unpacking a fetch component.
790 # @param 1 Target name.
791 # @param 2 The archive file name.
792 # @param 3 The target directory.
793 MSG_FETCH_UP ?= $(call MSG_L1,Unpacking $1 - $2 => $3)
794 ## Fetch completed.
795 # @param 1 Target name.
796 MSG_FETCH_OK ?= $(call MSG_L1,Successfully fetched $1)
797 ## Unfetch a fetch target.
798 # @param 1 Target name.
799 MSG_UNFETCH ?= $(call MSG_L1,Unfetching $1...)
800 ## Compiling a source file.
801 # @param 1 Target name.
802 # @param 2 The source filename.
803 # @param 3 The primary link output file name.
804 # @param 4 The source type (CXX,C,AS,RC,++).
805 MSG_COMPILE ?= $(call MSG_L1,Compiling $1 - $2,=> $3)
806 ## Tool
807 # @param 1 The tool name (bin2c,...)
808 # @param 2 Target name.
809 # @param 3 The source filename.
810 # @param 4 The primary output file name.
811 MSG_TOOL ?= $(call MSG_L1,$1 $2 - $3,=> $4)
812 ## Generate a file, typically a source file.
813 # @param 1 Target name if applicable.
814 # @param 2 Output file name.
815 # @param 3 What it's generated from
816 MSG_GENERATE ?= $(call MSG_L1,Generating $(if $1,$1 - )$2,$(if $3,from $3))
817 ## Linking a bldprog/dll/program/sysmod target.
818 # @param 1 Target name.
819 # @param 2 The primary link output file name.
820 # @param 3 The link tool operation (LINK_LIBRARY,LINK_PROGRAM,LINK_DLL,LINK_SYSMOD,++).
821 MSG_LINK ?= $(call MSG_L1,Linking $1,=> $2)
822 ## Merging a library into the target (during library linking).
823 # @param 1 Target name.
824 # @param 2 The output library name.
825 # @param 3 The input library name.
826 MSG_AR_MERGE ?= $(call MSG_L1,Merging $3 into $1, ($2))
827 ## Creating a directory (build).
828 # @param 1 Directory name.
829 MSG_MKDIR ?= $(call MSG_L2,Creating directory $1)
830 ## Cleaning.
831 MSG_CLEAN ?= $(call MSG_L1,Cleaning...)
832 ## Nothing.
833 MSG_NOTHING ?= $(call MSG_L1,Did nothing in $(CURDIR))
834 ## Pass
835 # @param 1 The pass name.
836 MSG_PASS ?= $(call MSG_L1,Pass - $1)
837 ## Installing a bldprog/lib/dll/program/sysmod target.
838 # @param 1 Target name.
839 # @param 2 The source filename.
840 # @param 3 The destination file name.
841 MSG_INST_TRG ?= $(call MSG_L1,Installing $1 => $3)
842 ## Installing a file (install target).
843 # @param 1 The source filename.
844 # @param 2 The destination filename.
845 MSG_INST_FILE?= $(call MSG_L1,Installing $2,(<= $1))
846 ## Installing a symlink.
847 # @param 1 Symlink
848 # @param 2 Link target
849 MSG_INST_SYM ?= $(call MSG_L1,Installing symlink $1,=> $2)
850 ## Installing a directory.
851 # @param 1 Directory name.
852 MSG_INST_DIR ?= $(call MSG_L1,Installing directory $1)
853
854else
855 _KBUILD_MSG_STYLE_FILE := $(firstword $(foreach path, $(KBUILD_MSG_STYLE_PATHS) $(PATH_KBUILD)/msgstyles, $(wildcard $(path)/$(KBUILD_MSG_STYLE).kmk)))
856 ifneq ($(_KBUILD_MSG_STYLE_FILE),)
857 include $(_KBUILD_MSG_STYLE_FILE)
858 else
859 $(error kBuild: Can't find the style setup file for KBUILD_MSG_STYLE '$(KBUILD_MSG_STYLE)')
860 endif
861endif
862
863
864#
865# Message macros.
866#
867# This is done after including Config.kmk as to allow for
868# KBUILD_QUIET and KBUILD_VERBOSE to be configurable.
869#
870ifdef KBUILD_QUIET
871 # No output
872 QUIET := @
873 QUIET2:= @
874 MSG_L1 =
875 MSG_L2 =
876else
877 ifndef KBUILD_VERBOSE
878 # Default output level.
879 QUIET := @
880 QUIET2 := @
881 MSG_L1 ?= @$(ECHO) "kBuild: $1"
882 MSG_L2 =
883 else ifeq ($(KBUILD_VERBOSE),1)
884 # A bit more output
885 QUIET := @
886 QUIET2 := @
887 MSG_L1 ?= @$(ECHO) "kBuild: $1 $2"
888 MSG_L2 =
889 else ifeq ($(KBUILD_VERBOSE),2)
890 # Lot more output
891 QUIET :=
892 QUIET2 := @
893 MSG_L1 ?= @$(ECHO) "kBuild: $1 $2"
894 MSG_L2 ?= @$(ECHO) "kBuild: $1"
895 else
896 # maximal output.
897 QUIET :=
898 QUIET2 :=
899 MSG_L1 ?= @$(ECHO) "kBuild: $1 $2"
900 MSG_L2 ?= @$(ECHO) "kBuild: $1"
901 endif
902endif
903
904
905# end-of-file-content
906__header_kmk__ := 1
907endif # __header_kmk__
908
Note: See TracBrowser for help on using the repository browser.