xref: /freebsd/share/mk/sys.mk (revision 1ca12bd927d76f5a1b9aad2c72f673a3b01919c0)
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#
16*1ca12bd9SJohn Baldwin__TO_CPUARCH=C/arm(v[67])?/arm/:C/powerpc(64|64le|spe)/powerpc/:C/riscv64/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
1530e1e341bSAlex RichardsonARFLAGS		?=	-crsD
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
16920c46652SDavid E. O'BrienCFLAGS		?=	-O2 -pipe
170cfb5b325SJohn Birrell.if defined(NO_STRICT_ALIASING)
171cfb5b325SJohn BirrellCFLAGS		+=	-fno-strict-aliasing
172d17387acSBruce Evans.endif
173cdc162feSOlivier Houchard.endif
174c867306eSJonathan AndersonIR_CFLAGS	?=	${STATIC_CFLAGS:N-O*} ${CFLAGS:N-O*}
175424b4e66SStephane E. PotvinPO_CFLAGS	?=	${CFLAGS}
176afe61c15SRodney W. Grimes
1770c76c8aaSMark Johnston# cp(1) is used to copy source files to ${.OBJDIR}, make sure it can handle
1780c76c8aaSMark Johnston# read-only files as non-root by passing -f.
1790c76c8aaSMark JohnstonCP		?=	cp -f
1800c76c8aaSMark Johnston
1810c76c8aaSMark JohnstonCPP		?=	cpp
1820c76c8aaSMark Johnston
183770ac3b2SJohn Birrell# C Type Format data is required for DTrace
184770ac3b2SJohn BirrellCTFFLAGS	?=	-L VERSION
185770ac3b2SJohn Birrell
186770ac3b2SJohn BirrellCTFCONVERT	?=	ctfconvert
187770ac3b2SJohn BirrellCTFMERGE	?=	ctfmerge
1887a37b5fcSWill Andrews
189770ac3b2SJohn Birrell.if defined(CFLAGS) && (${CFLAGS:M-g} != "")
190770ac3b2SJohn BirrellCTFFLAGS	+=	-g
191770ac3b2SJohn Birrell.endif
192770ac3b2SJohn Birrell
193443dced5SPaul RichardsCXX		?=	c++
19496f2d85eSMarcel MoolenaarCXXFLAGS	?=	${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes:N-Wno-pointer-sign:N-Wold-style-definition}
195c867306eSJonathan AndersonIR_CXXFLAGS	?=	${STATIC_CXXFLAGS:N-O*} ${CXXFLAGS:N-O*}
196424b4e66SStephane E. PotvinPO_CXXFLAGS	?=	${CXXFLAGS}
197afe61c15SRodney W. Grimes
1980c76c8aaSMark JohnstonDTRACE		?=	dtrace
1990c76c8aaSMark JohnstonDTRACEFLAGS	?=	-C -x nolibs
200afe61c15SRodney W. Grimes
20165d2bdc6SRuslan Ermilov.if empty(.MAKEFLAGS:M-s)
202415bccaaSBruce EvansECHO		?=	echo
203415bccaaSBruce EvansECHODIR		?=	echo
204415bccaaSBruce Evans.else
205415bccaaSBruce EvansECHO		?=	true
206415bccaaSBruce Evans.if ${.MAKEFLAGS:M-s} == "-s"
207415bccaaSBruce EvansECHODIR		?=	echo
208415bccaaSBruce Evans.else
209415bccaaSBruce EvansECHODIR		?=	true
210415bccaaSBruce Evans.endif
211415bccaaSBruce Evans.endif
212afe61c15SRodney W. Grimes
213c6081deaSMarcin WojtasELFCTL		?=	elfctl
214c6081deaSMarcin Wojtas
21556585ab5SBryan Drewery.if ${.MAKEFLAGS:M-N}
21656585ab5SBryan Drewery# bmake -N is supposed to skip executing anything but it does not skip
21756585ab5SBryan Drewery# exeucting '+' commands.  The '+' feature is used where .MAKE
21856585ab5SBryan Drewery# is not safe for the entire target.  -N is intended to skip building sub-makes
21956585ab5SBryan Drewery# so it executing '+' commands is not right.  Work around the bug by not
22056585ab5SBryan Drewery# setting '+' when -N is used.
221acabf29aSHartmut Brandt_+_		?=
222acabf29aSHartmut Brandt.else
223acabf29aSHartmut Brandt_+_		?=	+
224acabf29aSHartmut Brandt.endif
225acabf29aSHartmut Brandt
2262be2be74SSteve Price.if defined(%POSIX)
2272be2be74SSteve PriceFC		?=	fort77
2282be2be74SSteve PriceFFLAGS		?=	-O 1
2292be2be74SSteve Price.else
230415bccaaSBruce EvansFC		?=	f77
231415bccaaSBruce EvansFFLAGS		?=	-O
2322be2be74SSteve Price.endif
233415bccaaSBruce EvansEFLAGS		?=
234afe61c15SRodney W. Grimes
235a8b8edb2SMaxim SobolevINSTALL		?=	${INSTALL_CMD:Uinstall}
236c7499507SAndrey A. Chernov
237415bccaaSBruce EvansLEX		?=	lex
238415bccaaSBruce EvansLFLAGS		?=
239afe61c15SRodney W. Grimes
240ea22493aSJohn Baldwin# LDFLAGS is for CC, _LDFLAGS is for LD.  Generate _LDFLAGS from
241ea22493aSJohn Baldwin# LDFLAGS by stripping -Wl, from pass-through arguments and dropping
242ea22493aSJohn Baldwin# compiler driver flags (e.g. -mabi=*) that conflict with flags to LD.
243415bccaaSBruce EvansLD		?=	ld
244ea22493aSJohn BaldwinLDFLAGS		?=
2457bc797e3SAlex Richardson_LDFLAGS	=	${LDFLAGS:S/-Wl,//g:N-mabi=*:N-fuse-ld=*:N--ld-path=*:N-fsanitize=*:N-fno-sanitize=*}
246afe61c15SRodney W. Grimes
247415bccaaSBruce EvansMAKE		?=	make
248afe61c15SRodney W. Grimes
2496f1d6967SWarner Losh.if !defined(%POSIX)
250e4195e2eSJonathan AndersonLLVM_LINK	?=	llvm-link
251e4195e2eSJonathan Anderson
252e7c08366SMarcel MoolenaarLORDER		?=	lorder
253e7c08366SMarcel Moolenaar
2546f1d6967SWarner LoshNM		?=	nm
25525ec8c92SRui PauloNMFLAGS		?=
2566f1d6967SWarner Losh
25770a6e331SBruce EvansOBJC		?=	cc
25870a6e331SBruce EvansOBJCFLAGS	?=	${OBJCINCLUDES} ${CFLAGS} -Wno-import
25970a6e331SBruce Evans
260e97696b5SEd MasteOBJCOPY		?=	objcopy
261e97696b5SEd Maste
262415bccaaSBruce EvansPC		?=	pc
263415bccaaSBruce EvansPFLAGS		?=
264afe61c15SRodney W. Grimes
265415bccaaSBruce EvansRC		?=	f77
266415bccaaSBruce EvansRFLAGS		?=
267e7c08366SMarcel Moolenaar
268e7c08366SMarcel MoolenaarTSORT		?=	tsort
269e7c08366SMarcel MoolenaarTSORTFLAGS	?=	-q
27044383aa3SEd Maste.endif
271415bccaaSBruce Evans
272415bccaaSBruce EvansSHELL		?=	sh
273415bccaaSBruce Evans
27478abccfcSBaptiste Daroussin.if !defined(%POSIX)
27578abccfcSBaptiste DaroussinSIZE		?=	size
2761a18ab42SAlex RichardsonSTRIPBIN	?=	strip
27778abccfcSBaptiste Daroussin.endif
27878abccfcSBaptiste Daroussin
279415bccaaSBruce EvansYACC		?=	yacc
2802be2be74SSteve Price.if defined(%POSIX)
2812be2be74SSteve PriceYFLAGS		?=
2822be2be74SSteve Price.else
283415bccaaSBruce EvansYFLAGS		?=	-d
2842be2be74SSteve Price.endif
2852be2be74SSteve Price
2862be2be74SSteve Price.if defined(%POSIX)
2878d962594SBruce Evans
288808b18e4SJonathan Anderson.include "bsd.suffixes-posix.mk"
2892be2be74SSteve Price
2902be2be74SSteve Price.else
2912be2be74SSteve Price
2922be2be74SSteve Price# non-Posix rule set
293808b18e4SJonathan Anderson.include "bsd.suffixes.mk"
2943585b293SGarrett Wollman
295daf514d0SSimon J. Gerraty# Pull in global settings.
296daf514d0SSimon J. Gerraty__MAKE_CONF?=/etc/make.conf
297daf514d0SSimon J. Gerraty.if exists(${__MAKE_CONF})
298daf514d0SSimon J. Gerraty.include "${__MAKE_CONF}"
299daf514d0SSimon J. Gerraty.endif
300daf514d0SSimon J. Gerraty
301daf514d0SSimon J. Gerraty# late include for customization
302b9d0791fSWarner Losh.sinclude <local.sys.mk>
30334bbee43SWarner Losh
3043ea2c169SBryan Drewery.if defined(META_MODE)
3053ea2c169SBryan DreweryMETA_MODE:=	${META_MODE:O:u}
3063ea2c169SBryan Drewery.endif
3073ea2c169SBryan Drewery
308a39cea66SYaroslav Tykhiy.if defined(__MAKE_SHELL) && !empty(__MAKE_SHELL)
309a39cea66SYaroslav TykhiySHELL=	${__MAKE_SHELL}
310a39cea66SYaroslav Tykhiy.SHELL: path=${__MAKE_SHELL}
311a39cea66SYaroslav Tykhiy.endif
312a39cea66SYaroslav Tykhiy
313a0f1aa83SSimon J. Gerraty# Tell bmake to expand -V VAR by default
314a0f1aa83SSimon J. Gerraty.MAKE.EXPAND_VARIABLES= yes
315a0f1aa83SSimon J. Gerraty
316a0f1aa83SSimon J. Gerraty# Tell bmake the makefile preference
317a12a1b47SBryan DreweryMAKEFILE_PREFERENCE?= BSDmakefile makefile Makefile
318a12a1b47SBryan Drewery.MAKE.MAKEFILE_PREFERENCE= ${MAKEFILE_PREFERENCE}
319a0f1aa83SSimon J. Gerraty
320c41b6218SBryan Drewery# Tell bmake to always pass job tokens, regardless of target depending on
321c41b6218SBryan Drewery# .MAKE or looking like ${MAKE}/${.MAKE}/$(MAKE)/$(.MAKE)/make.
322c41b6218SBryan Drewery.MAKE.ALWAYS_PASS_JOB_QUEUE= yes
323c41b6218SBryan Drewery
324a0f1aa83SSimon J. Gerraty# By default bmake does *not* use set -e
325a0f1aa83SSimon J. Gerraty# when running target scripts, this is a problem for many makefiles here.
326a0f1aa83SSimon J. Gerraty# So define a shell that will do what FreeBSD expects.
327a0f1aa83SSimon J. Gerraty.ifndef WITHOUT_SHELL_ERRCTL
328b9d0791fSWarner Losh__MAKE_SHELL?=/bin/sh
329a0f1aa83SSimon J. Gerraty.SHELL: name=sh \
330a0f1aa83SSimon J. Gerraty	quiet="set -" echo="set -v" filter="set -" \
331a0f1aa83SSimon J. Gerraty	hasErrCtl=yes check="set -e" ignore="set +e" \
332a0f1aa83SSimon J. Gerraty	echoFlag=v errFlag=e \
333b9d0791fSWarner Losh	path=${__MAKE_SHELL}
334a0f1aa83SSimon J. Gerraty.endif
335a0f1aa83SSimon J. Gerraty
3369ca54343SWarner Losh# Hack for ports compatibility. Historically, ports makefiles have
337682d8404SMarcelo Araujo# assumed they can examine MACHINE_CPU without including anything
3389ca54343SWarner Losh# because this was automatically included in sys.mk. For /usr/src,
3399ca54343SWarner Losh# this file has moved to being included from bsd.opts.mk. Until all
340682d8404SMarcelo Araujo# the ports files are modernized, and a reasonable transition
3419ca54343SWarner Losh# period has passed, include it while we're in a ports tree here
3429ca54343SWarner Losh# to preserve historic behavior.
3439ca54343SWarner Losh.if exists(${.CURDIR}/../../Mk/bsd.port.mk)
3448d962594SBruce Evans.include <bsd.cpu.mk>
3459ca54343SWarner Losh.endif
346be4646cfSWarner Losh
347be4646cfSWarner Losh.endif # ! Posix
348