netbsd.compat: Fix cross compilation
Not to netbsd, where it isn't needed, but elsewhere. A few things going on here: - Make compat use the "regular" not "host" makefile infra. This, however, makes more assumptions that the toolchain is BSD-like, and so we need to compensate for them with the likes of: - `LORDER=...` and `TSORT=...` - Move `export INSTALL_*` to install's setup hook so they don't interfere with coreutils install - Don't use `DESTDIR` for installing include files, instead set `INCSDIR`. This is more proper, but doesn't work when `INCSDIR` is set multiple times, unfortunately, as CLI defs override all other assignments. So instead set `INCSDIR0` on the CLI, and do some `INCSDIR = ${INCSDIR0}/...` in the relevant packages. - `INCSDIR` is set just in the NetBSD setup hook because FreeBSD uses `INCLUDEDIR`.
This commit is contained in:
parent
af58c2cc0c
commit
ad609d27b5
6 changed files with 204 additions and 20 deletions
100
pkgs/os-specific/bsd/netbsd/compat-no-force-native.patch
Normal file
100
pkgs/os-specific/bsd/netbsd/compat-no-force-native.patch
Normal file
|
@ -0,0 +1,100 @@
|
|||
commit 5acf3bdea5140e90135d15d6479f29fbf624f75e
|
||||
Author: John Ericson <John.Ericson@Obsidian.Systems>
|
||||
Date: Wed Sep 1 15:38:56 2021 +0000
|
||||
|
||||
Don't force building and installing for the build platform
|
||||
|
||||
Also remove `compat/` subdir from install directories.
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 4bcf227f0e75..9ed1d6eea6ff 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
# $NetBSD: Makefile,v 1.87 2019/05/08 02:25:50 thorpej Exp $
|
||||
|
||||
-HOSTLIB= nbcompat
|
||||
+LIB= nbcompat
|
||||
|
||||
.include <bsd.hostinit.mk>
|
||||
|
||||
@@ -94,63 +94,37 @@ include/.stamp:
|
||||
|
||||
# Install rules
|
||||
|
||||
-HOST_LIBDIR= ${TOOLDIR}/lib
|
||||
-HOST_INCSDIR= ${TOOLDIR}/include
|
||||
-HOST_SHAREDIR= ${TOOLDIR}/share
|
||||
-
|
||||
-install: .PHONY install.lib includes install.defs.mk
|
||||
-
|
||||
-# Install lib${HOSTLIB}.a in ${TOOLDIR}/lib
|
||||
-install.lib: .PHONY ${HOST_LIBDIR}/lib${HOSTLIB}.a
|
||||
-${HOST_LIBDIR}/lib${HOSTLIB}.a: lib${HOSTLIB}.a
|
||||
- ${_MKTARGET_INSTALL}
|
||||
- ${HOST_INSTALL_DIR} ${HOST_LIBDIR}
|
||||
- ${HOST_INSTALL_FILE} -m ${LIBMODE} ${.ALLSRC} ${.TARGET}
|
||||
+install: .PHONY includes install.defs.mk
|
||||
|
||||
.for _f in ${INCFILES}
|
||||
-HOST_INCINSTFILES+= ${HOST_INCSDIR}/compat/${_f}
|
||||
-${HOST_INCSDIR}/compat/${_f}: ${_f}
|
||||
+INCINSTFILES+= ${INCSDIR}/${_f}
|
||||
+${INCSDIR}/${_f}: ${_f}
|
||||
${_MKTARGET_INSTALL}
|
||||
- ${HOST_INSTALL_FILE} ${.ALLSRC} ${.TARGET}
|
||||
+ ${INSTALL_FILE} ${.ALLSRC} ${.TARGET}
|
||||
.endfor
|
||||
|
||||
.for _d in ${INCSUBDIRS}
|
||||
-HOST_INCINSTDIRS+= ${HOST_INCSDIR}/compat/${_d}
|
||||
-${HOST_INCSDIR}/compat/${_d}:
|
||||
+INCINSTDIRS+= ${INCSDIR}/${_d}
|
||||
+${INCSDIR}/${_d}:
|
||||
${_MKTARGET_INSTALL}
|
||||
- ${HOST_INSTALL_DIR} ${.TARGET}
|
||||
+ ${INSTALL_DIR} ${.TARGET}
|
||||
.endfor
|
||||
|
||||
-# Install include files in ${TOOLDIR}/include/compat
|
||||
-includes: .PHONY ${HOST_INCINSTDIRS} .WAIT ${HOST_INCINSTFILES}
|
||||
+# Install include files in ${INCSDIR}
|
||||
+includes: .PHONY ${INCINSTDIRS} .WAIT ${INCINSTFILES}
|
||||
@(cd include && find . -name '*.h' -print | while read f ; do \
|
||||
- ${HOST_INSTALL_FILE} $$f ${HOST_INCSDIR}/compat/$$f ; \
|
||||
+ ${INSTALL_FILE} $$f ${INCSDIR}/$$f ; \
|
||||
done)
|
||||
|
||||
|
||||
-# Install defs.mk in ${TOOLDIR}/share/compat
|
||||
-install.defs.mk: .PHONY ${HOST_SHAREDIR}/compat/defs.mk
|
||||
-${HOST_SHAREDIR}/compat/defs.mk: defs.mk
|
||||
+# Install defs.mk in ${DATADIR}
|
||||
+install.defs.mk: .PHONY ${DATADIR}/defs.mk
|
||||
+${DATADIR}/defs.mk: defs.mk
|
||||
${_MKTARGET_INSTALL}
|
||||
- ${HOST_INSTALL_DIR} ${HOST_SHAREDIR}
|
||||
- ${HOST_INSTALL_DIR} ${HOST_SHAREDIR}/compat
|
||||
- ${HOST_INSTALL_FILE} ${.ALLSRC} ${.TARGET}
|
||||
-
|
||||
-# bsd.hostlib.mk wants HOST_CPPFLAGS, not CPPFLAGS
|
||||
-
|
||||
-HOST_CPPFLAGS:= ${CPPFLAGS}
|
||||
-CPPFLAGS:= # empty
|
||||
-
|
||||
-.include <bsd.hostlib.mk>
|
||||
-
|
||||
-# Use uninstalled copy of host-mkdep
|
||||
-HOST_MKDEP_OBJ!= cd ${.CURDIR}/../host-mkdep && ${PRINTOBJDIR}
|
||||
-HOST_MKDEP= ${HOST_MKDEP_OBJ}/host-mkdep
|
||||
-MKDEP= ${HOST_MKDEP}
|
||||
+ ${INSTALL_DIR} ${DATADIR}
|
||||
+ ${INSTALL_FILE} ${.ALLSRC} ${.TARGET}
|
||||
|
||||
-# Use uninstalled copy of the install program
|
||||
-INSTALL_OBJ!= cd ${NETBSDSRCDIR}/tools/binstall && ${PRINTOBJDIR}
|
||||
-INSTALL= ${INSTALL_OBJ}/xinstall
|
||||
+.include <bsd.lib.mk>
|
||||
|
||||
# Run "${TOOLDIR}/bin/nbmake-${MACHINE} regen" by hand after editing
|
||||
# configure.ac. See more detailed instructions in configure.ac.
|
|
@ -175,11 +175,6 @@ in lib.makeScopeWithSplicing
|
|||
"--cache-file=config.cache"
|
||||
];
|
||||
|
||||
# the build system re-runs `./configure` with `HOST_CC` (which is their
|
||||
# name for Build CC) as a compiler to make `defs.mk`, which is installed
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc ] ++ commonDeps;
|
||||
HOST_CC = "${buildPackages.stdenv.cc.targetPrefix}cc";
|
||||
|
||||
nativeBuildInputs = with buildPackages.netbsd; commonDeps ++ [
|
||||
bsdSetupHook netbsdSetupHook
|
||||
makeMinimal
|
||||
|
@ -192,19 +187,26 @@ in lib.makeScopeWithSplicing
|
|||
# bsdinstall will be built later
|
||||
makeFlags = [
|
||||
"INSTALL=${buildPackages.coreutils}/bin/install"
|
||||
"TOOLDIR=$(out)"
|
||||
"DATADIR=$(out)/share"
|
||||
# Can't sort object files yet
|
||||
"LORDER=echo"
|
||||
"TSORT=cat"
|
||||
];
|
||||
RENAME = "-D";
|
||||
|
||||
patches = [
|
||||
./compat-cxx-safe-header.patch
|
||||
./compat-dont-configure-twice.patch
|
||||
./compat-no-force-native.patch
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
mv $out/include/compat/* $out/include
|
||||
rmdir $out/include/compat
|
||||
preInstall = ''
|
||||
makeFlagsArray+=('INSTALL_FILE=''${INSTALL} ''${COPY} ''${PRESERVE} ''${RENAME}')
|
||||
makeFlagsArray+=('INSTALL_DIR=''${INSTALL} -d')
|
||||
makeFlagsArray+=('INSTALL_SYMLINK=''${INSTALL} ''${SYMLINK} ''${RENAME}')
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
# why aren't these installed by netbsd?
|
||||
install -D compat_defs.h $out/include/compat_defs.h
|
||||
install -D $BSDSRCDIR/include/cdbw.h $out/include/cdbw.h
|
||||
|
@ -273,6 +275,7 @@ in lib.makeScopeWithSplicing
|
|||
|
||||
runHook postInstall
|
||||
'';
|
||||
setupHook = ./install-setup-hook.sh;
|
||||
};
|
||||
|
||||
fts = mkDerivation {
|
||||
|
@ -366,7 +369,41 @@ in lib.makeScopeWithSplicing
|
|||
path = "usr.bin/make";
|
||||
sha256 = "0vi73yicbmbp522qzqvd979cx6zm5jakhy77xh73c1kygf8klccs";
|
||||
version = "9.2";
|
||||
postPatch = ''
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace $BSDSRCDIR/share/mk/bsd.doc.mk \
|
||||
--replace '-o ''${DOCOWN}' "" \
|
||||
--replace '-g ''${DOCGRP}' ""
|
||||
for mk in $BSDSRCDIR/share/mk/bsd.inc.mk $BSDSRCDIR/share/mk/bsd.kinc.mk; do
|
||||
substituteInPlace $mk \
|
||||
--replace '-o ''${BINOWN}' "" \
|
||||
--replace '-g ''${BINGRP}' ""
|
||||
done
|
||||
substituteInPlace $BSDSRCDIR/share/mk/bsd.kmodule.mk \
|
||||
--replace '-o ''${KMODULEOWN}' "" \
|
||||
--replace '-g ''${KMODULEGRP}' ""
|
||||
substituteInPlace $BSDSRCDIR/share/mk/bsd.lib.mk \
|
||||
--replace '-o ''${LIBOWN}' "" \
|
||||
--replace '-g ''${LIBGRP}' "" \
|
||||
--replace '-o ''${DEBUGOWN}' "" \
|
||||
--replace '-g ''${DEBUGGRP}' ""
|
||||
substituteInPlace $BSDSRCDIR/share/mk/bsd.lua.mk \
|
||||
--replace '-o ''${LIBOWN}' "" \
|
||||
--replace '-g ''${LIBGRP}' ""
|
||||
substituteInPlace $BSDSRCDIR/share/mk/bsd.man.mk \
|
||||
--replace '-o ''${MANOWN}' "" \
|
||||
--replace '-g ''${MANGRP}' ""
|
||||
substituteInPlace $BSDSRCDIR/share/mk/bsd.nls.mk \
|
||||
--replace '-o ''${NLSOWN}' "" \
|
||||
--replace '-g ''${NLSGRP}' ""
|
||||
substituteInPlace $BSDSRCDIR/share/mk/bsd.prog.mk \
|
||||
--replace '-o ''${BINOWN}' "" \
|
||||
--replace '-g ''${BINGRP}' "" \
|
||||
--replace '-o ''${RUMPBINOWN}' "" \
|
||||
--replace '-g ''${RUMPBINGRP}' "" \
|
||||
--replace '-o ''${DEBUGOWN}' "" \
|
||||
--replace '-g ''${DEBUGGRP}' ""
|
||||
|
||||
# make needs this to pick up our sys make files
|
||||
export NIX_CFLAGS_COMPILE+=" -D_PATH_DEFSYSPATH=\"$out/share/mk\""
|
||||
|
||||
|
@ -506,6 +543,22 @@ in lib.makeScopeWithSplicing
|
|||
makeMinimal
|
||||
install mandoc groff rsync nbperf rpcgen
|
||||
];
|
||||
|
||||
# The makefiles define INCSDIR per subdirectory, so we have to set
|
||||
# something else on the command line so those definitions aren't
|
||||
# overridden.
|
||||
postPatch = ''
|
||||
find "$BSDSRCDIR" -name Makefile -exec \
|
||||
sed -i -E \
|
||||
-e 's_/usr/include_''${INCSDIR0}_' \
|
||||
{} \;
|
||||
'';
|
||||
|
||||
# multiple header dirs, see above
|
||||
postConfigure = ''
|
||||
makeFlags=''${makeFlags/INCSDIR/INCSDIR0}
|
||||
'';
|
||||
|
||||
extraPaths = with self; [ common ];
|
||||
headersOnly = true;
|
||||
noCC = true;
|
||||
|
@ -521,9 +574,17 @@ in lib.makeScopeWithSplicing
|
|||
version = "9.2";
|
||||
sha256 = "03s18q8d9giipf05bx199fajc2qwikji0djz7hw63d2lya6bfnpj";
|
||||
|
||||
# Fix this error when building bootia32.efi and bootx64.efi:
|
||||
# error: PHDR segment not covered by LOAD segment
|
||||
patches = [ ./no-dynamic-linker.patch ];
|
||||
patches = [
|
||||
# Fix this error when building bootia32.efi and bootx64.efi:
|
||||
# error: PHDR segment not covered by LOAD segment
|
||||
./no-dynamic-linker.patch
|
||||
|
||||
# multiple header dirs, see above
|
||||
./sys-headers-incsdir.patch
|
||||
];
|
||||
|
||||
# multiple header dirs, see above
|
||||
inherit (self.include) postPatch;
|
||||
|
||||
CONFIG = "GENERIC";
|
||||
|
||||
|
@ -537,7 +598,9 @@ in lib.makeScopeWithSplicing
|
|||
pushd arch/$MACHINE/conf
|
||||
config $CONFIG
|
||||
popd
|
||||
'';
|
||||
''
|
||||
# multiple header dirs, see above
|
||||
+ self.include.postConfigure;
|
||||
|
||||
makeFlags = [ "FIRMWAREDIR=$(out)/libdata/firmware" ];
|
||||
hardeningDisable = [ "pic" ];
|
||||
|
|
8
pkgs/os-specific/bsd/netbsd/install-setup-hook.sh
Normal file
8
pkgs/os-specific/bsd/netbsd/install-setup-hook.sh
Normal file
|
@ -0,0 +1,8 @@
|
|||
addNetBSDInstallMakeFlags() {
|
||||
export INSTALL_FILE="install -U -c"
|
||||
export INSTALL_DIR="install -U -d"
|
||||
export INSTALL_LINK="install -U -l h"
|
||||
export INSTALL_SYMLINK="install -U -l s"
|
||||
}
|
||||
|
||||
preConfigureHooks+=(addNetBSDInstallMakeFlags)
|
|
@ -7,4 +7,9 @@ mergeNetBSDSourceDir() {
|
|||
done
|
||||
}
|
||||
|
||||
addNetBSDMakeFlags() {
|
||||
makeFlags="INCSDIR=${!outputDev}/include $makeFlags"
|
||||
}
|
||||
|
||||
postUnpackHooks+=(mergeNetBSDSourceDir)
|
||||
preConfigureHooks+=(addNetBSDMakeFlags)
|
||||
|
|
13
pkgs/os-specific/bsd/netbsd/sys-headers-incsdir.patch
Normal file
13
pkgs/os-specific/bsd/netbsd/sys-headers-incsdir.patch
Normal file
|
@ -0,0 +1,13 @@
|
|||
diff --git a/Makefile b/Makefile
|
||||
index 3f1e18dc659d..163362b82f94 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
.include <bsd.own.mk>
|
||||
|
||||
+INCSDIR= ${INCSDIR0}
|
||||
+
|
||||
SUBDIR= altq arch compat dev fs miscfs \
|
||||
net net80211 netatalk netbt netcan netipsec netinet netinet6 \
|
||||
netmpls netsmb \
|
|
@ -36,11 +36,6 @@ addMakeFlags() {
|
|||
export MKUNPRIVED=yes
|
||||
export EXTERNAL_TOOLCHAIN=yes
|
||||
|
||||
export INSTALL_FILE="install -U -c"
|
||||
export INSTALL_DIR="xinstall -U -d"
|
||||
export INSTALL_LINK="install -U -l h"
|
||||
export INSTALL_SYMLINK="install -U -l s"
|
||||
|
||||
makeFlags="MACHINE=$MACHINE $makeFlags"
|
||||
makeFlags="MACHINE_ARCH=$MACHINE_ARCH $makeFlags"
|
||||
makeFlags="AR=$AR $makeFlags"
|
||||
|
@ -79,7 +74,7 @@ includesPhase() {
|
|||
|
||||
local flagsArray=(
|
||||
$makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"}
|
||||
DESTDIR=${!outputInclude} includes
|
||||
includes
|
||||
)
|
||||
|
||||
echoCmd 'includes flags' "${flagsArray[@]}"
|
||||
|
|
Loading…
Reference in a new issue