13d0fb7cfSSimon J. Gerraty.if !target(_DIRDEP_USE) 23d0fb7cfSSimon J. Gerraty# we are the 1st makefile 37750ad47SMarcel Moolenaar 4ee7b0571SSimon J. Gerraty.if !defined(MK_CLANG) 5ea14011cSSimon J. Gerraty.include "${SRCTOP}/share/mk/src.opts.mk" 6e86ede0dSSimon J. Gerraty.endif 7e86ede0dSSimon J. Gerraty 8*2008043fSStephen J. Kiernan# Machine-specific MK settings needed for Makefile.dirdeps.options usage 9*2008043fSStephen J. KiernanMK_FDT.i386 = no 10*2008043fSStephen J. KiernanMK_FDT.amd64 = no 11*2008043fSStephen J. Kiernan 1261ad1ff5SSimon J. Gerraty# making universe is special 1361ad1ff5SSimon J. Gerraty.if defined(UNIVERSE_GUARD) 1461ad1ff5SSimon J. Gerraty# these should be done by now 1561ad1ff5SSimon J. GerratyDIRDEPS_FILTER+= N*.host 1661ad1ff5SSimon J. Gerraty.endif 1761ad1ff5SSimon J. Gerraty 183d0fb7cfSSimon J. Gerraty# pseudo machines get no qualification 19d489b2a3SSimon J. Gerraty.for m in ${PSEUDO_MACHINE_LIST:Nhost*} 203d0fb7cfSSimon J. GerratyM_dep_qual_fixes += C;($m),[^/.,]*$$;\1; 213d0fb7cfSSimon J. Gerraty.endfor 223d0fb7cfSSimon J. Gerraty#.info M_dep_qual_fixes=${M_dep_qual_fixes} 234aa63711SBryan Drewery 24e5e345a4SSimon J. Gerraty# Some things we never want to build for host 256c5406e4SSimon J. GerratyDIRDEPS_FILTER.host = \ 2600140433SSimon J. Gerraty Ninclude* \ 27cb9c7ed1SSimon J. Gerraty Nlib/csu* \ 28a6589ab7SSimon J. Gerraty Nlib/libc \ 29f9df6097SSimon J. Gerraty Nlib/libcompiler_rt \ 30cb9c7ed1SSimon J. Gerraty Nlib/[mn]* \ 31f9df6097SSimon J. Gerraty Nlib/lib[t]* \ 32cb9c7ed1SSimon J. Gerraty Ngnu/lib/lib[a-r]* \ 33a0c640c2SBryan Drewery Nsecure/lib* \ 344113aa90SSimon J. Gerraty Nusr.bin/xinstall* \ 3500140433SSimon J. Gerraty 36e5e345a4SSimon J. Gerraty.if ${.MAKE.OS} == "FreeBSD" 37e5e345a4SSimon J. Gerraty# Host libraries should mostly be excluded from the build so the 38e5e345a4SSimon J. Gerraty# host version in /usr/lib is used. 39e5e345a4SSimon J. Gerraty# Internal libraries need to be allowed to be built though 40e5e345a4SSimon J. Gerraty# since they are never installed. 41e5e345a4SSimon J. Gerraty 42e5e345a4SSimon J. Gerraty# Cheat for including src.libnames.mk 43e5e345a4SSimon J. Gerraty__<bsd.init.mk>__: 44e5e345a4SSimon J. Gerraty# Pull in _INTERNALLIBS 45e5e345a4SSimon J. Gerraty.include <src.libnames.mk> 46e5e345a4SSimon J. Gerraty 47e5e345a4SSimon J. Gerraty_need_host_libs= 48e5e345a4SSimon J. Gerraty.for lib in ${_INTERNALLIBS} 49e5e345a4SSimon J. Gerraty_need_host_libs+= ${LIB${lib:tu}DIR:S,^${OBJTOP}/,,} 50e5e345a4SSimon J. Gerraty.endfor 51e5e345a4SSimon J. Gerraty.if ${MK_host_egacy} == "yes" 52e5e345a4SSimon J. Gerraty_need_host_libs+= lib/libmd 53e5e345a4SSimon J. Gerraty.endif 54e5e345a4SSimon J. Gerraty 55e5e345a4SSimon J. GerratyN_host_libs:= ${cd ${SRCTOP} && echo lib/lib*:L:sh:${_need_host_libs:${M_ListToSkip}}:${M_ListToSkip}} 56e5e345a4SSimon J. GerratyDIRDEPS_FILTER.host+= ${N_host_libs} 57e5e345a4SSimon J. Gerraty.endif 583d0fb7cfSSimon J. Gerraty 59f9df6097SSimon J. GerratyDIRDEPS_FILTER.host32 = ${DIRDEPS_FILTER.host} 60f9df6097SSimon J. Gerraty 61c65ae8f9SSimon J. GerratyDIRDEPS_FILTER+= \ 62704b4cacSSimon J. Gerraty Nbin/cat.host \ 63c65ae8f9SSimon J. Gerraty ${DIRDEPS_FILTER.xtras:U} 6489bd07e9SBryan Drewery 6589bd07e9SBryan Drewery# Cleanup a buildworld's WORLDTMP so that any files generated from it 6689bd07e9SBryan Drewery# or using it will rebuild with the DIRDEPS SYSROOT. Otherwise existing 6789bd07e9SBryan Drewery# object .meta files may still reference those directories and not be 6889bd07e9SBryan Drewery# rebuilt and lead to incorrect Makefile.depend files due to lack of 6989bd07e9SBryan Drewery# .dirdep files. 7089bd07e9SBryan Drewery.if !defined(NO_CLEANUP_WORLDTMP) && exists(${OBJTOP}/tmp/_worldtmp) 7189bd07e9SBryan Drewerycleanup_worldtmp: .PHONY .NOMETA 7289bd07e9SBryan Drewery @echo "Cleaning leftover WORLDTMP from buildworld." 7389bd07e9SBryan Drewery -rm -rf ${OBJTOP}/tmp/* 7489bd07e9SBryan Drewery -chflags -R 0 ${OBJTOP}/tmp/* 7589bd07e9SBryan Drewery rm -rf ${OBJTOP}/tmp 7689bd07e9SBryan Drewerybeforedirdeps: cleanup_worldtmp 7789bd07e9SBryan Drewery.endif 788561d0b2SSimon J. Gerraty 798561d0b2SSimon J. Gerraty# pseudo option for building host tools on old or non-FreeBSD host 808561d0b2SSimon J. Gerraty# allows us to leverage Makefile.depend.options with 818561d0b2SSimon J. Gerraty# DIRDEPS_OPTIONS = host_egacy 828561d0b2SSimon J. Gerraty# dirdeps-options.mk will qualify with ${DEP_MACHINE} (and others) 838561d0b2SSimon J. Gerraty# before looking at the bare option. 848561d0b2SSimon J. GerratyMK_host_egacy.host= ${MK_host_egacy} 858561d0b2SSimon J. Gerraty 868561d0b2SSimon J. Gerraty.endif # !target(_DIRDEP_USE) 87c65ae8f9SSimon J. Gerraty 88c65ae8f9SSimon J. Gerraty# reset this each time 89c65ae8f9SSimon J. GerratyDIRDEPS_FILTER.xtras= 90c65ae8f9SSimon J. Gerraty.if ${DEP_MACHINE:Npkgs*} != "" 91c65ae8f9SSimon J. GerratyDIRDEPS_FILTER.xtras+= Nusr.bin/clang/clang.host 923d0fb7cfSSimon J. Gerraty.endif 933d0fb7cfSSimon J. Gerraty 9493ac817fSSimon J. Gerraty.if ${DEP_MACHINE:Nhost*} == "" 9593ac817fSSimon J. Gerraty.if ${MK_host_egacy} == "yes" && ${DEP_RELDIR:Ntools/build:Ntargets/*:N*/stage} != "" 9693ac817fSSimon J. GerratyDIRDEPS += tools/build 9793ac817fSSimon J. Gerraty.endif 9893ac817fSSimon J. Gerraty.else 998561d0b2SSimon J. GerratyMK_host_egacy.${DEP_MACHINE}= no 1003d0fb7cfSSimon J. Gerraty 1013d0fb7cfSSimon J. Gerraty# this is how we can handle optional dependencies 102c65ae8f9SSimon J. Gerraty.if ${DEP_RELDIR} == "lib/libc" 103c65ae8f9SSimon J. GerratyDIRDEPS += lib/libc_nonshared 104c65ae8f9SSimon J. Gerraty.if ${MK_SSP:Uno} != "no" 105cd0d51baSKyle EvansDIRDEPS += lib/libssp_nonshared 1063d0fb7cfSSimon J. Gerraty.endif 107c65ae8f9SSimon J. Gerraty.else 108c65ae8f9SSimon J. GerratyDIRDEPS_FILTER.xtras+= Nlib/libc_nonshared 109c65ae8f9SSimon J. Gerraty.endif 1103d0fb7cfSSimon J. Gerraty 1113d0fb7cfSSimon J. Gerraty# some optional things 112c65ae8f9SSimon J. Gerraty.if ${MK_CTF} == "yes" && ${DEP_RELDIR:Mcddl/usr.bin/ctf*} == "" 1133d0fb7cfSSimon J. GerratyDIRDEPS += \ 1143d0fb7cfSSimon J. Gerraty cddl/usr.bin/ctfconvert.host \ 1153d0fb7cfSSimon J. Gerraty cddl/usr.bin/ctfmerge.host 1163d0fb7cfSSimon J. Gerraty.endif 1173d0fb7cfSSimon J. Gerraty 118f9df6097SSimon J. Gerraty.if ${DEP_MACHINE:Nhost*} != "" 119a160cbfaSBryan Drewery# Add in proper libgcc (gnu or LLVM) if not building libcc and libc is needed. 120a160cbfaSBryan Drewery# Add both gcc_s and gcc_eh as dependencies as the decision to build 121a160cbfaSBryan Drewery# -static or not is not known here. 122a6589ab7SSimon J. Gerraty.if ${DEP_RELDIR:M*libgcc*} == "" && ${DIRDEPS:U:Mlib/libc} != "" 123a160cbfaSBryan DreweryDIRDEPS+= \ 124a160cbfaSBryan Drewery lib/libgcc_eh \ 125a160cbfaSBryan Drewery lib/libgcc_s 126a160cbfaSBryan Drewery.endif 127f9df6097SSimon J. Gerraty.endif 128a160cbfaSBryan Drewery 1294902050fSBryan Drewery# Bootstrap support. Give hints to DIRDEPS if there is no Makefile.depend* 1304902050fSBryan Drewery# generated yet. This can be based on things such as SRC files and LIBADD. 1314902050fSBryan Drewery# These hints will not factor into the final Makefile.depend as only what is 1324902050fSBryan Drewery# used will be added in and handled via [local.]gendirdeps.mk. This is not 1334902050fSBryan Drewery# done for MACHINE=host builds. 1344902050fSBryan Drewery# XXX: Include this in local.autodep.mk as well for gendirdeps without filemon. 13595931790SBryan Drewery# Only do this for main build target 13695931790SBryan Drewery.if ${RELDIR} == ${DEP_RELDIR} && !defined(_RECURSING_PROGS) 1374902050fSBryan Drewery.for _depfile in ${.MAKE.DEPENDFILE_PREFERENCE:T} 1384902050fSBryan Drewery.if !defined(_have_depfile) && exists(${.CURDIR}/${_depfile}) 1394902050fSBryan Drewery_have_depfile= 1403d0fb7cfSSimon J. Gerraty.endif 1414902050fSBryan Drewery.endfor 1424902050fSBryan Drewery.if !defined(_have_depfile) 14354f8ee88SBryan Drewery# KMOD does not use any stdlibs. 14454f8ee88SBryan Drewery.if !defined(KMOD) 14595931790SBryan Drewery# Gather PROGS dependencies first 14695931790SBryan Drewery.if !empty(PROGS) 14795931790SBryan Drewery_PROGS_LIBADD= 14895931790SBryan Drewery_PROGS_DPADD= 14995931790SBryan Drewery_PROGS_SRCS= 15095931790SBryan Drewery.for _prog in ${PROGS} 15195931790SBryan Drewery.for s in . _ 15295931790SBryan Drewery.if !empty(LIBADD${s}${_prog}) 15395931790SBryan Drewery_PROGS_LIBADD+= ${LIBADD${s}${_prog}} 15495931790SBryan Drewery.endif 15595931790SBryan Drewery.if !empty(DPADD${s}${_prog}) 15695931790SBryan Drewery_PROGS_DPADD+= ${DPADD${s}${_prog}} 15795931790SBryan Drewery.endif 15895931790SBryan Drewery.if !empty(SRCS${s}${_prog}) 15995931790SBryan Drewery_PROGS_SRCS+= ${SRCS${s}${_prog}} 16095931790SBryan Drewery.endif 16195931790SBryan Drewery.endfor # .for s in . _ 16295931790SBryan Drewery# Add in assumed source (bsd.prog.mk) 16395931790SBryan Drewery.if !target(${_prog}) 16495931790SBryan Drewery.if defined(PROG_CXX) 16595931790SBryan Drewery_PROGS_SRCS+= ${_prog}.cc 16695931790SBryan Drewery.else 16795931790SBryan Drewery_PROGS_SRCS+= ${_prog}.c 16895931790SBryan Drewery.endif 16995931790SBryan Drewery.endif # !target(${_prog}) 17095931790SBryan Drewery.endfor # .for _prog in ${PROGS} 17195931790SBryan Drewery.endif # !empty(PROGS) 17295931790SBryan Drewery_SRCS= ${SRCS} ${_PROGS_SRCS} 17395931790SBryan Drewery 1744902050fSBryan Drewery# Has C files. The C_DIRDEPS are shared with C++ files as well. 1754902050fSBryan DreweryC_DIRDEPS= \ 1764902050fSBryan Drewery include \ 17749e66890SBryan Drewery include/arpa \ 17849e66890SBryan Drewery include/protocols \ 17949e66890SBryan Drewery include/rpc \ 18049e66890SBryan Drewery include/rpcsvc \ 1814902050fSBryan Drewery include/xlocale \ 1824902050fSBryan Drewery lib/${CSU_DIR} \ 1834902050fSBryan Drewery lib/libc \ 1844902050fSBryan Drewery lib/libcompiler_rt \ 1854902050fSBryan Drewery 186a160cbfaSBryan Drewery# libgcc is needed as well but is added later. 18749e66890SBryan Drewery 18849e66890SBryan Drewery.if ${MK_GSSAPI} != "no" 18949e66890SBryan DreweryC_DIRDEPS+= include/gssapi 19049e66890SBryan Drewery.endif 19149e66890SBryan Drewery 19295931790SBryan Drewery.if !empty(_SRCS:M*.c) 1934902050fSBryan DreweryDIRDEPS+= ${C_DIRDEPS} 1944902050fSBryan Drewery.endif 1954902050fSBryan Drewery# Has C++ files 19695931790SBryan Drewery.if !empty(_SRCS:M*.cc) || !empty(_SRCS:M*.C) || !empty(_SRCS:M*.cpp) || \ 19795931790SBryan Drewery !empty(_SRCS:M*.cxx) 1984902050fSBryan DreweryDIRDEPS+= ${C_DIRDEPS} 1994902050fSBryan Drewery.if ${MK_CLANG} == "yes" 2004902050fSBryan DreweryDIRDEPS+= lib/libc++ lib/libcxxrt 2014902050fSBryan Drewery.endif 2024902050fSBryan Drewery# XXX: Clang and GCC always adds -lm currently, even when not needed. 2034902050fSBryan DreweryDIRDEPS+= lib/msun 20454f8ee88SBryan Drewery.endif # CXX 20554f8ee88SBryan Drewery.endif # !defined(KMOD) 2064902050fSBryan Drewery# Has yacc files. 20795931790SBryan Drewery.if !empty(_SRCS:M*.y) 2084902050fSBryan DreweryDIRDEPS+= usr.bin/yacc.host 2094902050fSBryan Drewery.endif 21095931790SBryan Drewery_DPADD= ${DPADD} ${_PROGS_DPADD} 21195931790SBryan Drewery.if !empty(_DPADD) 2124902050fSBryan Drewery# This only works for DPADD with full OBJ/SRC paths, which is mostly just 2134902050fSBryan Drewery# _INTERNALLIBS. 21492cc2837SBryan Drewery_DP_DIRDEPS= \ 21566f96a13SBryan Drewery ${_DPADD:O:u:M${OBJTOP}*:H:N.:tA:C,${OBJTOP}[^/]*/,,:N.:O:u} \ 21666f96a13SBryan Drewery ${_DPADD:O:u:M${OBJROOT}*:N${OBJTOP}*:N${STAGE_ROOT}/*:H:S,${OBJROOT},,:C,^([^/]+)/(.*),\2.\1,:S,${HOST_TARGET}$,host,:N.*:O:u} 217bd1944caSBryan Drewery# Resolve the paths to RELDIRs 218a09a83caSBryan Drewery.if !empty(_DP_DIRDEPS) 219bd1944caSBryan DreweryDIRDEPS+= ${_DP_DIRDEPS:C,^,${SRCTOP}/,:tA:C,^${SRCTOP}/,,} 2204902050fSBryan Drewery.endif 221a09a83caSBryan Drewery.endif # !empty(DPADD) 22266f96a13SBryan Drewery_ALL_LIBADD= ${LIBADD} ${_PROGS_LIBADD} 22395931790SBryan Drewery.if !empty(_ALL_LIBADD) 22495931790SBryan Drewery# Also handle LIBADD for non-internal libraries. 22566f96a13SBryan Drewery.for _lib in ${_ALL_LIBADD:O:u} 2264902050fSBryan Drewery_lib${_lib}reldir= ${LIB${_lib:tu}DIR:C,${OBJTOP}/,,} 2274902050fSBryan Drewery.if defined(LIB${_lib:tu}DIR) && ${DIRDEPS:M${_lib${_lib}reldir}} == "" && \ 2284902050fSBryan Drewery exists(${SRCTOP}/${_lib${_lib}reldir}) 2294902050fSBryan DreweryDIRDEPS+= ${_lib${_lib}reldir} 2304902050fSBryan Drewery.endif 2314902050fSBryan Drewery.endfor 2324902050fSBryan Drewery.endif # !empty(LIBADD) 2334902050fSBryan Drewery.endif # no Makefile.depend* 2344902050fSBryan Drewery.endif # ${RELDIR} == ${DEP_RELDIR} 2354902050fSBryan Drewery 2364902050fSBryan Drewery.endif # ${DEP_MACHINE} != "host" 2373d0fb7cfSSimon J. Gerraty 2384113aa90SSimon J. Gerraty.if ${MK_STAGING} == "yes" 23961ad1ff5SSimon J. Gerraty# we need targets/pseudo/stage to prep the stage tree 240f957a32dSSimon J. Gerraty.if ${DEP_RELDIR:N.:N${SRCTOP}:N*pseudo/stage} != "" 24161ad1ff5SSimon J. GerratyDIRDEPS += targets/pseudo/stage 2423d0fb7cfSSimon J. Gerraty.endif 2434113aa90SSimon J. Gerraty.endif 2443d0fb7cfSSimon J. Gerraty 2453d0fb7cfSSimon J. GerratyDEP_MACHINE_ARCH = ${MACHINE_ARCH.${DEP_MACHINE}} 246f957a32dSSimon J. GerratyDEP_MACHINE_CPUARCH = ${DEP_MACHINE_ARCH:${__TO_CPUARCH}} 2473d0fb7cfSSimon J. GerratyCSU_DIR.${DEP_MACHINE_ARCH} ?= csu/${DEP_MACHINE_ARCH} 2483d0fb7cfSSimon J. GerratyCSU_DIR := ${CSU_DIR.${DEP_MACHINE_ARCH}} 2493d0fb7cfSSimon J. GerratyBOOT_MACHINE_DIR:= ${BOOT_MACHINE_DIR.${DEP_MACHINE}} 2503d0fb7cfSSimon J. GerratyKERNEL_NAME:= ${KERNEL_NAME.${DEP_MACHINE}} 251073ccb9dSSimon J. Gerraty 252073ccb9dSSimon J. Gerraty.-include <site.dirdeps.mk> 253