3 # kBuild - File included at top of a makefile.
7 # Copyright (c) 2004-2008 knut st. osmundsen <bird-kBuild-spam@anduin.net>
9 # This file is part of kBuild.
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.
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.
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
26 # As a special exception you are granted permission to include this file, via
27 # the kmk include directive, as you wish without this in itself causing the
28 # resulting makefile, program or whatever to be covered by the GPL license.
29 # This exception does not however invalidate any other reasons why the makefile,
30 # program, whatever should not be covered the GPL.
35 # start-of-file-content
36 ifdef KBUILD_PROFILE_SELF
37 _KBUILD_TS_HEADER_START
:= $(nanots
) # just a dummy warm up query
38 $(info prof
: since start
- since previous
-- event description
)
39 ifeq ($(KBUILD_PROFILE_SELF
),2)
40 $(info stat
: $(make-stats
))
42 _KBUILD_TS_HEADER_START
:= $(nanots
)
43 _KBUILD_TS_PREV
:= $(_KBUILD_TS_HEADER_START
)
45 _KBUILD_FMT_ELAPSED_EX
= $(int-div
$(int-add
$(int-sub
$1, $2),500000),1000000)ms
46 _KBUILD_FMT_ELAPSED
= $(call _KBUILD_FMT_ELAPSED_EX
,$(_KBUILD_TS_NOW
),$1)
48 define def_profile_self
49 _KBUILD_TS_NOW
:= $(nanots
)
50 $(info prof
: $(call _KBUILD_FMT_ELAPSED
,$(_KBUILD_TS_HEADER_START
)) - $(call _KBUILD_FMT_ELAPSED
, $(_KBUILD_TS_PREV
)) -- $(strip $1))
51 ifeq ($(KBUILD_PROFILE_SELF
),2)
52 $(info stat
: $(make-stats
))
54 _KBUILD_TS_PREV
:= $(_KBUILD_TS_NOW
)
61 # Check make version before we do anything else.
64 $(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)
66 ifneq ($(KBUILD_VERSION_MAJOR).$(KBUILD_VERSION_MINOR),0.1)
67 ifneq ($(KBUILD_VERSION_MAJOR),0)
68 $(warning kBuild: kmk major version mismatch! Expected '0' but found '$(KBUILD_VERSION_MAJOR
)'!)
70 $(warning kBuild: kmk minor version mismatch! Expected '1' but found '$(KBUILD_VERSION_MINOR
)'!)
73 ifneq ($(int-ge $(KBUILD_VERSION_PATCH),4),1)
74 $(warning kBuild: kmk version mismatch! Expected 0.1.4 or later. Actual version is $(KBUILD_VERSION_MAJOR).$(KBUILD_VERSION_MINOR).$(KBUILD_VERSION_PATCH).)
79 # The revision in which this file was last modified.
80 # This can be useful when using development versions of kBuild.
82 KMK_REVISION := $(patsubst %:,, $Rev$ )
86 # Define the default goal.
88 .PHONY: all all_recursive
92 # The phony FORCE target.
99 # Enable delete on error and second expansion of prerequisites and targets.
105 .SECONDTARGETEXPANSION:
109 # General purpose macros.
113 # Newline character(s).
121 TAB := $(subst ., ,.)
124 # Newline + tab characters (for generating commands).
142 # Semicolon character.
163 # The list of standard build types in kBuild.
165 # This list can be extended in Config.kmk and it's possible to extend
166 # (inherit) another build type.
168 KBUILD_BLD_TYPES
:= release profile debug
172 # The OSes, Architectures and CPUs that kBuild recognizes.
174 # When kBuild is ported to a new OS or architecture a unique keyword needs
175 # to be assigned to it and added here. This strictness is required because
176 # this keyword namespace is shared between OSes, architectures, cpus and
177 # build types. (PORTME)
179 KBUILD_OSES
:= darwin dos dragonfly freebsd l4 linux netbsd nt openbsd os2 solaris win os-agnostic
180 KBUILD_ARCHES
:= x86 amd64 sparc32 sparc64 s390 s390x ppc32 ppc64 mips32 mips64 ia64 hppa32 hppa64 arm alpha
184 # Set default build type.
188 KBUILD_TYPE
:= $(BUILD_TYPE
)
190 else ifdef BUILD_TYPE
191 ifneq ($(KBUILD_TYPE
),$(BUILD_TYPE
))
192 ifeq ($(origin KBUILD_TYPE
):$(origin BUILD_TYPE
),environment
:command line
)
193 KBUILD_TYPE
:= $(BUILD_TYPE
)
194 else ifneq ($(origin KBUILD_TYPE
):$(origin BUILD_TYPE
),command line
:environment
)
195 $(error kBuild
: KBUILD_TYPE and BUILD_TYPE disagree.
)
199 override BUILD_TYPE
= $(KBUILD_TYPE
)
202 KBUILD_TYPE
:= release
204 if1of
($(KBUILD_TYPE
), $(KBUILD_OSES
) $(KBUILD_ARCHES
))
205 $(error kBuild
: The KBUILD_TYPE value
'$(KBUILD_TYPE)' is an OS or architecture
!)
207 ifneq (.
$(words $(KBUILD_TYPE
)).
$(KBUILD_TYPE
).
,.1.
$(strip $(KBUILD_TYPE
)).
)
208 $(error kBuild
: The KBUILD_TYPE value
'$(KBUILD_TYPE)' contains spaces
/tabs
!)
214 # Host platform legacy
215 # kmk deals with this, so this is only temporary until I've rebuilt everything.
218 KBUILD_HOST
:= $(BUILD_PLATFORM
)
220 ifndef KBUILD_HOST_ARCH
221 KBUILD_HOST_ARCH
:= $(BUILD_PLATFORM_ARCH
)
223 ifndef KBUILD_HOST_CPU
224 KBUILD_HOST_CPU
:= $(BUILD_PLATFORM_CPU
)
229 # Assert valid build platform variables.
231 # All these are set by kmk so they shouldn't be any trouble
232 # unless the user starts messing about with environment variables.
234 ifneq (.
$(words $(KBUILD_HOST
)).
$(KBUILD_HOST
).
,.1.
$(strip $(KBUILD_HOST
)).
)
235 $(error kBuild
: The KBUILD_HOST value
'$(KBUILD_HOST)' contains spaces
/tabs
!)
237 ifneq ($(words $(filter $(KBUILD_HOST
),$(KBUILD_OSES
))),1)
238 $(error kBuild
: KBUILD_HOST value
'$(KBUILD_HOST)' is not recognized
(valid
: $(KBUILD_OSES
)))
241 ifneq (.
$(words $(KBUILD_HOST_ARCH
)).
$(KBUILD_HOST_ARCH
).
,.1.
$(strip $(KBUILD_HOST_ARCH
)).
)
242 $(error kBuild
: The KBUILD_HOST_ARCH value
'$(KBUILD_HOST_ARCH)' contains spaces
/tabs
!)
244 ifneq ($(words $(filter $(KBUILD_HOST_ARCH
),$(KBUILD_ARCHES
))),1)
245 $(error kBuild
: KBUILD_HOST_ARCH value
'$(KBUILD_HOST_ARCH)' is not recognized
(valid
: $(KBUILD_ARCHES
)))
248 ifeq ($(strip $(KBUILD_HOST_CPU
)),)
249 KBUILD_HOST_CPU
:= blend
251 ifneq (.
$(words $(KBUILD_HOST_CPU
)).
$(KBUILD_HOST_CPU
).
,.1.
$(strip $(KBUILD_HOST_CPU
)).
)
252 $(error kBuild
: The KBUILD_HOST_CPU value
'$(KBUILD_HOST_CPU)' contains spaces
/tabs
!)
254 if1of
($(KBUILD_HOST_CPU
), $(KBUILD_OSES
) $(BUILD_ARCHES
))
255 $(error kBuild
: The KBUILD_HOST_CPU value
'$(KBUILD_HOST_CPU)' was found in the OS or architecture keywords
!)
257 ifeq ($(KBUILD_HOST_CPU
),$(KBUILD_TYPE
))
258 $(error kBuild
: The KBUILD_HOST_CPU value
'$(KBUILD_HOST_CPU)' is the same
as the KBUILD_TYPE
!)
264 # Deal with target platform legacy.
268 KBUILD_TARGET
:= $(BUILD_TARGET
)
270 else ifdef BUILD_TARGET
271 ifneq ($(KBUILD_TARGET
),$(BUILD_TARGET
))
272 ifeq ($(origin KBUILD_TARGET
):$(origin BUILD_TARGET
),environment
:command line
)
273 KBUILD_TARGET
:= $(BUILD_TARGET
)
274 else ifneq ($(origin KBUILD_TARGET
):$(origin BUILD_TARGET
),command line
:environment
)
275 $(error kBuild
: KBUILD_TARGET and BUILD_TARGET disagree
)
279 override BUILD_TARGET
= $(KBUILD_TARGET
)
281 ifndef KBUILD_TARGET_ARCH
282 ifdef BUILD_TARGET_ARCH
283 KBUILD_TARGET_ARCH
:= $(BUILD_TARGET_ARCH
)
285 else ifdef BUILD_TARGET_ARCH
286 ifneq ($(KBUILD_TARGET_ARCH
),$(BUILD_TARGET_ARCH
))
287 ifeq ($(origin KBUILD_TARGET_ARCH
):$(origin BUILD_TARGET_ARCH
),environment
:command line
)
288 KBUILD_TARGET_ARCH
:= $(BUILD_TARGET_ARCH
)
289 else ifneq ($(origin KBUILD_TARGET_ARCH
):$(origin BUILD_TARGET_ARCH
),command line
:environment
)
290 $(error kBuild
: KBUILD_TARGET_ARCH and BUILD_TARGET_ARCH disagree
)
294 override BUILD_TARGET_ARCH
= $(KBUILD_TARGET_ARCH
)
296 ifndef KBUILD_TARGET_CPU
297 ifdef BUILD_TARGET_CPU
298 KBUILD_TARGET_CPU
:= $(BUILD_TARGET_CPU
)
300 else ifdef BUILD_TARGET_CPU
301 ifneq ($(KBUILD_TARGET_CPU
),$(BUILD_TARGET_CPU
))
302 ifeq ($(origin KBUILD_TARGET_CPU
):$(origin BUILD_TARGET_CPU
),environment
:command line
)
303 KBUILD_TARGET_CPU
:= $(BUILD_TARGET_CPU
)
304 else ifneq ($(origin KBUILD_TARGET_CPU
):$(origin BUILD_TARGET_CPU
),command line
:environment
)
305 $(error kBuild
: KBUILD_TARGET_CPU and BUILD_TARGET_CPU disagree
)
309 override BUILD_TARGET_CPU
= $(KBUILD_TARGET_CPU
)
313 # Assert or set default target platform.
314 # When not defined use the corresponding KBUILD_HOST value.
317 KBUILD_TARGET
:= $(KBUILD_HOST
)
319 ifneq (.
$(words $(KBUILD_TARGET
)).
$(KBUILD_TARGET
).
,.1.
$(strip $(KBUILD_TARGET
)).
)
320 $(error kBuild
: The KBUILD_TARGET value
'$(KBUILD_TARGET)' contains spaces
/tabs
!)
322 ifneq ($(words $(filter $(KBUILD_TARGET
),$(KBUILD_OSES
))),1)
323 $(error kBuild
: KBUILD_TARGET value
'$(KBUILD_TARGET)' is not recognized
(valid
: $(KBUILD_OSES
)))
327 ifndef KBUILD_TARGET_ARCH
328 KBUILD_TARGET_ARCH
:= $(KBUILD_HOST_ARCH
)
330 ifneq (.
$(words $(KBUILD_TARGET_ARCH
)).
$(KBUILD_TARGET_ARCH
).
,.1.
$(strip $(KBUILD_TARGET_ARCH
)).
)
331 $(error kBuild
: The KBUILD_TARGET_ARCH value
'$(KBUILD_TARGET_ARCH)' contains spaces
/tabs
!)
333 ifneq ($(words $(filter $(KBUILD_TARGET_ARCH
),$(KBUILD_ARCHES
))),1)
334 $(error kBuild
: KBUILD_TARGET_ARCH value
'$(KBUILD_TARGET_ARCH)' is not recognized
(valid
: $(KBUILD_ARCHES
)))
338 ifndef KBUILD_TARGET_CPU
339 KBUILD_TARGET_CPU
:= $(KBUILD_HOST_CPU
)
340 else ifeq ($(strip $(KBUILD_TARGET_CPU
)),)
341 ifeq ($(KBUILD_TARGET_ARCH
),$(KBUILD_HOST_ARCH
))
342 KBUILD_TARGET_CPU
:= $(KBUILD_HOST_CPU
)
344 KBUILD_TARGET_CPU
:= blend
347 ifneq (.
$(words $(KBUILD_TARGET_CPU
)).
$(KBUILD_TARGET_CPU
).
,.1.
$(strip $(KBUILD_TARGET_CPU
)).
)
348 $(error kBuild
: The KBUILD_TARGET_CPU value
'$(KBUILD_TARGET_CPU)' contains spaces
/tabs
!)
350 if1of
($(KBUILD_TARGET_CPU
), $(KBUILD_OSES
) $(BUILD_ARCHES
))
351 $(error kBuild
: The KBUILD_TARGET_CPU value was found in the OS or architecture keywords
!)
353 ifeq ($(KBUILD_TARGET_CPU
),$(KBUILD_TYPE
))
354 $(error kBuild
: The KBUILD_TARGET_CPU value
'$(KBUILD_TARGET_CPU)' is the same
as the KBUILD_TYPE
!)
363 # Adjust DEPTH first.
364 DEPTH
:= $(strip $(DEPTH
))
369 ## PATH_CURRENT is the current directory (getcwd).
370 PATH_CURRENT
:= $(abspath
$(CURDIR
))
371 ## PATH_SUB_CURRENT points to current directory of the current makefile.
372 # Meaning that it will change value as we enter and exit sub-makefiles.
373 PATH_SUB_CURRENT
:= $(PATH_CURRENT
)
374 ## PATH_ROOT points to the project root directory.
375 PATH_ROOT
:= $(abspath
$(PATH_CURRENT
)/$(DEPTH
))
376 ## PATH_SUB_ROOT points to the directory of the top-level makefile.
377 ifneq ($(strip $(SUB_DEPTH
)),)
378 SUB_DEPTH
:= $(strip $(SUB_DEPTH
))
379 PATH_SUB_ROOT
:= $(abspath
$(PATH_CURRENT
)/$(SUB_DEPTH
))
381 PATH_SUB_ROOT
:= $(PATH_CURRENT
)
384 ## CURSUBDIR is PATH_SUB_ROOT described relative to PATH_ROOT.
385 # This variable is used to determin where the object files and other output goes.
386 ifneq ($(PATH_ROOT
),$(PATH_SUB_ROOT
))
387 CURSUBDIR
:= $(patsubst $(PATH_ROOT
)/%,%,$(PATH_SUB_ROOT
))
392 # Output directories.
394 PATH_OUT_BASE
:= $(PATH_ROOT
)/out
397 ifdef BUILD_TARGET_SUB
# (BUILD_TARGET_SUB is not currently recognized by kBuild in any other places - obsolete)
398 PATH_OUT
= $(PATH_OUT_BASE
)/$(KBUILD_TARGET
).
$(KBUILD_TARGET_ARCH
).
$(BUILD_TARGET_SUB
)/$(KBUILD_TYPE
)
400 PATH_OUT
= $(PATH_OUT_BASE
)/$(KBUILD_TARGET
).
$(KBUILD_TARGET_ARCH
)/$(KBUILD_TYPE
)
402 endif # !define PATH_OUT
403 PATH_OBJCACHE
= $(PATH_OUT_BASE
)/kObjCache
404 PATH_OBJ
= $(PATH_OUT
)/obj
405 PATH_TARGET
= $(PATH_OBJ
)/$(CURSUBDIR
)
406 PATH_INS
= $(PATH_OUT
)
407 PATH_BIN
= $(PATH_INS
)/bin
408 PATH_DLL
= $(PATH_INS
)/bin
409 PATH_SYS
= $(PATH_INS
)/bin
410 PATH_LIB
= $(PATH_INS
)/lib
411 PATH_DOC
= $(PATH_INS
)/doc
413 # KBUILD_PATH / PATH_KBUILD is determined by kmk.
415 KBUILD_PATH
:= $(PATH_KBUILD
)
417 ifeq ($(strip $(KBUILD_PATH
)),)
418 $(error kBuild
: KBUILD_PATH is missing or empty
! kmk is supposed to set it.
)
420 # KBUILD_BIN_PATH / PATH_KBUILD_BIN is determined by kmk.
421 ifndef KBUILD_BIN_PATH
422 KBUILD_BIN_PATH
:= $(PATH_KBUILD_BIN
)
424 ifeq ($(strip $(KBUILD_BIN_PATH
)),)
425 $(error kBuild
: KBUILD_BIN_PATH is missing or empty
! kmk is supposed to set it.
)
428 # kBuild files which might be of interest.
429 FILE_KBUILD_HEADER
:= $(KBUILD_PATH
)/header.kmk
430 #FILE_KBUILD_CONFIG := $(KBUILD_PATH)/config.kmk
431 FILE_KBUILD_FOOTER
:= $(KBUILD_PATH
)/footer.kmk
432 FILE_KBUILD_SUB_HEADER
:= $(KBUILD_PATH
)/subheader.kmk
433 FILE_KBUILD_SUB_FOOTER
:= $(KBUILD_PATH
)/subfooter.kmk
435 ## MAKEFILE is the name of the main makefile.
436 MAKEFILE
:= $(firstword $(MAKEFILE_LIST
))
437 ## MAKEFILE_CURRENT is the name of the current makefile.
438 # This is updated everything a sub-makefile is included.
439 MAKEFILE_CURRENT
:= $(MAKEFILE
)
442 ## @todo this should be done via SUFF_XYZ.target/host...
445 # Build platform setup.
448 if1of
($(KBUILD_HOST
), win nt
)
449 # Win, Win32, Win64, NT.
454 else ifeq ($(KBUILD_HOST
),os2
)
455 EXEC_X86_WIN32
:= innopec.exe
458 else if1of
($(KBUILD_HOST
), freebsd dragonfly linux openbsd netbsd
)
459 # Unix (like) systems with wine.
460 EXEC_X86_WIN32
:= wine
464 # Unix (like) systems without wine.
465 EXEC_X86_WIN32
:= false
471 # Build target setup.
476 if1of
($(KBUILD_TARGET
), win nt os2
)
483 else ifeq ($(KBUILD_TARGET
),l4
)
490 else ifeq ($(KBUILD_TARGET
),darwin
)
502 if1of
($(KBUILD_TARGET
), dragonfly freebsd linux netbsd openbsd
) ## @todo check netbsd and openbsd.
511 # Standard kBuild tools.
514 KMK
:= $(KBUILD_BIN_PATH
)/kmk
$(HOSTSUFF_EXE
)
518 GMAKE
:= $(KBUILD_BIN_PATH
)/kmk_gmake
$(HOSTSUFF_EXE
)
520 #DEP_EXT := $(KBUILD_BIN_PATH)/kDep$(HOSTSUFF_EXE)
521 #DEP_INT := $(KBUILD_BIN_PATH)/kDep$(HOSTSUFF_EXE)
524 DEP_IDB_EXT
:= $(KBUILD_BIN_PATH
)/kDepIDB
$(HOSTSUFF_EXE
)
525 DEP_IDB_INT
:= kmk_builtin_kDepIDB
526 DEP_IDB
:= $(DEP_IDB_INT
)
527 if
$(KMK_REVISION
) >= 2121 # temporary hack, remove after next build cycle.
531 DEP_PRE
:= $(KBUILD_BIN_PATH
)/kDepPre
$(HOSTSUFF_EXE
)
533 KOBJCACHE_EXT
:= $(KBUILD_BIN_PATH
)/kObjCache
$(HOSTSUFF_EXE
)
534 KOBJCACHE
:= $(KOBJCACHE_EXT
)
536 APPEND_EXT
:= $(KBUILD_BIN_PATH
)/kmk_append
$(HOSTSUFF_EXE
)
537 APPEND_INT
:= kmk_builtin_append
538 APPEND
:= $(APPEND_INT
)
540 CAT_EXT
:= $(KBUILD_BIN_PATH
)/kmk_cat
$(HOSTSUFF_EXE
)
541 CAT_INT
:= kmk_builtin_cat
544 CHMOD_EXT
:= $(KBUILD_BIN_PATH
)/kmk_chmod
$(HOSTSUFF_EXE
)
545 CHMOD_INT
:= kmk_builtin_chmod
546 CHMOD
:= $(CHMOD_INT
)
548 CMP_EXT
:= $(KBUILD_BIN_PATH
)/kmk_cmp
$(HOSTSUFF_EXE
)
549 CMP_INT
:= kmk_builtin_cmp
552 CP_EXT
:= $(KBUILD_BIN_PATH
)/kmk_cp
$(HOSTSUFF_EXE
)
553 CP_INT
:= kmk_builtin_cp
556 ECHO_EXT
:= $(KBUILD_BIN_PATH
)/kmk_echo
$(HOSTSUFF_EXE
)
557 ECHO_INT
:= kmk_builtin_echo
560 EXPR_EXT
:= $(KBUILD_BIN_PATH
)/kmk_expr
$(HOSTSUFF_EXE
)
561 EXPR_INT
:= kmk_builtin_expr
564 INSTALL_EXT
:= $(KBUILD_BIN_PATH
)/kmk_install
$(HOSTSUFF_EXE
)
565 INSTALL_INT
:= kmk_builtin_install
566 INSTALL
:= $(INSTALL_INT
)
568 LN_EXT
:= $(KBUILD_BIN_PATH
)/kmk_ln
$(HOSTSUFF_EXE
)
569 LN_INT
:= kmk_builtin_ln
572 MD5SUM_EXT
:= $(KBUILD_BIN_PATH
)/kmk_md5sum
$(HOSTSUFF_EXE
)
573 MD5SUM_INT
:= kmk_builtin_md5sum
574 MD5SUM
:= $(MD5SUM_INT
)
576 MKDIR_EXT
:= $(KBUILD_BIN_PATH
)/kmk_mkdir
$(HOSTSUFF_EXE
)
577 MKDIR_INT
:= kmk_builtin_mkdir
578 MKDIR
:= $(MKDIR_INT
)
580 MV_EXT
:= $(KBUILD_BIN_PATH
)/kmk_mv
$(HOSTSUFF_EXE
)
581 MV_INT
:= kmk_builtin_mv
584 PRINTF_EXT
:= $(KBUILD_BIN_PATH
)/kmk_printf
$(HOSTSUFF_EXE
)
585 PRINTF_INT
:= kmk_builtin_printf
586 PRINTF
:= $(PRINTF_INT
)
588 REDIRECT_EXT
:= $(KBUILD_BIN_PATH
)/kmk_redirect
$(HOSTSUFF_EXE
)
589 REDIRECT_INT
:= $(REDIRECT_EXT
)
590 REDIRECT
:= $(REDIRECT_INT
)
592 RM_EXT
:= $(KBUILD_BIN_PATH
)/kmk_rm
$(HOSTSUFF_EXE
)
593 RM_INT
:= kmk_builtin_rm
596 RMDIR_EXT
:= $(KBUILD_BIN_PATH
)/kmk_rmdir
$(HOSTSUFF_EXE
)
597 RMDIR_INT
:= kmk_builtin_rmdir
598 RMDIR
:= $(RMDIR_INT
)
600 SED_EXT
:= $(KBUILD_BIN_PATH
)/kmk_sed
$(HOSTSUFF_EXE
)
601 SED_INT
:= $(SED_EXT
)
604 SLEEP_INT
:= kmk_builtin_sleep
605 SLEEP_EXT
:= $(KBUILD_BIN_PATH
)/kmk_sleep
$(HOSTSUFF_EXE
)
606 SLEEP
:= $(SLEEP_EXT
)
608 TEST_EXT
:= $(KBUILD_BIN_PATH
)/kmk_test
$(HOSTSUFF_EXE
)
609 TEST_INT
:= kmk_builtin_test
612 TIME_EXT
:= $(KBUILD_BIN_PATH
)/kmk_time
$(HOSTSUFF_EXE
)
613 TIME_INT
:= $(TIME_EXT
)
616 # Our default shell is the Almquist shell from *BSD.
617 ASH
:= $(KBUILD_BIN_PATH
)/kmk_ash
$(HOSTSUFF_EXE
)
620 export SHELL MAKESHELL
622 # Symlinking is problematic on some platforms...
623 LN_SYMLINK
:= $(LN
) -s
628 # The lower cased ones are either fallbacks or candidates for functions.c.
631 ## ABSPATH - make paths absolute.
632 # This implementation is clumsy and doesn't resolve '..' and '.' components.
634 # @param $1 The paths to make absolute.
635 # @obsolete Use the GNU make function $(abspath) directly now.
636 ABSPATH
= $(abspath
$(1))$(warning ABSPATH is deprecated
, use abspath directly
!)
638 ## DIRDEP - make create directory dependencies.
640 # @param $1 The paths to the directories which must be created.
641 DIRDEP
= $(foreach path
,$(patsubst %/,%,$(1)),$(path
)/)
644 # This converts /cygdrive/x/% to x:%.
646 # @param $1 The paths to make native.
647 # @remark This macro is pretty much obsolete since we don't use cygwin base make.
648 ifneq ($(patsubst /cygdrive
/%,%,$(CURDIR
)),$(CURDIR
))
649 CYGPATHMIXED
= $(foreach path
,$(1)\
650 ,$(if
$(patsubst /cygdrive
/%,,$(path
)),$(path
),$(patsubst $(strip $(firstword $(subst /, ,$(patsubst /cygdrive
/%,%,$(path
)))))/%,$(strip $(firstword $(subst /, ,$(patsubst /cygdrive
/%,%,$(path
))))):/%,$(patsubst /cygdrive
/%,%,$(path
)))))
655 ## Removes the drive letter from a path (if it has one)
657 no-drive
= $(word $(words $(subst :, ,$(1))),$(subst :, ,$(1)))
659 ## Removes the root slash from a path (if it has one)
661 no-root-slash
= $(patsubst /%,%,$(1))
663 ## Figure out where to put object files.
664 # @param $1 real target name.
665 # @param $2 normalized main target
666 TARGET_BASE
= $(PATH_TARGET
)/$(2)/$(call no-root-slash
,$(call no-drive
,$(1)))
668 ## Figure out where to put object files.
669 # @param $1 normalized main target
670 TARGET_PATH
= $(PATH_TARGET
)/$(1)
674 # Initialize some of the globals which the Config.kmk and
675 # others can add stuff to if they like for processing in the footer.
678 ## KBUILD_TEMPLATE_PATHS
679 # List a paths (separated by space) where templates can be found.
680 KBUILD_TEMPLATE_PATHS
:=
683 # List of paths (separated by space) where tools can be found.
687 # List of paths (separated by space) where SDKs can be found.
691 # List of paths (separated by space) where units (USES) can be found.
694 ## KBUILD_DEFAULT_PATHS
695 # List of paths (separated by space) to search for stuff as a last resort.
696 KBUILD_DEFAULT_PATHS
:=
698 ## Proritized list of the default makefile when walking subdirectories.
699 # The user can overload this list.
700 DEFAULT_MAKEFILE
:= Makefile.kmk makefile.kmk Makefile makefile
702 ## KBUILD_SRC_HANDLERS
703 # The list of source handlers, pair of extension and handler.
704 # The user can overload this list to provide additional or custom
705 # handlers. On a per-target/template see SRC_HANDLERS.
706 KBUILD_SRC_HANDLERS
:= \
707 .c
:def_src_handler_c \
708 .C
:def_src_handler_c \
709 .
cxx:def_src_handler_cxx \
710 .CXX
:def_src_handler_cxx \
711 .
cpp:def_src_handler_cxx \
712 .CPP
:def_src_handler_cxx \
713 .
cc:def_src_handler_cxx \
714 .CC
:def_src_handler_cxx \
715 .m
:def_src_handler_objc \
716 .asm
:def_src_handler_asm \
717 .ASM
:def_src_handler_asm \
718 .s
:def_src_handler_asm \
719 .S
:def_src_handler_asm \
720 .rc
:def_src_handler_rc \
721 .obj
:def_src_handler_obj \
722 .o
:def_src_handler_obj \
723 .res
:def_src_handler_obj
726 # This is a subset of PROPS_SINGLE.
727 PROPS_TOOLS
:= TOOL CTOOL CXXTOOL OBJCTOOL ASTOOL RCTOOL ARTOOL LDTOOL LEXTOOL FETCHTOOL UNPACKTOOL PATCHTOOL
730 # The list of non-accumulative target properties.
731 # A Config.kmk file can add it's own properties to this list and kBuild
732 # will do the necessary inheritance for templates, sdks, tools and targets.
733 PROPS_SINGLE
:= $(PROPS_TOOLS
) TEMPLATE INST NOINST BLD_TYPE BLD_TRG BLD_TRG_ARCH BLD_TRG_CPU FETCHDIR \
734 OBJSUFF COBJSUFF CXXOBJSUFF OBJCOBJSUFF ASOBJSUFF RCOBJSUFF SYSSUFF BINSUFF EXESUFF DLLSUFF LIBSUFF ARLIBSUFF
736 # Subset of PROPS_SINGLE which applies to all linkable targets.
737 PROPS_SINGLE_LNK
:= TOOL TEMPLATE CTOOL CXXTOOL OBJCTOOL ASTOOL RCTOOL \
738 INST NOINST BLD_TYPE BLD_TRG BLD_TRG_ARCH BLD_TRG_CPU \
739 OBJSUFF COBJSUFF CXXOBJSUFF OBJCOBJSUFF ASOBJSUFF RCOBJSUFF
742 # This list of non-accumulative target properties which are or may be
743 # functions, and thus should not be expanded until the very last moment.
744 PROPS_DEFERRED
:= INSTFUN INSTALLER PRE_CMDS POST_CMDS NAME SONAME
746 ## PROPS_ACCUMULATE_R
747 # The list of accumulative target properties where the right most value/flag
748 # is the 'most significant'.
749 # A Config.kmk file can add it's own properties to this list and kBuild
750 # will do the necessary inheritance from templates to targets.
751 PROPS_ACCUMULATE_R
:= \
752 DEPS LNK_DEPS ORDERDEPS LNK_ORDERDEPS DEFS \
760 IDFLAGS IFDLAGS ISFLAGS \
761 FETCHFLAGS UNPACKFLAGS PATCHFLAGS
762 ## PROPS_ACCUMULATE_R_LNK
763 # Subset of PROPS_ACCUMULATE_R which applies to all linkable targets.
764 PROPS_ACCUMULATE_R_LNK
:= \
765 DEPS LNK_DEPS ORDERDEPS LNK_ORDERDEPS DEFS \
771 IDFLAGS IFDLAGS ISFLAGS
774 # The list of accumulative target properties where the left most value/flag
775 # is the 'most significant'.
776 # A Config.kmk file can add it's own properties to this list and kBuild
777 # will do the necessary inheritance from templates to targets.
778 PROPS_ACCUMULATE_L
:= \
779 SDKS USES SOURCES SRC_HANDLERS INTERMEDIATES \
780 INCS CINCS CXXINCS OBJCINCS ASINCS RCINCS \
783 ## PROPS_ACCUMULATE_L_LNK
784 # Subset of PROPS_ACCUMULATE_L which applies to all linkable targets.
785 PROPS_ACCUMULATE_L_LNK
:= \
786 SDKS SOURCES SRC_HANDLERS \
787 INCS CINCS CXXINCS OBJCINCS ASINCS RCINCS \
791 # List of all the properties.
792 PROPS_ALL
= $(PROPS_SINGLE
) $(PROPS_DEFERRED
) $(PROPS_ACCUMULATE_L
) $(PROPS_ACCUMULATE_R
)
795 ## @name Properties valid on programs (BLDPROGS and PROGRAMS)
797 PROPS_PROGRAMS_SINGLE
:= $(PROPS_SINGLE_LNK
) LDTOOL EXESUFF
798 PROPS_PROGRAMS_DEFERRED
:= $(PROPS_DEFERRED
)
799 PROPS_PROGRAMS_ACCUMULATE_R
:= $(PROPS_ACCUMULATE_R_LNK
) LDFLAGS
800 PROPS_PROGRAMS_ACCUMULATE_L
:= $(PROPS_ACCUMULATE_L_LNK
) LIBS LIBPATH
803 ## @name Properties valid on libraries (LIBRARIES and IMPORT_LIBS)
805 PROPS_LIBRARIES_SINGLE
:= $(PROPS_SINGLE_LNK
) ARTOOL LIBSUFF ARLIBSUFF LIBSUFF
806 PROPS_LIBRARIES_DEFERRED
:= $(filter-out SONAME
,$(PROPS_DEFERRED
))
807 PROPS_LIBRARIES_ACCUMULATE_R
:= $(PROPS_ACCUMULATE_R_LNK
) ARFLAGS
808 PROPS_LIBRARIES_ACCUMULATE_L
:= $(PROPS_ACCUMULATE_L_LNK
)
811 ## @name Properties valid on dlls (DLLS)
813 PROPS_DLLS_SINGLE
:= $(PROPS_SINGLE_LNK
) LDTOOL DLLSUFF LIBSUFF
814 PROPS_DLLS_DEFERRED
:= $(PROPS_DEFERRED
)
815 PROPS_DLLS_ACCUMULATE_R
:= $(PROPS_ACCUMULATE_R_LNK
) LDFLAGS
816 PROPS_DLLS_ACCUMULATE_L
:= $(PROPS_ACCUMULATE_L_LNK
) LIBS LIBPATH
819 ## @name Properties valid on system modules (SYSMODS)
821 PROPS_SYSMODS_SINGLE
:= $(PROPS_SINGLE_LNK
) LDTOOL SYSSUFF
822 PROPS_SYSMODS_DEFERRED
:= $(PROPS_DEFERRED
)
823 PROPS_SYSMODS_ACCUMULATE_R
:= $(PROPS_ACCUMULATE_R_LNK
) LDFLAGS
824 PROPS_SYSMODS_ACCUMULATE_L
:= $(PROPS_ACCUMULATE_L_LNK
) LIBS LIBPATH
827 ## @name Properties valid on misc binaries (MISCBINS)
829 PROPS_MISCBINS_SINGLE
:= $(PROPS_SINGLE_LNK
) LDTOOL BINSUFF
830 PROPS_MISCBINS_DEFERRED
:= $(PROPS_DEFERRED
)
831 PROPS_MISCBINS_ACCUMULATE_R
:= $(PROPS_ACCUMULATE_R_LNK
) LDFLAGS
832 PROPS_MISCBINS_ACCUMULATE_L
:= $(PROPS_ACCUMULATE_L_LNK
) LIBS LIBPATH
835 ## @name Properties valid on installs (INSTALLS)
837 PROPS_INSTALLS_SINGLE
:= TOOL TEMPLATE INST NOINST
838 PROPS_INSTALLS_DEFERRED
:= INSTFUN INSTALLER
839 PROPS_INSTALLS_ACCUMULATE_R
:= DEPS ORDERDEPS
840 PROPS_INSTALLS_ACCUMULATE_L
:= SOURCES DIRS CLEAN
843 ## @name Properties valid on fetches (INSTALLS)
845 PROPS_FETCHES_SINGLE
:= TOOL TEMPLATE FETCHTOOL UNPACKTOOL PATCHTOOL INST FETCHDIR
846 PROPS_FETCHES_DEFERRED
:=
847 PROPS_FETCHES_ACCUMULATE_R
:= FETCHFLAGS UNPACKFLAGS PATCHFLAGS
848 PROPS_FETCHES_ACCUMULATE_L
:= SOURCES CLEAN
853 # Here is a special 'hack' to prevent innocent environment variables being
854 # picked up and treated as properties. (The most annoying example of why
855 # this is necessary is the Visual C++ commandline with it's LIBPATH.)
857 # Define KBUILD_DONT_KILL_ENV_PROPS in the env. or on the commandline to
858 # disable this 'hack'.
860 ifndef KBUILD_DONT_KILL_ENV_PROPS
862 define def_nuke_environment_prop
863 ifeq ($(origin $(prop
)),environment
)
867 $(foreach prop
, $(PROPS_ALL
) \
868 FETCHES PATCHES BLDPROGS LIBRARIES IMPORT_LIBS DLLS PROGRAMS SYSMODS MISCBINS INSTALLS OTHERS \
869 SUBDIRS MAKEFILES BLDDIRS \
870 ,$(eval
$(value def_nuke_environment_prop
)))
872 endif # KBUILD_DONT_KILL_ENV_PROPS
876 # Pass configuration.
878 # The PASS_<passname>_trgs variable is listing the targets.
879 # The PASS_<passname>_vars variable is listing the target variables.
880 # The PASS_<passname>_pass variable is the lowercased passname.
884 # This pass fetches and unpacks things needed to complete the build.
885 PASS_FETCHES
:= Fetches
887 PASS_FETCHES_vars
:= _FETCHES
888 PASS_FETCHES_pass
:= fetches
891 # This pass applies patches.
892 PASS_PATCHES
:= Patches
894 PASS_PATCHES_vars
:= _PATCHES
895 PASS_PATCHES_pass
:= patches
898 # This pass builds targets which are required for building the rest.
899 PASS_BLDPROGS
:= Build Programs
900 PASS_BLDPROGS_trgs
:=
901 PASS_BLDPROGS_vars
:= _BLDPROGS
902 PASS_BLDPROGS_pass
:= bldprogs
905 # This pass builds library targets.
906 PASS_LIBRARIES
:= Libraries
907 PASS_LIBRARIES_trgs
:=
908 PASS_LIBRARIES_vars
:= _LIBS _IMPORT_LIBS _OTHER_LIBRARIES
909 PASS_LIBRARIES_pass
:= libraries
912 # This pass builds dll targets.
915 PASS_DLLS_vars
:= _DLLS _OTHER_DLLS
916 PASS_DLLS_pass
:= dlls
919 # This pass builds binary targets, i.e. programs, system modules and stuff.
920 PASS_BINARIES
:= Programs
921 PASS_BINARIES_trgs
:=
922 PASS_BINARIES_vars
:= _PROGRAMS _SYSMODS _MISC_BINS _OTHER_BINARIES
923 PASS_BINARIES_pass
:= binaries
926 # This pass builds other targets.
927 PASS_OTHERS
:= Other Stuff
929 PASS_OTHERS_vars
:= _OTHERS
930 PASS_OTHERS_pass
:= others
933 # This pass installs the built entities to a sandbox area.
934 ## @todo split this up into build install (to sandbox) and real installation.
935 PASS_INSTALLS
:= Install
936 PASS_INSTALLS_trgs
:=
937 PASS_INSTALLS_vars
:= _INSTALLS_DIRS _INSTALLS _INSTALLS_FILES
938 PASS_INSTALLS_pass
:= installs
941 # This pass processes custom rules for executing tests.
942 PASS_TESTING
:= Tests
944 PASS_TESTING_vars
:= _TESTING
945 PASS_TESTING_pass
:= testing
948 # This pass processes custom packing rules.
949 PASS_PACKING
:= Packing
951 PASS_PACKING_vars
:= _PACKING
952 PASS_PACKING_pass
:= packing
955 # This pass removes all generated files.
957 PASS_CLEAN_trgs
:= do-clean
959 PASS_CLEAN_pass
:= clean
962 # This pass just walks the tree.
963 PASS_NOTHING
:= Nothing
964 PASS_NOTHING_trgs
:= do-nothing
966 PASS_NOTHING_pass
:= nothing
969 # The default passes and their order.
970 DEFAULT_PASSES
:= BLDPROGS LIBRARIES DLLS BINARIES OTHERS INSTALLS
973 # The passes that should be defined. This must include
974 # all passes mentioned by DEFAULT_PASSES.
975 PASSES
:= FETCHES PATCHES
$(DEFAULT_PASSES
) TESTING PACKING CLEAN NOTHING
979 # Check for --pretty-command-printing before including the Config.kmk
980 # so that anyone overriding the message macros can take the implied
981 # verbosity level change into account.
983 ifndef KBUILD_VERBOSE
985 ifeq ($(KMK_OPTS_PRETTY_COMMAND_PRINTING
),1)
986 export KBUILD_VERBOSE
:= 2
993 # Legacy variable translation.
994 # These will be eliminated when switching to the next version.
997 ifndef KBUILD_USE_KOBJCACHE
998 export KBUILD_USE_KOBJCACHE
:= $(USE_KOBJCACHE
)
1004 # This is how we find the closest config.kmk.
1005 # It's a little hacky but I think it works fine.
1008 _CFGFILES
:= .
/Config.kmk .
/config.kmk
1009 define def_include_config
1010 $(eval _CFGDIR
:= $(_CFGDIR
)/$(dir))
1011 _CFGFILES
+= $(_CFGDIR
)/Config.kmk
$(_CFGDIR
)/config.kmk
1013 # walk down the _RELATIVE_ path specified by DEPTH.
1014 $(foreach dir,$(subst /, ,$(DEPTH
)), $(eval
$(def_include_config
)) )
1015 # add the default config file.
1016 _CFGFILE
:= $(firstword $(wildcard $(_CFGFILES
) $(FILE_KBUILD_CONFIG
)))
1020 $(error kBuild
: no Config.kmk file found
! Check the DEPTH
: DEPTH
='$(DEPTH)' PATH_CURRENT
='$(PATH_CURRENT)')
1023 # Include the config.kmk we found file (or the default one).
1024 ifdef KBUILD_PROFILE_SELF
1025 $(evalcall def_profile_self
, including
$(_CFGFILE
))
1027 $(evalcall def_profile_self
, included
$(_CFGFILE
))
1035 # Finalize a the central path variables now that we've included the Config.kmk file.
1037 # This prevents some trouble when users override the defaults for these
1038 # variables and uses relative paths or paths with incorrect case.
1040 PATH_OUT_BASE
:= $(abspath
$(PATH_OUT_BASE
))
1041 PATH_OUT
:= $(abspath
$(PATH_OUT
))
1042 PATH_OBJ
:= $(abspath
$(PATH_OBJ
))
1043 PATH_TARGET
:= $(abspath
$(PATH_TARGET
))
1044 PATH_INS
:= $(abspath
$(PATH_INS
))
1045 PATH_BIN
:= $(abspath
$(PATH_BIN
))
1046 PATH_DLL
:= $(abspath
$(PATH_DLL
))
1047 PATH_SYS
:= $(abspath
$(PATH_SYS
))
1048 PATH_LIB
:= $(abspath
$(PATH_LIB
))
1049 PATH_DOC
:= $(abspath
$(PATH_DOC
))
1053 # Setup the message style. The default one is inlined.
1055 # See kBuild/msgstyles for more styles or use KBUILD_MSG_STYLE_PATHS
1056 # to create your own message style.
1058 KBUILD_MSG_STYLE ?
= default
1059 ifeq ($(KBUILD_MSG_STYLE
),default
)
1061 # The 'default' style.
1065 # @param 1 Target name.
1066 MSG_FETCH ?
= $(call MSG_L1
,Fetching
$1...
)
1067 ## Re-fetch starting.
1068 # @param 1 Target name.
1069 MSG_REFETCH ?
= $(call MSG_L1
,Re-fetching
$1...
)
1070 ## Downloading a fetch component.
1071 # @param 1 Target name.
1072 # @param 2 The source URL.
1073 # @param 3 The destination file name.
1074 MSG_FETCH_DL ?
= $(call MSG_L1
,Downloading
$1 - $2,=> $3)
1075 ## Checking a fetch component.
1076 # @param 1 Target name.
1077 # @param 2 The source URL.
1078 # @param 3 The destination file name.
1079 MSG_FETCH_CHK?
= $(call MSG_L1
,Checking
$1 - $3, ($2))
1080 ## Unpacking a fetch component.
1081 # @param 1 Target name.
1082 # @param 2 The archive file name.
1083 # @param 3 The target directory.
1084 MSG_FETCH_UP ?
= $(call MSG_L1
,Unpacking
$1 - $2 => $3)
1086 # @param 1 Target name.
1087 MSG_FETCH_OK ?
= $(call MSG_L1
,Successfully fetched
$1)
1088 ## Unfetch a fetch target.
1089 # @param 1 Target name.
1090 MSG_UNFETCH ?
= $(call MSG_L1
,Unfetching
$1...
)
1091 ## Compiling a source file.
1092 # @param 1 Target name.
1093 # @param 2 The source filename.
1094 # @param 3 The primary link output file name.
1095 # @param 4 The source type (C,CXX,OBJC,AS,RC,++).
1096 MSG_COMPILE ?
= $(call MSG_L1
,Compiling
$1 - $2,=> $3)
1098 # @param 1 The tool name (bin2c,...)
1099 # @param 2 Target name.
1100 # @param 3 The source filename.
1101 # @param 4 The primary output file name.
1102 MSG_TOOL ?
= $(call MSG_L1
,$1 $2 - $3,=> $4)
1103 ## Generate a file, typically a source file.
1104 # @param 1 Target name if applicable.
1105 # @param 2 Output file name.
1106 # @param 3 What it's generated from
1107 MSG_GENERATE ?
= $(call MSG_L1
,Generating
$(if
$1,$1 - )$2,$(if
$3,from
$3))
1108 ## Linking a bldprog/dll/program/sysmod target.
1109 # @param 1 Target name.
1110 # @param 2 The primary link output file name.
1111 # @param 3 The link tool operation (LINK_LIBRARY,LINK_PROGRAM,LINK_DLL,LINK_SYSMOD,++).
1112 MSG_LINK ?
= $(call MSG_L1
,Linking
$1,=> $2)
1113 ## Merging a library into the target (during library linking).
1114 # @param 1 Target name.
1115 # @param 2 The output library name.
1116 # @param 3 The input library name.
1117 MSG_AR_MERGE ?
= $(call MSG_L1
,Merging
$3 into
$1, ($2))
1118 ## Creating a directory (build).
1119 # @param 1 Directory name.
1120 MSG_MKDIR ?
= $(call MSG_L2
,Creating directory
$1)
1122 MSG_CLEAN ?
= $(call MSG_L1
,Cleaning...
)
1124 MSG_NOTHING ?
= $(call MSG_L1
,Did nothing in
$(CURDIR
))
1126 # @param 1 The pass name.
1127 MSG_PASS ?
= $(call MSG_L1
,Pass
- $1)
1128 ## Installing a bldprog/lib/dll/program/sysmod target.
1129 # @param 1 Target name.
1130 # @param 2 The source filename.
1131 # @param 3 The destination file name.
1132 MSG_INST_TRG ?
= $(call MSG_L1
,Installing
$1 => $3)
1133 ## Installing a file (install target).
1134 # @param 1 The source filename.
1135 # @param 2 The destination filename.
1136 MSG_INST_FILE?
= $(call MSG_L1
,Installing
$2,(<= $1))
1137 ## Installing a symlink.
1139 # @param 2 Link target
1140 MSG_INST_SYM ?
= $(call MSG_L1
,Installing symlink
$1,=> $2)
1141 ## Installing a directory.
1142 # @param 1 Directory name.
1143 MSG_INST_DIR ?
= $(call MSG_L1
,Installing directory
$1)
1146 _KBUILD_MSG_STYLE_FILE
:= $(firstword $(foreach path
, $(KBUILD_MSG_STYLE_PATHS
) $(KBUILD_PATH
)/msgstyles
, $(wildcard $(path
)/$(KBUILD_MSG_STYLE
).kmk
)))
1147 ifneq ($(_KBUILD_MSG_STYLE_FILE
),)
1148 include $(_KBUILD_MSG_STYLE_FILE
)
1150 $(error kBuild
: Can
't find the style setup file for KBUILD_MSG_STYLE '$(KBUILD_MSG_STYLE
)')
1158 # This is done after including Config.kmk as to allow for
1159 # KBUILD_QUIET and KBUILD_VERBOSE to be configurable.
1168 ifndef KBUILD_VERBOSE
1169 # Default output level.
1172 MSG_L1 ?= %@$(ECHO) "kBuild: $1"
1174 else ifeq ($(KBUILD_VERBOSE),1)
1178 MSG_L1 ?= %@$(ECHO) "kBuild: $1 $2"
1180 else ifeq ($(KBUILD_VERBOSE),2)
1184 MSG_L1 ?= %@$(ECHO) "kBuild: $1 $2"
1185 MSG_L2 ?= %@$(ECHO) "kBuild: $1"
1190 MSG_L1 ?= %@$(ECHO) "kBuild: $1 $2"
1191 MSG_L2 ?= %@$(ECHO) "kBuild: $1"
1197 # Validate any KBUILD_BLD_TYPES additions and finally the KBUILD_TYPE.
1199 if1of ($(KBUILD_BLD_TYPES), $(KBUILD_OSES))
1200 $(error kBuild: found KBUILD_BLD_TYPES in KBUILD_OSES!)
1202 if1of ($(KBUILD_BLD_TYPES), $(KBUILD_ARCHES))
1203 $(error kBuild: found KBUILD_BLD_TYPES in KBUILD_ARCHES!)
1205 if1of ($(KBUILD_OSES), $(KBUILD_ARCHES))
1206 $(error kBuild: found KBUILD_OSES in KBUILD_ARCHES!)
1208 ifn1of ($(KBUILD_TYPE), $(KBUILD_BLD_TYPES))
1209 $(error kBuild: KBUILD_TYPE(=$(KBUILD_TYPE)) is not found in KBUILD_BLD_TYPES(=$(KBUILD_BLD_TYPES))!)
1214 ifdef KBUILD_PROFILE_SELF
1215 $(evalcall def_profile_self, end of header.kmk)
1216 _KBUILD_TS_HEADER_END := $(_KBUILD_TS_PREV)
1219 # end-of-file-content
1221 endif # __header_kmk__