diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 2c1805b2bbec..aa2f9e4d2ae5 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -27065,6 +27065,12 @@ githubId = 67477750; name = "Tomkoid"; }; + TomMD = { + name = "Thomas M. DuBuisson"; + email = "thomas.dubuisson@gmail.com"; + github = "TomMD"; + githubId = 137806; + }; Tommimon = { name = "Tommaso Montanari"; email = "sefymw7q8@mozmail.com"; diff --git a/pkgs/by-name/so/solana-agave/crossbeam-epoch.patch b/pkgs/by-name/so/solana-agave/crossbeam-epoch.patch new file mode 100644 index 000000000000..b62f655618d9 --- /dev/null +++ b/pkgs/by-name/so/solana-agave/crossbeam-epoch.patch @@ -0,0 +1,49 @@ +diff --git a/Cargo.lock b/Cargo.lock +index 0194c34ed2..0d58655f70 100644 +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -1419,14 +1419,14 @@ dependencies = [ + + [[package]] + name = "crossbeam-epoch" +-version = "0.9.5" +-source = "git+https://github.com/anza-xyz/crossbeam?rev=fd279d707025f0e60951e429bf778b4813d1b6bf#fd279d707025f0e60951e429bf778b4813d1b6bf" ++version = "0.9.16" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" + dependencies = [ ++ "autocfg", + "cfg-if 1.0.0", + "crossbeam-utils", +- "lazy_static", +- "memoffset 0.6.4", +- "scopeguard", ++ "memoffset 0.9.0", + ] + + [[package]] +@@ -3118,15 +3118,6 @@ dependencies = [ + "libc", + ] + +-[[package]] +-name = "memoffset" +-version = "0.6.4" +-source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" +-dependencies = [ +- "autocfg", +-] +- + [[package]] + name = "memoffset" + version = "0.7.1" +diff --git a/Cargo.toml b/Cargo.toml +index 2ff2094d67..a3ace4459a 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -665,4 +665,4 @@ + [patch.crates-io] + # for details, see https://github.com/anza-xyz/crossbeam/commit/fd279d707025f0e60951e429bf778b4813d1b6bf +-crossbeam-epoch = { git = "https://github.com/anza-xyz/crossbeam", rev = "fd279d707025f0e60951e429bf778b4813d1b6bf" } ++# crossbeam-epoch = { git = "https://github.com/anza-xyz/crossbeam", rev = "fd279d707025f0e60951e429bf778b4813d1b6bf" } diff --git a/pkgs/by-name/so/solana-agave/package.nix b/pkgs/by-name/so/solana-agave/package.nix new file mode 100644 index 000000000000..7e22eda533c2 --- /dev/null +++ b/pkgs/by-name/so/solana-agave/package.nix @@ -0,0 +1,103 @@ +{ + lib, + stdenv, + buildPackages, + fetchFromGitHub, + rustPlatform, + rustfmt, + installShellFiles, + pkg-config, + apple-sdk_15, + udev, + openssl, + libz, + protobuf, + cmake, + gnumake, + clang, + llvm, + llvmPackages, + rocksdb, +}: + +rustPlatform.buildRustPackage (finalAttrs: { + pname = "solana-agave"; + version = "2.3.12"; + + src = fetchFromGitHub { + owner = "anza-xyz"; + repo = "agave"; + tag = "v${finalAttrs.version}"; + hash = "sha256-25UgiC5jAnlNE8Z7WrQRIviCuFp4zg57ddYA4h0qJ6U="; + }; + + cargoHash = "sha256-SVngabz9mrYNn7DlL7Rh7llvO4GmJdt5vpXVcjwqtNg="; + + # For the same reason as discussed in solana-cli derivation (crossbeam softlink), the no_atomic file is missing + # and either must somehow be rendered unneeded (using an upstream package) or replaced. A cleaner, non-behavior-changing, + # solution would be to commit the file to the repo fork (replacing the softlink). + cargoPatches = [ + ./crossbeam-epoch.patch + ]; + + nativeBuildInputs = [ + installShellFiles + protobuf + cmake + gnumake + clang + llvm + llvmPackages.bintools + openssl.dev + pkg-config + rustfmt + ]; + buildInputs = [ + openssl + libz + rustPlatform.bindgenHook + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ apple-sdk_15 ] + ++ lib.optionals stdenv.hostPlatform.isLinux [ udev ]; + + doInstallCheck = false; + + env = { + # If set, always finds OpenSSL in the system, even if the vendored feature is enabled. + OPENSSL_NO_VENDOR = 1; + # Agave uses deny(warnings) which breaks when nixpkgs updates rustc. + # Cap lints to warnings so the build doesn't fail on new compiler lints. + RUSTFLAGS = "--cap-lints warn"; + # Use the pre-built rocksdb from nixpkgs instead of compiling from source. + # This avoids GCC 13+ compatibility issues with missing includes. + ROCKSDB_LIB_DIR = "${rocksdb}/lib"; + }; + + # Disabling tests because: + # + # ``` + # running 3 tests + # test args::tests::test_max_genesis_archive_unpacked_size_constant ... ok + # test bigtable::tests::test_missing_blocks ... ok + # error: test failed, to rerun pass `-p agave-ledger-tool --bin agave-ledger-tool` + # + # Caused by: + # process didn't exit successfully: `/build/source/target/x86_64-unknown-linux-gnu/release/deps/agave_ledger_tool-b8aca978c218ed51` (signal: 4, SIGILL: illegal instruction) + # ``` + # + # Almost certainly caused by the ledger-tool test calling `Command::cargo_bin` which assumes a good bit about the current environment. + doCheck = false; + + meta = { + description = "Solana Network Validator"; + homepage = "https://github.com/anza-xyz/agave"; + changelog = "https://github.com/anza-xyz/agave/releases/tag/${finalAttrs.version}"; + license = with lib.licenses; [ + asl20 + ]; + maintainers = with lib.maintainers; [ + TomMD + ]; + mainProgram = "agave"; + }; +})