forked from M-Labs/nac3
support both 32 and 64 bit
This commit is contained in:
parent
2237137f1a
commit
966f50194f
|
@ -3,6 +3,7 @@ name = "nac3standalone"
|
|||
version = "0.1.0"
|
||||
authors = ["M-Labs"]
|
||||
edition = "2021"
|
||||
build = "build.rs"
|
||||
|
||||
[dependencies]
|
||||
parking_lot = "0.12"
|
||||
|
|
|
@ -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();
|
||||
}
|
|
@ -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"
|
|
@ -0,0 +1,42 @@
|
|||
|
||||
{ pkgsPath ? <nixpkgs>, 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)}
|
||||
'';
|
||||
}
|
Binary file not shown.
Binary file not shown.
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue