Commit 7f5c96378d

Jakub Konka <kubkon@jakubkonka.com>
2020-11-02 18:36:51
Refactor the code according to Andrew's suggestions
1 parent 317c555
Changed files (4)
lib/std/zig/system/macos.zig
@@ -461,7 +461,7 @@ test "version_from_build" {
 /// The caller needs to free the resulting path slice.
 pub fn getSDKPath(allocator: *mem.Allocator) ![]u8 {
     assert(std.Target.current.isDarwin());
-    const argv = &[_][]const u8{ "/usr/bin/xcrun", "--show-sdk-path" };
+    const argv = &[_][]const u8{ "xcrun", "--show-sdk-path" };
     const result = try std.ChildProcess.exec(.{ .allocator = allocator, .argv = argv });
     defer {
         allocator.free(result.stderr);
lib/std/build.zig
@@ -1207,7 +1207,6 @@ pub const LibExeObjStep = struct {
     name_only_filename: []const u8,
     strip: bool,
     lib_paths: ArrayList([]const u8),
-    syslibroot: ?[]const u8 = null,
     framework_dirs: ArrayList([]const u8),
     frameworks: BufSet,
     verbose_link: bool,
@@ -1842,10 +1841,6 @@ pub const LibExeObjStep = struct {
         self.lib_paths.append(self.builder.dupe(path)) catch unreachable;
     }
 
-    pub fn addSyslibroot(self: *LibExeObjStep, path: []const u8) void {
-        self.syslibroot = path;
-    }
-
     pub fn addFrameworkDir(self: *LibExeObjStep, dir_path: []const u8) void {
         self.framework_dirs.append(self.builder.dupe(dir_path)) catch unreachable;
     }
@@ -1920,18 +1915,11 @@ pub const LibExeObjStep = struct {
             }
         }
 
-        if (self.target.isDarwin()) {
-            // Inherit syslibroot
-            if (other.syslibroot) |path| {
-                self.syslibroot = path;
-            }
-
-            // Inherit dependencies on darwin frameworks
-            if (!other.isDynamicLibrary()) {
-                var it = other.frameworks.iterator();
-                while (it.next()) |entry| {
-                    self.frameworks.put(entry.key) catch unreachable;
-                }
+        // Inherit dependencies on darwin frameworks
+        if (self.target.isDarwin() and !other.isDynamicLibrary()) {
+            var it = other.frameworks.iterator();
+            while (it.next()) |entry| {
+                self.frameworks.put(entry.key) catch unreachable;
             }
         }
     }
@@ -2283,18 +2271,6 @@ pub const LibExeObjStep = struct {
         }
 
         if (self.target.isDarwin()) {
-            if (self.syslibroot) |path| {
-                try zig_args.append("-syslibroot");
-                try zig_args.append(path);
-            } else {
-                if (self.target.isNative()) {
-                    const syslibroot = try std.zig.system.getSDKPath(builder.allocator);
-                    errdefer builder.allocator.free(syslibroot);
-                    try zig_args.append("-syslibroot");
-                    try zig_args.append(syslibroot);
-                }
-            }
-
             for (self.framework_dirs.span()) |dir| {
                 try zig_args.append("-F");
                 try zig_args.append(dir);
src/Compilation.zig
@@ -333,7 +333,6 @@ pub const InitOptions = struct {
     keep_source_files_loaded: bool = false,
     clang_argv: []const []const u8 = &[0][]const u8{},
     lld_argv: []const []const u8 = &[0][]const u8{},
-    syslibroot: ?[]const u8 = null,
     lib_dirs: []const []const u8 = &[0][]const u8{},
     rpath_list: []const []const u8 = &[0][]const u8{},
     c_source_files: []const CSourceFile = &[0]CSourceFile{},
@@ -473,6 +472,11 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation {
             break :blk false;
         };
 
+        const syslibroot = if (use_lld and options.is_native_os and options.target.isDarwin()) blk: {
+            const syslibroot_path = try std.zig.system.getSDKPath(arena);
+            break :blk syslibroot_path;
+        } else null;
+
         const link_libc = options.link_libc or target_util.osRequiresLibC(options.target);
 
         const must_dynamic_link = dl: {
@@ -774,7 +778,7 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation {
             .frameworks = options.frameworks,
             .framework_dirs = options.framework_dirs,
             .system_libs = system_libs,
-            .syslibroot = options.syslibroot,
+            .syslibroot = syslibroot,
             .lib_dirs = options.lib_dirs,
             .rpath_list = options.rpath_list,
             .strip = strip,
src/main.zig
@@ -315,9 +315,8 @@ const usage_build_generic =
     \\  --subsystem [subsystem]        (windows) /SUBSYSTEM:<subsystem> to the linker\n"
     \\  --stack [size]                 Override default stack size
     \\  --image-base [addr]            Set base address for executable image
-    \\  -syslibroot [dir]              (darwin) prepend a prefix to all search paths
     \\  -framework [name]              (darwin) link against framework
-    \\  -F [dir]                       (darwin) add search path for frameworks
+    \\  -F[dir]                        (darwin) add search path for frameworks
     \\
     \\Test Options:
     \\  --test-filter [text]           Skip tests that do not match filter
@@ -493,7 +492,6 @@ fn buildOutputType(
     var main_pkg_path: ?[]const u8 = null;
     var clang_preprocessor_mode: Compilation.ClangPreprocessorMode = .no;
     var subsystem: ?std.Target.SubSystem = null;
-    var syslibroot: ?[]const u8 = null;
 
     var system_libs = std.ArrayList([]const u8).init(gpa);
     defer system_libs.deinit();
@@ -684,10 +682,6 @@ fn buildOutputType(
                         if (i + 1 >= args.len) fatal("expected parameter after {}", .{arg});
                         i += 1;
                         try lib_dirs.append(args[i]);
-                    } else if (mem.eql(u8, arg, "-syslibroot")) {
-                        if (i + 1 >= args.len) fatal("expected parameter after {}", .{arg});
-                        i += 1;
-                        syslibroot = args[i];
                     } else if (mem.eql(u8, arg, "-F")) {
                         if (i + 1 >= args.len) fatal("expected parameter after {}", .{arg});
                         i += 1;
@@ -1386,12 +1380,6 @@ fn buildOutputType(
         }
     }
 
-    if (cross_target.isNativeOs() and std.Target.current.isDarwin()) {
-        if (syslibroot == null) {
-            syslibroot = try std.zig.system.getSDKPath(arena);
-        }
-    }
-
     const object_format: std.Target.ObjectFormat = blk: {
         const ofmt = target_ofmt orelse break :blk target_info.target.getObjectFormat();
         if (mem.eql(u8, ofmt, "elf")) {
@@ -1640,7 +1628,6 @@ fn buildOutputType(
         .rpath_list = rpath_list.items,
         .c_source_files = c_source_files.items,
         .link_objects = link_objects.items,
-        .syslibroot = syslibroot,
         .framework_dirs = framework_dirs.items,
         .frameworks = frameworks.items,
         .system_libs = system_libs.items,
@@ -2172,7 +2159,6 @@ pub fn cmdBuild(gpa: *Allocator, arena: *Allocator, args: []const []const u8) !v
         var override_lib_dir: ?[]const u8 = null;
         var override_global_cache_dir: ?[]const u8 = null;
         var override_local_cache_dir: ?[]const u8 = null;
-        var syslibroot: ?[]const u8 = null;
         var child_argv = std.ArrayList([]const u8).init(arena);
 
         const argv_index_exe = child_argv.items.len;
@@ -2214,11 +2200,6 @@ pub fn cmdBuild(gpa: *Allocator, arena: *Allocator, args: []const []const u8) !v
                         override_global_cache_dir = args[i];
                         try child_argv.appendSlice(&[_][]const u8{ arg, args[i] });
                         continue;
-                    } else if (mem.eql(u8, arg, "--syslibroot")) {
-                        if (i + 1 >= args.len) fatal("expected argument after '{}'", .{arg});
-                        i += 1;
-                        syslibroot = args[i];
-                        continue;
                     }
                 }
                 try child_argv.append(arg);
@@ -2324,12 +2305,6 @@ pub fn cmdBuild(gpa: *Allocator, arena: *Allocator, args: []const []const u8) !v
         const cross_target: std.zig.CrossTarget = .{};
         const target_info = try detectNativeTargetInfo(gpa, cross_target);
 
-        if (cross_target.isNativeOs() and target_info.target.isDarwin()) {
-            if (syslibroot == null) {
-                syslibroot = try std.zig.system.getSDKPath(arena);
-            }
-        }
-
         const exe_basename = try std.zig.binNameAlloc(arena, .{
             .root_name = "build",
             .target = target_info.target,
@@ -2353,7 +2328,6 @@ pub fn cmdBuild(gpa: *Allocator, arena: *Allocator, args: []const []const u8) !v
             .target = target_info.target,
             .is_native_os = cross_target.isNativeOs(),
             .dynamic_linker = target_info.dynamic_linker.get(),
-            .syslibroot = syslibroot,
             .output_mode = .Exe,
             .root_pkg = &root_pkg,
             .emit_bin = emit_bin,