forked from M-Labs/nac3
1
0
Fork 0
nac3/flake.nix

140 lines
5.2 KiB
Nix
Raw Normal View History

2021-10-07 21:49:13 +08:00
{
description = "The third-generation ARTIQ compiler";
inputs.nixpkgs.url = github:NixOS/nixpkgs/0f4b4b85d959200f52c16bbb74036994e7db5f74;
2021-10-07 21:49:13 +08:00
outputs = { self, nixpkgs }:
let
# We can't use overlays because llvm dependencies are handled internally in llvmPackages_xx
pkgs-orig = import nixpkgs { system = "x86_64-linux"; };
nixpkgs-patched = pkgs-orig.applyPatches {
name = "nixpkgs";
src = nixpkgs;
patches = [ ./llvm-future-riscv-abi.diff ./llvm-restrict-targets.diff ./llvm-mingw-crosscompile.diff ./llvm-unbreak-static-cross.diff ];
};
pkgs = import nixpkgs-patched { system = "x86_64-linux"; };
2021-11-26 17:26:18 +08:00
pkgs-mingw = import nixpkgs-patched { system = "x86_64-linux"; crossSystem = { config = "x86_64-w64-mingw32"; libc = "msvcrt"; }; };
cargoSha256 = "sha256-otKLhr58HYMjVXAof6AdObNpggPnvK6qOl7I+4LWIP8=";
msys2-python-tar = pkgs.fetchurl {
url = "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.9.7-4-any.pkg.tar.zst";
sha256 = "0iwlgbk4b457yn9djwqswid55xhyyi35qymz1lfh42xwdpxdm47c";
};
2021-12-02 22:37:32 +08:00
msys2-python = pkgs.stdenvNoCC.mkDerivation {
name = "msys2-python";
src = msys2-python-tar;
buildInputs = [ pkgs.gnutar pkgs.zstd ];
phases = [ "installPhase" ];
installPhase =
''
mkdir $out
tar xf $src -C $out
'';
};
pyo3-mingw-config = pkgs.writeTextFile {
name = "pyo3-mingw-config";
text =
''
implementation=CPython
version=3.9
shared=true
abi3=false
lib_name=python3.9
lib_dir=${msys2-python}/mingw64/lib
pointer_width=64
build_flags=WITH_THREAD
suppress_build_script_link_lines=false
'';
};
2021-10-08 08:18:42 +08:00
in rec {
2021-11-12 14:57:46 +08:00
inherit nixpkgs-patched;
2021-10-07 21:49:13 +08:00
packages.x86_64-linux = {
nac3artiq = pkgs.python3Packages.toPythonModule (
pkgs.rustPlatform.buildRustPackage {
name = "nac3artiq";
src = self;
2021-11-26 17:26:18 +08:00
inherit cargoSha256;
2021-11-02 14:00:20 +08:00
nativeBuildInputs = [ pkgs.python3 pkgs.llvm_12 ];
buildInputs = [ pkgs.python3 pkgs.libffi pkgs.libxml2 pkgs.llvm_12 ];
2021-10-07 21:49:13 +08:00
cargoBuildFlags = [ "--package" "nac3artiq" ];
2021-11-03 17:39:48 +08:00
cargoTestFlags = [ "--package" "nac3ast" "--package" "nac3parser" "--package" "nac3core" "--package" "nac3artiq" ];
2021-10-07 21:49:13 +08:00
installPhase =
''
TARGET_DIR=$out/${pkgs.python3Packages.python.sitePackages}
mkdir -p $TARGET_DIR
cp target/x86_64-unknown-linux-gnu/release/libnac3artiq.so $TARGET_DIR/nac3artiq.so
'';
}
);
};
2021-11-26 17:26:18 +08:00
packages.x86_64-w64-mingw32 = {
nac3artiq = pkgs-mingw.python3Packages.toPythonModule (
pkgs-mingw.rustPlatform.buildRustPackage {
name = "nac3artiq";
src = self;
inherit cargoSha256;
nativeBuildInputs = [ pkgs.zip ];
2021-12-02 22:01:19 +08:00
buildInputs = [ pkgs-mingw.libffi pkgs-mingw.zlib ];
2021-11-26 17:26:18 +08:00
configurePhase =
''
export PYO3_CONFIG_FILE=${pyo3-mingw-config}
mkdir llvm-cfg
cat << EOF > llvm-cfg/llvm-config
#!${pkgs.bash}/bin/bash
set -e
2021-12-02 21:02:48 +08:00
# Gross hack to work around llvm-config asking for the wrong system libraries.
2021-12-02 22:01:19 +08:00
exec ${pkgs-mingw.llvm_12.dev}/bin/llvm-config-native \$@ | ${pkgs.gnused}/bin/sed s/-lrt\ -ldl\ -lpthread\ -lm//
EOF
chmod +x llvm-cfg/llvm-config
export PATH=$PATH:`pwd`/llvm-cfg
2021-12-02 22:01:19 +08:00
export CARGO_TARGET_X86_64_PC_WINDOWS_GNU_RUSTFLAGS="-C link-arg=-lz -C link-arg=-luuid -C link-arg=-lole32 -C link-arg=-lmcfgthread"
2021-11-26 17:26:18 +08:00
'';
cargoBuildFlags = [ "--package" "nac3artiq" ];
doCheck = false;
installPhase =
''
mkdir -p $out $out/nix-support
ln -s target/x86_64-pc-windows-gnu/release/nac3artiq.dll nac3artiq.pyd
zip $out/nac3artiq.zip nac3artiq.pyd
echo file binary-dist $out/nac3artiq.zip >> $out/nix-support/hydra-build-products
2021-11-26 17:26:18 +08:00
'';
meta.platforms = ["x86_64-windows"];
}
);
};
2021-12-05 12:56:47 +08:00
# Use "nix develop" to debug the derivation.
devShell.x86_64-linux = packages.x86_64-linux.nac3artiq;
# Use "nix shell" to enter a development environment.
defaultPackage.x86_64-linux = pkgs.buildEnv {
2021-10-07 21:49:13 +08:00
name = "nac3-dev-shell";
2021-12-05 12:56:47 +08:00
paths = with pkgs; [
2021-11-02 14:00:20 +08:00
llvm_12
clang_12
lld_12
2021-10-07 21:49:13 +08:00
cargo
2021-11-02 18:13:59 +08:00
cargo-insta
2021-10-07 21:49:13 +08:00
rustc
libffi
libxml2
clippy
(python3.withPackages(ps: [ ps.numpy ]))
];
};
2021-10-08 08:18:42 +08:00
hydraJobs = {
inherit (packages.x86_64-linux) nac3artiq;
2021-12-02 22:37:41 +08:00
nac3artiq-mingw = packages.x86_64-w64-mingw32.nac3artiq;
2021-12-05 12:56:47 +08:00
} // (pkgs.lib.foldr (a: b: {"${pkgs.lib.strings.getName a}" = a;} // b) {} defaultPackage.x86_64-linux.paths);
2021-10-07 21:49:13 +08:00
};
nixConfig = {
binaryCachePublicKeys = ["nixbld.m-labs.hk-1:5aSRVA5b320xbNvu30tqxVPXpld73bhtOeH6uAjRyHc="];
binaryCaches = ["https://nixbld.m-labs.hk" "https://cache.nixos.org"];
};
2021-10-07 21:49:13 +08:00
}