diff --git a/share/mk/local.dirdeps.mk b/share/mk/local.dirdeps.mk --- a/share/mk/local.dirdeps.mk +++ b/share/mk/local.dirdeps.mk @@ -60,7 +60,15 @@ rm -rf ${OBJTOP}/tmp beforedirdeps: cleanup_worldtmp .endif -.endif + +# pseudo option for building host tools on old or non-FreeBSD host +# allows us to leverage Makefile.depend.options with +# DIRDEPS_OPTIONS = host_egacy +# dirdeps-options.mk will qualify with ${DEP_MACHINE} (and others) +# before looking at the bare option. +MK_host_egacy.host= ${MK_host_egacy} + +.endif # !target(_DIRDEP_USE) # reset this each time DIRDEPS_FILTER.xtras= @@ -69,6 +77,7 @@ .endif .if ${DEP_MACHINE} != "host" +MK_host_egacy.${DEP_MACHINE}= no # this is how we can handle optional dependencies .if ${DEP_RELDIR} == "lib/libc" diff --git a/share/mk/local.init.mk b/share/mk/local.init.mk --- a/share/mk/local.init.mk +++ b/share/mk/local.init.mk @@ -19,7 +19,10 @@ CXXFLAGS_LAST+= --sysroot=${SYSROOT} LDADD+= --sysroot=${SYSROOT} .elif ${MK_STAGING} == "yes" -CFLAGS+= -isystem ${STAGE_INCLUDEDIR} +ISYSTEM?= ${STAGE_INCLUDEDIR} +# no space after -isystem makes it easier to +# grep the flag out of command lines (in meta files) to see its value. +CFLAGS+= -isystem${ISYSTEM} # XXX: May be needed for GCC to build with libc++ rather than libstdc++. See Makefile.inc1 #CXXFLAGS+= -std=gnu++11 #LDADD+= -L${STAGE_LIBDIR}/libc++ diff --git a/share/mk/local.sys.mk b/share/mk/local.sys.mk --- a/share/mk/local.sys.mk +++ b/share/mk/local.sys.mk @@ -79,6 +79,14 @@ .endif .endif +.if ${MK_DIRDEPS_BUILD} == "yes" +.if ${.MAKE.OS} != "FreeBSD" || ${_HOST_OSREL:R} < ${OS_REVISION:R} +# a pseudo option to indicate we need libegacy for host +MK_host_egacy= yes +.endif +.endif +MK_host_egacy?= no + .if ${.MAKE.MODE:Mmeta*} != "" # we can afford to use cookies to prevent some targets # re-running needlessly but only when using filemon. diff --git a/share/mk/src.init.linux.mk b/share/mk/src.init.linux.mk new file mode 100644 --- /dev/null +++ b/share/mk/src.init.linux.mk @@ -0,0 +1,15 @@ +# We want to build some host tools (eg makefs, mkimg) for Linux +# This only gets included during DIRDEPS_BUILD when MACHINE is "host" + +CFLAGS+= -I${SRCTOP}/tools/build/cross-build/include/linux + +WARNS= 0 + +.ifdef PROG +LOCAL_LIBRARIES+= bsd egacy +LIBADD+= egacy m +.endif + +# Bring in the full GNU namespace +CFLAGS+= -D_GNU_SOURCE + diff --git a/share/mk/src.init.mk b/share/mk/src.init.mk --- a/share/mk/src.init.mk +++ b/share/mk/src.init.mk @@ -8,4 +8,35 @@ ${_+_}@env BUILDENV_DIR=${.CURDIR} ${MAKE} -C ${SRCTOP} buildenv .endif +.if ${MACHINE:Nhost*} == "" +.if ${.MAKE.OS} != "FreeBSD" +# these won't work anyway - see tools/build/mk/Makefile.boot.pre +MK_DEBUG_FILES= no +MK_MAN= no +MK_PIE= no +MK_RETPOLINE= no +NO_SHARED= no +MK_TESTS= no + +.-include + +CFLAGS+= \ + -DHAVE_NBTOOL_CONFIG_H=1 \ + -I${SRCTOP}/tools/build/cross-build/include/common \ + +.endif + +.if ${MK_host_egacy} == "yes" +.ifdef PROG +LOCAL_LIBRARIES+= egacy +LIBADD+= egacy +.endif +.endif + +.if ${MK_STAGING} == "yes" +ISYSTEM= /usr/include +CFLAGS+= -I${STAGE_INCLUDEDIR} +.endif +.endif + .endif # !target(____)