-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolc-0.8.26.nix
170 lines (151 loc) · 5.04 KB
/
solc-0.8.26.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# Based off https://raw.githubusercontent.com/NixOS/nixpkgs/nixos-24.05/pkgs/development/compilers/solc/default.nix
{
lib,
gccStdenv,
fetchurl,
fetchzip,
pkgs,
boost,
cmake,
coreutils,
fetchpatch,
jq,
ncurses,
python3,
z3Support ? true,
z3_4_11 ? 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
let
z3 = z3_4_11;
in
assert z3Support -> z3 != null && lib.versionAtLeast z3.version "4.11.0";
assert cvc4Support -> cvc4 != null && cln != null && gmp != null;
let
nlohmannJsonVersion = "3.11.3";
nlohmannJsonUrl = "https://github.com/nlohmann/json/releases/download/v${nlohmannJsonVersion}/json.hpp";
nlohmannJson = fetchurl {
url = nlohmannJsonUrl;
sha256 = "sha256-m+pMgGbvShwgayvlo2MC+JJvf9xgh69dILQX0M8QPqY=";
};
range3Version = "0.12.0";
range3Url = "https://github.com/ericniebler/range-v3/archive/${range3Version}.tar.gz";
range3 = fetchzip {
url = range3Url;
sha256 = "sha256-bRSX91+ROqG1C3nB9HSQaKgLzOHEFy9mrD2WW3PRBWU=";
};
fmtlibVersion = "9.1.0";
fmtlibUrl = "https://github.com/fmtlib/fmt/archive/${fmtlibVersion}.tar.gz";
fmtlib = fetchzip {
url = fmtlibUrl;
sha256 = "sha256-rP6ymyRc7LnKxUXwPpzhHOQvpJkpnRFOt2ctvUNlYI0=";
};
pname = "solc";
version = "0.8.26";
meta = with lib; {
description = "Compiler for Ethereum smart contract language Solidity";
homepage = "https://github.com/ethereum/solidity";
license = licenses.gpl3;
maintainers = with maintainers; [ cherryman ];
mainProgram = "solc";
};
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";
sha256 = "sha256-4lrxwjEg1/TPWt2WB/kQNYvdOEt5aEbnGaEcNMz9pv4=";
};
postPatch = ''
substituteInPlace cmake/nlohmann-json.cmake \
--replace-fail "${nlohmannJsonUrl}" ${nlohmannJson}
substituteInPlace cmake/range-v3.cmake \
--replace-fail "${range3Url}" ${range3}
substituteInPlace cmake/fmtlib.cmake \
--replace-fail "${fmtlibUrl}" ${fmtlib}
# HACK: There is likely a cmake-native way to do this, but fuck cmake.
mkdir -p $NIX_BUILD_TOP/source/build/deps/include/nlohmann
cp ${nlohmannJson} $NIX_BUILD_TOP/source/build/deps/include/nlohmann/json.hpp
'';
cmakeFlags =
[
"-DBoost_USE_STATIC_LIBS=OFF"
# Deal with some errors about double to int conversion.
"-DCMAKE_CXX_FLAGS=-Wno-float-conversion"
]
++ (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 = [
jq
ncurses
(python3.withPackages (
ps: with ps; [
colorama
deepdiff
devtools
docopt
docutils
requests
sphinx
tabulate
z3-solver
]
))
]; # contextlib2 glob2 textwrap3 traceback2 urllib3
# 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
## TODO: reenable tests below after adding evmone and hera and their dependencies to nixpkgs
#TERM=xterm ./scripts/tests.sh ${lib.optionalString z3Support "--no-smt"}
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-D/AWrvI5axLR/GVCnY6mz1PC7ksEG7iSVkRhXuHDCrk=";
};
dontUnpack = true;
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp ${src} $out/bin/solc
chmod +x $out/bin/solc
runHook postInstall
'';
};
in
solc