From 8317dbd1cb32eaeafa509e7142766f3d9a82de5f Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Fri, 26 Nov 2021 16:08:44 +0100 Subject: macos: detect SDK path and version, then pass to the linker Since we are already detecting the path to the native SDK, if available, also fetch SDK's version and route that to the linker. The linker can then use it to correctly populate LC_BUILD_VERSION load command. --- src/Compilation.zig | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index 0d299d6572..ac25519190 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -773,8 +773,8 @@ pub const InitOptions = struct { wasi_exec_model: ?std.builtin.WasiExecModel = null, /// (Zig compiler development) Enable dumping linker's state as JSON. enable_link_snapshots: bool = false, - /// (Darwin). Path to native macOS SDK if detected. - native_macos_sdk_path: ?[]const u8 = null, + /// (Darwin) Path and version of the native SDK if detected. + native_darwin_sdk: ?std.zig.system.darwin.DarwinSDK = null, }; fn addPackageTableToCacheHash( @@ -967,8 +967,8 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation { const sysroot = blk: { if (options.sysroot) |sysroot| { break :blk sysroot; - } else if (options.native_macos_sdk_path) |sdk_path| { - break :blk sdk_path; + } else if (options.native_darwin_sdk) |sdk| { + break :blk sdk.path; } else { break :blk null; } @@ -1055,7 +1055,7 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation { link_libc, options.system_lib_names.len != 0 or options.frameworks.len != 0, options.libc_installation, - options.native_macos_sdk_path != null, + options.native_darwin_sdk != null, ); const must_pie = target_util.requiresPIE(options.target); @@ -1492,6 +1492,7 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation { .wasi_exec_model = wasi_exec_model, .use_stage1 = use_stage1, .enable_link_snapshots = options.enable_link_snapshots, + .native_darwin_sdk = options.native_darwin_sdk, }); errdefer bin_file.destroy(); comp.* = .{ @@ -3829,7 +3830,7 @@ fn detectLibCIncludeDirs( if (link_system_libs and is_native_abi and !target.isMinGW()) { if (target.isDarwin()) { return if (has_macos_sdk) - // For Darwin/macOS, we are all set with getSDKPath found earlier. + // For Darwin/macOS, we are all set with getDarwinSDK found earlier. LibCDirs{ .libc_include_dir_list = &[0][]u8{}, .libc_installation = null, @@ -3846,7 +3847,14 @@ fn detectLibCIncludeDirs( // default if possible. if (target_util.canBuildLibC(target)) { switch (target.os.tag) { - .macos => return getZigShippedLibCIncludeDirsDarwin(arena, zig_lib_dir, target), + .macos => return if (has_macos_sdk) + // For Darwin/macOS, we are all set with getDarwinSDK found earlier. + LibCDirs{ + .libc_include_dir_list = &[0][]u8{}, + .libc_installation = null, + } + else + getZigShippedLibCIncludeDirsDarwin(arena, zig_lib_dir, target), else => { const generic_name = target_util.libCGenericName(target); // Some architectures are handled by the same set of headers. -- cgit v1.2.3