1# $FreeBSD$ 2 3.PATH: ${.CURDIR}/../../include 4 5LIB= egacy 6SRC= 7INCSGROUPS= INCS SYSINCS 8INCS= 9 10SYSINCSDIR= ${INCLUDEDIR}/sys 11 12BOOTSTRAPPING?= 0 13 14_WITH_PWCACHEDB!= grep -c pwcache_groupdb /usr/include/grp.h || true 15.if ${_WITH_PWCACHEDB} == 0 16.PATH: ${.CURDIR}/../../contrib/libc-pwcache 17CFLAGS+= -I${.CURDIR}/../../contrib/libc-pwcache \ 18 -I${.CURDIR}/../../lib/libc/include 19SRCS+= pwcache.c 20.endif 21 22_WITH_STRSVIS!= grep -c strsvis /usr/include/vis.h || true 23.if ${_WITH_STRSVIS} == 0 24.PATH: ${.CURDIR}/../../contrib/libc-vis 25SRCS+= vis.c 26CFLAGS+= -I${.CURDIR}/../../contrib/libc-vis \ 27 -I${.CURDIR}/../../lib/libc/include 28.endif 29 30_WITH_REALLOCARRAY!= grep -c reallocarray /usr/include/stdlib.h || true 31.if ${_WITH_REALLOCARRAY} == 0 32.PATH: ${.CURDIR}/../../lib/libc/stdlib 33INCS+= stdlib.h 34SRCS+= reallocarray.c 35CFLAGS+= -I${.CURDIR}/../../lib/libc/include 36.endif 37 38_WITH_UTIMENS!= grep -c utimensat /usr/include/sys/stat.h || true 39.if ${_WITH_UTIMENS} == 0 40SYSINCS+= stat.h 41SRCS+= futimens.c utimensat.c 42.endif 43 44_WITH_EXPLICIT_BZERO!= grep -c explicit_bzero /usr/include/strings.h || true 45.if ${_WITH_EXPLICIT_BZERO} == 0 46.PATH: ${SRCTOP}/sys/libkern 47INCS+= strings.h 48SRCS+= explicit_bzero.c 49.endif 50 51.if empty(SRCS) 52SRCS= dummy.c 53.endif 54 55.if defined(CROSS_BUILD_TESTING) 56SUBDIR= cross-build 57.endif 58 59# Needed to build config (since it uses libnv) 60SYSINCS+= ${SRCTOP}/sys/sys/nv.h ${SRCTOP}/sys/sys/cnv.h 61 62# We want to run the build with only ${WORLDTMP} in $PATH to ensure we don't 63# accidentally run tools that are incompatible but happen to be in $PATH. 64# This is especially important when building on Linux/MacOS where many of the 65# programs used during the build accept different flags or generate different 66# output. On those platforms we only symlink the tools known to be compatible 67# (e.g. basic utilities such as mkdir) into ${WORLDTMP} and build all others 68# from the FreeBSD sources during the bootstrap-tools stage. 69 70# basic commands: It is fine to use the host version for all of these even on 71# Linux/MacOS since we only use flags that are supported by all of them. 72_host_tools_to_symlink= basename bzip2 bunzip2 chmod chown cmp comm cp date \ 73 dirname echo env false find fmt gzip gunzip head hostname id ln ls \ 74 mkdir mv nice patch rm realpath sh sleep stat tee touch tr true uname \ 75 uniq wc which 76 77# We also need a symlink to the absolute path to the make binary used for 78# the toplevel makefile. This is not necessarily the same as `which make` 79# since e.g. on Linux and MacOS that will be GNU make. 80_make_abs!= which "${MAKE}" 81_host_abs_tools_to_symlink= ${_make_abs}:make ${_make_abs}:bmake 82 83host-symlinks: 84 @echo "Linking host tools into ${DESTDIR}/bin" 85.for _tool in ${_host_tools_to_symlink} 86 @if [ ! -e "${DESTDIR}/bin/${_tool}" ]; then \ 87 source_path=`which ${_tool}`; \ 88 if [ ! -e "$${source_path}" ] ; then \ 89 echo "Cannot find host tool '${_tool}'"; false; \ 90 fi; \ 91 ln -sfnv "$${source_path}" "${DESTDIR}/bin/${_tool}"; \ 92 fi 93.endfor 94.for _tool in ${_host_abs_tools_to_symlink} 95 @source_path="${_tool:S/:/ /:[1]}"; \ 96 target_path="${DESTDIR}/bin/${_tool:S/:/ /:[2]}"; \ 97 if [ ! -e "$${target_path}" ] ; then \ 98 if [ ! -e "$${source_path}" ] ; then \ 99 echo "Host tool '${src_path}' is missing"; false; \ 100 fi; \ 101 ln -sfnv "$${source_path}" "$${target_path}"; \ 102 fi 103.endfor 104 105# Create all the directories that are needed during the legacy, bootstrap-tools 106# and cross-tools stages. We do this here using mkdir since mtree may not exist 107# yet (this happens if we are crossbuilding from Linux/Mac). 108installdirs: 109.for _dir in bin usr/lib usr/include lib/geom lib/casper 110 mkdir -p "${DESTDIR}/${_dir}" 111.endfor 112# Link usr/bin, sbin, and usr/sbin to bin so that it doesn't matter whether a 113# bootstrap tool was added to WORLTMP with a symlink or by building it in the 114# bootstrap-tools phase. We could also overrride BINDIR when building bootstrap 115# tools but adding the symlinks is easier and means all tools are also 116# in the directory that they are installed to normally. 117 118.for _dir in sbin usr/sbin usr/bin 119# delete existing directories from before r340157 120 @if [ ! -L ${DESTDIR}/${_dir} ]; then \ 121 echo "removing old non-symlink ${DESTDIR}/${_dir}"; \ 122 rm -rf "${DESTDIR}/${_dir}"; \ 123 fi 124.endfor 125 ln -sfn bin ${DESTDIR}/sbin 126 ln -sfn ../bin ${DESTDIR}/usr/bin 127 ln -sfn ../bin ${DESTDIR}/usr/sbin 128.for _group in ${INCSGROUPS:NINCS} 129 mkdir -p "${DESTDIR}/${${_group}DIR}" 130.endfor 131 132.include <bsd.lib.mk> 133