Merge pull request #99050 from lopsided98/buildrustcrate-cross

buildRustCrate: support cross compilation
This commit is contained in:
John Ericson 2020-09-29 00:13:26 -04:00 committed by GitHub
commit cffc0eaa98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 13 deletions

View File

@ -4,7 +4,8 @@
# This can be useful for deploying packages with NixOps, and to share # This can be useful for deploying packages with NixOps, and to share
# binary dependencies between projects. # binary dependencies between projects.
{ lib, stdenv, defaultCrateOverrides, fetchCrate, rustc, rust, cargo, jq }: { lib, stdenv, defaultCrateOverrides, fetchCrate, pkgsBuildBuild, rustc, rust
, cargo, jq }:
let let
# This doesn't appear to be officially documented anywhere yet. # This doesn't appear to be officially documented anywhere yet.
@ -83,6 +84,8 @@ in
# A list of rust/cargo features to enable while building the crate. # A list of rust/cargo features to enable while building the crate.
# Example: [ "std" "async" ] # Example: [ "std" "async" ]
, features , features
# Additional native build inputs for building this crate.
, nativeBuildInputs
# Additional build inputs for building this crate. # Additional build inputs for building this crate.
# #
# Example: [ pkgs.openssl ] # Example: [ pkgs.openssl ]
@ -188,12 +191,13 @@ let crate = crate_ // (lib.attrByPath [ crate_.crateName ] (attr: {}) crateOverr
dependencies_ = dependencies; dependencies_ = dependencies;
buildDependencies_ = buildDependencies; buildDependencies_ = buildDependencies;
processedAttrs = [ processedAttrs = [
"src" "buildInputs" "crateBin" "crateLib" "libName" "libPath" "src" "nativeBuildInputs" "buildInputs" "crateBin" "crateLib" "libName" "libPath"
"buildDependencies" "dependencies" "features" "crateRenames" "buildDependencies" "dependencies" "features" "crateRenames"
"crateName" "version" "build" "authors" "colors" "edition" "crateName" "version" "build" "authors" "colors" "edition"
"buildTests" "buildTests"
]; ];
extraDerivationAttrs = builtins.removeAttrs crate processedAttrs; extraDerivationAttrs = builtins.removeAttrs crate processedAttrs;
nativeBuildInputs_ = nativeBuildInputs;
buildInputs_ = buildInputs; buildInputs_ = buildInputs;
extraRustcOpts_ = extraRustcOpts; extraRustcOpts_ = extraRustcOpts;
buildTests_ = buildTests; buildTests_ = buildTests;
@ -225,7 +229,8 @@ stdenv.mkDerivation (rec {
src = crate.src or (fetchCrate { inherit (crate) crateName version sha256; }); src = crate.src or (fetchCrate { inherit (crate) crateName version sha256; });
name = "rust_${crate.crateName}-${crate.version}${lib.optionalString buildTests_ "-test"}"; name = "rust_${crate.crateName}-${crate.version}${lib.optionalString buildTests_ "-test"}";
version = crate.version; version = crate.version;
depsBuildBuild = [ rust stdenv.cc cargo jq ]; depsBuildBuild = [ pkgsBuildBuild.stdenv.cc ];
nativeBuildInputs = [ rust stdenv.cc cargo jq ] ++ (crate.nativeBuildInputs or []) ++ nativeBuildInputs_;
buildInputs = (crate.buildInputs or []) ++ buildInputs_; buildInputs = (crate.buildInputs or []) ++ buildInputs_;
dependencies = map lib.getLib dependencies_; dependencies = map lib.getLib dependencies_;
buildDependencies = map lib.getLib buildDependencies_; buildDependencies = map lib.getLib buildDependencies_;
@ -301,6 +306,7 @@ stdenv.mkDerivation (rec {
verbose = crate_.verbose or true; verbose = crate_.verbose or true;
extraRustcOpts = []; extraRustcOpts = [];
features = []; features = [];
nativeBuildInputs = [];
buildInputs = []; buildInputs = [];
crateOverrides = defaultCrateOverrides; crateOverrides = defaultCrateOverrides;
preUnpack = crate_.preUnpack or ""; preUnpack = crate_.preUnpack or "";

View File

@ -16,18 +16,21 @@ in
}; };
libz-sys = attrs: { libz-sys = attrs: {
buildInputs = [ pkgconfig zlib ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ zlib ];
extraLinkFlags = ["-L${zlib.out}/lib"]; extraLinkFlags = ["-L${zlib.out}/lib"];
}; };
curl-sys = attrs: { curl-sys = attrs: {
buildInputs = [ pkgconfig zlib curl ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ zlib curl ];
propagatedBuildInputs = [ curl zlib ]; propagatedBuildInputs = [ curl zlib ];
extraLinkFlags = ["-L${zlib.out}/lib"]; extraLinkFlags = ["-L${zlib.out}/lib"];
}; };
dbus = attrs: { dbus = attrs: {
buildInputs = [ pkgconfig dbus ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ dbus ];
}; };
foundationdb-sys = attrs: { foundationdb-sys = attrs: {
@ -62,19 +65,23 @@ in
libgit2-sys = attrs: { libgit2-sys = attrs: {
LIBGIT2_SYS_USE_PKG_CONFIG = true; LIBGIT2_SYS_USE_PKG_CONFIG = true;
buildInputs = [ pkgconfig openssl zlib libgit2 ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ openssl zlib libgit2 ];
}; };
libsqlite3-sys = attrs: { libsqlite3-sys = attrs: {
buildInputs = [ pkgconfig sqlite ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ sqlite ];
}; };
libssh2-sys = attrs: { libssh2-sys = attrs: {
buildInputs = [ pkgconfig openssl zlib libssh2 ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ openssl zlib libssh2 ];
}; };
libdbus-sys = attrs: { libdbus-sys = attrs: {
buildInputs = [ pkgconfig dbus ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ dbus ];
}; };
openssl = attrs: { openssl = attrs: {
@ -82,11 +89,13 @@ in
}; };
openssl-sys = attrs: { openssl-sys = attrs: {
buildInputs = [ pkgconfig openssl ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ openssl ];
}; };
pq-sys = attr: { pq-sys = attr: {
buildInputs = [ pkgconfig postgresql ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ postgresql ];
}; };
rink = attrs: { rink = attrs: {
@ -103,7 +112,8 @@ in
}; };
thrussh-libsodium = attrs: { thrussh-libsodium = attrs: {
buildInputs = [ pkgconfig libsodium ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ libsodium ];
}; };
xcb = attrs: { xcb = attrs: {