xref: /freebsd/share/mk/sys.mk (revision 1a18ab420b6098b92f3a16db68e482682a506688)
1415bccaaSBruce Evans#	from: @(#)sys.mk	8.2 (Berkeley) 3/21/94
27f3dea24SPeter Wemm# $FreeBSD$
3afe61c15SRodney W. Grimes
4415bccaaSBruce Evansunix		?=	We run FreeBSD, not UNIX.
53f5a93f6SDavid E. O'Brien.FreeBSD	?=	true
6afe61c15SRodney W. Grimes
76fc3ead1SWarner Losh.if !defined(%POSIX)
86fc3ead1SWarner Losh#
96fc3ead1SWarner Losh# MACHINE_CPUARCH defines a collection of MACHINE_ARCH.  Machines with
10bd4473b8SDimitry Andric# the same MACHINE_ARCH can run each other's binaries, so it necessarily
117709b2aeSWarner Losh# has word size and endian swizzled in.  However, the source files for
12bd4473b8SDimitry Andric# these machines often are shared amongst all combinations of size
13bd4473b8SDimitry Andric# and/or endian.  This is called MACHINE_CPU in NetBSD, but that's used
14bd4473b8SDimitry Andric# for something different in FreeBSD.
156fc3ead1SWarner Losh#
160b972ac9SWarner Losh__TO_CPUARCH=C/mips(n32|64)?(el)?(hf)?/mips/:C/arm(v[67])?(eb)?/arm/:C/powerpc(64|spe)/powerpc/:C/riscv64(sf)?/riscv/
177709b2aeSWarner LoshMACHINE_CPUARCH=${MACHINE_ARCH:${__TO_CPUARCH}}
186b14aaa4SWarner Losh.endif
190815243cSMarcel Moolenaar
20dfa09989SBryan Drewery__DEFAULT_YES_OPTIONS+= \
21dfa09989SBryan Drewery	UNIFIED_OBJDIR
22ccfb9654SSimon J. Gerraty
23615a1e70SBryan Drewery# src.sys.obj.mk enables AUTO_OBJ by default if possible but it is otherwise
24615a1e70SBryan Drewery# disabled.  Ensure src.conf.5 shows it as default on.
25615a1e70SBryan Drewery.if make(showconfig)
26615a1e70SBryan Drewery__DEFAULT_YES_OPTIONS+= AUTO_OBJ
27615a1e70SBryan Drewery.endif
28ccfb9654SSimon J. Gerraty
29ccfb9654SSimon J. Gerraty# Some options we need now
30ccfb9654SSimon J. Gerraty__DEFAULT_NO_OPTIONS= \
31948f327eSSimon J. Gerraty	DIRDEPS_BUILD \
32dba62d8dSSimon J. Gerraty	DIRDEPS_CACHE
33ccfb9654SSimon J. Gerraty
34ccfb9654SSimon J. Gerraty__DEFAULT_DEPENDENT_OPTIONS= \
35948f327eSSimon J. Gerraty	AUTO_OBJ/DIRDEPS_BUILD \
36dba62d8dSSimon J. Gerraty	META_MODE/DIRDEPS_BUILD \
37948f327eSSimon J. Gerraty	STAGING/DIRDEPS_BUILD \
38948f327eSSimon J. Gerraty	SYSROOT/DIRDEPS_BUILD
39ccfb9654SSimon J. Gerraty
40da6e996dSBryan Drewery__ENV_ONLY_OPTIONS:= \
41da6e996dSBryan Drewery	${__DEFAULT_NO_OPTIONS} \
42da6e996dSBryan Drewery	${__DEFAULT_YES_OPTIONS} \
43da6e996dSBryan Drewery	${__DEFAULT_DEPENDENT_OPTIONS:H}
44da6e996dSBryan Drewery
45daf514d0SSimon J. Gerraty# early include for customization
46daf514d0SSimon J. Gerraty# see local.sys.mk below
47b9d0791fSWarner Losh# Not included when building in fmake compatibility mode (still needed
48b9d0791fSWarner Losh# for older system support)
49b9d0791fSWarner Losh.if defined(.PARSEDIR)
50b9d0791fSWarner Losh.sinclude <local.sys.env.mk>
51ccfb9654SSimon J. Gerraty
52232af795SBryan Drewery.include <bsd.mkopt.mk>
53232af795SBryan Drewery
5437250e48SBryan Drewery# Disable MK_META_MODE with make -B
5537250e48SBryan Drewery.if ${MK_META_MODE} == "yes" && defined(.MAKEFLAGS) && ${.MAKEFLAGS:M-B}
5637250e48SBryan DreweryMK_META_MODE=	no
5737250e48SBryan Drewery.endif
5837250e48SBryan Drewery
59948f327eSSimon J. Gerraty.if ${MK_DIRDEPS_BUILD} == "yes"
60b9d0791fSWarner Losh.sinclude <meta.sys.mk>
6137250e48SBryan Drewery.elif ${MK_META_MODE} == "yes"
62718edb15SBryan DreweryMETA_MODE+=	meta
63718edb15SBryan Drewery.if empty(.MAKEFLAGS:M-s)
6464923b11SBryan Drewery# verbose will show .MAKE.META.PREFIX for each target.
65718edb15SBryan DreweryMETA_MODE+=	verbose
66718edb15SBryan Drewery.endif
673681768cSBryan Drewery.if !defined(NO_META_MISSING)
683681768cSBryan DreweryMETA_MODE+=	missing-meta=yes
693681768cSBryan Drewery.endif
70b29980a6SBryan Drewery# silent will hide command output if a .meta file is created.
71b29980a6SBryan Drewery.if !defined(NO_SILENT)
72b29980a6SBryan DreweryMETA_MODE+=	silent=yes
73b29980a6SBryan Drewery.endif
749369f357SBryan Drewery.if !exists(/dev/filemon) || defined(NO_FILEMON)
7564923b11SBryan DreweryMETA_MODE+= nofilemon
76952de59dSBryan Drewery.endif
773681768cSBryan Drewery# Require filemon data with bmake
783681768cSBryan Drewery.if empty(META_MODE:Mnofilemon)
793681768cSBryan DreweryMETA_MODE+= missing-filemon=yes
803681768cSBryan Drewery.endif
81ccfb9654SSimon J. Gerraty.endif
8264923b11SBryan DreweryMETA_MODE?= normal
8364923b11SBryan Drewery.export META_MODE
8464923b11SBryan Drewery.MAKE.MODE?= ${META_MODE}
85ffe0978fSBryan Drewery.if !empty(.MAKE.MODE:Mmeta)
86ffe0978fSBryan Drewery.if !defined(NO_META_IGNORE_HOST)
877f17cd1cSBryan Drewery# Ignore host file changes that will otherwise cause
887f17cd1cSBryan Drewery# buildworld -> installworld -> buildworld to rebuild everything.
897f17cd1cSBryan Drewery# Since the build is self-reliant and bootstraps everything it needs,
907f17cd1cSBryan Drewery# this should not be a real problem for incremental builds.
91799483e4SBryan Drewery# XXX: This relies on the existing host tools retaining ABI compatibility
92799483e4SBryan Drewery# through upgrades since they won't be rebuilt on header/library changes.
931a9cc831SBryan Drewery# This is mitigated by Makefile.inc1 for known-ABI-breaking revisions.
947f17cd1cSBryan Drewery# Note that these are prefix matching, so /lib matches /libexec.
957f17cd1cSBryan Drewery.MAKE.META.IGNORE_PATHS+= \
967f17cd1cSBryan Drewery	${__MAKE_SHELL} \
977f17cd1cSBryan Drewery	/bin \
987f17cd1cSBryan Drewery	/lib \
997f17cd1cSBryan Drewery	/rescue \
1007f17cd1cSBryan Drewery	/sbin \
1017f17cd1cSBryan Drewery	/usr/bin \
1027f17cd1cSBryan Drewery	/usr/lib \
1037f17cd1cSBryan Drewery	/usr/sbin \
1047f17cd1cSBryan Drewery	/usr/share \
1057f17cd1cSBryan Drewery
106ffe0978fSBryan Drewery.else
107ffe0978fSBryan DreweryNO_META_IGNORE_HOST_HEADERS=	1
1087f17cd1cSBryan Drewery.endif
109ffe0978fSBryan Drewery.if !defined(NO_META_IGNORE_HOST_HEADERS)
110ffe0978fSBryan Drewery.MAKE.META.IGNORE_PATHS+= /usr/include
111ffe0978fSBryan Drewery.endif
11253b3b059SBryan Drewery# We do not want everything out-of-date just because
11353b3b059SBryan Drewery# some unrelated shared lib updated this.
11453b3b059SBryan Drewery.MAKE.META.IGNORE_PATHS+= /usr/local/etc/libmap.d
115ffe0978fSBryan Drewery.endif	# !empty(.MAKE.MODE:Mmeta)
1160b6ba3f2SBryan Drewery
117ccfb9654SSimon J. Gerraty.if ${MK_AUTO_OBJ} == "yes"
118ccfb9654SSimon J. Gerraty# This needs to be done early - before .PATH is computed
119bb8cd0c6SBryan Drewery# Don't do this for 'make showconfig' as it enables all options where meta mode
120bb8cd0c6SBryan Drewery# is not expected.
1216e6be2bbSBryan Drewery.if !make(showconfig) && !make(print-dir) && !make(test-system-*) && \
1226e6be2bbSBryan Drewery    empty(.MAKEFLAGS:M-[nN])
123b9d0791fSWarner Losh.sinclude <auto.obj.mk>
1248d4b8102SBryan Drewery.endif
12540a54c51SBryan Drewery.endif	# ${MK_AUTO_OBJ} == "yes"
126232af795SBryan Drewery.else # bmake
127232af795SBryan Drewery.include <bsd.mkopt.mk>
128ccfb9654SSimon J. Gerraty.endif
129ccfb9654SSimon J. Gerraty
1302be2be74SSteve Price# If the special target .POSIX appears (without prerequisites or
1312be2be74SSteve Price# commands) before the first noncomment line in the makefile, make shall
1322be2be74SSteve Price# process the makefile as specified by the Posix 1003.2 specification.
1332be2be74SSteve Price# make(1) sets the special macro %POSIX in this case (to the actual
1342be2be74SSteve Price# value "1003.2", for what it's worth).
1352be2be74SSteve Price#
1362be2be74SSteve Price# The rules below use this macro to distinguish between Posix-compliant
1372be2be74SSteve Price# and default behaviour.
13867292978SColin Percival#
13967292978SColin Percival# This functionality is currently broken, since make(1) processes sys.mk
14067292978SColin Percival# before reading any other files, and consequently has no opportunity to
14167292978SColin Percival# set the %POSIX macro before we read this point.
1422be2be74SSteve Price
1432be2be74SSteve Price.if defined(%POSIX)
1442be2be74SSteve Price.SUFFIXES:	.o .c .y .l .a .sh .f
1452be2be74SSteve Price.else
1461cbb5888SWarner Losh.SUFFIXES:	.out .a .o .bco .llo .c .cc .cpp .cxx .C .m .F .f .e .r .y .l .S .asm .s .cl .p .h .sh
1472be2be74SSteve Price.endif
148afe61c15SRodney W. Grimes
149415bccaaSBruce EvansAR		?=	ar
1502be2be74SSteve Price.if defined(%POSIX)
1512be2be74SSteve PriceARFLAGS		?=	-rv
1522be2be74SSteve Price.else
153f1c8f60bSDag-Erling SmørgravARFLAGS		?=	-crD
1542be2be74SSteve Price.endif
155415bccaaSBruce EvansRANLIB		?=	ranlib
156f1c8f60bSDag-Erling Smørgrav.if !defined(%POSIX)
157f1c8f60bSDag-Erling SmørgravRANLIBFLAGS	?=	-D
158f1c8f60bSDag-Erling Smørgrav.endif
159afe61c15SRodney W. Grimes
160415bccaaSBruce EvansAS		?=	as
161415bccaaSBruce EvansAFLAGS		?=
1625ada7d99SKonstantin BelousovACFLAGS		?=
163afe61c15SRodney W. Grimes
1642be2be74SSteve Price.if defined(%POSIX)
1652be2be74SSteve PriceCC		?=	c89
166d17387acSBruce EvansCFLAGS		?=	-O
1672be2be74SSteve Price.else
168415bccaaSBruce EvansCC		?=	cc
1697d63f8b6SEmmanuel Vadot.if ${MACHINE_CPUARCH} == "mips"
17020c46652SDavid E. O'BrienCFLAGS		?=	-O -pipe
171cdc162feSOlivier Houchard.else
17220c46652SDavid E. O'BrienCFLAGS		?=	-O2 -pipe
173cfb5b325SJohn Birrell.endif
174cfb5b325SJohn Birrell.if defined(NO_STRICT_ALIASING)
175cfb5b325SJohn BirrellCFLAGS		+=	-fno-strict-aliasing
176d17387acSBruce Evans.endif
177cdc162feSOlivier Houchard.endif
178c867306eSJonathan AndersonIR_CFLAGS	?=	${STATIC_CFLAGS:N-O*} ${CFLAGS:N-O*}
179424b4e66SStephane E. PotvinPO_CFLAGS	?=	${CFLAGS}
180afe61c15SRodney W. Grimes
1810c76c8aaSMark Johnston# cp(1) is used to copy source files to ${.OBJDIR}, make sure it can handle
1820c76c8aaSMark Johnston# read-only files as non-root by passing -f.
1830c76c8aaSMark JohnstonCP		?=	cp -f
1840c76c8aaSMark Johnston
1850c76c8aaSMark JohnstonCPP		?=	cpp
1860c76c8aaSMark Johnston
187770ac3b2SJohn Birrell# C Type Format data is required for DTrace
188770ac3b2SJohn BirrellCTFFLAGS	?=	-L VERSION
189770ac3b2SJohn Birrell
190770ac3b2SJohn BirrellCTFCONVERT	?=	ctfconvert
191770ac3b2SJohn BirrellCTFMERGE	?=	ctfmerge
1927a37b5fcSWill Andrews
193770ac3b2SJohn Birrell.if defined(CFLAGS) && (${CFLAGS:M-g} != "")
194770ac3b2SJohn BirrellCTFFLAGS	+=	-g
195770ac3b2SJohn Birrell.endif
196770ac3b2SJohn Birrell
197443dced5SPaul RichardsCXX		?=	c++
19896f2d85eSMarcel MoolenaarCXXFLAGS	?=	${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes:N-Wno-pointer-sign:N-Wold-style-definition}
199c867306eSJonathan AndersonIR_CXXFLAGS	?=	${STATIC_CXXFLAGS:N-O*} ${CXXFLAGS:N-O*}
200424b4e66SStephane E. PotvinPO_CXXFLAGS	?=	${CXXFLAGS}
201afe61c15SRodney W. Grimes
2020c76c8aaSMark JohnstonDTRACE		?=	dtrace
2030c76c8aaSMark JohnstonDTRACEFLAGS	?=	-C -x nolibs
204afe61c15SRodney W. Grimes
20565d2bdc6SRuslan Ermilov.if empty(.MAKEFLAGS:M-s)
206415bccaaSBruce EvansECHO		?=	echo
207415bccaaSBruce EvansECHODIR		?=	echo
208415bccaaSBruce Evans.else
209415bccaaSBruce EvansECHO		?=	true
210415bccaaSBruce Evans.if ${.MAKEFLAGS:M-s} == "-s"
211415bccaaSBruce EvansECHODIR		?=	echo
212415bccaaSBruce Evans.else
213415bccaaSBruce EvansECHODIR		?=	true
214415bccaaSBruce Evans.endif
215415bccaaSBruce Evans.endif
216afe61c15SRodney W. Grimes
21756585ab5SBryan Drewery.if ${.MAKEFLAGS:M-N}
21856585ab5SBryan Drewery# bmake -N is supposed to skip executing anything but it does not skip
21956585ab5SBryan Drewery# exeucting '+' commands.  The '+' feature is used where .MAKE
22056585ab5SBryan Drewery# is not safe for the entire target.  -N is intended to skip building sub-makes
22156585ab5SBryan Drewery# so it executing '+' commands is not right.  Work around the bug by not
22256585ab5SBryan Drewery# setting '+' when -N is used.
223acabf29aSHartmut Brandt_+_		?=
224acabf29aSHartmut Brandt.else
225acabf29aSHartmut Brandt_+_		?=	+
226acabf29aSHartmut Brandt.endif
227acabf29aSHartmut Brandt
2282be2be74SSteve Price.if defined(%POSIX)
2292be2be74SSteve PriceFC		?=	fort77
2302be2be74SSteve PriceFFLAGS		?=	-O 1
2312be2be74SSteve Price.else
232415bccaaSBruce EvansFC		?=	f77
233415bccaaSBruce EvansFFLAGS		?=	-O
2342be2be74SSteve Price.endif
235415bccaaSBruce EvansEFLAGS		?=
236afe61c15SRodney W. Grimes
237a8b8edb2SMaxim SobolevINSTALL		?=	${INSTALL_CMD:Uinstall}
238c7499507SAndrey A. Chernov
239415bccaaSBruce EvansLEX		?=	lex
240415bccaaSBruce EvansLFLAGS		?=
241afe61c15SRodney W. Grimes
242ea22493aSJohn Baldwin# LDFLAGS is for CC, _LDFLAGS is for LD.  Generate _LDFLAGS from
243ea22493aSJohn Baldwin# LDFLAGS by stripping -Wl, from pass-through arguments and dropping
244ea22493aSJohn Baldwin# compiler driver flags (e.g. -mabi=*) that conflict with flags to LD.
245415bccaaSBruce EvansLD		?=	ld
246ea22493aSJohn BaldwinLDFLAGS		?=
247ed617948SAlex Richardson_LDFLAGS	=	${LDFLAGS:S/-Wl,//g:N-mabi=*:N-fuse-ld=*}
248afe61c15SRodney W. Grimes
249415bccaaSBruce EvansMAKE		?=	make
250afe61c15SRodney W. Grimes
2516f1d6967SWarner Losh.if !defined(%POSIX)
252e4195e2eSJonathan AndersonLLVM_LINK	?=	llvm-link
253e4195e2eSJonathan Anderson
254e7c08366SMarcel MoolenaarLORDER		?=	lorder
255e7c08366SMarcel Moolenaar
2566f1d6967SWarner LoshNM		?=	nm
25725ec8c92SRui PauloNMFLAGS		?=
2586f1d6967SWarner Losh
25970a6e331SBruce EvansOBJC		?=	cc
26070a6e331SBruce EvansOBJCFLAGS	?=	${OBJCINCLUDES} ${CFLAGS} -Wno-import
26170a6e331SBruce Evans
262e97696b5SEd MasteOBJCOPY		?=	objcopy
263e97696b5SEd Maste
264415bccaaSBruce EvansPC		?=	pc
265415bccaaSBruce EvansPFLAGS		?=
266afe61c15SRodney W. Grimes
267415bccaaSBruce EvansRC		?=	f77
268415bccaaSBruce EvansRFLAGS		?=
269e7c08366SMarcel Moolenaar
270e7c08366SMarcel MoolenaarTSORT		?=	tsort
271e7c08366SMarcel MoolenaarTSORTFLAGS	?=	-q
27244383aa3SEd Maste.endif
273415bccaaSBruce Evans
274415bccaaSBruce EvansSHELL		?=	sh
275415bccaaSBruce Evans
27678abccfcSBaptiste Daroussin.if !defined(%POSIX)
27778abccfcSBaptiste DaroussinSIZE		?=	size
278*1a18ab42SAlex RichardsonSTRIPBIN	?=	strip
27978abccfcSBaptiste Daroussin.endif
28078abccfcSBaptiste Daroussin
281415bccaaSBruce EvansYACC		?=	yacc
2822be2be74SSteve Price.if defined(%POSIX)
2832be2be74SSteve PriceYFLAGS		?=
2842be2be74SSteve Price.else
285415bccaaSBruce EvansYFLAGS		?=	-d
2862be2be74SSteve Price.endif
2872be2be74SSteve Price
2882be2be74SSteve Price.if defined(%POSIX)
2898d962594SBruce Evans
290808b18e4SJonathan Anderson.include "bsd.suffixes-posix.mk"
2912be2be74SSteve Price
2922be2be74SSteve Price.else
2932be2be74SSteve Price
2942be2be74SSteve Price# non-Posix rule set
295808b18e4SJonathan Anderson.include "bsd.suffixes.mk"
2963585b293SGarrett Wollman
297daf514d0SSimon J. Gerraty# Pull in global settings.
298daf514d0SSimon J. Gerraty__MAKE_CONF?=/etc/make.conf
299daf514d0SSimon J. Gerraty.if exists(${__MAKE_CONF})
300daf514d0SSimon J. Gerraty.include "${__MAKE_CONF}"
301daf514d0SSimon J. Gerraty.endif
302daf514d0SSimon J. Gerraty
303daf514d0SSimon J. Gerraty# late include for customization
304b9d0791fSWarner Losh.sinclude <local.sys.mk>
30534bbee43SWarner Losh
3063ea2c169SBryan Drewery.if defined(META_MODE)
3073ea2c169SBryan DreweryMETA_MODE:=	${META_MODE:O:u}
3083ea2c169SBryan Drewery.endif
3093ea2c169SBryan Drewery
310a39cea66SYaroslav Tykhiy.if defined(__MAKE_SHELL) && !empty(__MAKE_SHELL)
311a39cea66SYaroslav TykhiySHELL=	${__MAKE_SHELL}
312a39cea66SYaroslav Tykhiy.SHELL: path=${__MAKE_SHELL}
313a39cea66SYaroslav Tykhiy.endif
314a39cea66SYaroslav Tykhiy
315a0f1aa83SSimon J. Gerraty# Tell bmake to expand -V VAR by default
316a0f1aa83SSimon J. Gerraty.MAKE.EXPAND_VARIABLES= yes
317a0f1aa83SSimon J. Gerraty
318a0f1aa83SSimon J. Gerraty# Tell bmake the makefile preference
319a12a1b47SBryan DreweryMAKEFILE_PREFERENCE?= BSDmakefile makefile Makefile
320a12a1b47SBryan Drewery.MAKE.MAKEFILE_PREFERENCE= ${MAKEFILE_PREFERENCE}
321a0f1aa83SSimon J. Gerraty
322c41b6218SBryan Drewery# Tell bmake to always pass job tokens, regardless of target depending on
323c41b6218SBryan Drewery# .MAKE or looking like ${MAKE}/${.MAKE}/$(MAKE)/$(.MAKE)/make.
324c41b6218SBryan Drewery.MAKE.ALWAYS_PASS_JOB_QUEUE= yes
325c41b6218SBryan Drewery
326a0f1aa83SSimon J. Gerraty# By default bmake does *not* use set -e
327a0f1aa83SSimon J. Gerraty# when running target scripts, this is a problem for many makefiles here.
328a0f1aa83SSimon J. Gerraty# So define a shell that will do what FreeBSD expects.
329a0f1aa83SSimon J. Gerraty.ifndef WITHOUT_SHELL_ERRCTL
330b9d0791fSWarner Losh__MAKE_SHELL?=/bin/sh
331a0f1aa83SSimon J. Gerraty.SHELL: name=sh \
332a0f1aa83SSimon J. Gerraty	quiet="set -" echo="set -v" filter="set -" \
333a0f1aa83SSimon J. Gerraty	hasErrCtl=yes check="set -e" ignore="set +e" \
334a0f1aa83SSimon J. Gerraty	echoFlag=v errFlag=e \
335b9d0791fSWarner Losh	path=${__MAKE_SHELL}
336a0f1aa83SSimon J. Gerraty.endif
337a0f1aa83SSimon J. Gerraty
3389ca54343SWarner Losh# Hack for ports compatibility. Historically, ports makefiles have
339682d8404SMarcelo Araujo# assumed they can examine MACHINE_CPU without including anything
3409ca54343SWarner Losh# because this was automatically included in sys.mk. For /usr/src,
3419ca54343SWarner Losh# this file has moved to being included from bsd.opts.mk. Until all
342682d8404SMarcelo Araujo# the ports files are modernized, and a reasonable transition
3439ca54343SWarner Losh# period has passed, include it while we're in a ports tree here
3449ca54343SWarner Losh# to preserve historic behavior.
3459ca54343SWarner Losh.if exists(${.CURDIR}/../../Mk/bsd.port.mk)
3468d962594SBruce Evans.include <bsd.cpu.mk>
3479ca54343SWarner Losh.endif
348be4646cfSWarner Losh
349be4646cfSWarner Losh.endif # ! Posix
350