|
|
|
@ -6,15 +6,15 @@ |
|
|
|
|
features ? null, |
|
|
|
|
}: |
|
|
|
|
|
|
|
|
|
with import ./nix/common.nix; |
|
|
|
|
|
|
|
|
|
let |
|
|
|
|
pkgsSrc = import ./nix/pkgs.nix; |
|
|
|
|
newBuildTarget = { |
|
|
|
|
nixPkgsSystem, |
|
|
|
|
rustTarget ? nixPkgsSystem, |
|
|
|
|
depsBuildBuild ? pkgsCross: [], |
|
|
|
|
nativeBuildInputs ? pkgsCross: [], |
|
|
|
|
rustFlags ? pkgsCross: [], |
|
|
|
|
}: { |
|
|
|
|
inherit nixPkgsSystem rustTarget depsBuildBuild; |
|
|
|
|
inherit nixPkgsSystem rustTarget nativeBuildInputs rustFlags; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
# centralize per-target configuration in a single place. |
|
|
|
@ -31,18 +31,19 @@ let |
|
|
|
|
nixPkgsSystem = "aarch64-unknown-linux-musl"; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
# Old Raspberry Pi's |
|
|
|
|
"armv6l-linux" = newBuildTarget { |
|
|
|
|
nixPkgsSystem = "armv6l-unknown-linux-musleabihf"; |
|
|
|
|
rustTarget = "arm-unknown-linux-musleabihf"; |
|
|
|
|
}; |
|
|
|
|
# Old Raspberry Pi's (not currently supported due to linking errors with |
|
|
|
|
# libsqlite3 and libsodium |
|
|
|
|
#"armv6l-linux" = newBuildTarget { |
|
|
|
|
# nixPkgsSystem = "armv6l-unknown-linux-musleabihf"; |
|
|
|
|
# rustTarget = "arm-unknown-linux-musleabihf"; |
|
|
|
|
#}; |
|
|
|
|
|
|
|
|
|
"x86_64-windows" = newBuildTarget { |
|
|
|
|
nixPkgsSystem = "x86_64-w64-mingw32"; |
|
|
|
|
rustTarget = "x86_64-pc-windows-gnu"; |
|
|
|
|
depsBuildBuild = pkgsCross: [ |
|
|
|
|
pkgsCross.stdenv.cc |
|
|
|
|
pkgsCross.windows.pthreads |
|
|
|
|
nativeBuildInputs = pkgsCross: [ pkgsCross.windows.pthreads ]; |
|
|
|
|
rustFlags = pkgsCross: [ |
|
|
|
|
"-C" "link-arg=-L${pkgsCross.windows.pthreads}/lib" |
|
|
|
|
]; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
@ -76,6 +77,7 @@ let |
|
|
|
|
(mkToolchain fenix).rustc |
|
|
|
|
(mkToolchain fenix).rustfmt |
|
|
|
|
(mkToolchain fenix).cargo |
|
|
|
|
(mkToolchain fenix).clippy |
|
|
|
|
(mkToolchain fenix.targets.${rustTarget}).rust-std |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
@ -92,28 +94,6 @@ let |
|
|
|
|
rustc = toolchain; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# TODO build all of these |
|
|
|
|
#build_debug_and_release = (target: { |
|
|
|
|
# debug = (compile { |
|
|
|
|
# inherit system target gitVersion pkgsSrc cargo2nixOverlay; |
|
|
|
|
# release = false; |
|
|
|
|
# }).workspace.garage { compileMode = "build"; }; |
|
|
|
|
|
|
|
|
|
# release = (compile { |
|
|
|
|
# inherit system target gitVersion pkgsSrc cargo2nixOverlay; |
|
|
|
|
# release = true; |
|
|
|
|
# }).workspace.garage { compileMode = "build"; }; |
|
|
|
|
#}); |
|
|
|
|
|
|
|
|
|
#test = (rustPkgs: |
|
|
|
|
# pkgs.symlinkJoin { |
|
|
|
|
# name = "garage-tests"; |
|
|
|
|
# paths = |
|
|
|
|
# builtins.map (key: rustPkgs.workspace.${key} { compileMode = "test"; }) |
|
|
|
|
# (builtins.attrNames rustPkgs.workspace); |
|
|
|
|
# }); |
|
|
|
|
|
|
|
|
|
builtFeatures = if features != null then |
|
|
|
|
features |
|
|
|
|
else ( |
|
|
|
@ -123,7 +103,6 @@ let |
|
|
|
|
"garage/kubernetes-discovery" |
|
|
|
|
"garage/metrics" |
|
|
|
|
"garage/telemetry-otlp" |
|
|
|
|
"garage/lmdb" |
|
|
|
|
"garage/sqlite" |
|
|
|
|
] else [ ] |
|
|
|
|
) |
|
|
|
@ -143,21 +122,20 @@ let |
|
|
|
|
fi |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
in rec { |
|
|
|
|
inherit pkgs pkgsCross; |
|
|
|
|
|
|
|
|
|
# Exported separately so it can be used from shell.nix |
|
|
|
|
buildEnv = rec { |
|
|
|
|
nativeBuildInputs = (buildTarget.depsBuildBuild pkgsCross) ++ [ |
|
|
|
|
nativeBuildInputs = (buildTarget.nativeBuildInputs pkgsCross) ++ [ |
|
|
|
|
toolchain |
|
|
|
|
pkgs.protobuf |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
buildInputs = [ |
|
|
|
|
pkgsCross.stdenv.cc |
|
|
|
|
pkgsCross.windows.pthreads |
|
|
|
|
# Required for shell because of rust dependency build scripts which must |
|
|
|
|
# run on the build system. |
|
|
|
|
pkgs.stdenv.cc |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
OPENSSL_STATIC = "1"; |
|
|
|
|
OPENSSL_LIB_DIR = "${pkgsCross.pkgsStatic.openssl.out}/lib"; |
|
|
|
|
OPENSSL_INCLUDE_DIR = "${pkgsCross.pkgsStatic.openssl.dev}/include"; |
|
|
|
|
|
|
|
|
|
SODIUM_LIB_DIR = "${libsodium}/lib"; |
|
|
|
|
|
|
|
|
|
# Required because ring crate is special. This also seems to have |
|
|
|
@ -167,21 +145,14 @@ let |
|
|
|
|
CARGO_BUILD_TARGET = rustTarget; |
|
|
|
|
CARGO_BUILD_RUSTFLAGS = [ |
|
|
|
|
"-C" "target-feature=+crt-static" |
|
|
|
|
|
|
|
|
|
# -latomic is required to build openssl-sys for armv6l-linux, but |
|
|
|
|
# it doesn't seem to hurt any other builds. |
|
|
|
|
"-C" "link-args=-static -latomic" |
|
|
|
|
"-C" "link-arg=-static" |
|
|
|
|
|
|
|
|
|
# https://github.com/rust-lang/cargo/issues/4133 |
|
|
|
|
"-C" "linker=${TARGET_CC}" |
|
|
|
|
]; |
|
|
|
|
] ++ (buildTarget.rustFlags pkgsCross); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
in { |
|
|
|
|
|
|
|
|
|
inherit pkgs pkgsCross; |
|
|
|
|
|
|
|
|
|
release = naersk.buildPackage (rec { |
|
|
|
|
build = naersk.buildPackage (rec { |
|
|
|
|
inherit release; |
|
|
|
|
|
|
|
|
|
src = ./.; |
|
|
|
@ -192,15 +163,4 @@ in { |
|
|
|
|
"--features=${builtins.concatStringsSep "," builtFeatures}" |
|
|
|
|
]; |
|
|
|
|
} // buildEnv); |
|
|
|
|
|
|
|
|
|
shell = pkgsCross.mkShell buildEnv; |
|
|
|
|
|
|
|
|
|
# TODO |
|
|
|
|
#clippy = { |
|
|
|
|
# amd64 = (compile { |
|
|
|
|
# inherit system gitVersion pkgsSrc cargo2nixOverlay; |
|
|
|
|
# target = "x86_64-unknown-linux-musl"; |
|
|
|
|
# compiler = "clippy"; |
|
|
|
|
# }).workspace.garage { compileMode = "build"; }; |
|
|
|
|
#}; |
|
|
|
|
} |
|
|
|
|