nixpkgs/pkgs/development/interpreters/spidermonkey/91.nix
Joerie de Gram 24b26ce79e spidermonkey_91: fix cross compilation
The configurePlatforms mkDerivation parameter needs to be an empty list
to avoid bogus defaults from breaking cross compilation.

Document the parameter to prevent it from being cleaned up.
2021-12-30 14:54:30 +01:00

124 lines
2.9 KiB
Nix

{ lib, stdenv
, fetchurl
, pkg-config
, perl
, python3
, zip
, buildPackages
, which
, readline
, zlib
, icu69
, cargo
, rustc
, rust-cbindgen
, yasm
, llvmPackages_latest
, nspr
, m4
}:
stdenv.mkDerivation rec {
pname = "spidermonkey";
version = "91.4.0";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}esr/source/firefox-${version}esr.source.tar.xz";
sha256 = "09xkzk27krzyj1qx8cjjn2zpnws1cncka75828kk7ychnjfq48p7";
};
outputs = [ "out" "dev" ];
setOutputFlags = false; # Configure script only understands --includedir
nativeBuildInputs = [
cargo
llvmPackages_latest.llvm # for llvm-objdump
perl
pkg-config
python3
rust-cbindgen
rustc
which
yasm # to buid icu? seems weird
zip
m4
];
buildInputs = [
icu69
nspr
readline
zlib
];
preConfigure = ''
export LIBXUL_DIST=$out
export PYTHON="${buildPackages.python3.interpreter}"
export M4=m4
export AWK=awk
export AC_MACRODIR=$PWD/build/autoconf/
pushd js/src
sh ../../build/autoconf/autoconf.sh --localdir=$PWD configure.in > configure
chmod +x configure
popd
# We can't build in js/src/, so create a build dir
mkdir obj
cd obj/
configureScript=../js/src/configure
'';
configureFlags = [
"--with-intl-api"
"--with-system-icu"
"--with-system-nspr"
"--with-system-zlib"
"--enable-optimize"
"--enable-readline"
"--enable-release"
"--enable-shared-js"
"--disable-debug"
"--disable-jemalloc"
"--disable-strip"
"--disable-tests"
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
# Spidermonkey seems to use different host/build terminology for cross
# compilation here.
"--host=${stdenv.buildPlatform.config}"
"--target=${stdenv.hostPlatform.config}"
];
# mkDerivation by default appends --build/--host to configureFlags when cross compiling
# These defaults are bogus for Spidermonkey - avoid passing them by providing an empty list
configurePlatforms = [ ];
depsBuildBuild = [ buildPackages.stdenv.cc ];
# Remove unnecessary static lib
preFixup = ''
moveToOutput bin/js91-config "$dev"
rm $out/lib/libjs_static.ajs
ln -s $out/bin/js91 $out/bin/js
'';
enableParallelBuilding = true;
postPatch = ''
# This patch is a manually applied fix of
# https://bugzilla.mozilla.org/show_bug.cgi?id=1644600
# Once that bug is fixed, this can be removed.
# This is needed in, for example, `zeroad`.
substituteInPlace js/public/StructuredClone.h \
--replace "class SharedArrayRawBufferRefs {" \
"class JS_PUBLIC_API SharedArrayRawBufferRefs {"
'';
meta = with lib; {
description = "Mozilla's JavaScript engine written in C/C++";
homepage = "https://spidermonkey.dev/";
license = licenses.mpl20;
maintainers = with maintainers; [ lostnet ];
platforms = platforms.linux;
};
}