freebsd-dev/share/mk/sys.mk

330 lines
7.7 KiB
Makefile
Raw Normal View History

# from: @(#)sys.mk 8.2 (Berkeley) 3/21/94
1999-08-28 00:22:10 +00:00
# $FreeBSD$
1994-05-30 19:09:18 +00:00
unix ?= We run FreeBSD, not UNIX.
.FreeBSD ?= true
1994-05-30 19:09:18 +00:00
.if !defined(%POSIX)
#
# MACHINE_CPUARCH defines a collection of MACHINE_ARCH. Machines with
2010-11-11 23:00:37 +00:00
# the same MACHINE_ARCH can run each other's binaries, so it necessarily
# has word size and endian swizzled in. However, support files for
# these machines often are shared amongst all combinations of size
# and/or endian. This is called MACHINE_CPU in NetBSD, but that's used
# for something different in FreeBSD.
#
MACHINE_CPUARCH=${MACHINE_ARCH:C/mips(n32|64)?(el)?(hf)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc(64|spe)/powerpc/:C/riscv64(sf)?/riscv/}
.endif
# Some options we need now
__DEFAULT_NO_OPTIONS= \
DIRDEPS_BUILD \
DIRDEPS_CACHE
__DEFAULT_DEPENDENT_OPTIONS= \
AUTO_OBJ/DIRDEPS_BUILD \
META_MODE/DIRDEPS_BUILD \
STAGING/DIRDEPS_BUILD \
SYSROOT/DIRDEPS_BUILD
__ENV_ONLY_OPTIONS:= \
${__DEFAULT_NO_OPTIONS} \
${__DEFAULT_YES_OPTIONS} \
${__DEFAULT_DEPENDENT_OPTIONS:H}
# early include for customization
# see local.sys.mk below
# Not included when building in fmake compatibility mode (still needed
# for older system support)
.if defined(.PARSEDIR)
.sinclude <local.sys.env.mk>
.include <bsd.mkopt.mk>
# Disable MK_META_MODE with make -B
.if ${MK_META_MODE} == "yes" && defined(.MAKEFLAGS) && ${.MAKEFLAGS:M-B}
MK_META_MODE= no
.endif
.if ${MK_DIRDEPS_BUILD} == "yes"
.sinclude <meta.sys.mk>
.elif ${MK_META_MODE} == "yes"
# verbose will show .MAKE.META.PREFIX for each target.
META_MODE+= meta verbose
.if !defined(NO_META_MISSING)
META_MODE+= missing-meta=yes
.endif
# silent will hide command output if a .meta file is created.
.if !defined(NO_SILENT)
META_MODE+= silent=yes
.endif
.if !exists(/dev/filemon)
META_MODE+= nofilemon
.endif
# Require filemon data with bmake
.if empty(META_MODE:Mnofilemon)
META_MODE+= missing-filemon=yes
.endif
.endif
META_MODE?= normal
.export META_MODE
.MAKE.MODE?= ${META_MODE}
.if !empty(.MAKE.MODE:Mmeta) && !defined(NO_META_IGNORE_HOST)
# Ignore host file changes that will otherwise cause
# buildworld -> installworld -> buildworld to rebuild everything.
# Since the build is self-reliant and bootstraps everything it needs,
# this should not be a real problem for incremental builds.
# XXX: This relies on the existing host tools retaining ABI compatibility
# through upgrades since they won't be rebuilt on header/library changes.
# Note that these are prefix matching, so /lib matches /libexec.
.MAKE.META.IGNORE_PATHS+= \
${__MAKE_SHELL} \
/bin \
/lib \
/rescue \
/sbin \
/usr/bin \
/usr/include \
/usr/lib \
/usr/sbin \
/usr/share \
.endif
.if ${MK_AUTO_OBJ} == "yes"
# This needs to be done early - before .PATH is computed
# Don't do this for 'make showconfig' as it enables all options where meta mode
# is not expected.
.if !make(showconfig) && !make(print-dir)
.sinclude <auto.obj.mk>
.endif
.endif
.else # bmake
.include <bsd.mkopt.mk>
.endif
# If the special target .POSIX appears (without prerequisites or
# commands) before the first noncomment line in the makefile, make shall
# process the makefile as specified by the Posix 1003.2 specification.
# make(1) sets the special macro %POSIX in this case (to the actual
# value "1003.2", for what it's worth).
#
# The rules below use this macro to distinguish between Posix-compliant
# and default behaviour.
#
# This functionality is currently broken, since make(1) processes sys.mk
# before reading any other files, and consequently has no opportunity to
# set the %POSIX macro before we read this point.
.if defined(%POSIX)
.SUFFIXES: .o .c .y .l .a .sh .f
.else
.SUFFIXES: .out .a .ln .o .bco .llo .c .cc .cpp .cxx .C .m .F .f .e .r .y .l .S .asm .s .cl .p .h .sh
.endif
1994-05-30 19:09:18 +00:00
AR ?= ar
.if defined(%POSIX)
ARFLAGS ?= -rv
.else
ARFLAGS ?= -crD
.endif
RANLIB ?= ranlib
.if !defined(%POSIX)
RANLIBFLAGS ?= -D
.endif
1994-05-30 19:09:18 +00:00
AS ?= as
AFLAGS ?=
ACFLAGS ?=
1994-05-30 19:09:18 +00:00
.if defined(%POSIX)
CC ?= c89
CFLAGS ?= -O
.else
CC ?= cc
.if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "mips"
CFLAGS ?= -O -pipe
.else
CFLAGS ?= -O2 -pipe
.endif
.if defined(NO_STRICT_ALIASING)
CFLAGS += -fno-strict-aliasing
.endif
.endif
IR_CFLAGS ?= ${STATIC_CFLAGS:N-O*} ${CFLAGS:N-O*}
PO_CFLAGS ?= ${CFLAGS}
1994-05-30 19:09:18 +00:00
# cp(1) is used to copy source files to ${.OBJDIR}, make sure it can handle
# read-only files as non-root by passing -f.
CP ?= cp -f
CPP ?= cpp
Add support for the Compact C Type (CTF) conversions throughout FreeBSD's system makefiles. Note that the CTF conversion defaults to off. We may choose to change this default later if DTrace proves popular and people are prepared to wear the compilation performance impact of compiling with debug symbols all the time. Setting NO_CTF in the make args or user environment turns off CTF conversion. Even if we choose to default CTF generation to on later, we still need NO_CTF so that the buildworld process can bootstrap the tools without needlessly generating CTF data for temporary tools. Setting WITH_CTF in the make args or user environment (and _NOT_ in /etc/make.conf) is the only way to enable CTF data conversion. Nore that this can't be implemented the same way that the WITH_ and WITHOUT_ stuff is implemented throughout the buildworld because the CTF conversion needs to work when building a simple object without a Makefile, using the default rules in sys.mk. Typing 'make test.o' with no makefile and just a source file test.c should work. Also, typing 'make WITH_CTF=1 test.o without a makefile and just a source file test.c should work and produce an object with a CTF elf section. Typing 'make WITH_CTF=1 CFLAGS=-g test.o' without a makefile and just a source file test.c should produce an object with both a CTF elf section and the debug elf sections. In the FreeBSD build where more .mk files are used than just sys.mk which is included my make by default, the use of DEBUG_FLAGS is the correct way to enable a debug build. The important thing to note here is that it is the DEBUG_FLAGS setting that prevents libraries and programs from being stripped on installation. So, for the addition of CTF data conversion, setting DEBUG_FLAGS to contain -g, without NO_CTF, will cause the ctfconvert and ctfmerge build programs to be executed also with the -g arg so that debug symbols are retained rather than being removed after the CTF data elf section has been added. Add DTrace libraries to the list of libnames.
2008-05-22 01:14:43 +00:00
# C Type Format data is required for DTrace
CTFFLAGS ?= -L VERSION
CTFCONVERT ?= ctfconvert
CTFMERGE ?= ctfmerge
Add support for the Compact C Type (CTF) conversions throughout FreeBSD's system makefiles. Note that the CTF conversion defaults to off. We may choose to change this default later if DTrace proves popular and people are prepared to wear the compilation performance impact of compiling with debug symbols all the time. Setting NO_CTF in the make args or user environment turns off CTF conversion. Even if we choose to default CTF generation to on later, we still need NO_CTF so that the buildworld process can bootstrap the tools without needlessly generating CTF data for temporary tools. Setting WITH_CTF in the make args or user environment (and _NOT_ in /etc/make.conf) is the only way to enable CTF data conversion. Nore that this can't be implemented the same way that the WITH_ and WITHOUT_ stuff is implemented throughout the buildworld because the CTF conversion needs to work when building a simple object without a Makefile, using the default rules in sys.mk. Typing 'make test.o' with no makefile and just a source file test.c should work. Also, typing 'make WITH_CTF=1 test.o without a makefile and just a source file test.c should work and produce an object with a CTF elf section. Typing 'make WITH_CTF=1 CFLAGS=-g test.o' without a makefile and just a source file test.c should produce an object with both a CTF elf section and the debug elf sections. In the FreeBSD build where more .mk files are used than just sys.mk which is included my make by default, the use of DEBUG_FLAGS is the correct way to enable a debug build. The important thing to note here is that it is the DEBUG_FLAGS setting that prevents libraries and programs from being stripped on installation. So, for the addition of CTF data conversion, setting DEBUG_FLAGS to contain -g, without NO_CTF, will cause the ctfconvert and ctfmerge build programs to be executed also with the -g arg so that debug symbols are retained rather than being removed after the CTF data elf section has been added. Add DTrace libraries to the list of libnames.
2008-05-22 01:14:43 +00:00
.if defined(CFLAGS) && (${CFLAGS:M-g} != "")
CTFFLAGS += -g
.endif
CXX ?= c++
CXXFLAGS ?= ${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes:N-Wno-pointer-sign:N-Wold-style-definition}
IR_CXXFLAGS ?= ${STATIC_CXXFLAGS:N-O*} ${CXXFLAGS:N-O*}
PO_CXXFLAGS ?= ${CXXFLAGS}
1994-05-30 19:09:18 +00:00
DTRACE ?= dtrace
DTRACEFLAGS ?= -C -x nolibs
1994-05-30 19:09:18 +00:00
.if empty(.MAKEFLAGS:M-s)
ECHO ?= echo
ECHODIR ?= echo
.else
ECHO ?= true
.if ${.MAKEFLAGS:M-s} == "-s"
ECHODIR ?= echo
.else
ECHODIR ?= true
.endif
.endif
1994-05-30 19:09:18 +00:00
.if ${.MAKEFLAGS:M-N}
# bmake -N is supposed to skip executing anything but it does not skip
# exeucting '+' commands. The '+' feature is used where .MAKE
# is not safe for the entire target. -N is intended to skip building sub-makes
# so it executing '+' commands is not right. Work around the bug by not
# setting '+' when -N is used.
_+_ ?=
.else
_+_ ?= +
.endif
.if defined(%POSIX)
FC ?= fort77
FFLAGS ?= -O 1
.else
FC ?= f77
FFLAGS ?= -O
.endif
EFLAGS ?=
1994-05-30 19:09:18 +00:00
INSTALL ?= install
LEX ?= lex
LFLAGS ?=
1994-05-30 19:09:18 +00:00
LD ?= ld
LDFLAGS ?= # LDFLAGS is for CC,
_LDFLAGS = ${LDFLAGS:S/-Wl,//g} # strip -Wl, for LD
1994-05-30 19:09:18 +00:00
LINT ?= lint
LINTFLAGS ?= -cghapbx
LINTKERNFLAGS ?= ${LINTFLAGS}
LINTOBJFLAGS ?= -cghapbxu -i
LINTOBJKERNFLAGS?= ${LINTOBJFLAGS}
LINTLIBFLAGS ?= -cghapbxu -C ${LIB}
1994-05-30 19:09:18 +00:00
MAKE ?= make
1994-05-30 19:09:18 +00:00
2012-04-22 17:14:11 +00:00
.if !defined(%POSIX)
LLVM_LINK ?= llvm-link
LORDER ?= lorder
2012-04-22 17:14:11 +00:00
NM ?= nm
NMFLAGS ?=
2012-04-22 17:14:11 +00:00
OBJC ?= cc
OBJCFLAGS ?= ${OBJCINCLUDES} ${CFLAGS} -Wno-import
OBJCOPY ?= objcopy
PC ?= pc
PFLAGS ?=
1994-05-30 19:09:18 +00:00
RC ?= f77
RFLAGS ?=
TSORT ?= tsort
TSORTFLAGS ?= -q
.endif
SHELL ?= sh
2014-10-10 06:09:47 +00:00
.if !defined(%POSIX)
SIZE ?= size
.endif
YACC ?= yacc
.if defined(%POSIX)
YFLAGS ?=
.else
YFLAGS ?= -d
.endif
.if defined(%POSIX)
.include "bsd.suffixes-posix.mk"
.else
# non-Posix rule set
.include "bsd.suffixes.mk"
# Pull in global settings.
__MAKE_CONF?=/etc/make.conf
.if exists(${__MAKE_CONF})
.include "${__MAKE_CONF}"
.endif
# late include for customization
.sinclude <local.sys.mk>
.if defined(META_MODE)
META_MODE:= ${META_MODE:O:u}
.endif
.if defined(__MAKE_SHELL) && !empty(__MAKE_SHELL)
SHELL= ${__MAKE_SHELL}
.SHELL: path=${__MAKE_SHELL}
.endif
# Tell bmake to expand -V VAR by default
.MAKE.EXPAND_VARIABLES= yes
# Tell bmake the makefile preference
.MAKE.MAKEFILE_PREFERENCE= BSDmakefile makefile Makefile
# Tell bmake to always pass job tokens, regardless of target depending on
# .MAKE or looking like ${MAKE}/${.MAKE}/$(MAKE)/$(.MAKE)/make.
.MAKE.ALWAYS_PASS_JOB_QUEUE= yes
# By default bmake does *not* use set -e
# when running target scripts, this is a problem for many makefiles here.
# So define a shell that will do what FreeBSD expects.
.ifndef WITHOUT_SHELL_ERRCTL
__MAKE_SHELL?=/bin/sh
.SHELL: name=sh \
quiet="set -" echo="set -v" filter="set -" \
hasErrCtl=yes check="set -e" ignore="set +e" \
echoFlag=v errFlag=e \
path=${__MAKE_SHELL}
.endif
# Hack for ports compatibility. Historically, ports makefiles have
# assumed they can examine MACHINE_CPU without including anything
# because this was automatically included in sys.mk. For /usr/src,
# this file has moved to being included from bsd.opts.mk. Until all
# the ports files are modernized, and a reasonable transition
# period has passed, include it while we're in a ports tree here
# to preserve historic behavior.
.if exists(${.CURDIR}/../../Mk/bsd.port.mk)
.include <bsd.cpu.mk>
.endif
.endif # ! Posix