diff --git a/nac3standalone/Cargo.toml b/nac3standalone/Cargo.toml index a55a26b9..7ee7c2de 100644 --- a/nac3standalone/Cargo.toml +++ b/nac3standalone/Cargo.toml @@ -3,6 +3,7 @@ name = "nac3standalone" version = "0.1.0" authors = ["M-Labs"] edition = "2021" +build = "build.rs" [dependencies] parking_lot = "0.12" diff --git a/nac3standalone/build.rs b/nac3standalone/build.rs new file mode 100644 index 00000000..d1b05145 --- /dev/null +++ b/nac3standalone/build.rs @@ -0,0 +1,21 @@ +use std::env; +use std::process::Command; + +fn main() { + const FILE: &str = "demo/linalg/src/lib.rs"; + println!("cargo:rerun-if-changed={FILE}"); + + let current_dir = env::current_dir().unwrap(); + let linalg_dir = current_dir.join("demo").join("linalg"); + + env::set_current_dir(&linalg_dir).unwrap(); + let output = Command::new("nix-build").current_dir(&linalg_dir).output().unwrap(); + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr); + eprintln!("nix-build failed: {}", stderr); + std::process::exit(1); + } + + env::set_current_dir(current_dir).unwrap(); +} diff --git a/nac3standalone/demo/linalg/build.sh b/nac3standalone/demo/linalg/build.sh deleted file mode 100755 index 79a1b916..00000000 --- a/nac3standalone/demo/linalg/build.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -# Uses rustup to compile the linalg library for i386 and x86_84 architecture - -nix-shell -p rustup --command "RUSTC_BOOTSTRAP=1 cargo build -Z unstable-options --target x86_64-unknown-linux-gnu --out-dir liblinalg/x86_64" -nix-shell -p rustup --command "RUSTC_BOOTSTRAP=1 RUSTFLAGS=\"-C target-cpu=i386 -C target-feature=+sse2\" cargo build -Z unstable-options --target i686-unknown-linux-gnu --out-dir liblinalg/i386" diff --git a/nac3standalone/demo/linalg/default.nix b/nac3standalone/demo/linalg/default.nix new file mode 100644 index 00000000..5e83765b --- /dev/null +++ b/nac3standalone/demo/linalg/default.nix @@ -0,0 +1,42 @@ + +{ pkgsPath ? , crossSystem ? null }: + +let + mozOverlay = import ( + builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz + ); + pkgs = import pkgsPath { + overlays = [ mozOverlay ]; + inherit crossSystem; + }; + targets = ["i686-unknown-linux-gnu" "x86_64-unknown-linux-gnu"]; +in +with pkgs; +pkgs.rustPlatform.buildRustPackage { + name = "linalg"; + src = ./.; + cargoLock = { + lockFile = ./Cargo.lock; + }; + + nativeBuildInputs = [ + (buildPackages.buildPackages.latest.rustChannels.stable.rust.override { inherit targets; }) + ]; + + buildPhase = '' + ${builtins.concatStringsSep "\n" (map (target: + '' + cargo build --release --target ${target} + '' + ) targets)} + ''; + + installPhase = '' + mkdir -p $out/lib + ${builtins.concatStringsSep "\n" (map (target: + '' + cp target/${target}/release/liblinalg.a $out/lib/liblinalg-${target}.a + '' + ) targets)} + ''; +} \ No newline at end of file diff --git a/nac3standalone/demo/linalg/liblinalg/i386/liblinalg.a b/nac3standalone/demo/linalg/liblinalg/i386/liblinalg.a deleted file mode 100644 index da16d198..00000000 Binary files a/nac3standalone/demo/linalg/liblinalg/i386/liblinalg.a and /dev/null differ diff --git a/nac3standalone/demo/linalg/liblinalg/x86_64/liblinalg.a b/nac3standalone/demo/linalg/liblinalg/x86_64/liblinalg.a deleted file mode 100644 index 2df9fbe7..00000000 Binary files a/nac3standalone/demo/linalg/liblinalg/x86_64/liblinalg.a and /dev/null differ diff --git a/nac3standalone/demo/run_demo.sh b/nac3standalone/demo/run_demo.sh index 243418c9..50c48abb 100755 --- a/nac3standalone/demo/run_demo.sh +++ b/nac3standalone/demo/run_demo.sh @@ -56,14 +56,14 @@ if [ -z "$i386" ]; then cd linalg && cargo build -q && cd .. clang -c -std=gnu11 -Wall -Wextra -O3 -o demo.o demo.c - clang -lm -Wl,--no-warn-search-mismatch -o demo module.o demo.o linalg/liblinalg/x86_64/liblinalg.a + clang -lm -Wl,--no-warn-search-mismatch -o demo module.o demo.o linalg/result/lib/liblinalg-x86_64-unknown-linux-gnu.a else # Enable SSE2 to avoid rounding errors with X87's 80-bit fp precision computations $nac3standalone --triple i386-pc-linux-gnu --target-features +sse2 "${nac3args[@]}" clang -m32 -c -std=gnu11 -Wall -Wextra -O3 -msse2 -o demo.o demo.c - clang -m32 -lm -Wl,--no-warn-search-mismatch -o demo module.o demo.o linalg/liblinalg/i386/liblinalg.a + clang -m32 -lm -Wl,--no-warn-search-mismatch -o demo module.o demo.o linalg/result/lib/liblinalg-i686-unknown-linux-gnu.a fi if [ -z "$outfile" ]; then