diff --git a/flake.lock b/flake.lock index 426fd4fc94..5464118547 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "flake-utils": { "locked": { - "lastModified": 1614513358, - "narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=", + "lastModified": 1637014545, + "narHash": "sha256-26IZAc5yzlD9FlDT54io1oqG/bBoyka+FJk5guaX4x4=", "owner": "numtide", "repo": "flake-utils", - "rev": "5466c5bbece17adaab2d82fae80b46e807611bf3", + "rev": "bba5dcc8e0b20ab664967ad83d24d64cb64ec4f4", "type": "github" }, "original": { @@ -17,17 +17,17 @@ }, "nixpkgs": { "locked": { - "lastModified": 1610118011, - "narHash": "sha256-a17vwGBOqmAsy/Wkvf10ygDyfgjJpvlPyNnf7SAk+Ac=", + "lastModified": 1637593665, + "narHash": "sha256-R7jKS7A+0tZS8qD5pBr1UFcMiTdsw5bfoxgXbYsoWhM=", "owner": "nixos", "repo": "nixpkgs", - "rev": "a98302aa9b9628915878a6ea9776c40a0bb02950", + "rev": "98747f27ecfee70c8c97b195cbb94df80a074dda", "type": "github" }, "original": { "owner": "nixos", "repo": "nixpkgs", - "rev": "a98302aa9b9628915878a6ea9776c40a0bb02950", + "rev": "98747f27ecfee70c8c97b195cbb94df80a074dda", "type": "github" } }, @@ -40,11 +40,11 @@ }, "sbt-derivation": { "locked": { - "lastModified": 1602145051, - "narHash": "sha256-P71MgJhJoTYba/5fI5xYeKuh/dpQuqlXp3REArciJ58=", + "lastModified": 1617466857, + "narHash": "sha256-Z7eWMLreLtiSiJ3nWDWBy1w9WNEFexkYCgT/dWZF7yo=", "owner": "zaninime", "repo": "sbt-derivation", - "rev": "9666b2b589ed68823fff1cefa4cd8a8ab54956c1", + "rev": "920b6f187937493371e2b1687261017e6e014cf1", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index ae542b2fcf..dd41a48e28 100644 --- a/flake.nix +++ b/flake.nix @@ -3,7 +3,7 @@ inputs.flake-utils.url = "github:numtide/flake-utils"; inputs.nixpkgs.url = - "github:nixos/nixpkgs?rev=a98302aa9b9628915878a6ea9776c40a0bb02950"; + "github:nixos/nixpkgs?rev=98747f27ecfee70c8c97b195cbb94df80a074dda"; inputs.sbt-derivation.url = "github:zaninime/sbt-derivation"; outputs = { self, nixpkgs, flake-utils, sbt-derivation @@ -49,12 +49,13 @@ defaultApp = apps.mantis; }) // (collectHydraSets (map (name: mkHydraSet [ name ] [ "x86_64-linux" ]) [ + "jdk17" "jdk8" - "lllc" + # "lllc" "mantis" - "mantis-entrypoint" + # "mantis-entrypoint" "netcat-gnu" - "retesteth" + # "retesteth" "sbt" "solc" ])); diff --git a/nix/overlay.nix b/nix/overlay.nix index c8949f6c37..352ab24099 100644 --- a/nix/overlay.nix +++ b/nix/overlay.nix @@ -42,4 +42,5 @@ rev: final: prev: { retesteth = final.callPackage ./retesteth.nix { }; lllc = final.callPackage ./lllc.nix { }; + solc = final.callPackage ./solc.nix { }; } diff --git a/nix/patches/shared-libs-install.patch b/nix/patches/shared-libs-install.patch new file mode 100644 index 0000000000..382d49599c --- /dev/null +++ b/nix/patches/shared-libs-install.patch @@ -0,0 +1,71 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 0c05208f..8893648e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -48,6 +48,22 @@ add_subdirectory(libevmasm) + add_subdirectory(libsolidity) + add_subdirectory(libsolc) + ++install(DIRECTORY libdevcore/ ++ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libdevcore ++ FILES_MATCHING PATTERN "*.h") ++install(DIRECTORY libevmasm/ ++ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libevmasm ++ FILES_MATCHING PATTERN "*.h") ++install(DIRECTORY libsolidity/ ++ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsolidity ++ FILES_MATCHING PATTERN "*.h") ++install(DIRECTORY libyul/ ++ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libyul ++ FILES_MATCHING PATTERN "*.h") ++install(DIRECTORY liblangutil/ ++ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/liblangutil ++ FILES_MATCHING PATTERN "*.h") ++ + if (NOT EMSCRIPTEN) + add_subdirectory(solc) + add_subdirectory(liblll) +diff --git a/libdevcore/CMakeLists.txt b/libdevcore/CMakeLists.txt +index fa7e3f48..1f9f52b4 100644 +--- a/libdevcore/CMakeLists.txt ++++ b/libdevcore/CMakeLists.txt +@@ -6,3 +6,4 @@ target_link_libraries(devcore PRIVATE jsoncpp ${Boost_FILESYSTEM_LIBRARIES} ${Bo + target_include_directories(devcore PUBLIC "${CMAKE_SOURCE_DIR}") + target_include_directories(devcore SYSTEM PUBLIC ${Boost_INCLUDE_DIRS}) + add_dependencies(devcore solidity_BuildInfo.h) ++install(TARGETS devcore LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) +diff --git a/libevmasm/CMakeLists.txt b/libevmasm/CMakeLists.txt +index 86192c1b..e7f15e93 100644 +--- a/libevmasm/CMakeLists.txt ++++ b/libevmasm/CMakeLists.txt +@@ -3,3 +3,4 @@ file(GLOB headers "*.h") + + add_library(evmasm ${sources} ${headers}) + target_link_libraries(evmasm PUBLIC devcore) ++install(TARGETS evmasm LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) +diff --git a/libsolidity/CMakeLists.txt b/libsolidity/CMakeLists.txt +index 0bdec4b4..e876177e 100644 +--- a/libsolidity/CMakeLists.txt ++++ b/libsolidity/CMakeLists.txt +@@ -29,6 +29,7 @@ endif() + + add_library(solidity ${sources} ${z3_SRCS} ${cvc4_SRCS}) + target_link_libraries(solidity PUBLIC yul evmasm langutil devcore Boost::boost Boost::filesystem Boost::system) ++install(TARGETS solidity LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + + if (${Z3_FOUND}) + target_link_libraries(solidity PUBLIC ${Z3_LIBRARY}) +--- a/libyul/CMakeLists.txt ++++ b/libyul/CMakeLists.txt +@@ -43,3 +43,4 @@ endif() + optimiser/VarDeclPropagator.cpp + ) + target_link_libraries(yul PUBLIC evmasm devcore langutil) ++install(TARGETS yul LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) +--- a/liblangutil/CMakeLists.txt ++++ b/liblangutil/CMakeLists.txt +@@ -11,3 +11,4 @@ endif() + + add_library(langutil ${sources}) + target_link_libraries(langutil PUBLIC devcore) ++install(TARGETS langutil LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/nix/solc.nix b/nix/solc.nix new file mode 100644 index 0000000000..5c961f224e --- /dev/null +++ b/nix/solc.nix @@ -0,0 +1,96 @@ +{ stdenv +, lib +, fetchzip +, boost +, cmake +, ncurses +, python2 +, z3Support ? true +, z3 ? null +, cvc4Support ? true +, cvc4 ? null +, cln ? null +, gmp ? null +}: + +assert z3Support -> z3 != null && lib.versionAtLeast z3.version "4.6.0"; +assert cvc4Support -> cvc4 != null && cln != null && gmp != null; +let + jsoncppURL = https://github.com/open-source-parsers/jsoncpp/archive/1.8.4.tar.gz; + jsoncpp = fetchzip { + url = jsoncppURL; + sha256 = "1z0gj7a6jypkijmpknis04qybs1hkd04d1arr3gy89lnxmp6qzlm"; + }; + buildSharedLibs = stdenv.hostPlatform.isLinux; +in +stdenv.mkDerivation rec { + + pname = "solc"; + version = "0.5.11"; + + # 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 = "0679s5pqbfy7fgpb4f3ppgj8iafxb64g046v8vhp29mf3dsdcnyl"; + }; + + patches = lib.optionals buildSharedLibs [ ./patches/shared-libs-install.patch ]; + + postPatch = '' + substituteInPlace cmake/jsoncpp.cmake \ + --replace "${jsoncppURL}" ${jsoncpp} + ''; + + cmakeFlags = [ + "-DBoost_USE_STATIC_LIBS=OFF" + ] ++ lib.optionals buildSharedLibs [ + "-DBUILD_SHARED_LIBS=ON" + ] ++ lib.optionals (!z3Support) [ + "-DUSE_Z3=OFF" + ] ++ lib.optionals (!cvc4Support) [ + "-DUSE_CVC4=OFF" + ]; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ boost ] + ++ lib.optionals z3Support [ z3 ] + ++ lib.optionals cvc4Support [ cvc4 cln gmp ]; + checkInputs = [ ncurses python2 ]; + + # Test fails on darwin for unclear reason + doCheck = stdenv.hostPlatform.isLinux; + + checkPhase = '' + while IFS= read -r -d ''' dir + do + LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/$dir + export LD_LIBRARY_PATH + done < <(find . -type d -print0) + + 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; do + patchShebangs "$i" + done + for i in ./scripts/*.py; do + patchShebangs "$i" + done + for i in ./test/*.sh; do + patchShebangs "$i" + done + TERM=xterm ./scripts/tests.sh + popd + ''; + + outputs = [ "out" "dev" ]; + + meta = with lib; { + description = "Compiler for Ethereum smart contract language Solidity"; + homepage = https://github.com/ethereum/solidity; + license = licenses.gpl3; + platforms = with platforms; linux ++ darwin; + maintainers = with maintainers; [ dbrock akru lionello sifmelcara ]; + inherit version; + }; +}