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