xref: /freebsd/share/mk/sys.mk (revision a0ca4af9455b844c5e094fc1b09b1390ffa979fc)
1
2unix		?=	We run FreeBSD, not UNIX.
3.FreeBSD	?=	true
4
5.if !defined(%POSIX)
6#
7# MACHINE_CPUARCH defines a collection of MACHINE_ARCH.  Machines with
8# the same MACHINE_ARCH can run each other's binaries, so it necessarily
9# has word size and endian swizzled in.  However, the source files for
10# these machines often are shared amongst all combinations of size
11# and/or endian.  This is called MACHINE_CPU in NetBSD, but that's used
12# for something different in FreeBSD.
13#
14__TO_CPUARCH=C/arm(v[67])?/arm/:C/powerpc(64|64le|spe)/powerpc/:C/riscv64/riscv/
15MACHINE_CPUARCH=${MACHINE_ARCH:${__TO_CPUARCH}}
16.endif
17
18__DEFAULT_YES_OPTIONS+= \
19	UNIFIED_OBJDIR
20
21# src.sys.obj.mk enables AUTO_OBJ by default if possible but it is otherwise
22# disabled.  Ensure src.conf.5 shows it as default on.
23.if make(showconfig)
24__DEFAULT_YES_OPTIONS+= AUTO_OBJ
25.endif
26
27# Some options we need now
28__DEFAULT_NO_OPTIONS= \
29	DIRDEPS_BUILD \
30	DIRDEPS_CACHE
31
32__DEFAULT_DEPENDENT_OPTIONS= \
33	AUTO_OBJ/DIRDEPS_BUILD \
34	META_ERROR_TARGET/DIRDEPS_BUILD \
35	META_MODE/DIRDEPS_BUILD \
36	STAGING/DIRDEPS_BUILD \
37	SYSROOT/DIRDEPS_BUILD
38
39__ENV_ONLY_OPTIONS:= \
40	${__DEFAULT_NO_OPTIONS} \
41	${__DEFAULT_YES_OPTIONS} \
42	${__DEFAULT_DEPENDENT_OPTIONS:H}
43
44# early include for customization
45# see local.sys.mk below
46.sinclude <local.sys.env.mk>
47
48.include <bsd.mkopt.mk>
49
50# Disable MK_META_MODE with make -B
51.if ${MK_META_MODE} == "yes" && defined(.MAKEFLAGS) && ${.MAKEFLAGS:M-B}
52MK_META_MODE=	no
53.endif
54
55.if ${MK_DIRDEPS_BUILD} == "yes"
56.-include <sys.dirdeps.mk>
57.endif
58.if ${MK_META_MODE} == "yes"
59.if !exists(/dev/filemon) || defined(NO_FILEMON)
60META_MODE+= nofilemon
61.endif
62.-include <meta.sys.mk>
63.endif
64META_MODE?= normal
65.export META_MODE
66.MAKE.MODE?= ${META_MODE}
67.if !empty(.MAKE.MODE:Mmeta)
68.if !defined(NO_META_IGNORE_HOST)
69# Ignore host file changes that will otherwise cause
70# buildworld -> installworld -> buildworld to rebuild everything.
71# Since the build is self-reliant and bootstraps everything it needs,
72# this should not be a real problem for incremental builds.
73# XXX: This relies on the existing host tools retaining ABI compatibility
74# through upgrades since they won't be rebuilt on header/library changes.
75# This is mitigated by Makefile.inc1 for known-ABI-breaking revisions.
76# Note that these are prefix matching, so /lib matches /libexec.
77.MAKE.META.IGNORE_PATHS+= \
78	${__MAKE_SHELL} \
79	/bin \
80	/lib \
81	/rescue \
82	/sbin \
83	/usr/bin \
84	/usr/lib \
85	/usr/sbin \
86	/usr/share \
87
88.else
89NO_META_IGNORE_HOST_HEADERS=	1
90.endif
91.if !defined(NO_META_IGNORE_HOST_HEADERS)
92.MAKE.META.IGNORE_PATHS+= /usr/include
93.endif
94# We do not want everything out-of-date just because
95# some unrelated shared lib updated this.
96.MAKE.META.IGNORE_PATHS+= /usr/local/etc/libmap.d
97.endif	# !empty(.MAKE.MODE:Mmeta)
98
99.if ${MK_AUTO_OBJ} == "yes"
100# This needs to be done early - before .PATH is computed
101# Don't do this for 'make showconfig' as it enables all options where meta mode
102# is not expected.
103.if !make(showconfig) && !make(print-dir) && !make(test-system-*) && \
104    empty(.MAKEFLAGS:M-[nN])
105.sinclude <auto.obj.mk>
106.endif
107.endif	# ${MK_AUTO_OBJ} == "yes"
108
109# If the special target .POSIX appears (without prerequisites or
110# commands) before the first noncomment line in the makefile, make shall
111# process the makefile as specified by the Posix 1003.2 specification.
112# make(1) sets the special macro %POSIX in this case (to the actual
113# value "1003.2", for what it's worth).
114#
115# The rules below use this macro to distinguish between Posix-compliant
116# and default behaviour.
117#
118# This functionality is currently broken, since make(1) processes sys.mk
119# before reading any other files, and consequently has no opportunity to
120# set the %POSIX macro before we read this point.
121
122.if defined(%POSIX)
123.SUFFIXES:	.o .c .y .l .a .sh .f
124.else
125.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
126.endif
127
128AR		?=	ar
129.if defined(%POSIX)
130ARFLAGS		?=	-rv
131.else
132ARFLAGS		?=	-crsD
133.endif
134RANLIB		?=	ranlib
135.if !defined(%POSIX)
136RANLIBFLAGS	?=	-D
137.endif
138
139AS		?=	as
140AFLAGS		?=
141ACFLAGS		?=
142
143.if defined(%POSIX)
144CC		?=	c89
145CFLAGS		?=	-O
146.else
147CC		?=	cc
148CFLAGS		?=	-O2 -pipe
149.if defined(NO_STRICT_ALIASING)
150CFLAGS		+=	-fno-strict-aliasing
151.endif
152.endif
153IR_CFLAGS	?=	${STATIC_CFLAGS:N-O*} ${CFLAGS:N-O*}
154PO_CFLAGS	?=	${CFLAGS}
155
156HOST_CC		?=	${CC}
157
158# cp(1) is used to copy source files to ${.OBJDIR}, make sure it can handle
159# read-only files as non-root by passing -f.
160CP		?=	cp -f
161
162CPP		?=	cpp
163
164# C Type Format data is required for DTrace
165CTFFLAGS	?=	-L VERSION
166
167CTFCONVERT	?=	ctfconvert
168CTFMERGE	?=	ctfmerge
169
170.if defined(CFLAGS) && (${CFLAGS:M-g} != "")
171CTFFLAGS	+=	-g
172.endif
173
174CXX		?=	c++
175CXXFLAGS	?=	${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes:N-Wno-pointer-sign:N-Wold-style-definition}
176IR_CXXFLAGS	?=	${STATIC_CXXFLAGS:N-O*} ${CXXFLAGS:N-O*}
177PO_CXXFLAGS	?=	${CXXFLAGS}
178
179DTRACE		?=	dtrace
180DTRACEFLAGS	?=	-C -x nolibs
181
182.if empty(.MAKEFLAGS:M-s)
183ECHO		?=	echo
184ECHODIR		?=	echo
185.else
186ECHO		?=	true
187.if ${.MAKEFLAGS:M-s} == "-s"
188ECHODIR		?=	echo
189.else
190ECHODIR		?=	true
191.endif
192.endif
193
194ELFCTL		?=	elfctl
195
196.if ${.MAKEFLAGS:M-N}
197# bmake -N is supposed to skip executing anything but it does not skip
198# exeucting '+' commands.  The '+' feature is used where .MAKE
199# is not safe for the entire target.  -N is intended to skip building sub-makes
200# so it executing '+' commands is not right.  Work around the bug by not
201# setting '+' when -N is used.
202_+_		?=
203.else
204_+_		?=	+
205.endif
206
207.if defined(%POSIX)
208FC		?=	fort77
209FFLAGS		?=	-O 1
210.else
211FC		?=	f77
212FFLAGS		?=	-O
213.endif
214EFLAGS		?=
215
216INSTALL		?=	${INSTALL_CMD:Uinstall}
217
218LEX		?=	lex
219LFLAGS		?=
220
221# LDFLAGS is for CC, _LDFLAGS is for LD.  Generate _LDFLAGS from
222# LDFLAGS by stripping -Wl, from pass-through arguments and dropping
223# compiler driver flags (e.g. -mabi=*) that conflict with flags to LD.
224LD		?=	ld
225LDFLAGS		?=
226_LDFLAGS	=	${LDFLAGS:S/-Wl,//g:N-mabi=*:N-fuse-ld=*:N--ld-path=*:N-fsanitize=*:N-fno-sanitize=*}
227
228MAKE		?=	make
229
230.if !defined(%POSIX)
231LLVM_LINK	?=	llvm-link
232
233LORDER		?=	lorder
234
235NM		?=	nm
236NMFLAGS		?=
237
238OBJC		?=	cc
239OBJCFLAGS	?=	${OBJCINCLUDES} ${CFLAGS} -Wno-import
240
241OBJCOPY		?=	objcopy
242
243PC		?=	pc
244PFLAGS		?=
245
246RC		?=	f77
247RFLAGS		?=
248
249TSORT		?=	tsort
250TSORTFLAGS	?=	-q
251.endif
252
253SHELL		?=	sh
254
255.if !defined(%POSIX)
256SIZE		?=	size
257STRIPBIN	?=	strip
258.endif
259
260YACC		?=	yacc
261.if defined(%POSIX)
262YFLAGS		?=
263.else
264YFLAGS		?=	-d
265.endif
266
267.if defined(%POSIX)
268
269.include "bsd.suffixes-posix.mk"
270
271.else
272
273# non-Posix rule set
274.include "bsd.suffixes.mk"
275
276# Pull in global settings.
277__MAKE_CONF?=/etc/make.conf
278.if exists(${__MAKE_CONF})
279.include "${__MAKE_CONF}"
280.endif
281
282# late include for customization
283.sinclude <local.sys.mk>
284
285.if defined(META_MODE)
286META_MODE:=	${META_MODE:O:u}
287.endif
288
289.if defined(__MAKE_SHELL) && !empty(__MAKE_SHELL)
290SHELL=	${__MAKE_SHELL}
291.SHELL: path=${__MAKE_SHELL}
292.endif
293
294# Tell bmake to expand -V VAR by default
295.MAKE.EXPAND_VARIABLES= yes
296
297# Tell bmake the makefile preference
298MAKEFILE_PREFERENCE?= BSDmakefile makefile Makefile
299.MAKE.MAKEFILE_PREFERENCE= ${MAKEFILE_PREFERENCE}
300
301# Tell bmake to always pass job tokens, regardless of target depending on
302# .MAKE or looking like ${MAKE}/${.MAKE}/$(MAKE)/$(.MAKE)/make.
303.MAKE.ALWAYS_PASS_JOB_QUEUE= yes
304
305# By default bmake does *not* use set -e
306# when running target scripts, this is a problem for many makefiles here.
307# So define a shell that will do what FreeBSD expects.
308.ifndef WITHOUT_SHELL_ERRCTL
309__MAKE_SHELL?=/bin/sh
310.SHELL: name=sh \
311	quiet="set -" echo="set -v" filter="set -" \
312	hasErrCtl=yes check="set -e" ignore="set +e" \
313	echoFlag=v errFlag=e \
314	path=${__MAKE_SHELL}
315.endif
316
317# Hack for ports compatibility. Historically, ports makefiles have
318# assumed they can examine MACHINE_CPU without including anything
319# because this was automatically included in sys.mk. For /usr/src,
320# this file has moved to being included from bsd.opts.mk. Until all
321# the ports files are modernized, and a reasonable transition
322# period has passed, include it while we're in a ports tree here
323# to preserve historic behavior.
324.if exists(${.CURDIR}/../../Mk/bsd.port.mk)
325.include <bsd.cpu.mk>
326.endif
327
328.endif # ! Posix
329