diff --git a/checks/workspace-cross-compile/default.nix b/checks/workspace-cross-compile/default.nix index ffa0cd0..c788f88 100644 --- a/checks/workspace-cross-compile/default.nix +++ b/checks/workspace-cross-compile/default.nix @@ -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 { @@ -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; @@ -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) [ diff --git a/lib/craneMultiBuild.nix b/lib/craneMultiBuild.nix index 7f0a55b..7e9481c 100644 --- a/lib/craneMultiBuild.nix +++ b/lib/craneMultiBuild.nix @@ -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) diff --git a/lib/mkFenixToolchain.nix b/lib/mkFenixToolchain.nix index aae7818..f1f073d 100644 --- a/lib/mkFenixToolchain.nix +++ b/lib/mkFenixToolchain.nix @@ -30,6 +30,7 @@ in , clang-unwrapped ? defaultClangUnwrapped , stdenv ? defaultStdenv , isLintShell ? false +, craneArgs ? { } }: let mergeTargets = targetFn: prev: @@ -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; diff --git a/lib/mkStdTargets.nix b/lib/mkStdTargets.nix index e8677e7..ef6ff4c 100644 --- a/lib/mkStdTargets.nix +++ b/lib/mkStdTargets.nix @@ -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/"; }; }; @@ -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/"; }; }; @@ -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/"; }; }; @@ -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"; }; }; } // { @@ -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/"; }; }; @@ -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) { diff --git a/lib/mkStdToolchains.nix b/lib/mkStdToolchains.nix index 0c29c58..04f221d 100644 --- a/lib/mkStdToolchains.nix +++ b/lib/mkStdToolchains.nix @@ -14,16 +14,23 @@ , libclang ? defaultLibClang , clang-unwrapped ? defaultClangUnwrapped , stdenv ? defaultStdenv +, buildInputs ? pkgs: [ ] +, nativeBuildInputs ? pkgs: [ ] , ... -}@args: +}@oldArgs: let stdTargets = mkStdTargets { }; + args = removeAttrs oldArgs [ "buildInputs" "nativeBuildInputs" ]; in { default = mkFenixToolchain (args // { targets = { default = stdTargets.default; }; + craneArgs = { + buildInputs = buildInputs pkgs; + nativeBuildInputs = nativeBuildInputs pkgs; + }; }); nightly = mkFenixToolchain (args // { @@ -31,6 +38,10 @@ in default = stdTargets.default; }; channel = "complete"; + craneArgs = { + buildInputs = buildInputs pkgs; + nativeBuildInputs = nativeBuildInputs pkgs; + }; }); } // lib.optionalAttrs pkgs.stdenv.isLinux { @@ -39,24 +50,84 @@ in targets = { default = stdTargets.aarch64-linux; }; + craneArgs = { + buildInputs = buildInputs pkgs.pkgsCross.aarch64-multiplatform; + nativeBuildInputs = nativeBuildInputs pkgs.pkgsCross.aarch64-multiplatform; + }; + }); + aarch64-linux-musl = mkFenixToolchain (args // { + defaultTarget = "aarch64-unknown-linux-musl"; + targets = { + default = stdTargets.aarch64-linux-musl; + }; + craneArgs = { + buildInputs = buildInputs pkgs.pkgsCross.aarch64-multiplatform-musl; + nativeBuildInputs = nativeBuildInputs pkgs.pkgsCross.aarch64-multiplatform-musl; + }; }); x86_64-linux = mkFenixToolchain (args // { defaultTarget = "x86_64-unknown-linux-gnu"; targets = { x86_64-linux = stdTargets.x86_64-linux; }; + craneArgs = { + buildInputs = buildInputs pkgs.pkgsCross.gnu64; + nativeBuildInputs = nativeBuildInputs pkgs.pkgsCross.gnu64; + }; + }); + x86_64-linux-musl = mkFenixToolchain (args // { + defaultTarget = "x86_64-unknown-linux-musl"; + targets = { + x86_64-linux-musl = stdTargets.x86_64-linux-musl; + }; + craneArgs = { + buildInputs = buildInputs pkgs.pkgsCross.musl64; + nativeBuildInputs = nativeBuildInputs pkgs.pkgsCross.musl64; + }; }); i686-linux = mkFenixToolchain (args // { defaultTarget = "i686-unknown-linux-gnu"; targets = { i686-linux = stdTargets.i686-linux; }; + craneArgs = { + buildInputs = buildInputs pkgs.pkgsCross.gnu32; + nativeBuildInputs = nativeBuildInputs pkgs.pkgsCross.gnu32; + }; + }); + i686-linux-musl = mkFenixToolchain (args // { + defaultTarget = "i686-unknown-linux-musl"; + targets = { + i686-linux = stdTargets.i686-linux-musl; + }; + craneArgs = { + buildInputs = buildInputs pkgs.pkgsCross.musl32; + nativeBuildInputs = nativeBuildInputs pkgs.pkgsCross.musl32; + }; }); riscv64-linux = mkFenixToolchain (args // { defaultTarget = "riscv64gc-unknown-linux-gnu"; targets = { riscv64-linux = stdTargets.riscv64-linux; }; + craneArgs = { + buildInputs = buildInputs pkgs.pkgsCross.riscv64; + nativeBuildInputs = nativeBuildInputs pkgs.pkgsCross.riscv64; + }; + }); + mingw64 = mkFenixToolchain (args // { + defaultTarget = "x86_64-pc-windows-gnu"; + targets = { + mingw64 = stdTargets.mingw64; + }; + craneArgs = { + buildInputs = buildInputs pkgs.pkgsCross.mingwW64; + nativeBuildInputs = nativeBuildInputs pkgs.pkgsCross.mingwW64; + depsBuildBuild = [ + pkgs.pkgsCross.mingwW64.stdenv.cc + pkgs.pkgsCross.mingwW64.windows.pthreads + ]; + }; }); } // { @@ -65,6 +136,10 @@ in targets = { wasm32-unknown = stdTargets.wasm32-unknown; }; + craneArgs = { + buildInputs = buildInputs pkgs.pkgsCross.wasi32; + nativeBuildInputs = nativeBuildInputs pkgs.pkgsCross.wasi32; + }; }); } // lib.optionalAttrs ((args ? androidSdk) || (builtins.hasAttr system android-nixpkgs.sdk)) { @@ -74,24 +149,49 @@ in targets = { aarch64-android = stdTargets.aarch64-android; }; + # FIXME: crossPkgs for aarch64-android-prebuilt are broken for certain packages (e.g. openssl) + # https://github.com/NixOS/nixpkgs/issues/319863 + # we use native pkgs as a fallback + craneArgs = { + buildInputs = buildInputs pkgs; + nativeBuildInputs = nativeBuildInputs pkgs; + }; }; x86_64-android = mkFenixToolchain { defaultTarget = "x86_64-linux-android"; targets = { x86_64-android = stdTargets.x86_64-android; }; + # FIXME: no crossPkgs available + # we use native pkgs as a fallback + craneArgs = { + buildInputs = buildInputs pkgs; + nativeBuildInputs = nativeBuildInputs pkgs; + }; }; i686-android = mkFenixToolchain { defaultTarget = "i686-linux-android"; targets = { i686-android = stdTargets.i686-android; }; + # FIXME: no crossPkgs available, use native pkgs as a fallback + craneArgs = { + buildInputs = buildInputs pkgs; + nativeBuildInputs = nativeBuildInputs pkgs; + }; }; armv7-android = mkFenixToolchain { defaultTarget = "armv7-linux-androideabi"; targets = { armv7-android = stdTargets.armv7-android; }; + # FIXME: crossPkgs for armv7a-android-prebuilt are broken for certain packages (e.g. openssl) + # https://github.com/NixOS/nixpkgs/issues/319863 + # we use native pkgs as a fallback + craneArgs = { + buildInputs = buildInputs pkgs; + nativeBuildInputs = nativeBuildInputs pkgs; + }; }; } // lib.optionalAttrs (pkgs.stdenv.buildPlatform.config == "aarch64-apple-darwin") { @@ -100,6 +200,10 @@ in targets = { aarch64-darwin = stdTargets.aarch64-darwin; }; + craneArgs = { + buildInputs = buildInputs pkgs.pkgsCross.aarch64-darwin; + nativeBuildInputs = nativeBuildInputs pkgs.pkgsCross.aarch64-darwin; + }; }); } // lib.optionalAttrs (pkgs.stdenv.buildPlatform.config == "x86_64-apple-darwin") { @@ -108,5 +212,9 @@ in targets = { x86_64-darwin = stdTargets.x86_64-darwin; }; + craneArgs = { + buildInputs = buildInputs pkgs.pkgsCross.x86_64-darwin; + nativeBuildInputs = nativeBuildInputs pkgs.pkgsCross.x86_64-darwin; + }; }); }