diff options
Diffstat (limited to 'pkgs/applications/blockchains/solana-validator/default.nix')
-rw-r--r-- | pkgs/applications/blockchains/solana-validator/default.nix | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/pkgs/applications/blockchains/solana-validator/default.nix b/pkgs/applications/blockchains/solana-validator/default.nix index d91da1db8fe2c..d2efa4633a646 100644 --- a/pkgs/applications/blockchains/solana-validator/default.nix +++ b/pkgs/applications/blockchains/solana-validator/default.nix @@ -2,14 +2,18 @@ { stdenv , fetchFromGitHub +, fetchpatch , lib , rustPlatform , pkg-config +, darwin , udev , zlib , protobuf , openssl , libclang +, libcxx +, rocksdb , rustfmt , perl , hidapi @@ -23,7 +27,6 @@ "solana-ledger-tool" "solana-log-analyzer" "solana-net-shaper" - "solana-sys-tuner" "solana-validator" "cargo-build-bpf" "cargo-test-bpf" @@ -43,7 +46,8 @@ let pinData = lib.importJSON ./pin.json; version = pinData.version; hash = pinData.hash; - cargoHash = pinData.cargoHash; + inherit (darwin.apple_sdk_11_0) Libsystem; + inherit (darwin.apple_sdk_11_0.frameworks) System IOKit AppKit Security; in rustPlatform.buildRustPackage rec { pname = "solana-validator"; @@ -56,8 +60,22 @@ rustPlatform.buildRustPackage rec { inherit hash; }; - # partly inspired by https://github.com/obsidiansystems/solana-bridges/blob/develop/default.nix#L29 - inherit cargoHash; + # fix build with rust 1.70+ + patches = [ + (fetchpatch { + url = "https://github.com/solana-labs/solana/commit/9e703f85de4184f577f22a1c72a0d33612f2feb1.patch"; + hash = "sha256-bAKTIQ6FhTk6bIddYULwLfdH5kzNPw1ltXJEfawtAXg="; + includes = [ "sdk/program/src/account_info.rs" ]; + }) + ]; + + cargoLock = { + lockFile = ./Cargo.lock; + outputHashes = { + "crossbeam-epoch-0.9.5" = "sha256-Jf0RarsgJiXiZ+ddy0vp4jQ59J9m0k3sgXhWhCdhgws="; + "ntapi-0.3.7" = "sha256-G6ZCsa3GWiI/FeGKiK9TWkmTxen7nwpXvm5FtjNtjWU="; + }; + }; cargoBuildFlags = builtins.map (n: "--bin=${n}") solanaPkgs; @@ -66,19 +84,32 @@ rustPlatform.buildRustPackage rec { nativeBuildInputs = [ pkg-config protobuf rustfmt perl rustPlatform.bindgenHook ]; buildInputs = - [ openssl zlib libclang hidapi ] ++ (lib.optionals stdenv.isLinux [ udev ]); + [ openssl zlib libclang hidapi ] ++ (lib.optionals stdenv.isLinux [ udev ]) + ++ lib.optionals stdenv.isDarwin [ Security System Libsystem libcxx ]; strictDeps = true; doCheck = false; + env = { + # Used by build.rs in the rocksdb-sys crate. If we don't set these, it would + # try to build RocksDB from source. + ROCKSDB_LIB_DIR = "${lib.getLib rocksdb}/lib"; + + # If set, always finds OpenSSL in the system, even if the vendored feature is enabled. + OPENSSL_NO_VENDOR = "1"; + } // lib.optionalAttrs stdenv.isDarwin { + # Require this on darwin otherwise the compiler starts rambling about missing + # cmath functions + CPPFLAGS = "-isystem ${lib.getDev libcxx}/include/c++/v1"; + LDFLAGS = "-L${lib.getLib libcxx}/lib"; + }; + meta = with lib; { description = "Web-Scale Blockchain for fast, secure, scalable, decentralized apps and marketplaces. "; homepage = "https://solana.com"; license = licenses.asl20; maintainers = with maintainers; [ adjacentresearch ]; platforms = platforms.unix; - # never built on aarch64-darwin, x86_64-darwin since first introduction in nixpkgs - broken = stdenv.isDarwin; }; passthru.updateScript = ./update.sh; } |