Skip to content

Commit 5c6f1ef

Browse files
committed
nix: add wasm support
1 parent 863baff commit 5c6f1ef

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

flake.nix

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
flake-utils.lib.eachDefaultSystem
77
(system:
88
let
9-
pkgs = nixpkgs.legacyPackages.${system};
9+
pkgs = import nixpkgs {
10+
system = system;
11+
config.allowUnsupportedSystem = true; # for eigen wasm
12+
};
13+
pkgs_wasm = pkgs.pkgsCross.wasi32;
1014

1115
devtools = [
1216
pkgs.clang-tools
@@ -33,6 +37,30 @@
3337
nativeBuildInputs = attrs.nativeBuildInputs ++ devtools;
3438
});
3539
devShells.default = devShells.libear;
40+
41+
# wasm versions of packages
42+
43+
packages.xsimd_wasm = pkgs_wasm.xsimd.overrideAttrs {
44+
# this should be an overlay
45+
version = pkgs.xsimd.version;
46+
src = pkgs.xsimd.src;
47+
};
48+
packages.libear_wasm = (pkgs_wasm.callPackage ./nix/libear.nix {
49+
src = ./.;
50+
boost = pkgs.boost; # doesn't build for wasm, but we only use headers, so use system version
51+
xsimd = packages.xsimd_wasm;
52+
}).overrideAttrs (super: {
53+
cmakeBuildType = "MinSizeRel";
54+
});
55+
56+
devShells.libear_wasm = packages.libear_wasm.overrideAttrs (attrs: {
57+
nativeBuildInputs = attrs.nativeBuildInputs ++ devtools ++ [
58+
pkgs.wabt
59+
pkgs.wasmtime
60+
pkgs.nodejs
61+
pkgs.nodePackages.prettier
62+
];
63+
});
3664
}
3765
);
3866
}

nix/libear.nix

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
1-
{ lib, buildPackages, stdenv, cmake, src, ninja, boost, eigen, xsimd }:
1+
{ lib, buildPackages, stdenv, cmake, src, ninja, boost, eigen, xsimd, binaryen, nodejs }:
22
let
33
isCross = stdenv.buildPlatform != stdenv.hostPlatform;
4+
isWasm = stdenv.hostPlatform.isWasm;
45
in
56
(stdenv.mkDerivation {
67
name = "libear";
78
inherit src;
89
nativeBuildInputs = [
910
cmake
1011
ninja
12+
] ++ lib.optionals isWasm [
13+
binaryen # gets used automatically by clang-ld if in path
14+
nodejs
1115
];
16+
1217
buildInputs = [ boost eigen xsimd ];
1318
cmakeFlags = [
1419
"-DEAR_USE_INTERNAL_EIGEN=OFF"
@@ -17,7 +22,20 @@ in
1722
]
1823
++ lib.optionals isCross [
1924
"-DCMAKE_CROSSCOMPILING_EMULATOR=${stdenv.hostPlatform.emulator buildPackages}"
25+
] ++ lib.optionals isWasm [
26+
"-DEAR_NO_EXCEPTIONS=ON"
2027
];
2128

29+
2230
doCheck = true;
31+
32+
preConfigure = lib.optionalString isWasm ''
33+
# for wasmtime cache
34+
HOME=$(pwd)
35+
# forced off in make-derivation.nix when build platform can't execute host
36+
# platform, but we have an emulator
37+
doCheck=1
38+
'';
39+
40+
env.NIX_CFLAGS_COMPILE = lib.optionalString isWasm "-DEIGEN_HAS_CXX11_ATOMIC=0 -DCATCH_CONFIG_NO_POSIX_SIGNALS";
2341
})

0 commit comments

Comments
 (0)