Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions checks/workspace-cross-compile/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,16 @@ let
"scripts"
];

buildInputs = pkgs: [
pkgs.openssl
];

nativeBuildInputs = pkgs: [
pkgs.pkgsBuildTarget.pkg-config
];

multiOutput =
(flakeboxLib.craneMultiBuild { })
(flakeboxLib.craneMultiBuild { inherit buildInputs; inherit nativeBuildInputs; })
(craneLib':
let
src = flakeboxLib.filterSubPaths {
Expand All @@ -35,14 +43,6 @@ let
pname = "workspace-cross-compile";
version = "0.0.1";
inherit src;

buildInputs = [
pkgs.openssl
];

nativeBuildInputs = [
pkgs.pkg-config
];
}).overrideArgsDepsOnly {
cargoVendorDir = craneLib'.vendorCargoDeps {
inherit src;
Expand Down Expand Up @@ -119,9 +119,13 @@ pkgs.linkFarmFromDrvs "workspace-non-rust" (
] ++
lib.optionals (full && pkgs.stdenv.isLinux) [
multiOutput.aarch64-linux.ci.workspaceBuild
multiOutput.aarch64-linux-musl.ci.workspaceBuild
multiOutput.x86_64-linux.ci.workspaceBuild
multiOutput.x86_64-linux-musl.ci.workspaceBuild
multiOutput.i686-linux.ci.workspaceBuild
multiOutput.i686-linux-musl.ci.workspaceBuild
multiOutput.riscv64-linux.ci.workspaceBuild
multiOutput.mingw64.ci.workspaceBuild
] ++
# in full mode, when supported, test all android targets
lib.optionals (full && multiOutput ? aarch64-android) [
Expand Down
23 changes: 16 additions & 7 deletions lib/craneMultiBuild.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,25 @@
, mkTarget
, mkStdToolchains
, lib
,
}:
let craneLib' = craneLib; in
{ toolchains ? mkStdToolchains { }
let
craneLib' = craneLib;
in
{ buildInputs ? pkgs: [ ]
, nativeBuildInputs ? pkgs: [ ]
, profiles ? [ "dev" "ci" "release" ]
, craneLib ? craneLib'
}: outputsFn:
, toolchains ? null
,
}:
let
argToolchains = if toolchains != null then toolchains else (mkStdToolchains { inherit buildInputs nativeBuildInputs; });
in
outputsFn:
let
profilesFn = craneLib: craneLib.mapWithProfiles outputsFn profiles;
in
(mapWithToolchains outputsFn { default = toolchains.default; }).default //
(mapWithToolchains profilesFn { default = toolchains.default; }).default //
(mapWithToolchains profilesFn toolchains)

(mapWithToolchains outputsFn { default = argToolchains.default; }).default
// (mapWithToolchains profilesFn { default = argToolchains.default; }).default
// (mapWithToolchains profilesFn argToolchains)
3 changes: 2 additions & 1 deletion lib/mkFenixToolchain.nix
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ in
, clang-unwrapped ? defaultClangUnwrapped
, stdenv ? defaultStdenv
, isLintShell ? false
, craneArgs ? { }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this really needed? I thought we'd just modify mergeArgs to scan through buildInputs and buildNativeInputs and apply pkgs over functions there.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did try the mergeArgs route but it was a pain passing the buildInputs and nativeBuildInputs across different targets.
Resolving the packages as early as possible to pass it directly to mkFenixToolchain ended up working smoothly

}:
let
mergeTargets = targetFn: prev:
Expand Down Expand Up @@ -71,7 +72,7 @@ let
} else { };

