xref: /freebsd/contrib/bmake/mk/sys.mk (revision 1ce939a7b7d30f1aa727b010174ae92a0790f17a)
1*1ce939a7SSimon J. Gerraty# $Id: sys.mk,v 1.45 2017/02/05 01:26:13 sjg Exp $
23cbdda60SSimon J. Gerraty#
33cbdda60SSimon J. Gerraty#	@(#) Copyright (c) 2003-2009, Simon J. Gerraty
43cbdda60SSimon J. Gerraty#
53cbdda60SSimon J. Gerraty#	This file is provided in the hope that it will
63cbdda60SSimon J. Gerraty#	be of use.  There is absolutely NO WARRANTY.
73cbdda60SSimon J. Gerraty#	Permission to copy, redistribute or otherwise
83cbdda60SSimon J. Gerraty#	use this file is hereby granted provided that
93cbdda60SSimon J. Gerraty#	the above copyright notice and this notice are
103cbdda60SSimon J. Gerraty#	left intact.
113cbdda60SSimon J. Gerraty#
123cbdda60SSimon J. Gerraty#	Please send copies of changes and bug-fixes to:
133cbdda60SSimon J. Gerraty#	sjg@crufty.net
143cbdda60SSimon J. Gerraty#
153cbdda60SSimon J. Gerraty
163cbdda60SSimon J. Gerraty# Avoid putting anything platform specific in here.
173cbdda60SSimon J. Gerraty
1845447996SSimon J. Gerraty# _DEBUG_MAKE_FLAGS etc.
1945447996SSimon J. Gerraty.include <sys.debug.mk>
203cbdda60SSimon J. Gerraty
213cbdda60SSimon J. Gerraty.if !empty(_DEBUG_MAKE_FLAGS)
223cbdda60SSimon J. Gerraty.if ${_DEBUG_MAKE_SYS_DIRS:Uno:@x@${.CURDIR:M$x}@} != ""
233cbdda60SSimon J. Gerraty.MAKEFLAGS: ${_DEBUG_MAKE_FLAGS}
243cbdda60SSimon J. Gerraty.endif
253cbdda60SSimon J. Gerraty.endif
263cbdda60SSimon J. Gerraty
2745447996SSimon J. Gerraty# useful modifiers
2845447996SSimon J. Gerraty.include <sys.vars.mk>
293cbdda60SSimon J. Gerraty
303cbdda60SSimon J. Gerraty# we expect a recent bmake
313cbdda60SSimon J. Gerraty.if !defined(_TARGETS)
323cbdda60SSimon J. Gerraty# some things we do only once
333cbdda60SSimon J. Gerraty_TARGETS := ${.TARGETS}
343cbdda60SSimon J. Gerraty.-include <sys.env.mk>
353cbdda60SSimon J. Gerraty.endif
363cbdda60SSimon J. Gerraty
373cbdda60SSimon J. Gerraty# we need HOST_TARGET etc below.
383cbdda60SSimon J. Gerraty.include <host-target.mk>
393cbdda60SSimon J. Gerraty
40ac3446e9SSimon J. Gerraty# early customizations
41ac3446e9SSimon J. Gerraty.-include <local.sys.env.mk>
42ac3446e9SSimon J. Gerraty
43e48f47ddSSimon J. Gerraty# Popular suffixes for C++
44e48f47ddSSimon J. GerratyCXX_SUFFIXES += .cc .cpp .cxx .C
45e48f47ddSSimon J. GerratyCXX_SUFFIXES := ${CXX_SUFFIXES:O:u}
46e48f47ddSSimon J. Gerraty
473cbdda60SSimon J. Gerraty# find the OS specifics
483cbdda60SSimon J. Gerraty.if defined(SYS_OS_MK)
493cbdda60SSimon J. Gerraty.include <${SYS_OS_MK}>
503cbdda60SSimon J. Gerraty.else
513cbdda60SSimon J. Gerraty_sys_mk =
523cbdda60SSimon J. Gerraty.for x in ${HOST_OSTYPE} ${HOST_TARGET} ${HOST_OS} ${MACHINE} Generic
533cbdda60SSimon J. Gerraty.if empty(_sys_mk)
543cbdda60SSimon J. Gerraty.-include <sys/$x.mk>
553cbdda60SSimon J. Gerraty_sys_mk := ${.MAKE.MAKEFILES:M*/$x.mk}
563cbdda60SSimon J. Gerraty.if !empty(_sys_mk)
573cbdda60SSimon J. Gerraty_sys_mk := sys/${_sys_mk:T}
583cbdda60SSimon J. Gerraty.endif
593cbdda60SSimon J. Gerraty.endif
603cbdda60SSimon J. Gerraty.if empty(_sys_mk)
613cbdda60SSimon J. Gerraty# might be an old style
623cbdda60SSimon J. Gerraty.-include <$x.sys.mk>
633cbdda60SSimon J. Gerraty_sys_mk := ${.MAKE.MAKEFILES:M*/$x.sys.mk:T}
643cbdda60SSimon J. Gerraty.endif
653cbdda60SSimon J. Gerraty.endfor
663cbdda60SSimon J. Gerraty
673cbdda60SSimon J. GerratySYS_OS_MK := ${_sys_mk}
683cbdda60SSimon J. Gerraty.export SYS_OS_MK
693cbdda60SSimon J. Gerraty.endif
703cbdda60SSimon J. Gerraty
71ac3446e9SSimon J. Gerraty# some options we need to know early
72ac3446e9SSimon J. GerratyOPTIONS_DEFAULT_NO += \
73ac3446e9SSimon J. Gerraty	DIRDEPS_BUILD \
74*1ce939a7SSimon J. Gerraty	DIRDEPS_CACHE
75ac3446e9SSimon J. Gerraty
76ac3446e9SSimon J. GerratyOPTIONS_DEFAULT_DEPENDENT += \
77ac3446e9SSimon J. Gerraty	AUTO_OBJ/DIRDEPS_BUILD \
78*1ce939a7SSimon J. Gerraty	META_MODE/DIRDEPS_BUILD \
79ac3446e9SSimon J. Gerraty	STAGING/DIRDEPS_BUILD \
80ac3446e9SSimon J. Gerraty
81e48f47ddSSimon J. Gerraty.-include <options.mk>
82ac3446e9SSimon J. Gerraty
83ac3446e9SSimon J. Gerraty.if ${MK_DIRDEPS_BUILD:Uno} == "yes"
84ac3446e9SSimon J. GerratyMK_META_MODE = yes
85ac3446e9SSimon J. Gerraty.-include <meta.sys.mk>
86ac3446e9SSimon J. Gerraty.elif ${MK_META_MODE:Uno} == "yes"
87ac3446e9SSimon J. Gerraty.MAKE.MODE = meta verbose
88ac3446e9SSimon J. Gerraty.endif
89ac3446e9SSimon J. Gerraty# make sure we have a harmless value
90ac3446e9SSimon J. Gerraty.MAKE.MODE ?= normal
913cbdda60SSimon J. Gerraty
923cbdda60SSimon J. Gerraty# if you want objdirs make them automatic
93ac3446e9SSimon J. Gerraty# and do it early before we compute .PATH
94ac3446e9SSimon J. Gerraty.if ${MK_AUTO_OBJ:Uno} == "yes" || ${MKOBJDIRS:Uno} == "auto"
953cbdda60SSimon J. Gerraty.include <auto.obj.mk>
963cbdda60SSimon J. Gerraty.endif
973cbdda60SSimon J. Gerraty
983cbdda60SSimon J. Gerraty.if !empty(SRCTOP)
993cbdda60SSimon J. Gerraty.if ${.CURDIR} == ${SRCTOP}
1003cbdda60SSimon J. GerratyRELDIR = .
1013cbdda60SSimon J. Gerraty.elif ${.CURDIR:M${SRCTOP}/*}
1023cbdda60SSimon J. GerratyRELDIR := ${.CURDIR:S,${SRCTOP}/,,}
1033cbdda60SSimon J. Gerraty.endif
1043cbdda60SSimon J. Gerraty.endif
1053cbdda60SSimon J. Gerraty
1063cbdda60SSimon J. GerratyMACHINE_ARCH.host ?= ${_HOST_ARCH}
1073cbdda60SSimon J. GerratyMACHINE_ARCH.${MACHINE} ?= ${MACHINE}
1083cbdda60SSimon J. Gerraty.if empty(MACHINE_ARCH)
1093cbdda60SSimon J. GerratyMACHINE_ARCH = ${MACHINE_ARCH.${MACHINE}}
1103cbdda60SSimon J. Gerraty.endif
1113cbdda60SSimon J. Gerraty
1123cbdda60SSimon J. Gerraty.ifndef ROOT_GROUP
1133cbdda60SSimon J. GerratyROOT_GROUP != sed -n /:0:/s/:.*//p /etc/group
1143cbdda60SSimon J. Gerraty.export ROOT_GROUP
1153cbdda60SSimon J. Gerraty.endif
1163cbdda60SSimon J. Gerraty
1173cbdda60SSimon J. Gerratyunix ?= We run ${_HOST_OSNAME}.
1183cbdda60SSimon J. Gerraty
1193cbdda60SSimon J. Gerraty# A race condition in mkdir, means that it can bail if another
1203cbdda60SSimon J. Gerraty# process made a dir that mkdir expected to.
1213cbdda60SSimon J. Gerraty# We repeat the mkdir -p a number of times to try and work around this.
1223cbdda60SSimon J. Gerraty# We stop looping as soon as the dir exists.
1233cbdda60SSimon J. Gerraty# If we get to the end of the loop, a plain mkdir will issue an error.
1243cbdda60SSimon J. GerratyMkdirs= Mkdirs() { \
1253cbdda60SSimon J. Gerraty	for d in $$*; do \
1263cbdda60SSimon J. Gerraty		for i in 1 2 3 4 5 6; do \
1273cbdda60SSimon J. Gerraty			mkdir -p $$d; \
1283cbdda60SSimon J. Gerraty			test -d $$d && return 0; \
1293cbdda60SSimon J. Gerraty		done; \
1303cbdda60SSimon J. Gerraty		mkdir $$d || exit $$?; \
1313cbdda60SSimon J. Gerraty	done; }
1323cbdda60SSimon J. Gerraty
1333cbdda60SSimon J. Gerraty# this often helps with debugging
1343cbdda60SSimon J. Gerraty.SUFFIXES:      .cpp-out
1353cbdda60SSimon J. Gerraty
1363cbdda60SSimon J. Gerraty.c.cpp-out:
1373cbdda60SSimon J. Gerraty	@${COMPILE.c:N-c} -E ${.IMPSRC} | grep -v '^[ 	]*$$'
1383cbdda60SSimon J. Gerraty
139e48f47ddSSimon J. Gerraty${CXX_SUFFIXES:%=%.cpp-out}:
1403cbdda60SSimon J. Gerraty	@${COMPILE.cc:N-c} -E ${.IMPSRC} | grep -v '^[ 	]*$$'
1413cbdda60SSimon J. Gerraty
142ac3446e9SSimon J. Gerraty# late customizations
143ac3446e9SSimon J. Gerraty.-include <local.sys.mk>
1443cbdda60SSimon J. Gerraty
1453cbdda60SSimon J. Gerraty# if .CURDIR is matched by any entry in DEBUG_MAKE_DIRS we
1463cbdda60SSimon J. Gerraty# will apply DEBUG_MAKE_FLAGS, now.
1473cbdda60SSimon J. Gerraty.if !empty(_DEBUG_MAKE_FLAGS)
1483cbdda60SSimon J. Gerraty.if ${_DEBUG_MAKE_DIRS:Uno:@x@${.CURDIR:M$x}@} != ""
1493cbdda60SSimon J. Gerraty.MAKEFLAGS: ${_DEBUG_MAKE_FLAGS}
1503cbdda60SSimon J. Gerraty.endif
1513cbdda60SSimon J. Gerraty.endif
152