|
1 | 1 | { ... }: {
|
2 | 2 | perSystem = { self', pkgs, system, config, inputs', crane, ... }:
|
3 | 3 | let
|
4 |
| - attrs = crane.commonAttrs |
5 |
| - // (crane.lib.crateNameFromCargoToml { cargoToml = ./ethereum-light-client/Cargo.toml; }) |
| 4 | + rustToolchain = crane.withBuildTarget CARGO_BUILD_TARGET; |
| 5 | + |
| 6 | + attrs = (crane.lib.crateNameFromCargoToml { cargoToml = ./ethereum-light-client/Cargo.toml; }) |
6 | 7 | // {
|
7 | 8 | cargoExtraArgs = "-p union-ethereum-lc --features eth-minimal";
|
| 9 | + src = crane.rustSrc; |
| 10 | + cargoVendorDir = crane.lib.vendorMultipleCargoDeps { |
| 11 | + inherit (crane.lib.findCargoFiles crane.rustSrc) cargoConfigs; |
| 12 | + cargoLockList = [ |
| 13 | + ../Cargo.lock |
| 14 | + "${rustToolchain.toolchain.passthru.availableComponents.rust-src}/lib/rustlib/src/rust/Cargo.lock" |
| 15 | + ]; |
| 16 | + }; |
8 | 17 | };
|
9 | 18 |
|
10 |
| - # cargoArtifacts = crane.lib.buildDepsOnly attrs; |
11 |
| - |
12 | 19 | CARGO_BUILD_TARGET = "wasm32-unknown-unknown";
|
13 | 20 | in
|
14 | 21 | {
|
15 | 22 | packages = {
|
16 |
| - wasm-ethereum-lc = (crane.withBuildTarget CARGO_BUILD_TARGET).buildPackage (attrs // { |
| 23 | + wasm-ethereum-lc = rustToolchain.buildPackage (attrs // { |
17 | 24 | inherit CARGO_BUILD_TARGET;
|
18 | 25 |
|
19 |
| - # RUSTFLAGS are used to optimize the binary size |
| 26 | + cargoBuildCommand = "RUSTFLAGS='-C target-feature=-sign-ext -C link-arg=-s -C target-cpu=mvp' cargo -Z build-std=std,panic_abort -Z build-std-features=panic_immediate_abort build --release --lib --target ${CARGO_BUILD_TARGET}"; |
| 27 | + |
| 28 | + checkPhase = '' |
| 29 | + cargo test ${attrs.cargoExtraArgs} --target ${crane.hostTarget} |
| 30 | +
|
| 31 | + # grep exits 0 if a match is found |
| 32 | + if ${pkgs.binaryen}/bin/wasm-dis target/wasm32-unknown-unknown/release/union_ethereum_lc.wasm | grep -P '\.extend\d{1,2}_s' |
| 33 | + then |
| 34 | + echo "wasm binary contains invalid opcodes!" |
| 35 | + exit 1 |
| 36 | + else |
| 37 | + echo "wasm binary doesn't contain any sign-extension opcodes!" |
| 38 | + fi |
| 39 | + ''; |
| 40 | + |
20 | 41 | installPhase = ''
|
21 | 42 | mkdir -p $out/lib
|
22 | 43 | # Optimize the binary size a little bit more
|
|
28 | 49 | });
|
29 | 50 | };
|
30 | 51 |
|
31 |
| - checks = crane.mkChecks "wasm-ethereum-lc" { |
32 |
| - clippy = crane.lib.cargoClippy (attrs // { inherit (crane) cargoArtifacts; }); |
33 |
| - test = crane.lib.cargoTest (attrs // { inherit (crane) cargoArtifacts; }); |
34 |
| - }; |
| 52 | + checks = crane.mkChecks "wasm-ethereum-lc" |
| 53 | + { |
| 54 | + clippy = crane.lib.cargoClippy (attrs // { inherit (crane) cargoArtifacts; }); |
| 55 | + test = crane.lib.cargoTest (attrs // { inherit (crane) cargoArtifacts; }); |
| 56 | + }; |
35 | 57 | };
|
36 | 58 | }
|
0 commit comments