# this can't be a method on `craneLib` because it basically constructs the `craneLib`
craneLib = (enhanceCrane ((crane.mkLib pkgs).overrideToolchain toolchain)).overrideArgs ((mergeArgs commonArgs buildArgs) // { inherit stdenv; });
craneLib = (enhanceCrane ((crane.mkLib pkgs).overrideToolchain toolchain)).overrideArgs ((mergeArgs ((mergeArgs commonArgs buildArgs) // { inherit stdenv; }) craneArgs));
in
{
inherit toolchain;
Expand Down
118 changes: 94 additions & 24 deletions lib/mkStdTargets.nix
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,27 @@
};

args = {
CFLAGS_aarch64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CPPFLAGS_aarch64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CXXFLAGS_aarch64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CFLAGS_aarch64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CPPFLAGS_aarch64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CXXFLAGS_aarch64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
};
};

aarch64-linux-musl = mkClangTarget {
target = "aarch64-unknown-linux-musl";
clang = pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.llvmPackages.clang;
binPrefix = "aarch64-unknown-linux-musl-";
llvmConfigPkg = targetLlvmConfigWrapper {
clangPkg = pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.llvmPackages.clang-unwrapped;
libClangPkg = pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.llvmPackages.clang-unwrapped.lib;
};

args = {
CFLAGS_aarch64_unknown_linux_musl = "-I ${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CPPFLAGS_aarch64_unknown_linux_musl = "-I ${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CXXFLAGS_aarch64_unknown_linux_musl = "-I ${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_musl = "-I ${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
};
};

Expand All @@ -46,10 +63,27 @@
};

args = {
CFLAGS_x86_64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CPPFLAGS_x86_64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CXXFLAGS_x86_64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CFLAGS_x86_64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CPPFLAGS_x86_64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CXXFLAGS_x86_64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
};
};

x86_64-linux-musl = mkClangTarget {
target = "x86_64-unknown-linux-musl";
clang = pkgs.pkgsCross.musl64.buildPackages.llvmPackages.clang;
binPrefix = "x86_64-unknown-linux-musl-";
llvmConfigPkg = targetLlvmConfigWrapper {
clangPkg = pkgs.pkgsCross.musl64.buildPackages.llvmPackages.clang-unwrapped;
libClangPkg = pkgs.pkgsCross.musl64.buildPackages.llvmPackages.clang-unwrapped.lib;
};

args = {
CFLAGS_x86_64_unknown_linux_musl = "-I ${pkgs.pkgsCross.musl64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CPPFLAGS_x86_64_unknown_linux_musl = "-I ${pkgs.pkgsCross.musl64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CXXFLAGS_x86_64_unknown_linux_musl = "-I ${pkgs.pkgsCross.musl64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_linux_musl = "-I ${pkgs.pkgsCross.musl64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
};
};

Expand All @@ -63,10 +97,27 @@
};

args = {
CFLAGS_i686_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CPPFLAGS_i686_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CXXFLAGS_i686_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
BINDGEN_EXTRA_CLANG_ARGS_i686_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CFLAGS_i686_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CPPFLAGS_i686_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CXXFLAGS_i686_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
BINDGEN_EXTRA_CLANG_ARGS_i686_unknown_linux_gnu = "-I ${pkgs.pkgsCross.gnu32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
};
};

i686-linux-musl = mkClangTarget {
target = "i686-unknown-linux-musl";
clang = pkgs.pkgsCross.musl32.buildPackages.llvmPackages.clang;
binPrefix = "i686-unknown-linux-musl-";
llvmConfigPkg = targetLlvmConfigWrapper {
clangPkg = pkgs.pkgsCross.musl32.buildPackages.llvmPackages.clang-unwrapped;
libClangPkg = pkgs.pkgsCross.musl32.buildPackages.llvmPackages.clang-unwrapped.lib;
};

args = {
CFLAGS_i686_unknown_linux_musl = "-I ${pkgs.pkgsCross.musl32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CPPFLAGS_i686_unknown_linux_musl = "-I ${pkgs.pkgsCross.musl32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CXXFLAGS_i686_unknown_linux_musl = "-I ${pkgs.pkgsCross.musl32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
BINDGEN_EXTRA_CLANG_ARGS_i686_unknown_linux_musl = "-I ${pkgs.pkgsCross.musl32.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
};
};

Expand All @@ -80,10 +131,29 @@
};

args = {
CFLAGS_riscv64gc_unknown_linux_gnu = "-I ${pkgs.pkgsCross.riscv64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CPPFLAGS_riscv64gc_unknown_linux_gnu = "-I ${pkgs.pkgsCross.riscv64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CXXFLAGS_riscv64gc_unknown_linux_gnu = "-I ${pkgs.pkgsCross.riscv64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
BINDGEN_EXTRA_CLANG_ARGS_riscv64gc_unknown_linux_gnu = "-I ${pkgs.pkgsCross.riscv64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CFLAGS_riscv64gc_unknown_linux_gnu = "-I ${pkgs.pkgsCross.riscv64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CPPFLAGS_riscv64gc_unknown_linux_gnu = "-I ${pkgs.pkgsCross.riscv64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CXXFLAGS_riscv64gc_unknown_linux_gnu = "-I ${pkgs.pkgsCross.riscv64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
BINDGEN_EXTRA_CLANG_ARGS_riscv64gc_unknown_linux_gnu = "-I ${pkgs.pkgsCross.riscv64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
};
};

mingw64 = mkClangTarget rec {
target = "x86_64-pc-windows-gnu";
clang = pkgs.pkgsCross.mingwW64.buildPackages.llvmPackages.clang;
binPrefix = "x86_64-w64-mingw32-";
llvmConfigPkg = targetLlvmConfigWrapper {
clangPkg = pkgs.pkgsCross.mingwW64.buildPackages.llvmPackages.clang-unwrapped;
libClangPkg = pkgs.pkgsCross.mingwW64.buildPackages.llvmPackages.clang-unwrapped.lib;
};

args = {
CFLAGS_x86_64_pc_windows_gnu = "-I ${pkgs.pkgsCross.mingwW64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CPPFLAGS_x86_64_pc_windows_gnu = "-I ${pkgs.pkgsCross.mingwW64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CXXFLAGS_x86_64_pc_windows_gnu = "-I ${pkgs.pkgsCross.mingwW64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
BINDGEN_EXTRA_CLANG_ARGS_x86_64_pc_windows_gnu = "-I ${pkgs.pkgsCross.mingwW64.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
# compressed debug section support only when building on Linux
CARGO_TARGET_X86_64_PC_WINDOWS_GNU_RUSTFLAGS = "-C link-arg=-fuse-ld=${clang}/bin/${binPrefix}ld -C link-arg=-Wl";
};
};
} // {
Expand Down Expand Up @@ -149,10 +219,10 @@
};

args = {
CFLAGS_aarch64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.aarch64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CPPFLAGS_aarch64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.aarch64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CXXFLAGS_aarch64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.aarch64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.aarch64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CFLAGS_aarch64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.aarch64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CPPFLAGS_aarch64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.aarch64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CXXFLAGS_aarch64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.aarch64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.aarch64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
};
};

Expand All @@ -167,10 +237,10 @@
};

args = {
CFLAGS_x86_64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.x86_64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CPPFLAGS_x86_64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.x86_64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CXXFLAGS_x86_64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.x86_64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.x86_64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/16/include/";
CFLAGS_x86_64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.x86_64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CPPFLAGS_x86_64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.x86_64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
CXXFLAGS_x86_64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.x86_64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_darwin_gnu = "-I ${pkgs.pkgsCross.x86_64-darwin.buildPackages.llvmPackages.clang-unwrapped.lib}/lib/clang/17/include/";
};
};
} // lib.optionalAttrs (pkgs.stdenv.isDarwin) {
Expand Down
Loading