Skip to content

Commit 9cc7c12

Browse files
feat(uniond): reuse libwasmvm release artifacts (#4062)
2 parents 4ffff18 + 6477800 commit 9cc7c12

File tree

1 file changed

+49
-134
lines changed

1 file changed

+49
-134
lines changed

tools/libwasmvm/libwasmvm.nix

Lines changed: 49 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,30 @@
1-
_: {
1+
_:
2+
let
3+
# TODO: populate when needed
4+
hashes = {
5+
"1.5.2" = {
6+
"x86_64-linux" = "sha256-5mCjjvspMLNO5vawuxJzCtzLBAtqtwG4+C80RTpCauc=";
7+
"aarch64-linux" = "sha256-54siTBWWSBejt1pA5ZiCtNDgb9BVs5UU1hZGaJzvjG4=";
8+
"aarch64-darwin" = "";
9+
};
10+
"2.1.2" = {
11+
"x86_64-linux" = "sha256-WOH2v6ie45DLmrxppbwSYCmkl/4J3TmfOKgtDYb+le8=";
12+
"aarch64-linux" = "sha256-CIHFtGPoniKbBjcOnilhrsClxjZ3LVFCxo01FWRGSmY=";
13+
"aarch64-darwin" = "";
14+
};
15+
"2.1.3" = {
16+
"x86_64-linux" = "sha256-jasIQ0pf5Xpvu8uAQXlLw8MYRtMfj/X7NT7nTg/NMJM=";
17+
"aarch64-linux" = "sha256-+upOFTkOBG0sqEQcIaiNulb5oDY/ksXZQBXfCsbaHy0=";
18+
"aarch64-darwin" = "";
19+
};
20+
"2.2.1" = {
21+
"x86_64-linux" = "sha256-s711XvrA/znAG1m4EQ+WHEiqPrk1iAcdemKCcMwfIyY=";
22+
"aarch64-linux" = "sha256-umy122sUomXIVWMmwEWICQjbmx0v+11KqfCawJskzsw=";
23+
"aarch64-darwin" = "";
24+
};
25+
};
26+
in
27+
{
228
perSystem =
329
{
430
pkgs,
@@ -12,144 +38,33 @@ _: {
1238
...
1339
}:
1440
let
15-
throwBadSystem = throw "libwasmvm cannot be built on system `${system}`";
16-
17-
CARGO_BUILD_TARGET =
18-
if system == "aarch64-linux" then
19-
"aarch64-unknown-linux-musl"
20-
else if system == "x86_64-linux" then
21-
"x86_64-unknown-linux-musl"
22-
else if system == "aarch64-darwin" then
23-
"aarch64-apple-darwin"
24-
else if system == "x86_64-darwin" then
25-
"x86_64-apple-darwin"
26-
else
27-
throwBadSystem;
28-
29-
rustToolchain-2024-01-27 = rust.mkNightly {
30-
channel = "nightly-2024-01-27";
31-
targets = [ CARGO_BUILD_TARGET ];
32-
};
33-
rustToolchain-1-77 = rust.mkNightly {
34-
channel = "1.77.0";
35-
targets = [ CARGO_BUILD_TARGET ];
36-
};
37-
rustToolchain-1-82 = rust.mkNightly {
38-
channel = "1.82.0";
39-
targets = [ CARGO_BUILD_TARGET ];
40-
};
41-
42-
mkLibwasmvm_v1 =
43-
wasmvm:
41+
fetchReleaseArtifact =
42+
{ version }:
4443
let
45-
attrs =
46-
{
47-
inherit CARGO_BUILD_TARGET;
48-
pname = "libwasmvm";
49-
version = wasmvm.rev;
50-
buildInputs = [ rustToolchain-2024-01-27 ];
51-
src = "${wasmvm}/libwasmvm";
52-
installCargoArtifactsMode = "use-zstd";
53-
}
54-
// (
55-
if pkgs.stdenv.isLinux then
56-
{
57-
cargoExtraArgs = "--locked --offline --example=wasmvmstatic";
58-
installPhaseCommand = ''
59-
mkdir -p $out/lib
60-
mv target/${CARGO_BUILD_TARGET}/release/examples/libwasmvmstatic.a $out/lib/libwasmvm.${builtins.head (pkgs.lib.strings.splitString "-" system)}.a
61-
'';
62-
}
63-
else if pkgs.stdenv.isDarwin then
64-
{
65-
# non-static dylib build on macOS
66-
cargoExtraArgs = "--locked --offline";
67-
installPhaseCommand = ''
68-
mkdir -p $out/lib
69-
mv target/${CARGO_BUILD_TARGET}/release/deps/libwasmvm.dylib $out/lib/libwasmvm.dylib
70-
'';
71-
}
72-
else
73-
throwBadSystem
74-
);
75-
craneLib = crane.lib.overrideToolchain rustToolchain-2024-01-27;
44+
prefix = builtins.head (pkgs.lib.strings.splitString "-" system);
45+
artifact = pkgs.fetchurl {
46+
# TODO: incompatible with darwin we need to cut the `muslc` prefix
47+
url = "https://github.com/CosmWasm/wasmvm/releases/download/v${version}/libwasmvm_muslc.${prefix}.a";
48+
hash = hashes.${version}.${system};
49+
};
7650
in
77-
craneLib.buildPackage (
78-
attrs
79-
// {
80-
cargoArtifacts = craneLib.buildDepsOnly attrs;
81-
}
82-
);
83-
mkLibwasmvm_v2 =
84-
wasmvm: rustToolChain:
85-
let
86-
attrs =
87-
{
88-
inherit CARGO_BUILD_TARGET;
89-
pname = "libwasmvm";
90-
version = wasmvm.rev;
91-
buildInputs = [ rustToolChain ];
92-
src = "${wasmvm}/libwasmvm";
93-
installCargoArtifactsMode = "use-zstd";
94-
}
95-
// (
96-
if pkgs.stdenv.isLinux then
97-
{
98-
cargoExtraArgs = "--locked --offline --example=wasmvmstatic";
99-
installPhaseCommand = ''
100-
mkdir -p $out/lib
101-
mv target/${CARGO_BUILD_TARGET}/release/examples/libwasmvmstatic.a $out/lib/libwasmvm.${builtins.head (pkgs.lib.strings.splitString "-" system)}.a
102-
'';
103-
}
104-
else if pkgs.stdenv.isDarwin then
105-
{
106-
# non-static dylib build on macOS
107-
cargoExtraArgs = "--locked --offline";
108-
installPhaseCommand = ''
109-
mkdir -p $out/lib
110-
mv target/${CARGO_BUILD_TARGET}/release/deps/libwasmvm.dylib $out/lib/libwasmvm.dylib
111-
'';
112-
}
113-
else
114-
throwBadSystem
115-
);
116-
craneLib = crane.lib.overrideToolchain rustToolChain;
117-
in
118-
craneLib.buildPackage (
119-
attrs
120-
// {
121-
cargoArtifacts = craneLib.buildDepsOnly attrs;
122-
}
123-
);
124-
wasmvm-1_5_2 = pkgs.fetchFromGitHub {
125-
owner = "CosmWasm";
126-
repo = "wasmvm";
127-
rev = "v1.5.2";
128-
hash = "sha256-3KJq5jFllFSqlm85/iRWYMhu99iuokvR3Ib9Gq3gIjc=";
51+
pkgs.runCommand "libwasmvm-${version}-${system}" { } ''
52+
mkdir -p $out/lib
53+
cp ${artifact} $out/lib/libwasmvm.${prefix}.a
54+
'';
55+
in
56+
{
57+
packages.libwasmvm-1_5_2 = fetchReleaseArtifact {
58+
version = "1.5.2";
12959
};
130-
wasmvm-2_1_2 = pkgs.fetchFromGitHub {
131-
owner = "CosmWasm";
132-
repo = "wasmvm";
133-
rev = "v2.1.2";
134-
hash = "sha256-Y3BVRR2T5MLOtXdPK38W8MX8etIuqGcTjvxkaEOyvVM=";
60+
packages.libwasmvm-2_1_2 = fetchReleaseArtifact {
61+
version = "2.1.2";
13562
};
136-
wasmvm-2_1_3 = pkgs.fetchFromGitHub {
137-
owner = "CosmWasm";
138-
repo = "wasmvm";
139-
rev = "v2.1.3";
140-
hash = "sha256-gYrK2EHhXnearJgLX38O6NLI6TfoGtpzA9be/7S/0ZU=";
63+
packages.libwasmvm-2_1_3 = fetchReleaseArtifact {
64+
version = "2.1.3";
14165
};
142-
wasmvm-2_2_1 = pkgs.fetchFromGitHub {
143-
owner = "CosmWasm";
144-
repo = "wasmvm";
145-
rev = "v2.2.1";
146-
hash = "sha256-HA/YPdE1yy2/vfiQWOTE0z75agYZL/kWTvpXKyKbfLk=";
66+
packages.libwasmvm-2_2_1 = fetchReleaseArtifact {
67+
version = "2.2.1";
14768
};
148-
in
149-
{
150-
packages.libwasmvm-1_5_2 = mkLibwasmvm_v1 wasmvm-1_5_2;
151-
packages.libwasmvm-2_1_2 = mkLibwasmvm_v2 wasmvm-2_1_2 rustToolchain-1-77;
152-
packages.libwasmvm-2_1_3 = mkLibwasmvm_v2 wasmvm-2_1_3 rustToolchain-1-82;
153-
packages.libwasmvm-2_2_1 = mkLibwasmvm_v2 wasmvm-2_2_1 rustToolchain-1-82;
15469
};
15570
}

0 commit comments

Comments
 (0)