gforth: fix cross-compilation (#104778)

This commit is contained in:
Ben Siraphob
2026-04-19 15:17:48 +00:00
committed by GitHub
+39 -5
View File
@@ -2,7 +2,7 @@
lib,
stdenv,
fetchFromGitHub,
callPackage,
buildPackages,
autoreconfHook,
gitUpdater,
texinfo,
@@ -11,8 +11,8 @@
}:
let
swig = callPackage ./swig.nix { };
bootForth = callPackage ./boot-forth.nix { };
swig = buildPackages.callPackage ./swig.nix { };
bootForth = buildPackages.callPackage ./boot-forth.nix { };
lispDir = "${placeholder "out"}/share/emacs/site-lisp";
in
stdenv.mkDerivation (finalAttrs: {
@@ -32,9 +32,14 @@ stdenv.mkDerivation (finalAttrs: {
writableTmpDirAsHomeHook
autoreconfHook
texinfo
bootForth
swig
];
]
++ (
if (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) then
[ buildPackages.gforth ]
else
[ bootForth ]
);
buildInputs = [
libffi
@@ -47,12 +52,41 @@ stdenv.mkDerivation (finalAttrs: {
]
++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64) [
"--build=x86_64-apple-darwin"
]
++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
# Tries to run ./engine/gforth-ll
"--without-check"
# Use build-platform CC for helper programs that must run during build
"HOSTCC=${buildPackages.stdenv.cc}/bin/cc"
# Tell gforth's libcc where to find the cross compiler
"CROSS_PREFIX=${stdenv.hostPlatform.config}-"
];
env = lib.optionalAttrs (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) {
# Tell gforth's libcc to prefix compiler commands with the cross-compilation target
CROSS_PREFIX = "${stdenv.hostPlatform.config}-";
};
makeFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
"DITCENGINE=${buildPackages.gforth}/bin/gforth-ditc"
"GFORTH=${buildPackages.gforth}/bin/gforth"
"ENGINE=${buildPackages.gforth}/bin/gforth" # for ./preforth
];
preConfigure = ''
mkdir -p ${lispDir}
'';
postConfigure = lib.optionalString (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
# Put the project-local (cross-aware) libtool first in PATH
mkdir -p .cross-bin
ln -sf "$PWD/libtool" .cross-bin/libtool
ln -sf "$PWD/libtool" ".cross-bin/${stdenv.hostPlatform.config}-libtool"
export PATH="$PWD/.cross-bin:$PATH"
# Remove 'check' from the default 'all' target (can't run cross binaries)
sed -i 's/^\(all:.*\) check/\1/' Makefile
'';
passthru.updateScript = gitUpdater { };
meta = {