artiq/flake.nix

132 lines
5.1 KiB
Nix
Raw Normal View History

2021-08-12 12:44:42 +08:00
{
description = "A leading-edge control system for quantum information experiments";
inputs.nixpkgs.url = github:NixOS/nixpkgs/nixos-21.05;
inputs.mozilla-overlay = { url = github:mozilla/nixpkgs-mozilla; flake = false; };
2021-08-12 12:44:42 +08:00
inputs.src-sipyco = { url = github:m-labs/sipyco; flake = false; };
inputs.src-pythonparser = { url = github:m-labs/pythonparser; flake = false; };
outputs = { self, nixpkgs, mozilla-overlay, src-sipyco, src-pythonparser }:
let
pkgs = import nixpkgs { system = "x86_64-linux"; overlays = [ (import mozilla-overlay) ]; };
rustManifest = pkgs.fetchurl {
url = "https://static.rust-lang.org/dist/2021-01-29/channel-rust-nightly.toml";
sha256 = "sha256-EZKgw89AH4vxaJpUHmIMzMW/80wAFQlfcxRoBD9nz0c=";
2021-08-12 12:44:42 +08:00
};
targets = [];
rustChannelOfTargets = _channel: _date: targets:
(pkgs.lib.rustLib.fromManifestFile rustManifest {
inherit (pkgs) stdenv lib fetchurl patchelf;
}).rust.override {
inherit targets;
extensions = ["rust-src"];
};
rust = rustChannelOfTargets "nightly" null targets;
rustPlatform = pkgs.recurseIntoAttrs (pkgs.makeRustPlatform {
rustc = rust;
cargo = rust;
});
in rec {
packages.x86_64-linux = rec {
sipyco = pkgs.python3Packages.buildPythonPackage {
name = "sipyco";
src = src-sipyco;
propagatedBuildInputs = with pkgs.python3Packages; [ pybase64 numpy ];
};
2021-08-12 12:44:42 +08:00
pythonparser = pkgs.python3Packages.buildPythonPackage {
name = "pythonparser";
src = src-pythonparser;
doCheck = false;
propagatedBuildInputs = with pkgs.python3Packages; [ regex ];
};
2021-08-12 12:44:42 +08:00
qasync = pkgs.python3Packages.buildPythonPackage rec {
pname = "qasync";
version = "0.10.0";
src = pkgs.fetchFromGitHub {
owner = "CabbageDevelopment";
repo = "qasync";
rev = "v${version}";
sha256 = "1zga8s6dr7gk6awmxkh4pf25gbg8n6dv1j4b0by7y0fhi949qakq";
};
propagatedBuildInputs = [ pkgs.python3Packages.pyqt5 ];
checkInputs = [ pkgs.python3Packages.pytest ];
checkPhase = ''
pytest -k 'test_qthreadexec.py' # the others cause the test execution to be aborted, I think because of asyncio
'';
2021-08-12 12:44:42 +08:00
};
outputcheck = pkgs.python3Packages.buildPythonApplication rec {
pname = "outputcheck";
version = "0.4.2";
src = pkgs.fetchFromGitHub {
owner = "stp";
repo = "OutputCheck";
rev = "e0f533d3c5af2949349856c711bf4bca50022b48";
sha256 = "1y27vz6jq6sywas07kz3v01sqjd0sga9yv9w2cksqac3v7wmf2a0";
};
prePatch = "echo ${version} > RELEASE-VERSION";
2021-08-12 12:44:42 +08:00
};
libartiq-support = pkgs.stdenv.mkDerivation {
name = "libartiq-support";
src = self;
buildInputs = [ rustPlatform.rust.rustc ];
buildPhase = ''
rustc $src/artiq/test/libartiq_support/lib.rs -Cpanic=unwind -g
'';
installPhase = ''
mkdir $out
cp libartiq_support.so $out
'';
};
2021-08-12 12:44:42 +08:00
artiq = pkgs.python3Packages.buildPythonPackage rec {
pname = "artiq";
version = "7.0-dev";
src = self;
2021-08-12 12:44:42 +08:00
preBuild = "export VERSIONEER_OVERRIDE=${version}";
2021-08-12 12:44:42 +08:00
nativeBuildInputs = [ pkgs.qt5.wrapQtAppsHook ];
# keep llvm_x and lld_x in sync with llvmlite
propagatedBuildInputs = [ pkgs.llvm_9 pkgs.lld_9 sipyco pythonparser ]
++ (with pkgs.python3Packages; [ pyqtgraph pygit2 numpy dateutil scipy prettytable pyserial python-Levenshtein h5py pyqt5 qasync llvmlite ]);
2021-08-12 12:44:42 +08:00
dontWrapQtApps = true;
postFixup = ''
wrapQtApp "$out/bin/artiq_dashboard"
wrapQtApp "$out/bin/artiq_browser"
wrapQtApp "$out/bin/artiq_session"
'';
2021-08-12 12:44:42 +08:00
# Modifies PATH to pass the wrapped python environment (i.e. python3.withPackages(...) to subprocesses.
# Allows subprocesses using python to find all packages you have installed
makeWrapperArgs = [
''--run 'if [ ! -z "$NIX_PYTHONPREFIX" ]; then export PATH=$NIX_PYTHONPREFIX/bin:$PATH;fi' ''
"--set FONTCONFIG_FILE ${pkgs.fontconfig.out}/etc/fonts/fonts.conf"
];
2021-08-12 12:44:42 +08:00
# FIXME: automatically propagate lld_9 llvm_9 dependencies
checkInputs = [ pkgs.lld_9 pkgs.llvm_9 pkgs.lit outputcheck ];
checkPhase = ''
python -m unittest discover -v artiq.test
2021-08-12 12:44:42 +08:00
TESTDIR=`mktemp -d`
cp --no-preserve=mode,ownership -R $src/artiq/test/lit $TESTDIR
# FIXME: some tests fail
#LIBARTIQ_SUPPORT=${libartiq-support}/libartiq_support.so lit -v $TESTDIR/lit
'';
};
2021-08-12 12:44:42 +08:00
};
defaultPackage.x86_64-linux = pkgs.python3.withPackages(ps: [ packages.x86_64-linux.artiq ]);
};
2021-08-12 15:22:23 +08:00
nixConfig = {
binaryCachePublicKeys = ["nixbld.m-labs.hk-1:5aSRVA5b320xbNvu30tqxVPXpld73bhtOeH6uAjRyHc="];
binaryCaches = ["https://nixbld.m-labs.hk" "https://cache.nixos.org"];
};
2021-08-12 12:44:42 +08:00
}