add static cross to x86_64-unknown-linux-musl
This commit is contained in:
parent
3a3cafe912
commit
81ae579b25
3 changed files with 100 additions and 3 deletions
|
@ -42,6 +42,19 @@ ci:
|
||||||
- target
|
- target
|
||||||
- .gitlab-ci.d
|
- .gitlab-ci.d
|
||||||
|
|
||||||
|
static:x86_64-unknown-linux-musl:
|
||||||
|
stage: artifacts
|
||||||
|
image: nixos/nix:2.19.2
|
||||||
|
script:
|
||||||
|
# Push artifacts and build requirements to binary cache
|
||||||
|
- ./bin/nix-build-and-cache .#static-x86_64-unknown-linux-musl
|
||||||
|
|
||||||
|
# Make the output less difficult to find
|
||||||
|
- cp result/bin/conduit conduit
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- conduit
|
||||||
|
|
||||||
oci-image:x86_64-unknown-linux-gnu:
|
oci-image:x86_64-unknown-linux-gnu:
|
||||||
stage: artifacts
|
stage: artifacts
|
||||||
image: nixos/nix:2.19.2
|
image: nixos/nix:2.19.2
|
||||||
|
|
89
flake.nix
89
flake.nix
|
@ -46,13 +46,82 @@
|
||||||
((crane.mkLib pkgs).overrideToolchain toolchain).buildPackage;
|
((crane.mkLib pkgs).overrideToolchain toolchain).buildPackage;
|
||||||
|
|
||||||
nativeBuildInputs = pkgs: [
|
nativeBuildInputs = pkgs: [
|
||||||
pkgs.rustPlatform.bindgenHook
|
# bindgen needs the build platform's libclang. Apparently due to
|
||||||
|
# "splicing weirdness", pkgs.rustPlatform.bindgenHook on its own doesn't
|
||||||
|
# quite do the right thing here.
|
||||||
|
pkgs.buildPackages.rustPlatform.bindgenHook
|
||||||
];
|
];
|
||||||
|
|
||||||
env = pkgs: {
|
env = pkgs: {
|
||||||
ROCKSDB_INCLUDE_DIR = "${pkgs.rocksdb}/include";
|
ROCKSDB_INCLUDE_DIR = "${pkgs.rocksdb}/include";
|
||||||
ROCKSDB_LIB_DIR = "${pkgs.rocksdb}/lib";
|
ROCKSDB_LIB_DIR = "${pkgs.rocksdb}/lib";
|
||||||
};
|
}
|
||||||
|
// pkgs.lib.optionalAttrs pkgs.stdenv.hostPlatform.isStatic {
|
||||||
|
ROCKSDB_STATIC = "";
|
||||||
|
}
|
||||||
|
// {
|
||||||
|
CARGO_BUILD_RUSTFLAGS = let inherit (pkgs) lib stdenv; in
|
||||||
|
lib.concatStringsSep " " ([]
|
||||||
|
++ lib.optionals
|
||||||
|
# This disables PIE for static builds, which isn't great in terms
|
||||||
|
# of security. Unfortunately, my hand is forced because nixpkgs'
|
||||||
|
# `libstdc++.a` is built without `-fPIE`, which precludes us from
|
||||||
|
# leaving PIE enabled.
|
||||||
|
stdenv.hostPlatform.isStatic
|
||||||
|
["-C" "relocation-model=static"]
|
||||||
|
++ lib.optionals
|
||||||
|
(stdenv.buildPlatform.config != pkgs.stdenv.hostPlatform.config)
|
||||||
|
["-l" "c"]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
# What follows is stolen from [here][0]. Its purpose is to properly
|
||||||
|
# configure compilers and linkers for various stages of the build, and
|
||||||
|
# even covers the case of build scripts that need native code compiled and
|
||||||
|
# run on the build platform (I think).
|
||||||
|
#
|
||||||
|
# [0]: https://github.com/NixOS/nixpkgs/blob/612f97239e2cc474c13c9dafa0df378058c5ad8d/pkgs/build-support/rust/lib/default.nix#L64-L78
|
||||||
|
// (
|
||||||
|
let
|
||||||
|
inherit (pkgs.rust.lib) envVars;
|
||||||
|
in
|
||||||
|
pkgs.lib.optionalAttrs
|
||||||
|
(pkgs.stdenv.targetPlatform.rust.rustcTarget
|
||||||
|
!= pkgs.stdenv.hostPlatform.rust.rustcTarget)
|
||||||
|
(
|
||||||
|
let
|
||||||
|
inherit (pkgs.stdenv.targetPlatform.rust) cargoEnvVarTarget;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"CC_${cargoEnvVarTarget}" = envVars.ccForTarget;
|
||||||
|
"CXX_${cargoEnvVarTarget}" = envVars.cxxForTarget;
|
||||||
|
"CARGO_TARGET_${cargoEnvVarTarget}_LINKER" =
|
||||||
|
envVars.linkerForTarget;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
// (
|
||||||
|
let
|
||||||
|
inherit (pkgs.stdenv.hostPlatform.rust) cargoEnvVarTarget rustcTarget;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"CC_${cargoEnvVarTarget}" = envVars.ccForHost;
|
||||||
|
"CXX_${cargoEnvVarTarget}" = envVars.cxxForHost;
|
||||||
|
"CARGO_TARGET_${cargoEnvVarTarget}_LINKER" = envVars.linkerForHost;
|
||||||
|
CARGO_BUILD_TARGET = rustcTarget;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
// (
|
||||||
|
let
|
||||||
|
inherit (pkgs.stdenv.buildPlatform.rust) cargoEnvVarTarget;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"CC_${cargoEnvVarTarget}" = envVars.ccForBuild;
|
||||||
|
"CXX_${cargoEnvVarTarget}" = envVars.cxxForBuild;
|
||||||
|
"CARGO_TARGET_${cargoEnvVarTarget}_LINKER" = envVars.linkerForBuild;
|
||||||
|
HOST_CC = "${pkgs.buildPackages.stdenv.cc}/bin/cc";
|
||||||
|
HOST_CXX = "${pkgs.buildPackages.stdenv.cc}/bin/c++";
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
package = pkgs: builder pkgs {
|
package = pkgs: builder pkgs {
|
||||||
src = nix-filter {
|
src = nix-filter {
|
||||||
|
@ -96,7 +165,21 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
} // builtins.listToAttrs (
|
||||||
|
builtins.map
|
||||||
|
(crossSystem: {
|
||||||
|
name = "static-${crossSystem}";
|
||||||
|
value = package (import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
crossSystem = {
|
||||||
|
config = crossSystem;
|
||||||
|
};
|
||||||
|
}).pkgsStatic;
|
||||||
|
})
|
||||||
|
[
|
||||||
|
"x86_64-unknown-linux-musl"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
devShells.default = pkgsHost.mkShell {
|
devShells.default = pkgsHost.mkShell {
|
||||||
env = env pkgsHost // {
|
env = env pkgsHost // {
|
||||||
|
|
|
@ -17,4 +17,5 @@ components = [
|
||||||
]
|
]
|
||||||
targets = [
|
targets = [
|
||||||
"x86_64-unknown-linux-gnu",
|
"x86_64-unknown-linux-gnu",
|
||||||
|
"x86_64-unknown-linux-musl",
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue