Skip to content

Commit

Permalink
feat: switch to new Darwin SDK
Browse files Browse the repository at this point in the history
Signed-off-by: Roman Volosatovs <[email protected]>
  • Loading branch information
rvolosatovs committed Oct 21, 2024
1 parent f9e6192 commit 0ef8f4d
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 93 deletions.
28 changes: 14 additions & 14 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
inputs.nix-filter.url = "github:numtide/nix-filter";
inputs.nix-log.url = "github:rvolosatovs/nix-log";
inputs.nixlib.url = "github:nix-community/nixpkgs.lib";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
inputs.nixpkgs.url = "github:nixos/nixpkgs/staging";
inputs.rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
inputs.rust-overlay.url = "github:oxalica/rust-overlay";

Expand Down
107 changes: 29 additions & 78 deletions lib/rust/mkAttrs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -302,23 +302,6 @@ with self.lib.rust.targets;

buildInputs = optional final.stdenv.buildPlatform.isDarwin final.darwin.apple_sdk.frameworks.Security;

crossZigCC = let
target' =
if target == aarch64-apple-darwin
then "aarch64-macos"
else if target == aarch64-apple-ios
then "aarch64-ios"
else if target == x86_64-apple-darwin
then "x86_64-macos"
else throw "unsupported target ${target}";
in
# NOTE: Prior art:
# https://actually.fyi/posts/zig-makes-rust-cross-compilation-just-work
# https://github.com/rust-cross/cargo-zigbuild
final.writeShellScriptBin "${target}-zigcc" ''
${final.zig}/bin/zig cc ${optionalString pkgsCross.stdenv.buildPlatform.isDarwin ''--sysroot="$SDKROOT" -I"$SDKROOT/usr/include" -L"$SDKROOT/usr/lib" -F"$SDKROOT/System/Library/Frameworks"''} $@ -target ${target'}
'';

targetArgs =
{
inherit
Expand All @@ -342,68 +325,36 @@ with self.lib.rust.targets;
# Use `rust-lld` linker for Darwin targets
"CARGO_TARGET_${toUpper (kebab2snake target)}_LINKER" = "rust-lld";
}
// (
if final.stdenv.buildPlatform.isDarwin && pkgsCross.stdenv.hostPlatform.isDarwin
then {
# use defaults for Darwin-to-Darwin builds
}
# Use Zig C compiler and `rust-lld` linker for Darwin targets on non-Darwin platforms
else if pkgsCross.stdenv.hostPlatform.isDarwin
then {
depsBuildBuild = [
crossZigCC
];

disallowedReferences = [
crossZigCC
];

preBuild =
''
export HOME=$(mktemp -d)
''
+ optionalString pkgsCross.stdenv.hostPlatform.isDarwin ''
export SDKROOT="${macos-sdk}"
'';

"CC_${target}" = "${target}-zigcc";

"CARGO_TARGET_${toUpper (kebab2snake target)}_LINKER" = "rust-lld";
}
else
(
{
depsBuildBuild =
[
pkgsCross.stdenv.cc
]
++ optional pkgsCross.stdenv.hostPlatform.isWindows pkgsCross.windows.pthreads;

disallowedReferences = [
pkgsCross.stdenv.cc
];

"AR_${target}" = "${pkgsCross.stdenv.cc.targetPrefix}ar";
"CC_${target}" = "${pkgsCross.stdenv.cc.targetPrefix}cc";
}
# Use `mold` linker for Linux targets
// optionalAttrs pkgsCross.stdenv.hostPlatform.isLinux {
nativeBuildInputs = [
final.mold
];
// {
depsBuildBuild =
[
pkgsCross.stdenv.cc
]
++ optional pkgsCross.stdenv.hostPlatform.isWindows pkgsCross.windows.pthreads;

disallowedReferences = [
pkgsCross.stdenv.cc
];

"AR_${target}" = "${pkgsCross.stdenv.cc.targetPrefix}ar";
"CC_${target}" = "${pkgsCross.stdenv.cc.targetPrefix}cc";
}
# Use `mold` linker for Linux targets
// optionalAttrs pkgsCross.stdenv.hostPlatform.isLinux {
nativeBuildInputs = [
final.mold
];

"CARGO_TARGET_${toUpper (kebab2snake target)}_RUSTFLAGS" = "-Clink-arg=-fuse-ld=mold";
}
# Always build static binaries for Windows targets
// optionalAttrs pkgsCross.stdenv.hostPlatform.isWindows {
"CARGO_TARGET_${toUpper (kebab2snake target)}_RUSTFLAGS" = "-Ctarget-feature=+crt-static";
}
# Use default linker for Wasm targets
// optionalAttrs (!pkgsCross.stdenv.hostPlatform.isWasm) {
"CARGO_TARGET_${toUpper (kebab2snake target)}_LINKER" = "${pkgsCross.stdenv.cc.targetPrefix}cc";
}
)
)
"CARGO_TARGET_${toUpper (kebab2snake target)}_RUSTFLAGS" = "-Clink-arg=-fuse-ld=mold";
}
# Always build static binaries for Windows targets
// optionalAttrs pkgsCross.stdenv.hostPlatform.isWindows {
"CARGO_TARGET_${toUpper (kebab2snake target)}_RUSTFLAGS" = "-Ctarget-feature=+crt-static";
}
# Use default linker for Wasm targets
// optionalAttrs (!pkgsCross.stdenv.hostPlatform.isWasm) {
"CARGO_TARGET_${toUpper (kebab2snake target)}_LINKER" = "${pkgsCross.stdenv.cc.targetPrefix}cc";
}
// optionalAttrs (final.stdenv.buildPlatform.config != pkgsCross.stdenv.hostPlatform.config) (
{
strictDeps = true;
Expand Down

0 comments on commit 0ef8f4d

Please sign in to comment.