nixpkgs/pkgs/development/compilers/solc/default.nix
Guillaume Girol 33afbf39f6 treewide: switch to nativeCheckInputs
checkInputs used to be added to nativeBuildInputs. Now we have
nativeCheckInputs to do that instead. Doing this treewide change allows
to keep hashes identical to before the introduction of
nativeCheckInputs.
2023-01-21 12:00:00 +00:00

131 lines
3.7 KiB
Nix

{ lib, gccStdenv, fetchzip
, pkgs
, boost
, cmake
, coreutils
, fetchpatch
, ncurses
, python3
, z3Support ? true
, z3 ? null
, cvc4Support ? gccStdenv.isLinux
, cvc4 ? null
, cln ? null
, gmp ? null
}:
# compiling source/libsmtutil/CVC4Interface.cpp breaks on clang on Darwin,
# general commandline tests fail at abiencoderv2_no_warning/ on clang on NixOS
assert z3Support -> z3 != null && lib.versionAtLeast z3.version "4.6.0";
assert cvc4Support -> cvc4 != null && cln != null && gmp != null;
let
jsoncppVersion = "1.9.3";
jsoncppUrl = "https://github.com/open-source-parsers/jsoncpp/archive/${jsoncppVersion}.tar.gz";
jsoncpp = fetchzip {
url = jsoncppUrl;
sha256 = "1vbhi503rgwarf275ajfdb8vpdcbn1f7917wjkf8jghqwb1c24lq";
};
range3Version = "0.11.0";
range3Url = "https://github.com/ericniebler/range-v3/archive/${range3Version}.tar.gz";
range3 = fetchzip {
url = range3Url;
sha256 = "18230bg4rq9pmm5f8f65j444jpq56rld4fhmpham8q3vr1c1bdjh";
};
fmtlibVersion = "8.0.1";
fmtlibUrl = "https://github.com/fmtlib/fmt/archive/${fmtlibVersion}.tar.gz";
fmtlib = fetchzip {
url = fmtlibUrl;
sha256 = "1mnvxqsan034d2jiqnw2yvkljl7lwvhakmj5bscwp1fpkn655bbw";
};
pname = "solc";
version = "0.8.13";
meta = with lib; {
description = "Compiler for Ethereum smart contract language Solidity";
homepage = "https://github.com/ethereum/solidity";
license = licenses.gpl3;
maintainers = with maintainers; [ dbrock akru lionello sifmelcara ];
};
solc = if gccStdenv.isLinux then gccStdenv.mkDerivation rec {
inherit pname version meta;
# upstream suggests avoid using archive generated by github
src = fetchzip {
url = "https://github.com/ethereum/solidity/releases/download/v${version}/solidity_${version}.tar.gz";
hash = "sha256-cFC9M65kSYgYq9rhBXZKEdfvIMbMaDiDwdPmU8v9s7k=";
};
postPatch = ''
substituteInPlace cmake/jsoncpp.cmake \
--replace "${jsoncppUrl}" ${jsoncpp}
substituteInPlace cmake/range-v3.cmake \
--replace "${range3Url}" ${range3}
substituteInPlace cmake/fmtlib.cmake \
--replace "${fmtlibUrl}" ${fmtlib}
'';
cmakeFlags = [
"-DBoost_USE_STATIC_LIBS=OFF"
] ++ (if z3Support then [
"-DSTRICT_Z3_VERSION=OFF"
] else [
"-DUSE_Z3=OFF"
]) ++ lib.optionals (!cvc4Support) [
"-DUSE_CVC4=OFF"
];
nativeBuildInputs = [ cmake ];
buildInputs = [ boost ]
++ lib.optionals z3Support [ z3 ]
++ lib.optionals cvc4Support [ cvc4 cln gmp ];
nativeCheckInputs = [ ncurses python3 ];
# tests take 60+ minutes to complete, only run as part of passthru tests
doCheck = false;
checkPhase = ''
pushd ..
# IPC tests need aleth avaliable, so we disable it
sed -i "s/IPC_ENABLED=true/IPC_ENABLED=false\nIPC_FLAGS=\"--no-ipc\"/" ./scripts/tests.sh
for i in ./scripts/*.sh ./scripts/*.py ./test/*.sh ./test/*.py; do
patchShebangs "$i"
done
TERM=xterm ./scripts/tests.sh ${if z3Support then "--no-smt" else ""}
popd
'';
doInstallCheck = true;
installCheckPhase = ''
$out/bin/solc --version > /dev/null
'';
passthru.tests = {
solcWithTests = solc.overrideAttrs (attrs: { doCheck = true; });
};
} else gccStdenv.mkDerivation rec {
inherit pname version meta;
src = pkgs.fetchurl {
url = "https://github.com/ethereum/solidity/releases/download/v${version}/solc-macos";
sha256 = "sha256-FNTvAT6oKtlekf2Um3+nt4JxpIP/GnnEPWzFi4JvW+o=";
};
dontUnpack = true;
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp ${src} $out/bin/solc
chmod +x $out/bin/solc
runHook postInstall
'';
};
in
solc