nixpkgs/pkgs/development/interpreters/spidermonkey/78.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

128 lines
3.3 KiB
Nix

{ lib, stdenv
, fetchurl
, fetchpatch
, autoconf213
, pkg-config
, perl
, python3
, zip
, buildPackages
, which
, readline
, zlib
, icu67
, cargo
, rustc
, rust-cbindgen
, yasm
, llvmPackages_12
, nspr
}:
stdenv.mkDerivation rec {
pname = "spidermonkey";
version = "78.15.0";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}esr/source/firefox-${version}esr.source.tar.xz";
sha256 = "0l91cxdc5v9fps79ckb1kid4gw6v5qng1jd9zvaacwaiv628shx4";
};
patches = [
# Fix build failure on armv7l using Debian patch
# Upstream bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1526653
(fetchpatch {
url = "https://salsa.debian.org/mozilla-team/firefox/commit/fd6847c9416f9eebde636e21d794d25d1be8791d.patch";
sha256 = "02b7zwm6vxmk61aj79a6m32s1k5sr0hwm3q1j4v6np9jfyd10g1j";
})
];
outputs = [ "out" "dev" ];
setOutputFlags = false; # Configure script only understands --includedir
nativeBuildInputs = [
autoconf213
cargo
llvmPackages_12.llvm # for llvm-objdump
perl
pkg-config
python3
rust-cbindgen
rustc
which
yasm # to buid icu? seems weird
zip
];
buildInputs = [
icu67
nspr
readline
zlib
];
preConfigure = ''
export CXXFLAGS="-fpermissive"
export LIBXUL_DIST=$out
export PYTHON="${buildPackages.python3.interpreter}"
# We can't build in js/src/, so create a build dir
mkdir obj
cd obj/
configureScript=../js/src/configure
'';
configureFlags = [
"--with-system-zlib"
"--with-system-nspr"
"--with-system-icu"
"--with-intl-api"
"--enable-readline"
"--enable-shared-js"
"--disable-jemalloc"
# Fedora and Arch disable optimize, but it doesn't seme to be necessary
# It turns on -O3 which some gcc version had a problem with:
# https://src.fedoraproject.org/rpms/mozjs38/c/761399aba092bcb1299bb4fccfd60f370ab4216e
"--enable-optimize"
"--enable-release"
] ++ 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/js78-config "$dev"
rm $out/lib/libjs_static.ajs
ln -s $out/bin/js78 $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.gpl2; # TODO: MPL/GPL/LGPL tri-license.
maintainers = with maintainers; [ abbradar lostnet ];
platforms = platforms.linux;
};
}