Makefile.inc1 revision 317562
17332Sjkh# 27332Sjkh# $FreeBSD: stable/11/Makefile.inc1 317562 2017-04-28 17:54:45Z bdrewery $ 37332Sjkh# 47332Sjkh# Make command line options: 57332Sjkh# -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir 67332Sjkh# -DNO_CLEAN do not clean at all 77332Sjkh# -DDB_FROM_SRC use the user/group databases in src/etc instead of 87332Sjkh# the system database when installing. 97332Sjkh# -DNO_SHARE do not go into share subdir 107332Sjkh# -DKERNFAST define NO_KERNEL{CONFIG,CLEAN,OBJ} 117332Sjkh# -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel 127332Sjkh# -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel 137332Sjkh# -DNO_KERNELOBJ do not run ${MAKE} obj in ${MAKE} buildkernel 147332Sjkh# -DNO_PORTSUPDATE do not update ports in ${MAKE} update 157332Sjkh# -DNO_ROOT install without using root privilege 167332Sjkh# -DNO_DOCUPDATE do not update doc in ${MAKE} update 177332Sjkh# -DWITHOUT_CTF do not run the DTrace CTF conversion tools on built objects 187332Sjkh# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list 197332Sjkh# LOCAL_ITOOLS="list of tools" to add additional tools to the ITOOLS list 207332Sjkh# LOCAL_LIB_DIRS="list of dirs" to add additional dirs to libraries target 217332Sjkh# LOCAL_MTREE="list of mtree files" to process to allow local directories 227332Sjkh# to be created before files are installed 237332Sjkh# LOCAL_TOOL_DIRS="list of dirs" to add additional dirs to the build-tools 247332Sjkh# list 257332Sjkh# METALOG="path to metadata log" to write permission and ownership 267332Sjkh# when NO_ROOT is set. (default: ${DESTDIR}/METALOG) 277332Sjkh# TARGET="machine" to crossbuild world for a different machine type 2897748Sschweikh# TARGET_ARCH= may be required when a TARGET supports multiple endians 297332Sjkh# BUILDENV_SHELL= shell to launch for the buildenv target (def:${SHELL}) 307332Sjkh# WORLD_FLAGS= additional flags to pass to make(1) during buildworld 317332Sjkh# KERNEL_FLAGS= additional flags to pass to make(1) during buildkernel 327332Sjkh# SUBDIR_OVERRIDE="list of dirs" to build rather than everything. 337332Sjkh# All libraries and includes, and some build tools will still build. 347332Sjkh 357332Sjkh# 367332Sjkh# The intended user-driven targets are: 377332Sjkh# buildworld - rebuild *everything*, including glue to help do upgrades 387332Sjkh# installworld- install everything built by "buildworld" 397332Sjkh# checkworld - run test suite on installed world 407332Sjkh# doxygen - build API documentation of the kernel 417332Sjkh# update - convenient way to update your source tree (eg: svn/svnup) 427332Sjkh# 43119419Sobrien# Standard targets (not defined here) are documented in the makefiles in 44119419Sobrien# /usr/share/mk. These include: 457332Sjkh# obj depend all install clean cleandepend cleanobj 46119419Sobrien 47106451Smdodd.if !defined(TARGET) || !defined(TARGET_ARCH) 487332Sjkh.error "Both TARGET and TARGET_ARCH must be defined." 497332Sjkh.endif 507332Sjkh 5161011SpeterSRCDIR?= ${.CURDIR} 527332SjkhLOCALBASE?= /usr/local 53106450Smdodd 5460041Sphk# Cross toolchain changes must be in effect before bsd.compiler.mk 557332Sjkh# so that gets the right CC, and pass CROSS_TOOLCHAIN to submakes. 56106450Smdodd.if defined(CROSS_TOOLCHAIN) 5761011Speter.include "${LOCALBASE}/share/toolchains/${CROSS_TOOLCHAIN}.mk" 587369SbdeCROSSENV+=CROSS_TOOLCHAIN="${CROSS_TOOLCHAIN}" 597332Sjkh.endif 607332Sjkh.if defined(CROSS_TOOLCHAIN_PREFIX) 61106449SmdoddCROSS_COMPILER_PREFIX?=${CROSS_TOOLCHAIN_PREFIX} 62106449Smdodd.endif 63106449Smdodd 647332SjkhXCOMPILERS= CC CXX CPP 65106449Smdodd.for COMPILER in ${XCOMPILERS} 6612502Sjulian.if defined(CROSS_COMPILER_PREFIX) 67106449SmdoddX${COMPILER}?= ${CROSS_COMPILER_PREFIX}${${COMPILER}} 68106449Smdodd.else 69106449SmdoddX${COMPILER}?= ${${COMPILER}} 707332Sjkh.endif 717332Sjkh.endfor 727332Sjkh# If a full path to an external cross compiler is given, don't build 737332Sjkh# a cross compiler. 747332Sjkh.if ${XCC:N${CCACHE_BIN}:M/*} 757332SjkhMK_CLANG_BOOTSTRAP= no 767332SjkhMK_GCC_BOOTSTRAP= no 777332Sjkh.endif 787332Sjkh 797332Sjkh# Pull in COMPILER_TYPE and COMPILER_FREEBSD_VERSION early. 807332Sjkh.include <bsd.compiler.mk> 817332Sjkh.include "share/mk/src.opts.mk" 827332Sjkh 837332Sjkh# Check if there is a local compiler that can satisfy as an external compiler. 847332Sjkh# Which compiler is expected to be used? 857332Sjkh.if ${MK_CLANG_BOOTSTRAP} == "yes" 867332SjkhWANT_COMPILER_TYPE= clang 877332Sjkh.elif ${MK_GCC_BOOTSTRAP} == "yes" 887332SjkhWANT_COMPILER_TYPE= gcc 897332Sjkh.else 907332SjkhWANT_COMPILER_TYPE= 917332Sjkh.endif 927332Sjkh.if !defined(WANT_COMPILER_FREEBSD_VERSION) 9311872Sphk.if ${WANT_COMPILER_TYPE} == "clang" 94106449SmdoddWANT_COMPILER_FREEBSD_VERSION_FILE= lib/clang/freebsd_cc_version.h 95106449SmdoddWANT_COMPILER_FREEBSD_VERSION!= \ 96106449Smdodd awk '$$2 == "FREEBSD_CC_VERSION" {printf("%d\n", $$3)}' \ 97106449Smdodd ${SRCDIR}/${WANT_COMPILER_FREEBSD_VERSION_FILE} || echo unknown 98106449SmdoddWANT_COMPILER_VERSION_FILE= lib/clang/include/clang/Basic/Version.inc 997332SjkhWANT_COMPILER_VERSION!= \ 100106449Smdodd awk '$$2 == "CLANG_VERSION" {split($$3, a, "."); print a[1] * 10000 + a[2] * 100 + a[3]}' \ 1017332Sjkh ${SRCDIR}/${WANT_COMPILER_VERSION_FILE} || echo unknown 1027332Sjkh.elif ${WANT_COMPILER_TYPE} == "gcc" 103106449SmdoddWANT_COMPILER_FREEBSD_VERSION_FILE= gnu/usr.bin/cc/cc_tools/freebsd-native.h 104106449SmdoddWANT_COMPILER_FREEBSD_VERSION!= \ 105106449Smdodd awk '$$2 == "FBSD_CC_VER" {printf("%d\n", $$3)}' \ 106106449Smdodd ${SRCDIR}/${WANT_COMPILER_FREEBSD_VERSION_FILE} || echo unknown 107106449SmdoddWANT_COMPILER_VERSION_FILE= contrib/gcc/BASE-VER 1087332SjkhWANT_COMPILER_VERSION!= \ 1097332Sjkh awk -F. '{print $$1 * 10000 + $$2 * 100 + $$3}' \ 1107332Sjkh ${SRCDIR}/${WANT_COMPILER_VERSION_FILE} || echo unknown 1117332Sjkh.endif 1127332Sjkh.export WANT_COMPILER_FREEBSD_VERSION WANT_COMPILER_VERSION 113106449Smdodd.endif # !defined(WANT_COMPILER_FREEBSD_VERSION) 114106449Smdodd# It needs to be the same revision as we would build for the bootstrap. 115106449Smdodd# If the expected vs CC is different then we can't skip. 116106449Smdodd# GCC cannot be used for cross-arch yet. For clang we pass -target later if 117106449Smdodd# TARGET_ARCH!=MACHINE_ARCH. 118106449Smdodd.if ${MK_SYSTEM_COMPILER} == "yes" && \ 119106449Smdodd (${MK_CLANG_BOOTSTRAP} == "yes" || ${MK_GCC_BOOTSTRAP} == "yes") && \ 120106449Smdodd !make(showconfig) && !make(native-xtools) && !make(xdev*) && \ 1217332Sjkh ${WANT_COMPILER_TYPE} == ${COMPILER_TYPE} && \ 122106449Smdodd (${COMPILER_TYPE} == "clang" || ${TARGET_ARCH} == ${MACHINE_ARCH}) && \ 12325056Sbde ${COMPILER_VERSION} == ${WANT_COMPILER_VERSION} && \ 124106449Smdodd ${COMPILER_FREEBSD_VERSION} == ${WANT_COMPILER_FREEBSD_VERSION} 1257332Sjkh# Everything matches, disable the bootstrap compiler. 126106449SmdoddMK_CLANG_BOOTSTRAP= no 127106449SmdoddMK_GCC_BOOTSTRAP= no 128106449SmdoddUSING_SYSTEM_COMPILER= yes 129106449Smdodd.endif # ${WANT_COMPILER_TYPE} == ${COMPILER_TYPE} 130106449SmdoddUSING_SYSTEM_COMPILER?= no 131106449SmdoddTEST_SYSTEM_COMPILER_VARS= \ 132106449Smdodd USING_SYSTEM_COMPILER MK_SYSTEM_COMPILER \ 133141031Ssobomax MK_CROSS_COMPILER MK_CLANG_BOOTSTRAP MK_GCC_BOOTSTRAP \ 134106449Smdodd WANT_COMPILER_TYPE WANT_COMPILER_VERSION WANT_COMPILER_VERSION_FILE \ 1357332Sjkh WANT_COMPILER_FREEBSD_VERSION WANT_COMPILER_FREEBSD_VERSION_FILE \ 1367332Sjkh CC COMPILER_TYPE COMPILER_VERSION COMPILER_FREEBSD_VERSION 137106449Smdoddtest-system-compiler: .PHONY 138106449Smdodd.for v in ${TEST_SYSTEM_COMPILER_VARS} 139106449Smdodd ${_+_}@printf "%-35s= %s\n" "${v}" "${${v}}" 1407332Sjkh.endfor 1417332Sjkh.if ${USING_SYSTEM_COMPILER} == "yes" && \ 14212675Sjulian (make(buildworld) || make(buildkernel) || make(kernel-toolchain) || \ 14312675Sjulian make(toolchain) || make(_cross-tools)) 14412675Sjulian.info SYSTEM_COMPILER: Determined that CC=${CC} matches the source tree. Not bootstrapping a cross-compiler. 14512675Sjulian.endif 14612675Sjulian 14774810Sphk# For installworld need to ensure that the looked-up compiler metadata is 14837389Sjulian# passed along rather than trying to run cc from the restricted 149126080Sphk# STRICTTMPPATH. 150111815Sphk.if ${MK_CLANG_BOOTSTRAP} == "no" && ${MK_GCC_BOOTSTRAP} == "no" 151111815Sphk.if !defined(X_COMPILER_TYPE) 152111815SphkCROSSENV+= COMPILER_VERSION=${COMPILER_VERSION} \ 153111815Sphk COMPILER_TYPE=${COMPILER_TYPE} \ 154111815Sphk COMPILER_FREEBSD_VERSION=${COMPILER_FREEBSD_VERSION} 155111815Sphk.else 156126080SphkCROSSENV+= COMPILER_VERSION=${X_COMPILER_VERSION} \ 15747625Sphk COMPILER_TYPE=${X_COMPILER_TYPE} \ 15812675Sjulian COMPILER_FREEBSD_VERSION=${X_COMPILER_FREEBSD_VERSION} 159106449Smdodd.endif 160106449Smdodd.endif 1617332Sjkh 162106449Smdodd# Handle external binutils. 1638876Srgrimes.if defined(CROSS_TOOLCHAIN_PREFIX) 164106449SmdoddCROSS_BINUTILS_PREFIX?=${CROSS_TOOLCHAIN_PREFIX} 1657332Sjkh.endif 166106449Smdodd# If we do not have a bootstrap binutils (because the in-tree one does not 1677332Sjkh# support the target architecture), provide a default cross-binutils prefix. 168106490Smdodd# This allows aarch64 builds, for example, to automatically use the 169106490Smdodd# aarch64-binutils port or package. 170106490Smdodd.if !make(showconfig) 1717332Sjkh.if !empty(BROKEN_OPTIONS:MBINUTILS_BOOTSTRAP) && \ 172106449Smdodd !defined(CROSS_BINUTILS_PREFIX) 173106449SmdoddCROSS_BINUTILS_PREFIX=/usr/local/${TARGET_ARCH}-freebsd/bin/ 174106449Smdodd.if !exists(${CROSS_BINUTILS_PREFIX}) 175106449Smdodd.error In-tree binutils does not support the ${TARGET_ARCH} architecture. Install the ${TARGET_ARCH}-binutils port or package or set CROSS_BINUTILS_PREFIX. 176106451Smdodd.endif 1777332Sjkh.endif 1787332Sjkh.endif 17912675SjulianXBINUTILS= AS AR LD NM OBJCOPY OBJDUMP RANLIB SIZE STRINGS 180130585Sphk.for BINUTIL in ${XBINUTILS} 1817332Sjkh.if defined(CROSS_BINUTILS_PREFIX) && \ 182106449Smdodd exists(${CROSS_BINUTILS_PREFIX}${${BINUTIL}}) 1837332SjkhX${BINUTIL}?= ${CROSS_BINUTILS_PREFIX}${${BINUTIL}} 1848876Srgrimes.else 185106449SmdoddX${BINUTIL}?= ${${BINUTIL}} 1867332Sjkh.endif 1877332Sjkh.endfor 188106490Smdodd 189106451Smdodd 1907332Sjkh# We must do lib/ and libexec/ before bin/ in case of a mid-install error to 1917332Sjkh# keep the users system reasonably usable. For static->dynamic root upgrades, 192106490Smdodd# we don't want to install a dynamic binary without rtld and the needed 193106451Smdodd# libraries. More commonly, for dynamic root, we don't want to install a 1947332Sjkh# binary that requires a newer library version that hasn't been installed yet. 195106449Smdodd# This ordering is not a guarantee though. The only guarantee of a working 1967332Sjkh# system here would require fine-grained ordering of all components based 197106449Smdodd# on their dependencies. 198106449Smdodd.if !empty(SUBDIR_OVERRIDE) 199106451SmdoddSUBDIR= ${SUBDIR_OVERRIDE} 2007332Sjkh.else 201106490SmdoddSUBDIR= lib libexec 2027332Sjkh.if !defined(NO_ROOT) && (make(installworld) || make(install)) 2037332Sjkh# Ensure libraries are installed before progressing. 204106449SmdoddSUBDIR+=.WAIT 2057332Sjkh.endif 206106449SmdoddSUBDIR+=bin 2077332Sjkh.if ${MK_CDDL} != "no" 208106449SmdoddSUBDIR+=cddl 209106451Smdodd.endif 2107332SjkhSUBDIR+=gnu include 2117332Sjkh.if ${MK_KERBEROS} != "no" 2127332SjkhSUBDIR+=kerberos5 213106449Smdodd.endif 214106451Smdodd.if ${MK_RESCUE} != "no" 2157332SjkhSUBDIR+=rescue 2167332Sjkh.endif 2177332SjkhSUBDIR+=sbin 218106490Smdodd.if ${MK_CRYPT} != "no" 219106490SmdoddSUBDIR+=secure 2207332Sjkh.endif 221106451Smdodd.if !defined(NO_SHARE) 2227332SjkhSUBDIR+=share 2237332Sjkh.endif 22412675SjulianSUBDIR+=sys usr.bin usr.sbin 225130585Sphk.if ${MK_TESTS} != "no" 2267332SjkhSUBDIR+= tests 227106449Smdodd.endif 2288876Srgrimes.if ${MK_OFED} != "no" 229106449SmdoddSUBDIR+=contrib/ofed 2307332Sjkh.endif 231106490Smdodd 232106451Smdodd# Local directories are last, since it is nice to at least get the base 2337332Sjkh# system rebuilt before you do them. 234106490Smdodd.for _DIR in ${LOCAL_DIRS} 235106449Smdodd.if exists(${.CURDIR}/${_DIR}/Makefile) 236106490SmdoddSUBDIR+= ${_DIR} 2377332Sjkh.endif 2387332Sjkh.endfor 2397332Sjkh# Add LOCAL_LIB_DIRS, but only if they will not be picked up as a SUBDIR 2407332Sjkh# of a LOCAL_DIRS directory. This allows LOCAL_DIRS=foo and 241106490Smdodd# LOCAL_LIB_DIRS=foo/lib to behave as expected. 2427332Sjkh.for _DIR in ${LOCAL_DIRS:M*/} ${LOCAL_DIRS:N*/:S|$|/|} 243106451Smdodd_REDUNDANT_LIB_DIRS+= ${LOCAL_LIB_DIRS:M${_DIR}*} 2447332Sjkh.endfor 2457332Sjkh.for _DIR in ${LOCAL_LIB_DIRS} 24612675Sjulian.if empty(_REDUNDANT_LIB_DIRS:M${_DIR}) && exists(${.CURDIR}/${_DIR}/Makefile) 24759249SphkSUBDIR+= ${_DIR} 2487332Sjkh.endif 2497332Sjkh.endfor 250106449Smdodd 2517332Sjkh# We must do etc/ last as it hooks into building the man whatis file 252106449Smdodd# by calling 'makedb' in share/man. This is only relevant for 2537332Sjkh# install/distribute so they build the whatis file after every manpage is 2547332Sjkh# installed. 255106490Smdodd.if make(installworld) || make(install) 256106449SmdoddSUBDIR+=.WAIT 25759249Sphk.endif 2587332SjkhSUBDIR+=etc 2597332Sjkh 2607332Sjkh.endif # !empty(SUBDIR_OVERRIDE) 2617332Sjkh 26259249Sphk.if defined(NOCLEAN) 26359249Sphk.warning NOCLEAN option is deprecated. Use NO_CLEAN instead. 2647332SjkhNO_CLEAN= ${NOCLEAN} 2657332Sjkh.endif 2668876Srgrimes.if defined(NO_CLEANDIR) 2677332SjkhCLEANDIR= clean cleandepend 26859249Sphk.else 2697332SjkhCLEANDIR= cleandir 2708876Srgrimes.endif 271106490Smdodd 27259249Sphk.if ${MK_META_MODE} == "yes" 2737332Sjkh# If filemon is used then we can rely on the build being incremental-safe. 2747332Sjkh# The .meta files will also track the build command and rebuild should 2757332Sjkh# it change. 27659249Sphk.if empty(.MAKE.MODE:Mnofilemon) 2778876SrgrimesNO_CLEAN= t 2787332Sjkh.endif 2797332Sjkh.endif 280112946Sphk 2817332SjkhLOCAL_TOOL_DIRS?= 2828876SrgrimesPACKAGEDIR?= ${DESTDIR}/${DISTDIR} 2837332Sjkh 284106449Smdodd.if empty(SHELL:M*csh*) 2857332SjkhBUILDENV_SHELL?=${SHELL} 2867332Sjkh.else 2877332SjkhBUILDENV_SHELL?=/bin/sh 28859249Sphk.endif 2897332Sjkh 29059249Sphk.if !defined(SVN) || empty(SVN) 2917332Sjkh. for _P in /usr/bin /usr/local/bin 2927332Sjkh. for _S in svn svnlite 2937332Sjkh. if exists(${_P}/${_S}) 2947332SjkhSVN= ${_P}/${_S} 2957332Sjkh. endif 296106449Smdodd. endfor 2977332Sjkh. endfor 29859249Sphk.endif 29946573SpeterSVNFLAGS?= -r HEAD 3008876Srgrimes 301106490SmdoddMAKEOBJDIRPREFIX?= /usr/obj 3027332Sjkh.if !defined(OSRELDATE) 3037332Sjkh.if exists(/usr/include/osreldate.h) 3047332SjkhOSRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ 3057332Sjkh /usr/include/osreldate.h 306137046Sphk.else 30715574SphkOSRELDATE= 0 3087332Sjkh.endif 309106490Smdodd.export OSRELDATE 3107332Sjkh.endif 3117332Sjkh 3127332Sjkh# Set VERSION for CTFMERGE to use via the default CTFFLAGS=-L VERSION. 3137332Sjkh.if !defined(_REVISION) 3147332Sjkh_REVISION!= MK_AUTO_OBJ=no ${MAKE} -C ${SRCDIR}/release -V REVISION 3157332Sjkh.export _REVISION 3167332Sjkh.endif 317106490Smdodd.if !defined(_BRANCH) 318106490Smdodd_BRANCH!= MK_AUTO_OBJ=no ${MAKE} -C ${SRCDIR}/release -V BRANCH 3197332Sjkh.export _BRANCH 3207332Sjkh.endif 321106490Smdodd.if !defined(SRCRELDATE) 3227332SjkhSRCRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ 3237332Sjkh ${SRCDIR}/sys/sys/param.h 3247332Sjkh.export SRCRELDATE 32512675Sjulian.endif 326130585Sphk.if !defined(VERSION) 3277332SjkhVERSION= FreeBSD ${_REVISION}-${_BRANCH:C/-p[0-9]+$//} ${TARGET_ARCH} ${SRCRELDATE} 328106449Smdodd.export VERSION 3298876Srgrimes.endif 330106449Smdodd 3317332Sjkh.if !defined(PKG_VERSION) 332106449Smdodd.if ${_BRANCH:MSTABLE*} || ${_BRANCH:MCURRENT*} || ${_BRANCH:MALPHA*} 3337332SjkhTIMENOW= %Y%m%d%H%M%S 334106490SmdoddEXTRA_REVISION= .s${TIMENOW:gmtime} 335106451Smdodd.endif 3367332Sjkh.if ${_BRANCH:M*-p*} 3377332SjkhEXTRA_REVISION= _${_BRANCH:C/.*-p([0-9]+$)/\1/} 338106450Smdodd.endif 339106490SmdoddPKG_VERSION= ${_REVISION}${EXTRA_REVISION} 340106450Smdodd.endif 341106450Smdodd 342106450SmdoddKNOWN_ARCHES?= aarch64/arm64 \ 343106490Smdodd amd64 \ 344106450Smdodd arm \ 345106450Smdodd armeb/arm \ 3467332Sjkh armv6/arm \ 347106449Smdodd i386 \ 3487332Sjkh i386/pc98 \ 349106451Smdodd mips \ 3507332Sjkh mipsel/mips \ 351106449Smdodd mips64el/mips \ 352141031Ssobomax mipsn32el/mips \ 353141031Ssobomax mips64/mips \ 3547332Sjkh mipsn32/mips \ 355141031Ssobomax powerpc \ 3567332Sjkh powerpc64/powerpc \ 357106449Smdodd riscv64/riscv \ 3587332Sjkh sparc64 359106449Smdodd 36025460Sjoerg.if ${TARGET} == ${TARGET_ARCH} 361106449Smdodd_t= ${TARGET} 3627332Sjkh.else 3637332Sjkh_t= ${TARGET_ARCH}/${TARGET} 3647332Sjkh.endif 3657332Sjkh.for _t in ${_t} 3667332Sjkh.if empty(KNOWN_ARCHES:M${_t}) 3677332Sjkh.error Unknown target ${TARGET_ARCH}:${TARGET}. 3687332Sjkh.endif 3697332Sjkh.endfor 370106451Smdodd 3717332Sjkh.if ${TARGET} == ${MACHINE} 372106449SmdoddTARGET_CPUTYPE?=${CPUTYPE} 3737332Sjkh.else 374106449SmdoddTARGET_CPUTYPE?= 3757332Sjkh.endif 376106451Smdodd 3777332Sjkh.if !empty(TARGET_CPUTYPE) 378106449Smdodd_TARGET_CPUTYPE=${TARGET_CPUTYPE} 3797332Sjkh.else 380106449Smdodd_TARGET_CPUTYPE=dummy 3817332Sjkh.endif 382106451Smdodd_CPUTYPE!= MK_AUTO_OBJ=no MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \ 3837332Sjkh -f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE 3847332Sjkh.if ${_CPUTYPE} != ${_TARGET_CPUTYPE} 3857332Sjkh.error CPUTYPE global should be set with ?=. 3867332Sjkh.endif 387106451Smdodd.if make(buildworld) 3887332SjkhBUILD_ARCH!= uname -p 3897332Sjkh.if ${MACHINE_ARCH} != ${BUILD_ARCH} 3907332Sjkh.error To cross-build, set TARGET_ARCH. 3917332Sjkh.endif 3927332Sjkh.endif 393106451Smdodd.if ${MACHINE} == ${TARGET} && ${MACHINE_ARCH} == ${TARGET_ARCH} && !defined(CROSS_BUILD_TESTING) 3947332SjkhOBJTREE= ${MAKEOBJDIRPREFIX} 395106449Smdodd.else 396106451SmdoddOBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET}.${TARGET_ARCH} 3977332Sjkh.endif 3987332SjkhWORLDTMP= ${OBJTREE}${.CURDIR}/tmp 3997332SjkhBPATH= ${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/bin 4007332SjkhXPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin 4017332SjkhSTRICTTMPPATH= ${BPATH}:${XPATH} 4027332SjkhTMPPATH= ${STRICTTMPPATH}:${PATH} 4037332Sjkh 4047332Sjkh# 405106449Smdodd# Avoid running mktemp(1) unless actually needed. 4067332Sjkh# It may not be functional, e.g., due to new ABI 4077332Sjkh# when in the middle of installing over this system. 4087332Sjkh# 4097332Sjkh.if make(distributeworld) || make(installworld) || make(stageworld) 41011872SphkINSTALLTMP!= /usr/bin/mktemp -d -u -t install 4117332Sjkh.endif 412106490Smdodd 4137332Sjkh.if make(stagekernel) || make(distributekernel) 414106449SmdoddTAGS+= kernel 415106451SmdoddPACKAGE= kernel 416106449Smdodd.endif 4177332Sjkh 4187332Sjkh# 419106449Smdodd# Building a world goes through the following stages 420106451Smdodd# 4217332Sjkh# 1. legacy stage [BMAKE] 4227332Sjkh# This stage is responsible for creating compatibility 4237332Sjkh# shims that are needed by the bootstrap-tools, 424106449Smdodd# build-tools and cross-tools stages. These are generally 425106449Smdodd# APIs that tools from one of those three stages need to 4267332Sjkh# build that aren't present on the host. 427106490Smdodd# 1. bootstrap-tools stage [BMAKE] 428106490Smdodd# This stage is responsible for creating programs that 4297332Sjkh# are needed for backward compatibility reasons. They 430106490Smdodd# are not built as cross-tools. 431106451Smdodd# 2. build-tools stage [TMAKE] 4327332Sjkh# This stage is responsible for creating the object 433106490Smdodd# tree and building any tools that are needed during 434106490Smdodd# the build process. Some programs are listed during 4357332Sjkh# this phase because they build binaries to generate 436106449Smdodd# files needed to build these programs. This stage also 4377332Sjkh# builds the 'build-tools' target rather than 'all'. 4387332Sjkh# 3. cross-tools stage [XMAKE] 4397332Sjkh# This stage is responsible for creating any tools that 4407332Sjkh# are needed for building the system. A cross-compiler is one 441106449Smdodd# of them. This differs from build tools in two ways: 4427332Sjkh# 1. the 'all' target is built rather than 'build-tools' 4437332Sjkh# 2. these tools are installed into TMPPATH for stage 4. 4447332Sjkh# 4. world stage [WMAKE] 4457332Sjkh# This stage actually builds the world. 4467332Sjkh# 5. install stage (optional) [IMAKE] 4477332Sjkh# This stage installs a previously built world. 4487332Sjkh# 4497332Sjkh 4507332SjkhBOOTSTRAPPING?= 0 4517332Sjkh# Keep these in sync 452106449SmdoddMINIMUM_SUPPORTED_OSREL?= 900044 4537332SjkhMINIMUM_SUPPORTED_REL?= 9.1 4547332Sjkh 4557332Sjkh# Common environment for world related stages 4567332SjkhCROSSENV+= MAKEOBJDIRPREFIX=${OBJTREE} \ 457106449Smdodd MACHINE_ARCH=${TARGET_ARCH} \ 4587332Sjkh MACHINE=${TARGET} \ 4597332Sjkh CPUTYPE=${TARGET_CPUTYPE} 4607332Sjkh.if ${MK_META_MODE} != "no" 461106449Smdodd# Don't rebuild build-tools targets during normal build. 4627332SjkhCROSSENV+= BUILD_TOOLS_META=.NOMETA 463106449Smdodd.endif 4647332Sjkh.if ${MK_GROFF} != "no" 4657332SjkhCROSSENV+= GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \ 466106449Smdodd GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \ 4677332Sjkh GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac 4687332Sjkh.endif 4697332Sjkh.if defined(TARGET_CFLAGS) 4707332SjkhCROSSENV+= ${TARGET_CFLAGS} 471106490Smdodd.endif 472106449Smdodd 473106451Smdodd# bootstrap-tools stage 4747332SjkhBMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \ 475106449Smdodd TOOLS_PREFIX=${WORLDTMP} \ 476106451Smdodd PATH=${BPATH}:${PATH} \ 4777332Sjkh WORLDTMP=${WORLDTMP} \ 4787332Sjkh MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" 4797332Sjkh# need to keep this in sync with targets/pseudo/bootstrap-tools/Makefile 4807332SjkhBSARGS= DESTDIR= \ 481106490Smdodd BOOTSTRAPPING=${OSRELDATE} \ 482106490Smdodd SSP_CFLAGS= \ 483106451Smdodd MK_HTML=no NO_LINT=yes MK_MAN=no \ 4847332Sjkh -DNO_PIC MK_PROFILE=no -DNO_SHARED \ 4857332Sjkh -DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no \ 4867332Sjkh MK_CLANG_EXTRAS=no MK_CLANG_FULL=no \ 487106449Smdodd MK_LLDB=no MK_TESTS=no \ 4887332Sjkh MK_INCLUDES=yes 4897332Sjkh 490106449SmdoddBMAKE= MAKEOBJDIRPREFIX=${WORLDTMP} \ 491106490Smdodd ${BMAKEENV} ${MAKE} ${WORLD_FLAGS} -f Makefile.inc1 \ 492106451Smdodd ${BSARGS} 4937332Sjkh 4947332Sjkh# build-tools stage 4957332SjkhTMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \ 496106449Smdodd ${BMAKEENV} ${MAKE} ${WORLD_FLAGS} -f Makefile.inc1 \ 4977332Sjkh TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 4987332Sjkh DESTDIR= \ 4997332Sjkh BOOTSTRAPPING=${OSRELDATE} \ 500106490Smdodd SSP_CFLAGS= \ 501106451Smdodd -DNO_LINT \ 5027332Sjkh -DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no \ 503106449Smdodd MK_CLANG_EXTRAS=no MK_CLANG_FULL=no \ 504106451Smdodd MK_LLDB=no MK_TESTS=no 5057332Sjkh 506106449Smdodd# cross-tools stage 507106451SmdoddXMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \ 5088876Srgrimes TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 509106490Smdodd MK_GDB=no MK_TESTS=no 510106490Smdodd 511106490Smdodd# kernel-tools stage 512106490SmdoddKTMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \ 5137332Sjkh PATH=${BPATH}:${PATH} \ 514106449Smdodd WORLDTMP=${WORLDTMP} 515106490SmdoddKTMAKE= TOOLS_PREFIX=${WORLDTMP} MAKEOBJDIRPREFIX=${WORLDTMP} \ 516106490Smdodd ${KTMAKEENV} ${MAKE} ${WORLD_FLAGS} -f Makefile.inc1 \ 517106490Smdodd DESTDIR= \ 5187332Sjkh BOOTSTRAPPING=${OSRELDATE} \ 519106451Smdodd SSP_CFLAGS= \ 5207332Sjkh MK_HTML=no -DNO_LINT MK_MAN=no \ 5217332Sjkh -DNO_PIC MK_PROFILE=no -DNO_SHARED \ 5227332Sjkh -DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no 523106449Smdodd 5247332Sjkh# world stage 525106449SmdoddWMAKEENV= ${CROSSENV} \ 526106449Smdodd INSTALL="sh ${.CURDIR}/tools/install.sh" \ 527106451Smdodd PATH=${TMPPATH} 528106449Smdodd 5297332Sjkh# make hierarchy 5307332SjkhHMAKE= PATH=${TMPPATH} ${MAKE} LOCAL_MTREE=${LOCAL_MTREE:Q} 5317332Sjkh.if defined(NO_ROOT) 532106449SmdoddHMAKE+= PATH=${TMPPATH} METALOG=${METALOG} -DNO_ROOT 5337332Sjkh.endif 5347332Sjkh 535106490SmdoddCROSSENV+= CC="${XCC} ${XCFLAGS}" CXX="${XCXX} ${XCXXFLAGS} ${XCFLAGS}" \ 536106490Smdodd CPP="${XCPP} ${XCFLAGS}" \ 5377332Sjkh AS="${XAS}" AR="${XAR}" LD="${XLD}" NM=${XNM} \ 538106449Smdodd OBJDUMP=${XOBJDUMP} OBJCOPY="${XOBJCOPY}" \ 539106449Smdodd RANLIB=${XRANLIB} STRINGS=${XSTRINGS} \ 540106449Smdodd SIZE="${XSIZE}" 5417332Sjkh 542106451Smdodd.if defined(CROSS_BINUTILS_PREFIX) && exists(${CROSS_BINUTILS_PREFIX}) 5437332Sjkh# In the case of xdev-build tools, CROSS_BINUTILS_PREFIX won't be a 544106451Smdodd# directory, but the compiler will look in the right place for its 5457332Sjkh# tools so we don't need to tell it where to look. 5467332SjkhBFLAGS+= -B${CROSS_BINUTILS_PREFIX} 5477332Sjkh.endif 548141031Ssobomax 5497332Sjkh# External compiler needs sysroot and target flags. 5507332Sjkh.if ${MK_CLANG_BOOTSTRAP} == "no" && ${MK_GCC_BOOTSTRAP} == "no" 5517332Sjkh.if !defined(CROSS_BINUTILS_PREFIX) || !exists(${CROSS_BINUTILS_PREFIX}) 5527332SjkhBFLAGS+= -B${WORLDTMP}/usr/bin 553106449Smdodd.endif 554106449Smdodd.if ${TARGET} == "arm" 5557332Sjkh.if ${TARGET_ARCH:Marmv6*} != "" && ${TARGET_CPUTYPE:M*soft*} == "" 556106449SmdoddTARGET_ABI= gnueabihf 557106451Smdodd.else 5587332SjkhTARGET_ABI= gnueabi 559106449Smdodd.endif 560106451Smdodd.endif 5617332Sjkh.if defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc 562106449Smdodd# GCC requires -isystem and -L when using a cross-compiler. --sysroot 563106451Smdodd# won't set header path and -L is used to ensure the base library path 5647332Sjkh# is added before the port PREFIX library path. 565106490SmdoddXCFLAGS+= -isystem ${WORLDTMP}/usr/include -L${WORLDTMP}/usr/lib 5667332Sjkh# Force using libc++ for external GCC. 5677332Sjkh# XXX: This should be checking MK_GNUCXX == no 5687332Sjkh.if ${X_COMPILER_VERSION} >= 40800 5697332SjkhXCXXFLAGS+= -isystem ${WORLDTMP}/usr/include/c++/v1 -std=c++11 \ 5707332Sjkh -nostdinc++ -L${WORLDTMP}/../lib/libc++ 5717332Sjkh.endif 5727332Sjkh.else 5737332SjkhTARGET_ABI?= unknown 5747332SjkhTARGET_TRIPLE?= ${TARGET_ARCH:C/amd64/x86_64/}-${TARGET_ABI}-freebsd11.0 5757332SjkhXCFLAGS+= -target ${TARGET_TRIPLE} 5767332Sjkh.endif 577141031SsobomaxXCFLAGS+= --sysroot=${WORLDTMP} 578141031Ssobomax.endif # ${MK_CLANG_BOOTSTRAP} == "no" && ${MK_GCC_BOOTSTRAP} == "no" 579141031Ssobomax 580141031Ssobomax.if !empty(BFLAGS) 581141031SsobomaxXCFLAGS+= ${BFLAGS} 582141031Ssobomax.endif 583106451Smdodd 5847332Sjkh.if ${MK_LIB32} != "no" && (${TARGET_ARCH} == "amd64" || \ 5857332Sjkh ${TARGET_ARCH} == "powerpc64") 586106449SmdoddLIBCOMPAT= 32 587106449Smdodd.include "Makefile.libcompat" 58842552Seivind.elif ${MK_LIBSOFT} != "no" && ${TARGET_ARCH} == "armv6" 5897332SjkhLIBCOMPAT= SOFT 5907332Sjkh.include "Makefile.libcompat" 5917332Sjkh.endif 5927332Sjkh 5937332SjkhWMAKE= ${WMAKEENV} ${MAKE} ${WORLD_FLAGS} -f Makefile.inc1 DESTDIR=${WORLDTMP} 5947332Sjkh 595106490SmdoddIMAKEENV= ${CROSSENV} 5967332SjkhIMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1 \ 5977332Sjkh ${IMAKE_INSTALL} ${IMAKE_MTREE} 5987332Sjkh.if empty(.MAKEFLAGS:M-n) 5997332SjkhIMAKEENV+= PATH=${STRICTTMPPATH}:${INSTALLTMP} \ 6007332Sjkh LD_LIBRARY_PATH=${INSTALLTMP} \ 601106449Smdodd PATH_LOCALE=${INSTALLTMP}/locale 6027332SjkhIMAKE+= __MAKE_SHELL=${INSTALLTMP}/sh 6037332Sjkh.else 6047332SjkhIMAKEENV+= PATH=${TMPPATH}:${INSTALLTMP} 6057332Sjkh.endif 6067332Sjkh.if defined(DB_FROM_SRC) 607106449SmdoddINSTALLFLAGS+= -N ${.CURDIR}/etc 608106449SmdoddMTREEFLAGS+= -N ${.CURDIR}/etc 609106449Smdodd.endif 6107332Sjkh_INSTALL_DDIR= ${DESTDIR}/${DISTDIR} 611106449SmdoddINSTALL_DDIR= ${_INSTALL_DDIR:S://:/:g:C:/$::} 6127332Sjkh.if defined(NO_ROOT) 6137332SjkhMETALOG?= ${DESTDIR}/${DISTDIR}/METALOG 6147332SjkhIMAKE+= -DNO_ROOT METALOG=${METALOG} 6157332SjkhINSTALLFLAGS+= -U -M ${METALOG} -D ${INSTALL_DDIR} 6167332SjkhMTREEFLAGS+= -W 617106449Smdodd.endif 6187332Sjkh.if defined(BUILD_PKGS) 619106449SmdoddINSTALLFLAGS+= -h sha256 620106449Smdodd.endif 6217332Sjkh.if defined(DB_FROM_SRC) || defined(NO_ROOT) 6227332SjkhIMAKE_INSTALL= INSTALL="install ${INSTALLFLAGS}" 6237332SjkhIMAKE_MTREE= MTREE_CMD="mtree ${MTREEFLAGS}" 6247332Sjkh.endif 6257332Sjkh 6267332Sjkh# kernel stage 6277332SjkhKMAKEENV= ${WMAKEENV} 6287332SjkhKMAKE= ${KMAKEENV} ${MAKE} ${.MAKEFLAGS} ${KERNEL_FLAGS} KERNEL=${INSTKERNNAME} 6297332Sjkh 6307332Sjkh# 6317332Sjkh# buildworld 6327332Sjkh# 6337332Sjkh# Attempt to rebuild the entire system, with reasonable chance of 6347332Sjkh# success, regardless of how old your existing system is. 6357332Sjkh# 6367332Sjkh_worldtmp: .PHONY 6377332Sjkh.if ${.CURDIR:C/[^,]//g} != "" 638106490Smdodd# The m4 build of sendmail files doesn't like it if ',' is used 6397332Sjkh# anywhere in the path of it's files. 6407332Sjkh @echo 641106490Smdodd @echo "*** Error: path to source tree contains a comma ','" 6427332Sjkh @echo 643106490Smdodd false 6447332Sjkh.endif 645106449Smdodd @echo 6467332Sjkh @echo "--------------------------------------------------------------" 6477332Sjkh @echo ">>> Rebuilding the temporary build tree" 6487332Sjkh @echo "--------------------------------------------------------------" 649106449Smdodd.if !defined(NO_CLEAN) 6507332Sjkh rm -rf ${WORLDTMP} 6517332Sjkh.if defined(LIBCOMPAT) 6527332Sjkh rm -rf ${LIBCOMPATTMP} 653106449Smdodd.endif 654106449Smdodd.else 655106451Smdodd rm -rf ${WORLDTMP}/legacy/usr/include 656106449Smdodd.endif 657106451Smdodd.for _dir in \ 658106451Smdodd lib lib/casper usr legacy/bin legacy/usr 6597332Sjkh mkdir -p ${WORLDTMP}/${_dir} 6607332Sjkh.endfor 6617332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 6627332Sjkh -p ${WORLDTMP}/legacy/usr >/dev/null 6637332Sjkh.if ${MK_GROFF} != "no" 664106449Smdodd mtree -deU -f ${.CURDIR}/etc/mtree/BSD.groff.dist \ 665106449Smdodd -p ${WORLDTMP}/legacy/usr >/dev/null 6667332Sjkh.endif 6677332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 6687332Sjkh -p ${WORLDTMP}/legacy/usr/include >/dev/null 6697332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 6707332Sjkh -p ${WORLDTMP}/usr >/dev/null 6717332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 6727332Sjkh -p ${WORLDTMP}/usr/include >/dev/null 6737332Sjkh ln -sf ${.CURDIR}/sys ${WORLDTMP} 6747332Sjkh.if ${MK_DEBUG_FILES} != "no" 6757332Sjkh # We could instead disable debug files for these build stages 6767332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \ 6777332Sjkh -p ${WORLDTMP}/legacy/usr/lib >/dev/null 67825056Sbde mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \ 67925056Sbde -p ${WORLDTMP}/usr/lib >/dev/null 680106449Smdodd.endif 681106449Smdodd.if defined(LIBCOMPAT) 682106449Smdodd mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib${libcompat}.dist \ 683106449Smdodd -p ${WORLDTMP}/usr >/dev/null 68425056Sbde.if ${MK_DEBUG_FILES} != "no" 68525056Sbde mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib${libcompat}.dist \ 68625056Sbde -p ${WORLDTMP}/legacy/usr/lib/debug/usr >/dev/null 687106449Smdodd mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib${libcompat}.dist \ 6887332Sjkh -p ${WORLDTMP}/usr/lib/debug/usr >/dev/null 689106449Smdodd.endif 69059249Sphk.endif 691106449Smdodd.if ${MK_TESTS} != "no" 6927332Sjkh mkdir -p ${WORLDTMP}${TESTSBASE} 6937332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \ 6947332Sjkh -p ${WORLDTMP}${TESTSBASE} >/dev/null 6957332Sjkh.if ${MK_DEBUG_FILES} != "no" 6967332Sjkh mkdir -p ${WORLDTMP}/usr/lib/debug/${TESTSBASE} 6977332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \ 6987332Sjkh -p ${WORLDTMP}/usr/lib/debug/${TESTSBASE} >/dev/null 699106449Smdodd.endif 7007332Sjkh.endif 7017332Sjkh.for _mtree in ${LOCAL_MTREE} 7027332Sjkh mtree -deU -f ${.CURDIR}/${_mtree} -p ${WORLDTMP} > /dev/null 7037332Sjkh.endfor 7047332Sjkh_legacy: 705106449Smdodd @echo 7067332Sjkh @echo "--------------------------------------------------------------" 7077332Sjkh @echo ">>> stage 1.1: legacy release compatibility shims" 7087332Sjkh @echo "--------------------------------------------------------------" 709106449Smdodd ${_+_}cd ${.CURDIR}; ${BMAKE} legacy 710106449Smdodd_bootstrap-tools: 7117332Sjkh @echo 712106449Smdodd @echo "--------------------------------------------------------------" 7137332Sjkh @echo ">>> stage 1.2: bootstrap tools" 7147332Sjkh @echo "--------------------------------------------------------------" 7157332Sjkh ${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools 7167332Sjkh_cleanobj: 717106449Smdodd.if !defined(NO_CLEAN) 718106449Smdodd @echo 719106449Smdodd @echo "--------------------------------------------------------------" 7207332Sjkh @echo ">>> stage 2.1: cleaning up the object tree" 7217332Sjkh @echo "--------------------------------------------------------------" 7228876Srgrimes ${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR} 723106449Smdodd.if defined(LIBCOMPAT) 7247332Sjkh ${_+_}cd ${.CURDIR}; ${LIBCOMPATWMAKE} -f Makefile.inc1 ${CLEANDIR} 7257332Sjkh.endif 726106490Smdodd.endif 727106449Smdodd_obj: 7287332Sjkh @echo 7297332Sjkh @echo "--------------------------------------------------------------" 7307332Sjkh @echo ">>> stage 2.2: rebuilding the object tree" 731106490Smdodd @echo "--------------------------------------------------------------" 7327332Sjkh ${_+_}cd ${.CURDIR}; ${WMAKE} obj 7337332Sjkh_build-tools: 73459249Sphk @echo 7357332Sjkh @echo "--------------------------------------------------------------" 7367332Sjkh @echo ">>> stage 2.3: build tools" 7377332Sjkh @echo "--------------------------------------------------------------" 738106490Smdodd ${_+_}cd ${.CURDIR}; ${TMAKE} build-tools 7397332Sjkh_cross-tools: 7407332Sjkh @echo 741121212Sphk @echo "--------------------------------------------------------------" 7427332Sjkh @echo ">>> stage 3: cross tools" 743106449Smdodd @echo "--------------------------------------------------------------" 7447332Sjkh ${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools 7457332Sjkh ${_+_}cd ${.CURDIR}; ${XMAKE} kernel-tools 7467332Sjkh_includes: 7477332Sjkh @echo 748106449Smdodd @echo "--------------------------------------------------------------" 749106449Smdodd @echo ">>> stage 4.1: building includes" 750106449Smdodd @echo "--------------------------------------------------------------" 7517332Sjkh# Special handling for SUBDIR_OVERRIDE in buildworld as they most likely need 752106449Smdodd# headers from default SUBDIR. Do SUBDIR_OVERRIDE includes last. 7537332Sjkh ${_+_}cd ${.CURDIR}; ${WMAKE} SUBDIR_OVERRIDE= SHARED=symlinks \ 7547332Sjkh MK_INCLUDES=yes includes 7557332Sjkh.if !empty(SUBDIR_OVERRIDE) && make(buildworld) 756106449Smdodd ${_+_}cd ${.CURDIR}; ${WMAKE} MK_INCLUDES=yes SHARED=symlinks includes 757106449Smdodd.endif 7587332Sjkh_libraries: 7597332Sjkh @echo 7607332Sjkh @echo "--------------------------------------------------------------" 761106449Smdodd @echo ">>> stage 4.2: building libraries" 762106449Smdodd @echo "--------------------------------------------------------------" 7637332Sjkh ${_+_}cd ${.CURDIR}; \ 764106449Smdodd ${WMAKE} -DNO_FSCHG MK_HTML=no -DNO_LINT MK_MAN=no \ 7657332Sjkh MK_PROFILE=no MK_TESTS=no MK_TESTS_SUPPORT=${MK_TESTS} libraries 7667332Sjkheverything: .PHONY 767106449Smdodd @echo 768106449Smdodd @echo "--------------------------------------------------------------" 769106449Smdodd @echo ">>> stage 4.3: building everything" 7707332Sjkh @echo "--------------------------------------------------------------" 7717332Sjkh ${_+_}cd ${.CURDIR}; _PARALLEL_SUBDIR_OK=1 ${WMAKE} all 772106449Smdodd 773106449SmdoddWMAKE_TGTS= 7747332SjkhWMAKE_TGTS+= _worldtmp _legacy 775106449Smdodd.if empty(SUBDIR_OVERRIDE) 776106449SmdoddWMAKE_TGTS+= _bootstrap-tools 7777332Sjkh.endif 7787332SjkhWMAKE_TGTS+= _cleanobj _obj _build-tools _cross-tools 779106449SmdoddWMAKE_TGTS+= _includes _libraries 780106490SmdoddWMAKE_TGTS+= everything 7817332Sjkh.if defined(LIBCOMPAT) && empty(SUBDIR_OVERRIDE) 7827332SjkhWMAKE_TGTS+= build${libcompat} 783106449Smdodd.endif 7847332Sjkh 7857332Sjkhbuildworld: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue .PHONY 7867332Sjkh.ORDER: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue 7877332Sjkh 7887332Sjkhbuildworld_prologue: .PHONY 789106449Smdodd @echo "--------------------------------------------------------------" 790106449Smdodd @echo ">>> World build started on `LC_ALL=C date`" 7917332Sjkh @echo "--------------------------------------------------------------" 792106449Smdodd 7937332Sjkhbuildworld_epilogue: .PHONY 7947332Sjkh @echo 795106449Smdodd @echo "--------------------------------------------------------------" 796106449Smdodd @echo ">>> World build completed on `LC_ALL=C date`" 797106449Smdodd @echo "--------------------------------------------------------------" 7987332Sjkh 7997332Sjkh# 800106449Smdodd# We need to have this as a target because the indirection between Makefile 8017332Sjkh# and Makefile.inc1 causes the correct PATH to be used, rather than a 8027332Sjkh# modification of the current environment's PATH. In addition, we need 8037332Sjkh# to quote multiword values. 8047332Sjkh# 805106490Smdoddbuildenvvars: .PHONY 806106449Smdodd @echo ${WMAKEENV:Q} ${.MAKE.EXPORTED:@v@$v=\"${$v}\"@} 807106449Smdodd 8087332Sjkh.if ${.TARGETS:Mbuildenv} 809106449Smdodd.if ${.MAKEFLAGS:M-j} 810106449Smdodd.error The buildenv target is incompatible with -j 8117332Sjkh.endif 8127332Sjkh.endif 8137332SjkhBUILDENV_DIR?= ${.CURDIR} 8147332Sjkhbuildenv: .PHONY 815106719Smdodd @echo Entering world for ${TARGET_ARCH}:${TARGET} 816106449Smdodd.if ${BUILDENV_SHELL:M*zsh*} 817106449Smdodd @echo For ZSH you must run: export CPUTYPE=${TARGET_CPUTYPE} 818106449Smdodd.endif 819106449Smdodd @cd ${BUILDENV_DIR} && env ${WMAKEENV} BUILDENV=1 ${BUILDENV_SHELL} \ 820106449Smdodd || true 821106449Smdodd 822106449SmdoddTOOLCHAIN_TGTS= ${WMAKE_TGTS:Neverything:Nbuild${libcompat}} 823106719Smdoddtoolchain: ${TOOLCHAIN_TGTS} .PHONY 8247332Sjkhkernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries} .PHONY 8257332Sjkh 8267332Sjkh# 827106449Smdodd# installcheck 8287332Sjkh# 8297332Sjkh# Checks to be sure system is ready for installworld/installkernel. 8307332Sjkh# 8317332Sjkhinstallcheck: _installcheck_world _installcheck_kernel .PHONY 832106449Smdodd_installcheck_world: .PHONY 833106449Smdodd_installcheck_kernel: .PHONY 8347332Sjkh 8357332Sjkh# 8367332Sjkh# Require DESTDIR to be set if installing for a different architecture or 837106449Smdodd# using the user/group database in the source tree. 838106449Smdodd# 8397332Sjkh.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE} || \ 840106449Smdodd defined(DB_FROM_SRC) 8417332Sjkh.if !make(distributeworld) 842106449Smdodd_installcheck_world: __installcheck_DESTDIR 8437332Sjkh_installcheck_kernel: __installcheck_DESTDIR 8447332Sjkh__installcheck_DESTDIR: .PHONY 845106449Smdodd.if !defined(DESTDIR) || empty(DESTDIR) 846106449Smdodd @echo "ERROR: Please set DESTDIR!"; \ 847106490Smdodd false 8487332Sjkh.endif 849106449Smdodd.endif 850106449Smdodd.endif 8517332Sjkh 8527332Sjkh.if !defined(DB_FROM_SRC) 853106449Smdodd# 8547332Sjkh# Check for missing UIDs/GIDs. 8557332Sjkh# 8567332SjkhCHECK_UIDS= auditdistd 85759249SphkCHECK_GIDS= audit 858106449Smdodd.if ${MK_SENDMAIL} != "no" 859106449SmdoddCHECK_UIDS+= smmsp 8607332SjkhCHECK_GIDS+= smmsp 8617332Sjkh.endif 8627332Sjkh.if ${MK_PF} != "no" 863106449SmdoddCHECK_UIDS+= proxy 8647332SjkhCHECK_GIDS+= proxy authpf 8657332Sjkh.endif 8667332Sjkh.if ${MK_UNBOUND} != "no" 8677332SjkhCHECK_UIDS+= unbound 8687332SjkhCHECK_GIDS+= unbound 8697332Sjkh.endif 870106449Smdodd_installcheck_world: __installcheck_UGID 871106449Smdodd__installcheck_UGID: .PHONY 8727332Sjkh.for uid in ${CHECK_UIDS} 873106449Smdodd @if ! `id -u ${uid} >/dev/null 2>&1`; then \ 8747332Sjkh echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \ 8757332Sjkh false; \ 8767332Sjkh fi 8777332Sjkh.endfor 878106449Smdodd.for gid in ${CHECK_GIDS} 879106449Smdodd @if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \ 880106449Smdodd echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \ 8817332Sjkh false; \ 8827332Sjkh fi 883106451Smdodd.endfor 8847332Sjkh.endif 885106449Smdodd 8867332Sjkh# 8877332Sjkh# Required install tools to be saved in a scratch dir for safety. 8887332Sjkh# 889106449Smdodd.if ${MK_ZONEINFO} != "no" 890106449Smdodd_zoneinfo= zic tzsetup 8917332Sjkh.endif 8927332Sjkh 8937332SjkhITOOLS= [ awk cap_mkdb cat chflags chmod chown cmp cp \ 8947332Sjkh date echo egrep find grep id install ${_install-info} \ 895106449Smdodd ln make mkdir mtree mv pwd_mkdb \ 8967332Sjkh rm sed services_mkdb sh strip sysctl test true uname wc ${_zoneinfo} \ 8977332Sjkh ${LOCAL_ITOOLS} 8987332Sjkh 8997332Sjkh# Needed for share/man 900106449Smdodd.if ${MK_MAN_UTILS} != "no" 9017332SjkhITOOLS+=makewhatis 9027332Sjkh.endif 903106449Smdodd 9047332Sjkh# 9057332Sjkh# distributeworld 906106490Smdodd# 9077332Sjkh# Distributes everything compiled by a `buildworld'. 9087332Sjkh# 9097332Sjkh# installworld 9107332Sjkh# 911106449Smdodd# Installs everything compiled by a 'buildworld'. 9127332Sjkh# 9137332Sjkh 9147332Sjkh# Non-base distributions produced by the base system 915106449SmdoddEXTRA_DISTRIBUTIONS= doc 9167332Sjkh.if defined(LIBCOMPAT) 9177332SjkhEXTRA_DISTRIBUTIONS+= lib${libcompat} 9187332Sjkh.endif 9197332Sjkh.if ${MK_TESTS} != "no" 9207332SjkhEXTRA_DISTRIBUTIONS+= tests 9217332Sjkh.endif 9227332Sjkh 9237332SjkhDEBUG_DISTRIBUTIONS= 9247332Sjkh.if ${MK_DEBUG_FILES} != "no" 92559249SphkDEBUG_DISTRIBUTIONS+= base ${EXTRA_DISTRIBUTIONS:S,doc,,:S,tests,,} 9267332Sjkh.endif 9277332Sjkh 928106490SmdoddMTREE_MAGIC?= mtree 2.0 929106449Smdodd 9307332Sjkhdistributeworld installworld stageworld: _installcheck_world .PHONY 9317332Sjkh mkdir -p ${INSTALLTMP} 9327332Sjkh progs=$$(for prog in ${ITOOLS}; do \ 9337332Sjkh if progpath=`which $$prog`; then \ 9347332Sjkh echo $$progpath; \ 935106449Smdodd else \ 9367332Sjkh echo "Required tool $$prog not found in PATH." >&2; \ 9377332Sjkh exit 1; \ 9387332Sjkh fi; \ 9397332Sjkh done); \ 9407332Sjkh libs=$$(ldd -f "%o %p\n" -f "%o %p\n" $$progs 2>/dev/null | sort -u | \ 94159249Sphk while read line; do \ 94259249Sphk set -- $$line; \ 94359249Sphk if [ "$$2 $$3" != "not found" ]; then \ 9447332Sjkh echo $$2; \ 9457332Sjkh else \ 946106490Smdodd echo "Required library $$1 not found." >&2; \ 947106449Smdodd exit 1; \ 9487332Sjkh fi; \ 9497332Sjkh done); \ 9507332Sjkh cp $$libs $$progs ${INSTALLTMP} 951106449Smdodd cp -R $${PATH_LOCALE:-"/usr/share/locale"} ${INSTALLTMP}/locale 9527332Sjkh.if defined(NO_ROOT) 9537332Sjkh -mkdir -p ${METALOG:H} 9547332Sjkh echo "#${MTREE_MAGIC}" > ${METALOG} 9557332Sjkh.endif 9567332Sjkh.if make(distributeworld) 9577332Sjkh.for dist in ${EXTRA_DISTRIBUTIONS} 958106490Smdodd -mkdir ${DESTDIR}/${DISTDIR}/${dist} 9597332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.root.dist \ 9607332Sjkh -p ${DESTDIR}/${DISTDIR}/${dist} >/dev/null 9617332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 9627332Sjkh -p ${DESTDIR}/${DISTDIR}/${dist}/usr >/dev/null 9637332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 9647332Sjkh -p ${DESTDIR}/${DISTDIR}/${dist}/usr/include >/dev/null 9657332Sjkh.if ${MK_DEBUG_FILES} != "no" 9667332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \ 9677332Sjkh -p ${DESTDIR}/${DISTDIR}/${dist}/usr/lib >/dev/null 9687332Sjkh.endif 969106490Smdodd.if defined(LIBCOMPAT) 9707332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib${libcompat}.dist \ 9717332Sjkh -p ${DESTDIR}/${DISTDIR}/${dist}/usr >/dev/null 9727332Sjkh.if ${MK_DEBUG_FILES} != "no" 9737332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib${libcompat}.dist \ 9747332Sjkh -p ${DESTDIR}/${DISTDIR}/${dist}/usr/lib/debug/usr >/dev/null 9757332Sjkh.endif 976106449Smdodd.endif 9777332Sjkh.if ${MK_TESTS} != "no" && ${dist} == "tests" 9787332Sjkh -mkdir -p ${DESTDIR}/${DISTDIR}/${dist}${TESTSBASE} 9797332Sjkh mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \ 9807332Sjkh -p ${DESTDIR}/${DISTDIR}/${dist}${TESTSBASE} >/dev/null 981106449Smdodd.if ${MK_DEBUG_FILES} != "no" 982106449Smdodd mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \ 983106449Smdodd -p ${DESTDIR}/${DISTDIR}/${dist}/usr/lib/debug/${TESTSBASE} >/dev/null 9847332Sjkh.endif 985106451Smdodd.endif 9867332Sjkh.if defined(NO_ROOT) 9877332Sjkh ${IMAKEENV} mtree -C -f ${.CURDIR}/etc/mtree/BSD.root.dist | \ 988106449Smdodd sed -e 's#^\./#./${dist}/#' >> ${METALOG} 9897332Sjkh ${IMAKEENV} mtree -C -f ${.CURDIR}/etc/mtree/BSD.usr.dist | \ 9907332Sjkh sed -e 's#^\./#./${dist}/usr/#' >> ${METALOG} 9917332Sjkh ${IMAKEENV} mtree -C -f ${.CURDIR}/etc/mtree/BSD.include.dist | \ 9927332Sjkh sed -e 's#^\./#./${dist}/usr/include/#' >> ${METALOG} 9937332Sjkh.if defined(LIBCOMPAT) 9947332Sjkh ${IMAKEENV} mtree -C -f ${.CURDIR}/etc/mtree/BSD.lib${libcompat}.dist | \ 9957332Sjkh sed -e 's#^\./#./${dist}/usr/#' >> ${METALOG} 996106449Smdodd.endif 9977332Sjkh.endif 9987332Sjkh.endfor 9997332Sjkh -mkdir ${DESTDIR}/${DISTDIR}/base 1000106449Smdodd ${_+_}cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \ 10017332Sjkh METALOG=${METALOG} ${IMAKE_INSTALL} ${IMAKE_MTREE} \ 10027332Sjkh DISTBASE=/base DESTDIR=${DESTDIR}/${DISTDIR}/base \ 10037332Sjkh LOCAL_MTREE=${LOCAL_MTREE:Q} distrib-dirs 1004106449Smdodd.endif 10057332Sjkh ${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}; \ 10067332Sjkh ${IMAKEENV} rm -rf ${INSTALLTMP} 10077332Sjkh.if make(distributeworld) 1008106449Smdodd.for dist in ${EXTRA_DISTRIBUTIONS} 1009106449Smdodd find ${DESTDIR}/${DISTDIR}/${dist} -mindepth 1 -type d -empty -delete 10107332Sjkh.endfor 10117332Sjkh.if defined(NO_ROOT) 10127332Sjkh.for dist in base ${EXTRA_DISTRIBUTIONS} 1013106449Smdodd @# For each file that exists in this dist, print the corresponding 10147332Sjkh @# line from the METALOG. This relies on the fact that 10157332Sjkh @# a line containing only the filename will sort immediately before 10167332Sjkh @# the relevant mtree line. 10177332Sjkh cd ${DESTDIR}/${DISTDIR}; \ 1018106451Smdodd find ./${dist} | sort -u ${METALOG} - | \ 10197332Sjkh awk 'BEGIN { print "#${MTREE_MAGIC}" } !/ type=/ { file = $$1 } / type=/ { if ($$1 == file) { sub(/^\.\/${dist}\//, "./"); print } }' > \ 10207332Sjkh ${DESTDIR}/${DISTDIR}/${dist}.meta 10217332Sjkh.endfor 10227332Sjkh.for dist in ${DEBUG_DISTRIBUTIONS} 10237332Sjkh @# For each file that exists in this dist, print the corresponding 10247332Sjkh @# line from the METALOG. This relies on the fact that 10257332Sjkh @# a line containing only the filename will sort immediately before 1026106449Smdodd @# the relevant mtree line. 10277332Sjkh cd ${DESTDIR}/${DISTDIR}; \ 10287332Sjkh find ./${dist}/usr/lib/debug | sort -u ${METALOG} - | \ 10297332Sjkh awk 'BEGIN { print "#${MTREE_MAGIC}" } !/ type=/ { file = $$1 } / type=/ { if ($$1 == file) { sub(/^\.\/${dist}\//, "./"); print } }' > \ 10307332Sjkh ${DESTDIR}/${DISTDIR}/${dist}.debug.meta 10317332Sjkh.endfor 10327332Sjkh.endif 10337332Sjkh.endif 1034106449Smdodd 10357332Sjkhpackageworld: .PHONY 1036106449Smdodd.for dist in base ${EXTRA_DISTRIBUTIONS} 1037106451Smdodd.if defined(NO_ROOT) 10387332Sjkh ${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \ 10397332Sjkh tar cvf - --exclude usr/lib/debug \ 1040106449Smdodd @${DESTDIR}/${DISTDIR}/${dist}.meta | \ 1041106449Smdodd ${XZ_CMD} > ${PACKAGEDIR}/${dist}.txz 10427332Sjkh.else 10437332Sjkh ${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \ 10447332Sjkh tar cvf - --exclude usr/lib/debug . | \ 1045106451Smdodd ${XZ_CMD} > ${PACKAGEDIR}/${dist}.txz 10467332Sjkh.endif 10477332Sjkh.endfor 1048106451Smdodd 10497332Sjkh.for dist in ${DEBUG_DISTRIBUTIONS} 10507332Sjkh. if defined(NO_ROOT) 1051106449Smdodd ${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \ 10527332Sjkh tar cvf - @${DESTDIR}/${DISTDIR}/${dist}.debug.meta | \ 1053106451Smdodd ${XZ_CMD} > ${PACKAGEDIR}/${dist}-dbg.txz 10547332Sjkh. else 10557332Sjkh ${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \ 10567332Sjkh tar cvLf - usr/lib/debug | \ 10577332Sjkh ${XZ_CMD} > ${PACKAGEDIR}/${dist}-dbg.txz 10587332Sjkh. endif 10597332Sjkh.endfor 10607332Sjkh 10617332Sjkh# 1062106451Smdodd# reinstall 10638876Srgrimes# 1064106451Smdodd# If you have a build server, you can NFS mount the source and obj directories 1065132771Skan# and do a 'make reinstall' on the *client* to install new binaries from the 10668876Srgrimes# most recent server build. 1067106451Smdodd# 1068132771Skanrestage reinstall: .MAKE .PHONY 10698876Srgrimes @echo "--------------------------------------------------------------" 1070106451Smdodd @echo ">>> Making hierarchy" 1071132771Skan @echo "--------------------------------------------------------------" 10728876Srgrimes ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 \ 1073106451Smdodd LOCAL_MTREE=${LOCAL_MTREE:Q} hierarchy 1074132771Skan.if make(restage) 10758876Srgrimes @echo "--------------------------------------------------------------" 1076106451Smdodd @echo ">>> Making distribution" 1077132771Skan @echo "--------------------------------------------------------------" 1078106451Smdodd ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 \ 10797332Sjkh LOCAL_MTREE=${LOCAL_MTREE:Q} distribution 10807332Sjkh.endif 10817332Sjkh @echo 1082106449Smdodd @echo "--------------------------------------------------------------" 10837332Sjkh @echo ">>> Installing everything" 10847332Sjkh @echo "--------------------------------------------------------------" 10857332Sjkh ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install 10867332Sjkh.if defined(LIBCOMPAT) 10877332Sjkh ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install${libcompat} 10887332Sjkh.endif 1089106453Smdodd 10907332Sjkhredistribute: .MAKE .PHONY 1091106451Smdodd @echo "--------------------------------------------------------------" 10927332Sjkh @echo ">>> Distributing everything" 1093106449Smdodd @echo "--------------------------------------------------------------" 1094106451Smdodd ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute 10957332Sjkh.if defined(LIBCOMPAT) 1096106449Smdodd ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute${libcompat} \ 1097106451Smdodd DISTRIBUTION=lib${libcompat} 10987332Sjkh.endif 1099106449Smdodd 11007332Sjkhdistrib-dirs distribution: .MAKE .PHONY 11017332Sjkh ${_+_}cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \ 11027332Sjkh ${IMAKE_INSTALL} ${IMAKE_MTREE} METALOG=${METALOG} ${.TARGET} 11037332Sjkh.if make(distribution) 1104106490Smdodd ${_+_}cd ${.CURDIR}; ${CROSSENV} PATH=${TMPPATH} \ 1105106490Smdodd ${MAKE} -f Makefile.inc1 ${IMAKE_INSTALL} \ 11067332Sjkh METALOG=${METALOG} MK_TESTS=no installconfig 1107106449Smdodd.endif 11087332Sjkh 1109106490Smdodd# 1110106490Smdodd# buildkernel and installkernel 1111106490Smdodd# 1112106490Smdodd# Which kernels to build and/or install is specified by setting 1113106490Smdodd# KERNCONF. If not defined a GENERIC kernel is built/installed. 1114106490Smdodd# Only the existing (depending TARGET) config files are used 1115106490Smdodd# for building kernels and only the first of these is designated 1116106490Smdodd# as the one being installed. 11177332Sjkh# 11187332Sjkh# Note that we have to use TARGET instead of TARGET_ARCH when 1119106449Smdodd# we're in kernel-land. Since only TARGET_ARCH is (expected) to 1120106449Smdodd# be set to cross-build, we have to make sure TARGET is set 1121106449Smdodd# properly. 1122106449Smdodd 11237332Sjkh.if defined(KERNFAST) 1124106490SmdoddNO_KERNELCLEAN= t 1125106490SmdoddNO_KERNELCONFIG= t 1126106490SmdoddNO_KERNELOBJ= t 11277332Sjkh# Shortcut for KERNCONF=Blah -DKERNFAST is now KERNFAST=Blah 11287332Sjkh.if !defined(KERNCONF) && ${KERNFAST} != "1" 11297332SjkhKERNCONF=${KERNFAST} 1130106490Smdodd.endif 11317332Sjkh.endif 11327332Sjkh.if ${TARGET_ARCH} == "powerpc64" 1133106490SmdoddKERNCONF?= GENERIC64 11347332Sjkh.else 1135106490SmdoddKERNCONF?= GENERIC 1136106490Smdodd.endif 1137106490SmdoddINSTKERNNAME?= kernel 11387332Sjkh 11397332SjkhKERNSRCDIR?= ${.CURDIR}/sys 11407332SjkhKRNLCONFDIR= ${KERNSRCDIR}/${TARGET}/conf 1141106490SmdoddKRNLOBJDIR= ${OBJTREE}${KERNSRCDIR} 11427332SjkhKERNCONFDIR?= ${KRNLCONFDIR} 1143106451Smdodd 11447332SjkhBUILDKERNELS= 11457332SjkhINSTALLKERNEL= 11467332Sjkh.if defined(NO_INSTALLKERNEL) 1147106449Smdodd# All of the BUILDKERNELS loops start at index 1. 11487332SjkhBUILDKERNELS+= dummy 11497332Sjkh.endif 11507332Sjkh.for _kernel in ${KERNCONF} 1151106449Smdodd.if exists(${KERNCONFDIR}/${_kernel}) 1152106449SmdoddBUILDKERNELS+= ${_kernel} 11537332Sjkh.if empty(INSTALLKERNEL) && !defined(NO_INSTALLKERNEL) 1154106449SmdoddINSTALLKERNEL= ${_kernel} 11557332Sjkh.endif 11567332Sjkh.endif 11577332Sjkh.endfor 11587332Sjkh 1159106449Smdodd${WMAKE_TGTS:N_worldtmp:Nbuild${libcompat}} ${.ALLTARGETS:M_*:N_worldtmp}: .MAKE .PHONY 11607332Sjkh 11617332Sjkh# 11627332Sjkh# buildkernel 1163106449Smdodd# 11647332Sjkh# Builds all kernels defined by BUILDKERNELS. 11657332Sjkh# 11667332Sjkhbuildkernel: .MAKE .PHONY 11677332Sjkh.if empty(BUILDKERNELS:Ndummy) 1168106449Smdodd @echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \ 1169106451Smdodd false 1170106449Smdodd.endif 11717332Sjkh @echo 11727332Sjkh.for _kernel in ${BUILDKERNELS:Ndummy} 1173106449Smdodd @echo "--------------------------------------------------------------" 11747332Sjkh @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 1175106449Smdodd @echo "--------------------------------------------------------------" 11767332Sjkh @echo "===> ${_kernel}" 1177106451Smdodd mkdir -p ${KRNLOBJDIR} 11787332Sjkh.if !defined(NO_KERNELCONFIG) 11797332Sjkh @echo 11807332Sjkh @echo "--------------------------------------------------------------" 11817332Sjkh @echo ">>> stage 1: configuring the kernel" 1182106449Smdodd @echo "--------------------------------------------------------------" 11837332Sjkh cd ${KRNLCONFDIR}; \ 11847332Sjkh PATH=${TMPPATH} \ 11857332Sjkh config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 11867332Sjkh -I '${KERNCONFDIR}' '${KERNCONFDIR}/${_kernel}' 11877332Sjkh.endif 11887332Sjkh.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN) 1189106449Smdodd @echo 1190106449Smdodd @echo "--------------------------------------------------------------" 1191106451Smdodd @echo ">>> stage 2.1: cleaning up the object tree" 11927332Sjkh @echo "--------------------------------------------------------------" 11937332Sjkh ${_+_}cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR} 1194106449Smdodd.endif 11957332Sjkh.if !defined(NO_KERNELOBJ) 1196106449Smdodd @echo 1197106449Smdodd @echo "--------------------------------------------------------------" 11987332Sjkh @echo ">>> stage 2.2: rebuilding the object tree" 11997332Sjkh @echo "--------------------------------------------------------------" 1200106449Smdodd ${_+_}cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj 12017332Sjkh.endif 1202106449Smdodd @echo 1203106449Smdodd @echo "--------------------------------------------------------------" 1204106451Smdodd @echo ">>> stage 2.3: build tools" 12057332Sjkh @echo "--------------------------------------------------------------" 12068876Srgrimes ${_+_}cd ${.CURDIR}; ${KTMAKE} kernel-tools 12077332Sjkh @echo 12087332Sjkh @echo "--------------------------------------------------------------" 12097332Sjkh @echo ">>> stage 3.1: building everything" 1210106449Smdodd @echo "--------------------------------------------------------------" 1211106449Smdodd ${_+_}cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ 12127332Sjkh @echo "--------------------------------------------------------------" 12137332Sjkh @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 1214106449Smdodd @echo "--------------------------------------------------------------" 12157332Sjkh.endfor 1216106449Smdodd 12177332SjkhNO_INSTALLEXTRAKERNELS?= yes 1218106449Smdodd 121911872Sphk# 1220106451Smdodd# installkernel, etc. 12217332Sjkh# 1222106449Smdodd# Install the kernel defined by INSTALLKERNEL 1223106449Smdodd# 12247332Sjkhinstallkernel installkernel.debug \ 1225106449Smdoddreinstallkernel reinstallkernel.debug: _installcheck_kernel .PHONY 1226102412Scharnier.if !defined(NO_INSTALLKERNEL) 12277332Sjkh.if empty(INSTALLKERNEL) 1228106449Smdodd @echo "ERROR: No kernel \"${KERNCONF}\" to install."; \ 1229106451Smdodd false 12307332Sjkh.endif 12317332Sjkh @echo "--------------------------------------------------------------" 1232106449Smdodd @echo ">>> Installing kernel ${INSTALLKERNEL}" 1233106449Smdodd @echo "--------------------------------------------------------------" 1234106451Smdodd cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 12357332Sjkh ${CROSSENV} PATH=${TMPPATH} \ 12367332Sjkh ${MAKE} ${IMAKE_INSTALL} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//} 12377332Sjkh.endif 12387332Sjkh.if ${BUILDKERNELS:[#]} > 1 && ${NO_INSTALLEXTRAKERNELS} != "yes" 1239106449Smdodd.for _kernel in ${BUILDKERNELS:[2..-1]} 12407332Sjkh @echo "--------------------------------------------------------------" 1241106490Smdodd @echo ">>> Installing kernel ${_kernel}" 12427332Sjkh @echo "--------------------------------------------------------------" 12437332Sjkh cd ${KRNLOBJDIR}/${_kernel}; \ 1244106449Smdodd ${CROSSENV} PATH=${TMPPATH} \ 12457332Sjkh ${MAKE} ${IMAKE_INSTALL} KERNEL=${INSTKERNNAME}.${_kernel} ${.TARGET:S/kernel//} 12467332Sjkh.endfor 1247106449Smdodd.endif 12487332Sjkh 12497332Sjkhdistributekernel distributekernel.debug: .PHONY 12507332Sjkh.if !defined(NO_INSTALLKERNEL) 1251106449Smdodd.if empty(INSTALLKERNEL) 12527332Sjkh @echo "ERROR: No kernel \"${KERNCONF}\" to install."; \ 1253106449Smdodd false 12547332Sjkh.endif 12557332Sjkh mkdir -p ${DESTDIR}/${DISTDIR} 12567332Sjkh.if defined(NO_ROOT) 12577332Sjkh @echo "#${MTREE_MAGIC}" > ${DESTDIR}/${DISTDIR}/kernel.premeta 12587332Sjkh.endif 12597332Sjkh cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 1260106449Smdodd ${IMAKEENV} ${IMAKE_INSTALL:S/METALOG/kernel.premeta/} \ 12617332Sjkh ${IMAKE_MTREE} PATH=${TMPPATH} ${MAKE} KERNEL=${INSTKERNNAME} \ 1262106449Smdodd DESTDIR=${INSTALL_DDIR}/kernel \ 12637332Sjkh ${.TARGET:S/distributekernel/install/} 12647332Sjkh.if defined(NO_ROOT) 12657332Sjkh @sed -e 's|^./kernel|.|' ${DESTDIR}/${DISTDIR}/kernel.premeta > \ 12667332Sjkh ${DESTDIR}/${DISTDIR}/kernel.meta 12677332Sjkh.endif 12687332Sjkh.endif 1269106449Smdodd.if ${BUILDKERNELS:[#]} > 1 && ${NO_INSTALLEXTRAKERNELS} != "yes" 12707332Sjkh.for _kernel in ${BUILDKERNELS:[2..-1]} 1271106451Smdodd.if defined(NO_ROOT) 12727332Sjkh @echo "#${MTREE_MAGIC}" > ${DESTDIR}/${DISTDIR}/kernel.${_kernel}.premeta 1273106449Smdodd.endif 12747332Sjkh cd ${KRNLOBJDIR}/${_kernel}; \ 12757332Sjkh ${IMAKEENV} ${IMAKE_INSTALL:S/METALOG/kernel.${_kernel}.premeta/} \ 12767332Sjkh ${IMAKE_MTREE} PATH=${TMPPATH} ${MAKE} \ 12777332Sjkh KERNEL=${INSTKERNNAME}.${_kernel} \ 12787332Sjkh DESTDIR=${INSTALL_DDIR}/kernel.${_kernel} \ 12797332Sjkh ${.TARGET:S/distributekernel/install/} 12807332Sjkh.if defined(NO_ROOT) 12817332Sjkh @sed -e "s|^./kernel.${_kernel}|.|" \ 12827332Sjkh ${DESTDIR}/${DISTDIR}/kernel.${_kernel}.premeta > \ 12837332Sjkh ${DESTDIR}/${DISTDIR}/kernel.${_kernel}.meta 12847332Sjkh.endif 12857332Sjkh.endfor 1286106449Smdodd.endif 12877332Sjkh 1288106449Smdoddpackagekernel: .PHONY 12897332Sjkh.if defined(NO_ROOT) 12907332Sjkh.if !defined(NO_INSTALLKERNEL) 12917332Sjkh cd ${DESTDIR}/${DISTDIR}/kernel; \ 12927332Sjkh tar cvf - --exclude '*.debug' \ 12937332Sjkh @${DESTDIR}/${DISTDIR}/kernel.meta | \ 12947332Sjkh ${XZ_CMD} > ${PACKAGEDIR}/kernel.txz 12957332Sjkh.endif 1296167086Sjhb cd ${DESTDIR}/${DISTDIR}/kernel; \ 12977332Sjkh tar cvf - --include '*/*/*.debug' \ 12987332Sjkh @${DESTDIR}/${DISTDIR}/kernel.meta | \ 12997332Sjkh ${XZ_CMD} > ${DESTDIR}/${DISTDIR}/kernel-dbg.txz 13007332Sjkh.if ${BUILDKERNELS:[#]} > 1 && ${NO_INSTALLEXTRAKERNELS} != "yes" 13017332Sjkh.for _kernel in ${BUILDKERNELS:[2..-1]} 1302106451Smdodd cd ${DESTDIR}/${DISTDIR}/kernel.${_kernel}; \ 13037332Sjkh tar cvf - --exclude '*.debug' \ 13047332Sjkh @${DESTDIR}/${DISTDIR}/kernel.${_kernel}.meta | \ 13057332Sjkh ${XZ_CMD} > ${PACKAGEDIR}/kernel.${_kernel}.txz 1306106449Smdodd cd ${DESTDIR}/${DISTDIR}/kernel.${_kernel}; \ 13077332Sjkh tar cvf - --include '*/*/*.debug' \ 13087332Sjkh @${DESTDIR}/${DISTDIR}/kernel.${_kernel}.meta | \ 1309106449Smdodd ${XZ_CMD} > ${DESTDIR}/${DISTDIR}/kernel.${_kernel}-dbg.txz 1310106451Smdodd.endfor 13117332Sjkh.endif 13127332Sjkh.else 13137332Sjkh.if !defined(NO_INSTALLKERNEL) 13147332Sjkh cd ${DESTDIR}/${DISTDIR}/kernel; \ 1315106449Smdodd tar cvf - --exclude '*.debug' . | \ 13167332Sjkh ${XZ_CMD} > ${PACKAGEDIR}/kernel.txz 13177332Sjkh.endif 13187332Sjkh cd ${DESTDIR}/${DISTDIR}/kernel; \ 1319106490Smdodd tar cvf - --include '*/*/*.debug' $$(eval find .) | \ 1320106449Smdodd ${XZ_CMD} > ${DESTDIR}/${DISTDIR}/kernel-dbg.txz 1321106451Smdodd.if ${BUILDKERNELS:[#]} > 1 && ${NO_INSTALLEXTRAKERNELS} != "yes" 13227332Sjkh.for _kernel in ${BUILDKERNELS:[2..-1]} 13237332Sjkh cd ${DESTDIR}/${DISTDIR}/kernel.${_kernel}; \ 1324106490Smdodd tar cvf - --exclude '*.debug' . | \ 1325106490Smdodd ${XZ_CMD} > ${PACKAGEDIR}/kernel.${_kernel}.txz 13267332Sjkh cd ${DESTDIR}/${DISTDIR}/kernel.${_kernel}; \ 13277332Sjkh tar cvf - --include '*/*/*.debug' $$(eval find .) | \ 1328106451Smdodd ${XZ_CMD} > ${DESTDIR}/${DISTDIR}/kernel.${_kernel}-dbg.txz 13297332Sjkh.endfor 13307332Sjkh.endif 13317332Sjkh.endif 1332106449Smdodd 13337332Sjkhstagekernel: .PHONY 13347332Sjkh ${_+_}${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} distributekernel 13357332Sjkh 13367332SjkhPORTSDIR?= /usr/ports 1337106490SmdoddWSTAGEDIR?= ${MAKEOBJDIRPREFIX}${.CURDIR}/${TARGET}.${TARGET_ARCH}/worldstage 1338106449SmdoddKSTAGEDIR?= ${MAKEOBJDIRPREFIX}${.CURDIR}/${TARGET}.${TARGET_ARCH}/kernelstage 1339106451SmdoddREPODIR?= ${MAKEOBJDIRPREFIX}${.CURDIR}/repo 13407332SjkhPKGSIGNKEY?= # empty 13417332Sjkh 13427332Sjkh.ORDER: stage-packages create-packages 13437332Sjkh.ORDER: create-packages create-world-packages 13447332Sjkh.ORDER: create-packages create-kernel-packages 1345106490Smdodd.ORDER: create-packages sign-packages 13468876Srgrimes 13477332Sjkh_pkgbootstrap: .PHONY 1348106490Smdodd.if !exists(${LOCALBASE}/sbin/pkg) 1349106451Smdodd @env ASSUME_ALWAYS_YES=YES pkg bootstrap 13507332Sjkh.endif 13517332Sjkh 13527332Sjkhpackages: .PHONY 13537332Sjkh ${_+_}${MAKE} -C ${.CURDIR} PKG_VERSION=${PKG_VERSION} real-packages 1354106451Smdodd 13557332Sjkhpackage-pkg: .PHONY 13567332Sjkh rm -rf /tmp/ports.${TARGET} || : 1357106490Smdodd env ${WMAKEENV:Q} SRCDIR=${.CURDIR} PORTSDIR=${PORTSDIR} REVISION=${_REVISION} \ 13587332Sjkh PKG_CMD=${PKG_CMD} PKG_VERSION=${PKG_VERSION} REPODIR=${REPODIR} \ 13597332Sjkh WSTAGEDIR=${WSTAGEDIR} \ 13607332Sjkh sh ${.CURDIR}/release/scripts/make-pkg-package.sh 13617332Sjkh 1362106490Smdoddreal-packages: stage-packages create-packages sign-packages .PHONY 1363106490Smdodd 1364106490Smdoddstage-packages: .PHONY 13657332Sjkh @mkdir -p ${REPODIR} ${WSTAGEDIR} ${KSTAGEDIR} 13667332Sjkh ${_+_}@cd ${.CURDIR}; \ 13677332Sjkh ${MAKE} DESTDIR=${WSTAGEDIR} -DNO_ROOT -B stageworld ; \ 13687332Sjkh ${MAKE} DESTDIR=${KSTAGEDIR} -DNO_ROOT -B stagekernel 1369106451Smdodd 13707332Sjkhcreate-packages: _pkgbootstrap .PHONY 1371106451Smdodd @mkdir -p ${REPODIR} 13727332Sjkh ${_+_}@cd ${.CURDIR}; \ 13737332Sjkh ${MAKE} DESTDIR=${WSTAGEDIR} \ 137412517Sjulian PKG_VERSION=${PKG_VERSION} create-world-packages ; \ 137525460Sjoerg ${MAKE} DESTDIR=${KSTAGEDIR} \ 1376106449Smdodd PKG_VERSION=${PKG_VERSION} DISTDIR=kernel \ 137725460Sjoerg create-kernel-packages 137825460Sjoerg 137925460Sjoergcreate-world-packages: _pkgbootstrap .PHONY 138025460Sjoerg @rm -f ${WSTAGEDIR}/*.plist 2>/dev/null || : 1381106490Smdodd @cd ${WSTAGEDIR} ; \ 1382106449Smdodd awk -f ${SRCDIR}/release/scripts/mtree-to-plist.awk \ 1383106451Smdodd ${WSTAGEDIR}/METALOG 138425460Sjoerg @for plist in ${WSTAGEDIR}/*.plist; do \ 138525460Sjoerg plist=$${plist##*/} ; \ 138625460Sjoerg pkgname=$${plist%.plist} ; \ 138725460Sjoerg sh ${SRCDIR}/release/packages/generate-ucl.sh -o $${pkgname} \ 138825460Sjoerg -s ${SRCDIR} -u ${WSTAGEDIR}/$${pkgname}.ucl ; \ 1389106490Smdodd done 139025460Sjoerg @for plist in ${WSTAGEDIR}/*.plist; do \ 139125460Sjoerg plist=$${plist##*/} ; \ 1392106490Smdodd pkgname=$${plist%.plist} ; \ 1393106451Smdodd awk -F\" ' \ 139425460Sjoerg /^name/ { printf("===> Creating %s-", $$2); next } \ 139525460Sjoerg /^version/ { print $$2; next } \ 1396106490Smdodd ' ${WSTAGEDIR}/$${pkgname}.ucl ; \ 139725460Sjoerg ${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh -o ALLOW_BASE_SHLIBS=yes \ 139825460Sjoerg create -M ${WSTAGEDIR}/$${pkgname}.ucl \ 139925460Sjoerg -p ${WSTAGEDIR}/$${pkgname}.plist \ 140025460Sjoerg -r ${WSTAGEDIR} \ 1401106490Smdodd -o ${REPODIR}/$$(${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI)/${PKG_VERSION} ; \ 1402106490Smdodd done 1403106490Smdodd 140425460Sjoergcreate-kernel-packages: _pkgbootstrap .PHONY 140525460Sjoerg.if exists(${KSTAGEDIR}/kernel.meta) 140625460Sjoerg.for flavor in "" -debug 140725460Sjoerg @cd ${KSTAGEDIR}/${DISTDIR} ; \ 140825460Sjoerg awk -f ${SRCDIR}/release/scripts/mtree-to-plist.awk \ 1409106451Smdodd -v kernel=yes -v _kernconf=${INSTALLKERNEL} \ 141025460Sjoerg ${KSTAGEDIR}/kernel.meta ; \ 1411 cap_arg=`cd ${SRCDIR}/etc ; ${MAKE} -VCAP_MKDB_ENDIAN` ; \ 1412 pwd_arg=`cd ${SRCDIR}/etc ; ${MAKE} -VPWD_MKDB_ENDIAN` ; \ 1413 sed -e "s/%VERSION%/${PKG_VERSION}/" \ 1414 -e "s/%PKGNAME%/kernel-${INSTALLKERNEL:tl}${flavor}/" \ 1415 -e "s/%COMMENT%/FreeBSD ${INSTALLKERNEL} kernel ${flavor}/" \ 1416 -e "s/%DESC%/FreeBSD ${INSTALLKERNEL} kernel ${flavor}/" \ 1417 -e "s/%CAP_MKDB_ENDIAN%/$${cap_arg}/g" \ 1418 -e "s/%PWD_MKDB_ENDIAN%/$${pwd_arg}/g" \ 1419 ${SRCDIR}/release/packages/kernel.ucl \ 1420 > ${KSTAGEDIR}/${DISTDIR}/kernel.${INSTALLKERNEL}${flavor}.ucl ; \ 1421 awk -F\" ' \ 1422 /name/ { printf("===> Creating %s-", $$2); next } \ 1423 /version/ {print $$2; next } ' \ 1424 ${KSTAGEDIR}/${DISTDIR}/kernel.${INSTALLKERNEL}${flavor}.ucl ; \ 1425 ${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh -o ALLOW_BASE_SHLIBS=yes \ 1426 create -M ${KSTAGEDIR}/${DISTDIR}/kernel.${INSTALLKERNEL}${flavor}.ucl \ 1427 -p ${KSTAGEDIR}/${DISTDIR}/kernel.${INSTALLKERNEL}${flavor}.plist \ 1428 -r ${KSTAGEDIR}/${DISTDIR} \ 1429 -o ${REPODIR}/$$(${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI)/${PKG_VERSION} 1430.endfor 1431.endif 1432.if ${BUILDKERNELS:[#]} > 1 && ${NO_INSTALLEXTRAKERNELS} != "yes" 1433.for _kernel in ${BUILDKERNELS:[2..-1]} 1434.if exists(${KSTAGEDIR}/kernel.${_kernel}.meta) 1435.for flavor in "" -debug 1436 @cd ${KSTAGEDIR}/kernel.${_kernel} ; \ 1437 awk -f ${SRCDIR}/release/scripts/mtree-to-plist.awk \ 1438 -v kernel=yes -v _kernconf=${_kernel} \ 1439 ${KSTAGEDIR}/kernel.${_kernel}.meta ; \ 1440 cap_arg=`cd ${SRCDIR}/etc ; ${MAKE} -VCAP_MKDB_ENDIAN` ; \ 1441 pwd_arg=`cd ${SRCDIR}/etc ; ${MAKE} -VPWD_MKDB_ENDIAN` ; \ 1442 sed -e "s/%VERSION%/${PKG_VERSION}/" \ 1443 -e "s/%PKGNAME%/kernel-${_kernel:tl}${flavor}/" \ 1444 -e "s/%COMMENT%/FreeBSD ${_kernel} kernel ${flavor}/" \ 1445 -e "s/%DESC%/FreeBSD ${_kernel} kernel ${flavor}/" \ 1446 -e "s/%CAP_MKDB_ENDIAN%/$${cap_arg}/g" \ 1447 -e "s/%PWD_MKDB_ENDIAN%/$${pwd_arg}/g" \ 1448 ${SRCDIR}/release/packages/kernel.ucl \ 1449 > ${KSTAGEDIR}/kernel.${_kernel}/kernel.${_kernel}${flavor}.ucl ; \ 1450 awk -F\" ' \ 1451 /name/ { printf("===> Creating %s-", $$2); next } \ 1452 /version/ {print $$2; next } ' \ 1453 ${KSTAGEDIR}/kernel.${_kernel}/kernel.${_kernel}${flavor}.ucl ; \ 1454 ${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh -o ALLOW_BASE_SHLIBS=yes \ 1455 create -M ${KSTAGEDIR}/kernel.${_kernel}/kernel.${_kernel}${flavor}.ucl \ 1456 -p ${KSTAGEDIR}/kernel.${_kernel}/kernel.${_kernel}${flavor}.plist \ 1457 -r ${KSTAGEDIR}/kernel.${_kernel} \ 1458 -o ${REPODIR}/$$(${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI)/${PKG_VERSION} 1459.endfor 1460.endif 1461.endfor 1462.endif 1463 1464sign-packages: _pkgbootstrap .PHONY 1465 @[ -L "${REPODIR}/$$(${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI)/latest" ] && \ 1466 unlink ${REPODIR}/$$(${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI)/latest ; \ 1467 ${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh repo \ 1468 -o ${REPODIR}/$$(${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI)/${PKG_VERSION} \ 1469 ${REPODIR}/$$(${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI)/${PKG_VERSION} \ 1470 ${PKGSIGNKEY} ; \ 1471 cd ${REPODIR}/$$(${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI); \ 1472 ln -s ${PKG_VERSION} latest 1473 1474# 1475# 1476# checkworld 1477# 1478# Run test suite on installed world. 1479# 1480checkworld: .PHONY 1481 @if [ ! -x "${LOCALBASE}/bin/kyua" ]; then \ 1482 echo "You need kyua (devel/kyua) to run the test suite." | /usr/bin/fmt; \ 1483 exit 1; \ 1484 fi 1485 ${_+_}PATH="$$PATH:${LOCALBASE}/bin" kyua test -k ${TESTSBASE}/Kyuafile 1486 1487# 1488# 1489# doxygen 1490# 1491# Build the API documentation with doxygen 1492# 1493doxygen: .PHONY 1494 @if [ ! -x "${LOCALBASE}/bin/doxygen" ]; then \ 1495 echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \ 1496 exit 1; \ 1497 fi 1498 ${_+_}cd ${.CURDIR}/tools/kerneldoc/subsys; ${MAKE} obj all 1499 1500# 1501# update 1502# 1503# Update the source tree(s), by running svn/svnup to update to the 1504# latest copy. 1505# 1506update: .PHONY 1507.if defined(SVN_UPDATE) 1508 @echo "--------------------------------------------------------------" 1509 @echo ">>> Updating ${.CURDIR} using Subversion" 1510 @echo "--------------------------------------------------------------" 1511 @(cd ${.CURDIR}; ${SVN} update ${SVNFLAGS}) 1512.endif 1513 1514# 1515# ------------------------------------------------------------------------ 1516# 1517# From here onwards are utility targets used by the 'make world' and 1518# related targets. If your 'world' breaks, you may like to try to fix 1519# the problem and manually run the following targets to attempt to 1520# complete the build. Beware, this is *not* guaranteed to work, you 1521# need to have a pretty good grip on the current state of the system 1522# to attempt to manually finish it. If in doubt, 'make world' again. 1523# 1524 1525# 1526# legacy: Build compatibility shims for the next three targets. This is a 1527# minimal set of tools and shims necessary to compensate for older systems 1528# which don't have the APIs required by the targets built in bootstrap-tools, 1529# build-tools or cross-tools. 1530# 1531 1532# ELF Tool Chain libraries are needed for ELF tools and dtrace tools. 1533# r296685 fix cross-endian objcopy 1534.if ${BOOTSTRAPPING} < 1100102 1535_elftoolchain_libs= lib/libelf lib/libdwarf 1536.endif 1537 1538legacy: .PHONY 1539.if ${BOOTSTRAPPING} < ${MINIMUM_SUPPORTED_OSREL} && ${BOOTSTRAPPING} != 0 1540 @echo "ERROR: Source upgrades from versions prior to ${MINIMUM_SUPPORTED_REL} are not supported."; \ 1541 false 1542.endif 1543.for _tool in tools/build ${_elftoolchain_libs} 1544 ${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,all,install)"; \ 1545 cd ${.CURDIR}/${_tool}; \ 1546 ${MAKE} DIRPRFX=${_tool}/ obj; \ 1547 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \ 1548 ${MAKE} DIRPRFX=${_tool}/ MK_INCLUDES=no all; \ 1549 ${MAKE} DIRPRFX=${_tool}/ MK_INCLUDES=no \ 1550 DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 1551.endfor 1552 1553# 1554# bootstrap-tools: Build tools needed for compatibility. These are binaries that 1555# are built to build other binaries in the system. However, the focus of these 1556# binaries is usually quite narrow. Bootstrap tools use the host's compiler and 1557# libraries, augmented by -legacy. 1558# 1559_bt= _bootstrap-tools 1560 1561.if ${MK_GAMES} != "no" 1562_strfile= usr.bin/fortune/strfile 1563.endif 1564 1565.if ${MK_GCC} != "no" && ${MK_CXX} != "no" 1566_gperf= gnu/usr.bin/gperf 1567.endif 1568 1569.if ${MK_SHAREDOCS} != "no" && ${MK_GROFF} != "no" 1570_groff= gnu/usr.bin/groff \ 1571 usr.bin/soelim 1572.endif 1573 1574.if ${MK_VT} != "no" 1575_vtfontcvt= usr.bin/vtfontcvt 1576.endif 1577 1578.if ${BOOTSTRAPPING} < 1000033 1579_libopenbsd= lib/libopenbsd 1580_m4= usr.bin/m4 1581_lex= usr.bin/lex 1582 1583${_bt}-usr.bin/m4: ${_bt}-lib/libopenbsd 1584${_bt}-usr.bin/lex: ${_bt}-usr.bin/m4 1585.endif 1586 1587# r245440 mtree -N support added 1588# r313404 requires sha384.h for libnetbsd, added to libmd in r292782 1589.if ${BOOTSTRAPPING} < 1100093 1590_nmtree= lib/libmd \ 1591 lib/libnetbsd \ 1592 usr.sbin/nmtree 1593 1594${_bt}-lib/libnetbsd: ${_bt}-lib/libmd 1595${_bt}-usr.sbin/nmtree: ${_bt}-lib/libnetbsd 1596.endif 1597 1598.if ${BOOTSTRAPPING} < 1000027 1599_cat= bin/cat 1600.endif 1601 1602# r264059 support for status= 1603.if ${BOOTSTRAPPING} < 1100017 1604_dd= bin/dd 1605.endif 1606 1607# r277259 crunchide: Correct 64-bit section header offset 1608# r281674 crunchide: always include both 32- and 64-bit ELF support 1609.if ${BOOTSTRAPPING} < 1100078 1610_crunchide= usr.sbin/crunch/crunchide 1611.endif 1612 1613# r285986 crunchen: use STRIPBIN rather than STRIP 1614# 1100113: Support MK_AUTO_OBJ 1615# 1100509: META_MODE fixes 1616.if ${BOOTSTRAPPING} < 1100078 || \ 1617 (${MK_AUTO_OBJ} == "yes" && ${BOOTSTRAPPING} < 1100114) || \ 1618 (${MK_META_MODE} == "yes" && ${BOOTSTRAPPING} < 1200006) 1619_crunchgen= usr.sbin/crunch/crunchgen 1620.endif 1621 1622# r296926 -P keymap search path, MFC to stable/10 in r298297 1623.if ${BOOTSTRAPPING} < 1003501 || \ 1624 (${BOOTSTRAPPING} >= 1100000 && ${BOOTSTRAPPING} < 1100103) 1625_kbdcontrol= usr.sbin/kbdcontrol 1626.endif 1627 1628_yacc= lib/liby \ 1629 usr.bin/yacc 1630 1631${_bt}-usr.bin/yacc: ${_bt}-lib/liby 1632 1633.if ${MK_BSNMP} != "no" 1634_gensnmptree= usr.sbin/bsnmpd/gensnmptree 1635.endif 1636 1637# We need to build tblgen when we're building clang either as 1638# the bootstrap compiler, or as the part of the normal build. 1639.if ${MK_CLANG_BOOTSTRAP} != "no" || ${MK_CLANG} != "no" 1640_clang_tblgen= \ 1641 lib/clang/libllvmminimal \ 1642 usr.bin/clang/llvm-tblgen \ 1643 usr.bin/clang/clang-tblgen 1644 1645${_bt}-usr.bin/clang/clang-tblgen: ${_bt}-lib/clang/libllvmminimal 1646${_bt}-usr.bin/clang/llvm-tblgen: ${_bt}-lib/clang/libllvmminimal 1647.endif 1648 1649# Default to building the GPL DTC, but build the BSDL one if users explicitly 1650# request it. 1651_dtc= usr.bin/dtc 1652.if ${MK_GPL_DTC} != "no" 1653_dtc= gnu/usr.bin/dtc 1654.endif 1655 1656.if ${MK_KERBEROS} != "no" 1657_kerberos5_bootstrap_tools= \ 1658 kerberos5/tools/make-roken \ 1659 kerberos5/lib/libroken \ 1660 kerberos5/lib/libvers \ 1661 kerberos5/tools/asn1_compile \ 1662 kerberos5/tools/slc \ 1663 usr.bin/compile_et 1664 1665.ORDER: ${_kerberos5_bootstrap_tools:C/^/${_bt}-/g} 1666.endif 1667 1668# r283777 makewhatis(1) replaced with mandoc version which builds a database. 1669.if ${MK_MANDOCDB} != "no" 1670_libopenbsd?= lib/libopenbsd 1671_makewhatis= usr.bin/mandoc 1672${_bt}-usr.bin/mandoc: ${_bt}-lib/libopenbsd 1673.endif 1674 1675bootstrap-tools: .PHONY 1676 1677# Please document (add comment) why something is in 'bootstrap-tools'. 1678# Try to bound the building of the bootstrap-tool to just the 1679# FreeBSD versions that need the tool built at this stage of the build. 1680.for _tool in \ 1681 ${_clang_tblgen} \ 1682 ${_kerberos5_bootstrap_tools} \ 1683 ${_strfile} \ 1684 ${_gperf} \ 1685 ${_groff} \ 1686 ${_dtc} \ 1687 ${_cat} \ 1688 ${_dd} \ 1689 ${_kbdcontrol} \ 1690 usr.bin/lorder \ 1691 ${_libopenbsd} \ 1692 ${_makewhatis} \ 1693 usr.bin/rpcgen \ 1694 ${_yacc} \ 1695 ${_m4} \ 1696 ${_lex} \ 1697 usr.bin/xinstall \ 1698 ${_gensnmptree} \ 1699 usr.sbin/config \ 1700 ${_crunchide} \ 1701 ${_crunchgen} \ 1702 ${_nmtree} \ 1703 ${_vtfontcvt} \ 1704 usr.bin/localedef 1705${_bt}-${_tool}: .PHONY .MAKE 1706 ${_+_}@${ECHODIR} "===> ${_tool} (obj,all,install)"; \ 1707 cd ${.CURDIR}/${_tool}; \ 1708 ${MAKE} DIRPRFX=${_tool}/ obj; \ 1709 ${MAKE} DIRPRFX=${_tool}/ all; \ 1710 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 1711 1712bootstrap-tools: ${_bt}-${_tool} 1713.endfor 1714 1715# 1716# build-tools: Build special purpose build tools 1717# 1718.if !defined(NO_SHARE) 1719_share= share/syscons/scrnmaps 1720.endif 1721 1722.if ${MK_GCC} != "no" 1723_gcc_tools= gnu/usr.bin/cc/cc_tools 1724.endif 1725 1726.if ${MK_RESCUE} != "no" 1727# rescue includes programs that have build-tools targets 1728_rescue=rescue/rescue 1729.endif 1730 1731.for _tool in \ 1732 bin/csh \ 1733 bin/sh \ 1734 ${LOCAL_TOOL_DIRS} \ 1735 lib/ncurses/ncurses \ 1736 lib/ncurses/ncursesw \ 1737 ${_rescue} \ 1738 ${_share} \ 1739 usr.bin/awk \ 1740 lib/libmagic \ 1741 usr.bin/mkesdb_static \ 1742 usr.bin/mkcsmapper_static \ 1743 usr.bin/vi/catalog 1744build-tools_${_tool}: .PHONY 1745 ${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \ 1746 cd ${.CURDIR}/${_tool}; \ 1747 ${MAKE} DIRPRFX=${_tool}/ obj; \ 1748 ${MAKE} DIRPRFX=${_tool}/ build-tools 1749build-tools: build-tools_${_tool} 1750.endfor 1751.for _tool in \ 1752 ${_gcc_tools} 1753build-tools_${_tool}: .PHONY 1754 ${_+_}@${ECHODIR} "===> ${_tool} (obj,all)"; \ 1755 cd ${.CURDIR}/${_tool}; \ 1756 ${MAKE} DIRPRFX=${_tool}/ obj; \ 1757 ${MAKE} DIRPRFX=${_tool}/ all 1758build-tools: build-tools_${_tool} 1759.endfor 1760 1761# 1762# kernel-tools: Build kernel-building tools 1763# 1764kernel-tools: .PHONY 1765 mkdir -p ${MAKEOBJDIRPREFIX}/usr 1766 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 1767 -p ${MAKEOBJDIRPREFIX}/usr >/dev/null 1768 1769# 1770# cross-tools: All the tools needed to build the rest of the system after 1771# we get done with the earlier stages. It is the last set of tools needed 1772# to begin building the target binaries. 1773# 1774.if ${TARGET_ARCH} != ${MACHINE_ARCH} 1775.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386" 1776_btxld= usr.sbin/btxld 1777.endif 1778.endif 1779 1780# Rebuild ctfconvert and ctfmerge to avoid difficult-to-diagnose failures 1781# resulting from missing bug fixes or ELF Toolchain updates. 1782.if ${MK_CDDL} != "no" 1783_dtrace_tools= cddl/lib/libctf cddl/usr.bin/ctfconvert \ 1784 cddl/usr.bin/ctfmerge 1785.endif 1786 1787# If we're given an XAS, don't build binutils. 1788.if ${XAS:M/*} == "" 1789.if ${MK_BINUTILS_BOOTSTRAP} != "no" 1790_binutils= gnu/usr.bin/binutils 1791.endif 1792.if ${MK_ELFTOOLCHAIN_BOOTSTRAP} != "no" 1793_elftctools= lib/libelftc \ 1794 lib/libpe \ 1795 usr.bin/elfcopy \ 1796 usr.bin/nm \ 1797 usr.bin/size \ 1798 usr.bin/strings 1799# These are not required by the build, but can be useful for developers who 1800# cross-build on a FreeBSD 10 host: 1801_elftctools+= usr.bin/addr2line 1802.endif 1803.if ${MK_LLD_IS_LD} != "no" 1804_lld= usr.bin/clang/lld 1805.endif 1806.elif ${TARGET_ARCH} != ${MACHINE_ARCH} && ${MK_ELFTOOLCHAIN_BOOTSTRAP} != "no" 1807# If cross-building with an external binutils we still need to build strip for 1808# the target (for at least crunchide). 1809_elftctools= lib/libelftc \ 1810 lib/libpe \ 1811 usr.bin/elfcopy 1812.endif 1813 1814.if ${MK_CLANG_BOOTSTRAP} != "no" 1815_clang= usr.bin/clang 1816_clang_libs= lib/clang 1817.endif 1818.if ${MK_GCC_BOOTSTRAP} != "no" 1819_gcc= gnu/usr.bin/cc 1820.endif 1821.if ${MK_USB} != "no" 1822_usb_tools= sys/boot/usb/tools 1823.endif 1824 1825cross-tools: .MAKE .PHONY 1826.for _tool in \ 1827 ${_clang_libs} \ 1828 ${_clang} \ 1829 ${_lld} \ 1830 ${_binutils} \ 1831 ${_elftctools} \ 1832 ${_dtrace_tools} \ 1833 ${_gcc} \ 1834 ${_btxld} \ 1835 ${_usb_tools} 1836 ${_+_}@${ECHODIR} "===> ${_tool} (obj,all,install)"; \ 1837 cd ${.CURDIR}/${_tool}; \ 1838 ${MAKE} DIRPRFX=${_tool}/ obj; \ 1839 ${MAKE} DIRPRFX=${_tool}/ all; \ 1840 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install 1841.endfor 1842 1843NXBDESTDIR= ${OBJTREE}/nxb-bin 1844NXBENV= MAKEOBJDIRPREFIX=${OBJTREE}/nxb \ 1845 TOOLS_PREFIX= \ 1846 INSTALL="sh ${.CURDIR}/tools/install.sh" \ 1847 PATH=${PATH}:${OBJTREE}/gperf_for_gcc/usr/bin 1848NXBMAKE= ${NXBENV} ${MAKE} \ 1849 LLVM_TBLGEN=${NXBDESTDIR}/usr/bin/llvm-tblgen \ 1850 CLANG_TBLGEN=${NXBDESTDIR}/usr/bin/clang-tblgen \ 1851 MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH} \ 1852 MK_GDB=no MK_TESTS=no \ 1853 SSP_CFLAGS= \ 1854 MK_HTML=no NO_LINT=yes MK_MAN=no \ 1855 -DNO_PIC MK_PROFILE=no -DNO_SHARED \ 1856 -DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no \ 1857 MK_CLANG_EXTRAS=no MK_CLANG_FULL=no \ 1858 MK_LLDB=no MK_DEBUG_FILES=no 1859 1860# native-xtools is the current target for qemu-user cross builds of ports 1861# via poudriere and the imgact_binmisc kernel module. 1862# For non-clang enabled targets that are still using the in tree gcc 1863# we must build a gperf binary for one instance of its Makefiles. On 1864# clang-enabled systems, the gperf binary is obsolete. 1865native-xtools: .PHONY 1866.if ${MK_GCC_BOOTSTRAP} != "no" 1867 mkdir -p ${OBJTREE}/gperf_for_gcc/usr/bin 1868 ${_+_}@${ECHODIR} "===> ${_gperf} (obj,all,install)"; \ 1869 cd ${.CURDIR}/${_gperf}; \ 1870 ${NXBMAKE} DIRPRFX=${_gperf}/ obj; \ 1871 ${NXBMAKE} DIRPRFX=${_gperf}/ all; \ 1872 ${NXBMAKE} DIRPRFX=${_gperf}/ DESTDIR=${OBJTREE}/gperf_for_gcc install 1873.endif 1874 mkdir -p ${NXBDESTDIR}/bin ${NXBDESTDIR}/sbin ${NXBDESTDIR}/usr 1875 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 1876 -p ${NXBDESTDIR}/usr >/dev/null 1877 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 1878 -p ${NXBDESTDIR}/usr/include >/dev/null 1879.if ${MK_DEBUG_FILES} != "no" 1880 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \ 1881 -p ${NXBDESTDIR}/usr/lib >/dev/null 1882.endif 1883.for _tool in \ 1884 bin/cat \ 1885 bin/chmod \ 1886 bin/cp \ 1887 bin/csh \ 1888 bin/echo \ 1889 bin/expr \ 1890 bin/hostname \ 1891 bin/ln \ 1892 bin/ls \ 1893 bin/mkdir \ 1894 bin/mv \ 1895 bin/ps \ 1896 bin/realpath \ 1897 bin/rm \ 1898 bin/rmdir \ 1899 bin/sh \ 1900 bin/sleep \ 1901 ${_clang_tblgen} \ 1902 usr.bin/ar \ 1903 ${_binutils} \ 1904 ${_elftctools} \ 1905 ${_gcc} \ 1906 ${_gcc_tools} \ 1907 ${_clang_libs} \ 1908 ${_clang} \ 1909 sbin/md5 \ 1910 sbin/sysctl \ 1911 gnu/usr.bin/diff \ 1912 usr.bin/awk \ 1913 usr.bin/basename \ 1914 usr.bin/bmake \ 1915 usr.bin/bzip2 \ 1916 usr.bin/cmp \ 1917 usr.bin/dirname \ 1918 usr.bin/env \ 1919 usr.bin/fetch \ 1920 usr.bin/find \ 1921 usr.bin/grep \ 1922 usr.bin/gzip \ 1923 usr.bin/id \ 1924 usr.bin/lex \ 1925 usr.bin/lorder \ 1926 usr.bin/mktemp \ 1927 usr.bin/mt \ 1928 usr.bin/patch \ 1929 usr.bin/readelf \ 1930 usr.bin/sed \ 1931 usr.bin/sort \ 1932 usr.bin/tar \ 1933 usr.bin/touch \ 1934 usr.bin/tr \ 1935 usr.bin/true \ 1936 usr.bin/uniq \ 1937 usr.bin/unzip \ 1938 usr.bin/xargs \ 1939 usr.bin/xinstall \ 1940 usr.bin/xz \ 1941 usr.bin/yacc \ 1942 usr.sbin/chown 1943 ${_+_}@${ECHODIR} "===> ${_tool} (obj,all,install)"; \ 1944 cd ${.CURDIR}/${_tool}; \ 1945 ${NXBMAKE} DIRPRFX=${_tool}/ obj; \ 1946 ${NXBMAKE} DIRPRFX=${_tool}/ all; \ 1947 ${NXBMAKE} DIRPRFX=${_tool}/ DESTDIR=${NXBDESTDIR} install 1948.endfor 1949 1950# 1951# hierarchy - ensure that all the needed directories are present 1952# 1953hierarchy hier: .MAKE .PHONY 1954 ${_+_}cd ${.CURDIR}/etc; ${HMAKE} distrib-dirs 1955 1956# 1957# libraries - build all libraries, and install them under ${DESTDIR}. 1958# 1959# The list of libraries with dependents (${_prebuild_libs}) and their 1960# interdependencies (__L) are built automatically by the 1961# ${.CURDIR}/tools/make_libdeps.sh script. 1962# 1963libraries: .MAKE .PHONY 1964 ${_+_}cd ${.CURDIR}; \ 1965 ${MAKE} -f Makefile.inc1 _prereq_libs; \ 1966 ${MAKE} -f Makefile.inc1 _startup_libs; \ 1967 ${MAKE} -f Makefile.inc1 _prebuild_libs; \ 1968 ${MAKE} -f Makefile.inc1 _generic_libs 1969 1970# 1971# static libgcc.a prerequisite for shared libc 1972# 1973_prereq_libs= gnu/lib/libssp/libssp_nonshared gnu/lib/libgcc lib/libcompiler_rt 1974 1975# These dependencies are not automatically generated: 1976# 1977# gnu/lib/csu, gnu/lib/libgcc, lib/csu and lib/libc must be built before 1978# all shared libraries for ELF. 1979# 1980_startup_libs= gnu/lib/csu 1981_startup_libs+= lib/csu 1982_startup_libs+= gnu/lib/libgcc 1983_startup_libs+= lib/libcompiler_rt 1984_startup_libs+= lib/libc 1985_startup_libs+= lib/libc_nonshared 1986.if ${MK_LIBCPLUSPLUS} != "no" 1987_startup_libs+= lib/libcxxrt 1988.endif 1989 1990gnu/lib/libgcc__L: lib/libc__L 1991gnu/lib/libgcc__L: lib/libc_nonshared__L 1992.if ${MK_LIBCPLUSPLUS} != "no" 1993lib/libcxxrt__L: gnu/lib/libgcc__L 1994.endif 1995 1996_prebuild_libs= ${_kerberos5_lib_libasn1} \ 1997 ${_kerberos5_lib_libhdb} \ 1998 ${_kerberos5_lib_libheimbase} \ 1999 ${_kerberos5_lib_libheimntlm} \ 2000 ${_libsqlite3} \ 2001 ${_kerberos5_lib_libheimipcc} \ 2002 ${_kerberos5_lib_libhx509} ${_kerberos5_lib_libkrb5} \ 2003 ${_kerberos5_lib_libroken} \ 2004 ${_kerberos5_lib_libwind} \ 2005 lib/libbz2 ${_libcom_err} lib/libcrypt \ 2006 lib/libelf lib/libexpat \ 2007 lib/libfigpar \ 2008 ${_lib_libgssapi} \ 2009 lib/libkiconv lib/libkvm lib/liblzma lib/libmd lib/libnv \ 2010 ${_lib_casper} \ 2011 lib/ncurses/ncurses lib/ncurses/ncursesw \ 2012 lib/libopie lib/libpam/libpam ${_lib_libthr} \ 2013 ${_lib_libradius} lib/libsbuf lib/libtacplus \ 2014 lib/libgeom \ 2015 ${_cddl_lib_libumem} ${_cddl_lib_libnvpair} \ 2016 ${_cddl_lib_libuutil} \ 2017 ${_cddl_lib_libavl} \ 2018 ${_cddl_lib_libzfs_core} \ 2019 ${_cddl_lib_libctf} \ 2020 lib/libutil lib/libpjdlog ${_lib_libypclnt} lib/libz lib/msun \ 2021 ${_secure_lib_libcrypto} ${_lib_libldns} \ 2022 ${_secure_lib_libssh} ${_secure_lib_libssl} \ 2023 gnu/lib/libdialog 2024 2025.if ${MK_GNUCXX} != "no" 2026_prebuild_libs+= gnu/lib/libstdc++ gnu/lib/libsupc++ 2027gnu/lib/libstdc++__L: lib/msun__L 2028gnu/lib/libsupc++__L: gnu/lib/libstdc++__L 2029.endif 2030 2031.if ${MK_LIBCPLUSPLUS} != "no" 2032_prebuild_libs+= lib/libc++ 2033.endif 2034 2035lib/libgeom__L: lib/libexpat__L 2036lib/libkvm__L: lib/libelf__L 2037 2038.if ${MK_LIBTHR} != "no" 2039_lib_libthr= lib/libthr 2040.endif 2041 2042.if ${MK_RADIUS_SUPPORT} != "no" 2043_lib_libradius= lib/libradius 2044.endif 2045 2046.if ${MK_OFED} != "no" 2047_ofed_lib= contrib/ofed/usr.lib 2048_prebuild_libs+= contrib/ofed/usr.lib/libosmcomp 2049_prebuild_libs+= contrib/ofed/usr.lib/libopensm 2050_prebuild_libs+= contrib/ofed/usr.lib/libibcommon 2051_prebuild_libs+= contrib/ofed/usr.lib/libibverbs 2052_prebuild_libs+= contrib/ofed/usr.lib/libibumad 2053 2054contrib/ofed/usr.lib/libopensm__L: lib/libthr__L 2055contrib/ofed/usr.lib/libosmcomp__L: lib/libthr__L 2056contrib/ofed/usr.lib/libibumad__L: contrib/ofed/usr.lib/libibcommon__L 2057.endif 2058 2059.if ${MK_CASPER} != "no" 2060_lib_casper= lib/libcasper 2061.endif 2062 2063lib/libpjdlog__L: lib/libutil__L 2064lib/libcasper__L: lib/libnv__L 2065lib/liblzma__L: lib/libthr__L 2066 2067_generic_libs= ${_cddl_lib} gnu/lib ${_kerberos5_lib} lib ${_secure_lib} usr.bin/lex/lib ${_ofed_lib} 2068.for _DIR in ${LOCAL_LIB_DIRS} 2069.if exists(${.CURDIR}/${_DIR}/Makefile) && empty(_generic_libs:M${_DIR}) 2070_generic_libs+= ${_DIR} 2071.endif 2072.endfor 2073 2074lib/libopie__L lib/libtacplus__L: lib/libmd__L 2075 2076.if ${MK_CDDL} != "no" 2077_cddl_lib_libumem= cddl/lib/libumem 2078_cddl_lib_libnvpair= cddl/lib/libnvpair 2079_cddl_lib_libavl= cddl/lib/libavl 2080_cddl_lib_libuutil= cddl/lib/libuutil 2081_cddl_lib_libzfs_core= cddl/lib/libzfs_core 2082_cddl_lib_libctf= cddl/lib/libctf 2083_cddl_lib= cddl/lib 2084cddl/lib/libzfs_core__L: cddl/lib/libnvpair__L 2085cddl/lib/libzfs__L: lib/libgeom__L 2086cddl/lib/libctf__L: lib/libz__L 2087.endif 2088# cddl/lib/libdtrace requires lib/libproc and lib/librtld_db; it's only built 2089# on select architectures though (see cddl/lib/Makefile) 2090.if ${MACHINE_CPUARCH} != "sparc64" 2091_prebuild_libs+= lib/libproc lib/librtld_db 2092.endif 2093 2094.if ${MK_CRYPT} != "no" 2095.if ${MK_OPENSSL} != "no" 2096_secure_lib_libcrypto= secure/lib/libcrypto 2097_secure_lib_libssl= secure/lib/libssl 2098lib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L 2099.if ${MK_LDNS} != "no" 2100_lib_libldns= lib/libldns 2101lib/libldns__L: secure/lib/libcrypto__L 2102.endif 2103.if ${MK_OPENSSH} != "no" 2104_secure_lib_libssh= secure/lib/libssh 2105secure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L 2106.if ${MK_LDNS} != "no" 2107secure/lib/libssh__L: lib/libldns__L 2108.endif 2109.if ${MK_GSSAPI} != "no" && ${MK_KERBEROS_SUPPORT} != "no" 2110secure/lib/libssh__L: lib/libgssapi__L kerberos5/lib/libkrb5__L \ 2111 kerberos5/lib/libhx509__L kerberos5/lib/libasn1__L lib/libcom_err__L \ 2112 lib/libmd__L kerberos5/lib/libroken__L 2113.endif 2114.endif 2115.endif 2116_secure_lib= secure/lib 2117.endif 2118 2119.if ${MK_KERBEROS} != "no" 2120kerberos5/lib/libasn1__L: lib/libcom_err__L kerberos5/lib/libroken__L 2121kerberos5/lib/libhdb__L: kerberos5/lib/libasn1__L lib/libcom_err__L \ 2122 kerberos5/lib/libkrb5__L kerberos5/lib/libroken__L \ 2123 kerberos5/lib/libwind__L lib/libsqlite3__L 2124kerberos5/lib/libheimntlm__L: secure/lib/libcrypto__L kerberos5/lib/libkrb5__L \ 2125 kerberos5/lib/libroken__L lib/libcom_err__L 2126kerberos5/lib/libhx509__L: kerberos5/lib/libasn1__L lib/libcom_err__L \ 2127 secure/lib/libcrypto__L kerberos5/lib/libroken__L kerberos5/lib/libwind__L 2128kerberos5/lib/libkrb5__L: kerberos5/lib/libasn1__L lib/libcom_err__L \ 2129 lib/libcrypt__L secure/lib/libcrypto__L kerberos5/lib/libhx509__L \ 2130 kerberos5/lib/libroken__L kerberos5/lib/libwind__L \ 2131 kerberos5/lib/libheimbase__L kerberos5/lib/libheimipcc__L 2132kerberos5/lib/libroken__L: lib/libcrypt__L 2133kerberos5/lib/libwind__L: kerberos5/lib/libroken__L lib/libcom_err__L 2134kerberos5/lib/libheimbase__L: lib/libthr__L 2135kerberos5/lib/libheimipcc__L: kerberos5/lib/libroken__L kerberos5/lib/libheimbase__L lib/libthr__L 2136.endif 2137 2138lib/libsqlite3__L: lib/libthr__L 2139 2140.if ${MK_GSSAPI} != "no" 2141_lib_libgssapi= lib/libgssapi 2142.endif 2143 2144.if ${MK_KERBEROS} != "no" 2145_kerberos5_lib= kerberos5/lib 2146_kerberos5_lib_libasn1= kerberos5/lib/libasn1 2147_kerberos5_lib_libhdb= kerberos5/lib/libhdb 2148_kerberos5_lib_libheimbase= kerberos5/lib/libheimbase 2149_kerberos5_lib_libkrb5= kerberos5/lib/libkrb5 2150_kerberos5_lib_libhx509= kerberos5/lib/libhx509 2151_kerberos5_lib_libroken= kerberos5/lib/libroken 2152_kerberos5_lib_libheimntlm= kerberos5/lib/libheimntlm 2153_libsqlite3= lib/libsqlite3 2154_kerberos5_lib_libheimipcc= kerberos5/lib/libheimipcc 2155_kerberos5_lib_libwind= kerberos5/lib/libwind 2156_libcom_err= lib/libcom_err 2157.endif 2158 2159.if ${MK_NIS} != "no" 2160_lib_libypclnt= lib/libypclnt 2161.endif 2162 2163.if ${MK_OPENSSL} == "no" 2164lib/libradius__L: lib/libmd__L 2165.endif 2166 2167lib/libproc__L: \ 2168 ${_cddl_lib_libctf:D${_cddl_lib_libctf}__L} lib/libelf__L lib/librtld_db__L lib/libutil__L 2169.if ${MK_CXX} != "no" 2170.if ${MK_LIBCPLUSPLUS} != "no" 2171lib/libproc__L: lib/libcxxrt__L 2172.else # This implies MK_GNUCXX != "no"; see lib/libproc 2173lib/libproc__L: gnu/lib/libsupc++__L 2174.endif 2175.endif 2176 2177gnu/lib/libdialog__L: lib/msun__L lib/ncurses/ncursesw__L 2178 2179.for _lib in ${_prereq_libs} 2180${_lib}__PL: .PHONY .MAKE 2181.if exists(${.CURDIR}/${_lib}) 2182 ${_+_}@${ECHODIR} "===> ${_lib} (obj,all,install)"; \ 2183 cd ${.CURDIR}/${_lib}; \ 2184 ${MAKE} MK_TESTS=no DIRPRFX=${_lib}/ obj; \ 2185 ${MAKE} MK_TESTS=no MK_PROFILE=no -DNO_PIC \ 2186 DIRPRFX=${_lib}/ all; \ 2187 ${MAKE} MK_TESTS=no MK_PROFILE=no -DNO_PIC \ 2188 DIRPRFX=${_lib}/ install 2189.endif 2190.endfor 2191 2192.for _lib in ${_startup_libs} ${_prebuild_libs} ${_generic_libs} 2193${_lib}__L: .PHONY .MAKE 2194.if exists(${.CURDIR}/${_lib}) 2195 ${_+_}@${ECHODIR} "===> ${_lib} (obj,all,install)"; \ 2196 cd ${.CURDIR}/${_lib}; \ 2197 ${MAKE} MK_TESTS=no DIRPRFX=${_lib}/ obj; \ 2198 ${MAKE} MK_TESTS=no DIRPRFX=${_lib}/ all; \ 2199 ${MAKE} MK_TESTS=no DIRPRFX=${_lib}/ install 2200.endif 2201.endfor 2202 2203_prereq_libs: ${_prereq_libs:S/$/__PL/} 2204_startup_libs: ${_startup_libs:S/$/__L/} 2205_prebuild_libs: ${_prebuild_libs:S/$/__L/} 2206_generic_libs: ${_generic_libs:S/$/__L/} 2207 2208# Enable SUBDIR_PARALLEL when not calling 'make all', unless called from 2209# 'everything' with _PARALLEL_SUBDIR_OK set. This is because it is unlikely 2210# that running 'make all' from the top-level, especially with a SUBDIR_OVERRIDE 2211# or LOCAL_DIRS set, will have a reliable build if SUBDIRs are built in 2212# parallel. This is safe for the world stage of buildworld though since it has 2213# already built libraries in a proper order and installed includes into 2214# WORLDTMP. Special handling is done for SUBDIR ordering for 'install*' to 2215# avoid trashing a system if it crashes mid-install. 2216.if !make(all) || defined(_PARALLEL_SUBDIR_OK) 2217SUBDIR_PARALLEL= 2218.endif 2219 2220.include <bsd.subdir.mk> 2221 2222.if make(check-old) || make(check-old-dirs) || \ 2223 make(check-old-files) || make(check-old-libs) || \ 2224 make(delete-old) || make(delete-old-dirs) || \ 2225 make(delete-old-files) || make(delete-old-libs) 2226 2227# 2228# check for / delete old files section 2229# 2230 2231.include "ObsoleteFiles.inc" 2232 2233OLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \ 2234else you can not start such an application. Consult UPDATING for more \ 2235information regarding how to cope with the removal/revision bump of a \ 2236specific library." 2237 2238.if !defined(BATCH_DELETE_OLD_FILES) 2239RM_I=-i 2240.else 2241RM_I=-v 2242.endif 2243 2244delete-old-files: .PHONY 2245 @echo ">>> Removing old files (only deletes safe to delete libs)" 2246# Ask for every old file if the user really wants to remove it. 2247# It's annoying, but better safe than sorry. 2248# NB: We cannot pass the list of OLD_FILES as a parameter because the 2249# argument list will get too long. Using .for/.endfor make "loops" will make 2250# the Makefile parser segfault. 2251 @exec 3<&0; \ 2252 cd ${.CURDIR}; \ 2253 ${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \ 2254 -V OLD_FILES -V "OLD_FILES:Musr/share/*.gz:R" | xargs -n1 | \ 2255 while read file; do \ 2256 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 2257 chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \ 2258 rm ${RM_I} "${DESTDIR}/$${file}" <&3; \ 2259 fi; \ 2260 for ext in debug symbols; do \ 2261 if ! [ -e "${DESTDIR}/$${file}" ] && [ -f \ 2262 "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" ]; then \ 2263 rm ${RM_I} "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" \ 2264 <&3; \ 2265 fi; \ 2266 done; \ 2267 done 2268# Remove catpages without corresponding manpages. 2269 @exec 3<&0; \ 2270 find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 2271 sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 2272 while read catpage; do \ 2273 read manpage; \ 2274 if [ ! -e "$${manpage}" ]; then \ 2275 rm ${RM_I} $${catpage} <&3; \ 2276 fi; \ 2277 done 2278 @echo ">>> Old files removed" 2279 2280check-old-files: .PHONY 2281 @echo ">>> Checking for old files" 2282 @cd ${.CURDIR}; \ 2283 ${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \ 2284 -V OLD_FILES -V "OLD_FILES:Musr/share/*.gz:R" | xargs -n1 | \ 2285 while read file; do \ 2286 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 2287 echo "${DESTDIR}/$${file}"; \ 2288 fi; \ 2289 for ext in debug symbols; do \ 2290 if [ -f "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" ]; then \ 2291 echo "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}"; \ 2292 fi; \ 2293 done; \ 2294 done 2295# Check for catpages without corresponding manpages. 2296 @find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 2297 sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 2298 while read catpage; do \ 2299 read manpage; \ 2300 if [ ! -e "$${manpage}" ]; then \ 2301 echo $${catpage}; \ 2302 fi; \ 2303 done 2304 2305delete-old-libs: .PHONY 2306 @echo ">>> Removing old libraries" 2307 @echo "${OLD_LIBS_MESSAGE}" | fmt 2308 @exec 3<&0; \ 2309 cd ${.CURDIR}; \ 2310 ${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \ 2311 -V OLD_LIBS | xargs -n1 | \ 2312 while read file; do \ 2313 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 2314 chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \ 2315 rm ${RM_I} "${DESTDIR}/$${file}" <&3; \ 2316 fi; \ 2317 for ext in debug symbols; do \ 2318 if ! [ -e "${DESTDIR}/$${file}" ] && [ -f \ 2319 "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" ]; then \ 2320 rm ${RM_I} "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" \ 2321 <&3; \ 2322 fi; \ 2323 done; \ 2324 done 2325 @echo ">>> Old libraries removed" 2326 2327check-old-libs: .PHONY 2328 @echo ">>> Checking for old libraries" 2329 @cd ${.CURDIR}; \ 2330 ${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \ 2331 -V OLD_LIBS | xargs -n1 | \ 2332 while read file; do \ 2333 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \ 2334 echo "${DESTDIR}/$${file}"; \ 2335 fi; \ 2336 for ext in debug symbols; do \ 2337 if [ -f "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}" ]; then \ 2338 echo "${DESTDIR}${DEBUGDIR}/$${file}.$${ext}"; \ 2339 fi; \ 2340 done; \ 2341 done 2342 2343delete-old-dirs: .PHONY 2344 @echo ">>> Removing old directories" 2345 @cd ${.CURDIR}; \ 2346 ${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \ 2347 -V OLD_DIRS | xargs -n1 | sort -r | \ 2348 while read dir; do \ 2349 if [ -d "${DESTDIR}/$${dir}" ]; then \ 2350 rmdir -v "${DESTDIR}/$${dir}" || true; \ 2351 elif [ -L "${DESTDIR}/$${dir}" ]; then \ 2352 echo "${DESTDIR}/$${dir} is a link, please remove everything manually."; \ 2353 fi; \ 2354 if [ -d "${DESTDIR}${DEBUGDIR}/$${dir}" ]; then \ 2355 rmdir -v "${DESTDIR}${DEBUGDIR}/$${dir}" || true; \ 2356 elif [ -L "${DESTDIR}${DEBUGDIR}/$${dir}" ]; then \ 2357 echo "${DESTDIR}${DEBUGDIR}/$${dir} is a link, please remove everything manually."; \ 2358 fi; \ 2359 done 2360 @echo ">>> Old directories removed" 2361 2362check-old-dirs: .PHONY 2363 @echo ">>> Checking for old directories" 2364 @cd ${.CURDIR}; \ 2365 ${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \ 2366 -V OLD_DIRS | xargs -n1 | \ 2367 while read dir; do \ 2368 if [ -d "${DESTDIR}/$${dir}" ]; then \ 2369 echo "${DESTDIR}/$${dir}"; \ 2370 elif [ -L "${DESTDIR}/$${dir}" ]; then \ 2371 echo "${DESTDIR}/$${dir} is a link, please remove everything manually."; \ 2372 fi; \ 2373 if [ -d "${DESTDIR}${DEBUGDIR}/$${dir}" ]; then \ 2374 echo "${DESTDIR}${DEBUGDIR}/$${dir}"; \ 2375 elif [ -L "${DESTDIR}${DEBUGDIR}/$${dir}" ]; then \ 2376 echo "${DESTDIR}${DEBUGDIR}/$${dir} is a link, please remove everything manually."; \ 2377 fi; \ 2378 done 2379 2380delete-old: delete-old-files delete-old-dirs .PHONY 2381 @echo "To remove old libraries run '${MAKE_CMD} delete-old-libs'." 2382 2383check-old: check-old-files check-old-libs check-old-dirs .PHONY 2384 @echo "To remove old files and directories run '${MAKE_CMD} delete-old'." 2385 @echo "To remove old libraries run '${MAKE_CMD} delete-old-libs'." 2386 2387.endif 2388 2389# 2390# showconfig - show build configuration. 2391# 2392showconfig: .PHONY 2393 @(${MAKE} -n -f ${.CURDIR}/sys/conf/kern.opts.mk -V dummy -dg1; \ 2394 ${MAKE} -n -f ${.CURDIR}/share/mk/src.opts.mk -V dummy -dg1) 2>&1 | grep ^MK_ | sort -u 2395 2396.if !empty(KRNLOBJDIR) && !empty(KERNCONF) 2397DTBOUTPUTPATH= ${KRNLOBJDIR}/${KERNCONF}/ 2398 2399.if !defined(FDT_DTS_FILE) || empty(FDT_DTS_FILE) 2400.if exists(${KERNCONFDIR}/${KERNCONF}) 2401FDT_DTS_FILE!= awk 'BEGIN {FS="="} /^makeoptions[[:space:]]+FDT_DTS_FILE/ {print $$2}' \ 2402 '${KERNCONFDIR}/${KERNCONF}' ; echo 2403.endif 2404.endif 2405 2406.endif 2407 2408.if !defined(DTBOUTPUTPATH) || !exists(${DTBOUTPUTPATH}) 2409DTBOUTPUTPATH= ${.CURDIR} 2410.endif 2411 2412# 2413# Build 'standalone' Device Tree Blob 2414# 2415builddtb: .PHONY 2416 @PATH=${TMPPATH} MACHINE=${TARGET} \ 2417 ${.CURDIR}/sys/tools/fdt/make_dtb.sh ${.CURDIR}/sys \ 2418 "${FDT_DTS_FILE}" ${DTBOUTPUTPATH} 2419 2420############### 2421 2422# cleanworld 2423# In the following, the first 'rm' in a series will usually remove all 2424# files and directories. If it does not, then there are probably some 2425# files with file flags set, so this unsets them and tries the 'rm' a 2426# second time. There are situations where this target will be cleaning 2427# some directories via more than one method, but that duplication is 2428# needed to correctly handle all the possible situations. Removing all 2429# files without file flags set in the first 'rm' instance saves time, 2430# because 'chflags' will need to operate on fewer files afterwards. 2431# 2432# It is expected that BW_CANONICALOBJDIR == the CANONICALOBJDIR as would be 2433# created by bsd.obj.mk, except that we don't want to .include that file 2434# in this makefile. 2435# 2436BW_CANONICALOBJDIR:=${OBJTREE}${.CURDIR} 2437cleanworld: .PHONY 2438.if exists(${BW_CANONICALOBJDIR}/) 2439 -rm -rf ${BW_CANONICALOBJDIR}/* 2440 -chflags -R 0 ${BW_CANONICALOBJDIR} 2441 rm -rf ${BW_CANONICALOBJDIR}/* 2442.endif 2443.if ${.CURDIR} == ${.OBJDIR} || ${.CURDIR}/obj == ${.OBJDIR} 2444 # To be safe in this case, fall back to a 'make cleandir' 2445 ${_+_}@cd ${.CURDIR}; ${MAKE} cleandir 2446.endif 2447 2448.if defined(TARGET) && defined(TARGET_ARCH) 2449 2450.if ${TARGET} == ${MACHINE} && ${TARGET_ARCH} == ${MACHINE_ARCH} 2451XDEV_CPUTYPE?=${CPUTYPE} 2452.else 2453XDEV_CPUTYPE?=${TARGET_CPUTYPE} 2454.endif 2455 2456NOFUN=-DNO_FSCHG MK_HTML=no -DNO_LINT \ 2457 MK_MAN=no MK_NLS=no MK_PROFILE=no \ 2458 MK_KERBEROS=no MK_RESCUE=no MK_TESTS=no MK_WARNS=no \ 2459 TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 2460 CPUTYPE=${XDEV_CPUTYPE} 2461 2462XDDIR=${TARGET_ARCH}-freebsd 2463XDTP?=/usr/${XDDIR} 2464.if ${XDTP:N/*} 2465.error XDTP variable should be an absolute path 2466.endif 2467 2468CDBENV=MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/${XDDIR} \ 2469 INSTALL="sh ${.CURDIR}/tools/install.sh" 2470CDENV= ${CDBENV} \ 2471 TOOLS_PREFIX=${XDTP} 2472 2473.if ${WANT_COMPILER_TYPE} == gcc || \ 2474 (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) 2475# GCC requires -isystem and -L when using a cross-compiler. --sysroot 2476# won't set header path and -L is used to ensure the base library path 2477# is added before the port PREFIX library path. 2478CD2CFLAGS+= -isystem ${XDDESTDIR}/usr/include -L${XDDESTDIR}/usr/lib 2479# GCC requires -B to find /usr/lib/crti.o when using a cross-compiler 2480# combined with --sysroot. 2481CD2CFLAGS+= -B${XDDESTDIR}/usr/lib 2482# Force using libc++ for external GCC. 2483# XXX: This should be checking MK_GNUCXX == no 2484.if ${X_COMPILER_VERSION} >= 40800 2485CD2CXXFLAGS+= -isystem ${XDDESTDIR}/usr/include/c++/v1 -std=c++11 \ 2486 -nostdinc++ 2487.endif 2488.endif 2489CD2CFLAGS+= --sysroot=${XDDESTDIR}/ 2490CD2ENV=${CDENV} CC="${CC} ${CD2CFLAGS}" CXX="${CXX} ${CD2CXXFLAGS} ${CD2CFLAGS}" \ 2491 CPP="${CPP} ${CD2CFLAGS}" \ 2492 MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH} 2493 2494CDTMP= ${MAKEOBJDIRPREFIX}/${XDDIR}/${.CURDIR}/tmp 2495CDMAKE=${CDENV} PATH=${CDTMP}/usr/bin:${PATH} ${MAKE} ${NOFUN} 2496CD2MAKE=${CD2ENV} PATH=${CDTMP}/usr/bin:${XDDESTDIR}/usr/bin:${PATH} ${MAKE} ${NOFUN} 2497.if ${MK_META_MODE} != "no" 2498# Don't rebuild build-tools targets during normal build. 2499CD2MAKE+= BUILD_TOOLS_META=.NOMETA 2500.endif 2501XDDESTDIR=${DESTDIR}/${XDTP} 2502.if !defined(OSREL) 2503OSREL!= uname -r | sed -e 's/[-(].*//' 2504.endif 2505 2506.ORDER: xdev-build xdev-install xdev-links 2507xdev: xdev-build xdev-install .PHONY 2508 2509.ORDER: _xb-worldtmp _xb-bootstrap-tools _xb-build-tools _xb-cross-tools 2510xdev-build: _xb-worldtmp _xb-bootstrap-tools _xb-build-tools _xb-cross-tools .PHONY 2511 2512_xb-worldtmp: .PHONY 2513 mkdir -p ${CDTMP}/usr 2514 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 2515 -p ${CDTMP}/usr >/dev/null 2516 2517_xb-bootstrap-tools: .PHONY 2518.for _tool in \ 2519 ${_clang_tblgen} \ 2520 ${_gperf} \ 2521 ${_yacc} 2522 ${_+_}@${ECHODIR} "===> ${_tool} (obj,all,install)"; \ 2523 cd ${.CURDIR}/${_tool}; \ 2524 ${CDMAKE} DIRPRFX=${_tool}/ obj; \ 2525 ${CDMAKE} DIRPRFX=${_tool}/ all; \ 2526 ${CDMAKE} DIRPRFX=${_tool}/ DESTDIR=${CDTMP} install 2527.endfor 2528 2529_xb-build-tools: .PHONY 2530 ${_+_}@cd ${.CURDIR}; \ 2531 ${CDBENV} ${MAKE} -f Makefile.inc1 ${NOFUN} build-tools 2532 2533_xb-cross-tools: .PHONY 2534.for _tool in \ 2535 ${_binutils} \ 2536 ${_elftctools} \ 2537 usr.bin/ar \ 2538 ${_clang_libs} \ 2539 ${_clang} \ 2540 ${_gcc} 2541 ${_+_}@${ECHODIR} "===> xdev ${_tool} (obj,all)"; \ 2542 cd ${.CURDIR}/${_tool}; \ 2543 ${CDMAKE} DIRPRFX=${_tool}/ obj; \ 2544 ${CDMAKE} DIRPRFX=${_tool}/ all 2545.endfor 2546 2547_xi-mtree: .PHONY 2548 ${_+_}@${ECHODIR} "mtree populating ${XDDESTDIR}" 2549 mkdir -p ${XDDESTDIR} 2550 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.root.dist \ 2551 -p ${XDDESTDIR} >/dev/null 2552 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 2553 -p ${XDDESTDIR}/usr >/dev/null 2554 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 2555 -p ${XDDESTDIR}/usr/include >/dev/null 2556.if defined(LIBCOMPAT) 2557 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib${libcompat}.dist \ 2558 -p ${XDDESTDIR}/usr >/dev/null 2559.endif 2560.if ${MK_TESTS} != "no" 2561 mkdir -p ${XDDESTDIR}${TESTSBASE} 2562 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \ 2563 -p ${XDDESTDIR}${TESTSBASE} >/dev/null 2564.endif 2565 2566.ORDER: xdev-build _xi-mtree _xi-cross-tools _xi-includes _xi-libraries 2567xdev-install: xdev-build _xi-mtree _xi-cross-tools _xi-includes _xi-libraries .PHONY 2568 2569_xi-cross-tools: .PHONY 2570 @echo "_xi-cross-tools" 2571.for _tool in \ 2572 ${_binutils} \ 2573 ${_elftctools} \ 2574 usr.bin/ar \ 2575 ${_clang_libs} \ 2576 ${_clang} \ 2577 ${_gcc} 2578 ${_+_}@${ECHODIR} "===> xdev ${_tool} (install)"; \ 2579 cd ${.CURDIR}/${_tool}; \ 2580 ${CDMAKE} DIRPRFX=${_tool}/ install DESTDIR=${XDDESTDIR} 2581.endfor 2582 2583_xi-includes: .PHONY 2584 ${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 includes \ 2585 DESTDIR=${XDDESTDIR} 2586 2587_xi-libraries: .PHONY 2588 ${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 libraries \ 2589 DESTDIR=${XDDESTDIR} 2590 2591xdev-links: .PHONY 2592 ${_+_}cd ${XDDESTDIR}/usr/bin; \ 2593 mkdir -p ../../../../usr/bin; \ 2594 for i in *; do \ 2595 ln -sf ../../${XDTP}/usr/bin/$$i \ 2596 ../../../../usr/bin/${XDDIR}-$$i; \ 2597 ln -sf ../../${XDTP}/usr/bin/$$i \ 2598 ../../../../usr/bin/${XDDIR}${OSREL}-$$i; \ 2599 done 2600.else 2601xdev xdev-build xdev-install xdev-links: .PHONY 2602 @echo "*** Error: Both TARGET and TARGET_ARCH must be defined for \"${.TARGET}\" target" 2603.endif 2604