Enable darwin builds in Nix for olm
From 04f1249a66e75e91ef009ed04304cbc88dea798d Mon Sep 17 00:00:00 2001 From: Jonathan Ringer <jonringer117@gmail.com> Date: Sun, 26 Feb 2023 15:14:23 -0800 Subject: [PATCH] Enable darwin builds in Nix Move most packaging concerns into nix/overlay.nix. Alter packaging to mostly align with nixpkgs best practices. Signed-off-by: Jonathan Ringer <jonringer117@gmail.com>
This commit is contained in:
parent
704b198f5a
commit
ab4cbcd01a
2 changed files with 99 additions and 119 deletions
126
flake.nix
126
flake.nix
|
@ -11,126 +11,30 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, flake-utils, npmlock2nix }:
|
outputs = { self, nixpkgs, flake-utils, npmlock2nix }:
|
||||||
(
|
|
||||||
# some systems cause issues, e.g. i686-linux is unsupported by gradle,
|
|
||||||
# which causes "nix flake check" to fail. Investigate more later, but for
|
|
||||||
# now, we will just allow x86_64-linux
|
|
||||||
flake-utils.lib.eachSystem [ "x86_64-linux" ] (system:
|
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs {
|
localOverlay = import ./nix/overlay.nix;
|
||||||
|
pkgsForSystem = system: import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
overlays = [
|
overlays = [
|
||||||
(final: prev: {
|
(final: prev: {
|
||||||
npmlock2nix = final.callPackage npmlock2nix {};
|
npmlock2nix = final.callPackage npmlock2nix {};
|
||||||
|
node_modules = final.npmlock2nix.node_modules { src = ./javascript; };
|
||||||
})
|
})
|
||||||
|
localOverlay
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
node_modules = pkgs.npmlock2nix.node_modules { src = ./javascript; };
|
in (
|
||||||
in
|
# some systems cause issues, e.g. i686-linux is unsupported by gradle,
|
||||||
rec {
|
# which causes "nix flake check" to fail. Investigate more later, but for
|
||||||
checks.gcc-cmake = pkgs.gccStdenv.mkDerivation {
|
# now, we will just allow x86_64-linux
|
||||||
name = "olm";
|
flake-utils.lib.eachSystem [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ] (system: rec {
|
||||||
|
legacyPackages = pkgsForSystem system;
|
||||||
buildInputs = [ pkgs.cmake ];
|
checks = {
|
||||||
|
inherit (legacyPackages) olm-gcc-cmake olm-clang-cmake olm-gcc-make;
|
||||||
src = ./.;
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
cmake . -Bbuild
|
|
||||||
cmake --build build
|
|
||||||
'';
|
|
||||||
|
|
||||||
doCheck = true;
|
|
||||||
checkPhase = ''
|
|
||||||
cd build/tests
|
|
||||||
ctest .
|
|
||||||
cd ../..
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
packages = {
|
||||||
checks.clang-cmake = pkgs.clangStdenv.mkDerivation {
|
javascript = legacyPackages.olm-javascript;
|
||||||
name = "olm";
|
|
||||||
|
|
||||||
buildInputs = [ pkgs.cmake ];
|
|
||||||
|
|
||||||
src = ./.;
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
cmake . -Bbuild
|
|
||||||
cmake --build build
|
|
||||||
'';
|
|
||||||
|
|
||||||
doCheck = true;
|
|
||||||
checkPhase = ''
|
|
||||||
cd build/tests
|
|
||||||
ctest .
|
|
||||||
cd ../..
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
checks.gcc-make = pkgs.gccStdenv.mkDerivation {
|
|
||||||
name = "olm";
|
|
||||||
|
|
||||||
src = ./.;
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
make
|
|
||||||
'';
|
|
||||||
|
|
||||||
doCheck = true;
|
|
||||||
checkPhase = ''
|
|
||||||
make test
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
make install PREFIX=$out
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
packages.javascript = pkgs.buildEmscriptenPackage {
|
|
||||||
pname = "olm";
|
|
||||||
inherit (builtins.fromJSON (builtins.readFile ./javascript/package.json)) version;
|
|
||||||
|
|
||||||
buildInputs = with pkgs; [ gnumake python3 nodejs ];
|
|
||||||
|
|
||||||
src = ./.;
|
|
||||||
|
|
||||||
postPatch = ''
|
|
||||||
patchShebangs .
|
|
||||||
'';
|
|
||||||
|
|
||||||
configurePhase = "";
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
export EM_CACHE=$TMPDIR
|
|
||||||
make javascript/exported_functions.json
|
|
||||||
make js
|
|
||||||
'';
|
|
||||||
|
|
||||||
output = [ "out" ];
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out/javascript
|
|
||||||
cd javascript
|
|
||||||
echo sha256: > checksums.txt
|
|
||||||
sha256sum olm.js olm_legacy.js olm.wasm >> checksums.txt
|
|
||||||
echo sha512: >> checksums.txt
|
|
||||||
sha512sum olm.js olm_legacy.js olm.wasm >> checksums.txt
|
|
||||||
cp package.json olm.js olm.wasm olm_legacy.js index.d.ts README.md checksums.txt $out/javascript
|
|
||||||
cd ..
|
|
||||||
'';
|
|
||||||
|
|
||||||
checkPhase = ''
|
|
||||||
cd javascript
|
|
||||||
export HOME=$TMPDIR
|
|
||||||
ln -s ${node_modules}/node_modules ./node_modules
|
|
||||||
npm test
|
|
||||||
cd ..
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
packages.default = packages.javascript;
|
|
||||||
}
|
}
|
||||||
)
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
76
nix/overlay.nix
Normal file
76
nix/overlay.nix
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
final: prev: {
|
||||||
|
olm-gcc-cmake = prev.gccStdenv.mkDerivation {
|
||||||
|
name = "olm_gcc_cmake";
|
||||||
|
|
||||||
|
src = ./..;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ prev.cmake ];
|
||||||
|
doCheck = true;
|
||||||
|
checkPhase = ''
|
||||||
|
(cd tests && ctest . -j $NIX_BUILD_CORES)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
olm-clang-cmake = prev.clangStdenv.mkDerivation {
|
||||||
|
name = "olm_clang_cmake";
|
||||||
|
|
||||||
|
src = ./..;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ prev.cmake ];
|
||||||
|
|
||||||
|
doCheck = true;
|
||||||
|
checkPhase = ''
|
||||||
|
(cd tests && ctest . -j $NIX_BUILD_CORES)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
olm-gcc-make = prev.gccStdenv.mkDerivation {
|
||||||
|
name = "olm";
|
||||||
|
|
||||||
|
src = ./..;
|
||||||
|
|
||||||
|
doCheck = true;
|
||||||
|
makeFlags = [ "PREFIX=$out" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
olm-javascript = final.buildEmscriptenPackage {
|
||||||
|
pname = "olm_javascript";
|
||||||
|
inherit (builtins.fromJSON (builtins.readFile ../javascript/package.json)) version;
|
||||||
|
|
||||||
|
src = ./..;
|
||||||
|
|
||||||
|
nativeBuildInputs = with prev; [ gnumake python3 nodejs ];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
patchShebangs .
|
||||||
|
'';
|
||||||
|
|
||||||
|
configurePhase = false;
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
export EM_CACHE=$TMPDIR
|
||||||
|
make javascript/exported_functions.json
|
||||||
|
make js
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/javascript
|
||||||
|
cd javascript
|
||||||
|
echo sha256: > checksums.txt
|
||||||
|
sha256sum olm.js olm_legacy.js olm.wasm >> checksums.txt
|
||||||
|
echo sha512: >> checksums.txt
|
||||||
|
sha512sum olm.js olm_legacy.js olm.wasm >> checksums.txt
|
||||||
|
cp package.json olm.js olm.wasm olm_legacy.js index.d.ts README.md checksums.txt $out/javascript
|
||||||
|
cd ..
|
||||||
|
'';
|
||||||
|
|
||||||
|
checkPhase = ''
|
||||||
|
cd javascript
|
||||||
|
export HOME=$TMPDIR
|
||||||
|
ln -s ${final.node_modules}/node_modules ./node_modules
|
||||||
|
npm test
|
||||||
|
cd ..
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue