authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2021-06-11 21:09:33+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2021-06-12 14:23:07+03:00
log2b2efa24d08551bdb1ea58a39429bf2a5493b1b4
tree92497139eff4a9001f0413b8eecede8660a2516b
parent05b5e49bc07b7c26dc1eea28d6a4a3a1cb42585e

std.build: don't default to static linkage


4 files changed, 25 insertions(+), 23 deletions(-)

lib/std/build.zig+21-19
...@@ -214,11 +214,11 @@ pub const Builder = struct {...@@ -214,11 +214,11 @@ pub const Builder = struct {
214 }214 }
215215
216 pub fn addExecutable(self: *Builder, name: []const u8, root_src: ?[]const u8) *LibExeObjStep {216 pub fn addExecutable(self: *Builder, name: []const u8, root_src: ?[]const u8) *LibExeObjStep {
217 return addExecutableSource(self, name, convertOptionalPathToFileSource(root_src), .static);217 return addExecutableSource(self, name, convertOptionalPathToFileSource(root_src));
218 }218 }
219219
220 pub fn addExecutableSource(builder: *Builder, name: []const u8, root_src: ?FileSource, linkage: LibExeObjStep.Linkage) *LibExeObjStep {220 pub fn addExecutableSource(builder: *Builder, name: []const u8, root_src: ?FileSource) *LibExeObjStep {
221 return LibExeObjStep.createExecutable(builder, name, root_src, linkage);221 return LibExeObjStep.createExecutable(builder, name, root_src);
222 }222 }
223223
224 pub fn addObject(self: *Builder, name: []const u8, root_src: ?[]const u8) *LibExeObjStep {224 pub fn addObject(self: *Builder, name: []const u8, root_src: ?[]const u8) *LibExeObjStep {
...@@ -1363,7 +1363,7 @@ pub const LibExeObjStep = struct {...@@ -1363,7 +1363,7 @@ pub const LibExeObjStep = struct {
1363 linker_script: ?FileSource = null,1363 linker_script: ?FileSource = null,
1364 version_script: ?[]const u8 = null,1364 version_script: ?[]const u8 = null,
1365 out_filename: []const u8,1365 out_filename: []const u8,
1366 linkage: Linkage,1366 linkage: ?Linkage = null,
1367 version: ?Version,1367 version: ?Version,
1368 build_mode: builtin.Mode,1368 build_mode: builtin.Mode,
1369 kind: Kind,1369 kind: Kind,
...@@ -1517,15 +1517,15 @@ pub const LibExeObjStep = struct {...@@ -1517,15 +1517,15 @@ pub const LibExeObjStep = struct {
1517 }1517 }
15181518
1519 pub fn createObject(builder: *Builder, name: []const u8, root_src: ?FileSource) *LibExeObjStep {1519 pub fn createObject(builder: *Builder, name: []const u8, root_src: ?FileSource) *LibExeObjStep {
1520 return initExtraArgs(builder, name, root_src, .obj, .static, null);1520 return initExtraArgs(builder, name, root_src, .obj, null, null);
1521 }1521 }
15221522
1523 pub fn createExecutable(builder: *Builder, name: []const u8, root_src: ?FileSource, linkage: Linkage) *LibExeObjStep {1523 pub fn createExecutable(builder: *Builder, name: []const u8, root_src: ?FileSource) *LibExeObjStep {
1524 return initExtraArgs(builder, name, root_src, .exe, linkage, null);1524 return initExtraArgs(builder, name, root_src, .exe, null, null);
1525 }1525 }
15261526
1527 pub fn createTest(builder: *Builder, name: []const u8, root_src: FileSource) *LibExeObjStep {1527 pub fn createTest(builder: *Builder, name: []const u8, root_src: FileSource) *LibExeObjStep {
1528 return initExtraArgs(builder, name, root_src, .@"test", .static, null);1528 return initExtraArgs(builder, name, root_src, .@"test", null, null);
1529 }1529 }
15301530
1531 fn initExtraArgs(1531 fn initExtraArgs(
...@@ -1533,7 +1533,7 @@ pub const LibExeObjStep = struct {...@@ -1533,7 +1533,7 @@ pub const LibExeObjStep = struct {
1533 name_raw: []const u8,1533 name_raw: []const u8,
1534 root_src_raw: ?FileSource,1534 root_src_raw: ?FileSource,
1535 kind: Kind,1535 kind: Kind,
1536 linkage: Linkage,1536 linkage: ?Linkage,
1537 ver: ?Version,1537 ver: ?Version,
1538 ) *LibExeObjStep {1538 ) *LibExeObjStep {
1539 const name = builder.dupe(name_raw);1539 const name = builder.dupe(name_raw);
...@@ -1613,15 +1613,15 @@ pub const LibExeObjStep = struct {...@@ -1613,15 +1613,15 @@ pub const LibExeObjStep = struct {
1613 .obj => .Obj,1613 .obj => .Obj,
1614 .exe, .@"test" => .Exe,1614 .exe, .@"test" => .Exe,
1615 },1615 },
1616 .link_mode = switch (self.linkage) {1616 .link_mode = if (self.linkage) |some| @as(std.builtin.LinkMode, switch (some) {
1617 .dynamic => .Dynamic,1617 .dynamic => .Dynamic,
1618 .static => .Static,1618 .static => .Static,
1619 },1619 }) else null,
1620 .version = self.version,1620 .version = self.version,
1621 }) catch unreachable;1621 }) catch unreachable;
16221622
1623 if (self.kind == .lib) {1623 if (self.kind == .lib) {
1624 if (self.linkage == .static) {1624 if (self.linkage != null and self.linkage.? == .static) {
1625 self.out_lib_filename = self.out_filename;1625 self.out_lib_filename = self.out_filename;
1626 } else if (self.version) |version| {1626 } else if (self.version) |version| {
1627 if (target.isDarwin()) {1627 if (target.isDarwin()) {
...@@ -1725,7 +1725,7 @@ pub const LibExeObjStep = struct {...@@ -1725,7 +1725,7 @@ pub const LibExeObjStep = struct {
1725 }1725 }
17261726
1727 pub fn isDynamicLibrary(self: *LibExeObjStep) bool {1727 pub fn isDynamicLibrary(self: *LibExeObjStep) bool {
1728 return self.kind == .lib and self.linkage == .dynamic;1728 return self.kind == .lib and self.linkage != null and self.linkage.? == .dynamic;
1729 }1729 }
17301730
1731 pub fn producesPdbFile(self: *LibExeObjStep) bool {1731 pub fn producesPdbFile(self: *LibExeObjStep) bool {
...@@ -2298,7 +2298,7 @@ pub const LibExeObjStep = struct {...@@ -2298,7 +2298,7 @@ pub const LibExeObjStep = struct {
2298 const full_path_lib = other.getOutputLibSource().getPath(builder);2298 const full_path_lib = other.getOutputLibSource().getPath(builder);
2299 try zig_args.append(full_path_lib);2299 try zig_args.append(full_path_lib);
23002300
2301 if (other.linkage == .dynamic and !self.target.isWindows()) {2301 if (other.linkage != null and other.linkage.? == .dynamic and !self.target.isWindows()) {
2302 if (fs.path.dirname(full_path_lib)) |dirname| {2302 if (fs.path.dirname(full_path_lib)) |dirname| {
2303 try zig_args.append("-rpath");2303 try zig_args.append("-rpath");
2304 try zig_args.append(dirname);2304 try zig_args.append(dirname);
...@@ -2464,15 +2464,17 @@ pub const LibExeObjStep = struct {...@@ -2464,15 +2464,17 @@ pub const LibExeObjStep = struct {
2464 zig_args.append("--name") catch unreachable;2464 zig_args.append("--name") catch unreachable;
2465 zig_args.append(self.name) catch unreachable;2465 zig_args.append(self.name) catch unreachable;
24662466
2467 if (self.kind == .lib and self.linkage == .dynamic) {2467 if (self.linkage) |some| switch (some) {
2468 .dynamic => try zig_args.append("-dynamic"),
2469 .static => try zig_args.append("-static"),
2470 };
2471 if (self.kind == .lib and self.linkage != null and self.linkage.? == .dynamic) {
2468 if (self.version) |version| {2472 if (self.version) |version| {
2469 zig_args.append("--version") catch unreachable;2473 zig_args.append("--version") catch unreachable;
2470 zig_args.append(builder.fmt("{}", .{version})) catch unreachable;2474 zig_args.append(builder.fmt("{}", .{version})) catch unreachable;
2471 }2475 }
2472 }2476 }
2473 if (self.linkage == .dynamic) {2477
2474 try zig_args.append("-dynamic");
2475 }
2476 if (self.bundle_compiler_rt) |x| {2478 if (self.bundle_compiler_rt) |x| {
2477 if (x) {2479 if (x) {
2478 try zig_args.append("-fcompiler-rt");2480 try zig_args.append("-fcompiler-rt");
...@@ -2801,7 +2803,7 @@ pub const LibExeObjStep = struct {...@@ -2801,7 +2803,7 @@ pub const LibExeObjStep = struct {
2801 }2803 }
2802 }2804 }
28032805
2804 if (self.kind == .lib and self.linkage == .dynamic and self.version != null and self.target.wantSharedLibSymLinks()) {2806 if (self.kind == .lib and self.linkage != null and self.linkage.? == .dynamic and self.version != null and self.target.wantSharedLibSymLinks()) {
2805 try doAtomicSymLinks(builder.allocator, self.getOutputSource().getPath(builder), self.major_only_filename.?, self.name_only_filename.?);2807 try doAtomicSymLinks(builder.allocator, self.getOutputSource().getPath(builder), self.major_only_filename.?, self.name_only_filename.?);
2806 }2808 }
2807 }2809 }
lib/std/build/TranslateCStep.zig+1-1
...@@ -47,7 +47,7 @@ pub fn setTarget(self: *TranslateCStep, target: CrossTarget) void {...@@ -47,7 +47,7 @@ pub fn setTarget(self: *TranslateCStep, target: CrossTarget) void {
4747
48/// Creates a step to build an executable from the translated source.48/// Creates a step to build an executable from the translated source.
49pub fn addExecutable(self: *TranslateCStep) *LibExeObjStep {49pub fn addExecutable(self: *TranslateCStep) *LibExeObjStep {
50 return self.builder.addExecutableSource("translated_c", build.FileSource{ .generated = &self.output_file }, .static);50 return self.builder.addExecutableSource("translated_c", build.FileSource{ .generated = &self.output_file });
51}51}
5252
53pub fn addIncludeDir(self: *TranslateCStep, include_dir: []const u8) void {53pub fn addIncludeDir(self: *TranslateCStep, include_dir: []const u8) void {
test/src/compare_output.zig+2-2
...@@ -126,7 +126,7 @@ pub const CompareOutputContext = struct {...@@ -126,7 +126,7 @@ pub const CompareOutputContext = struct {
126 }126 }
127127
128 const basename = case.sources.items[0].filename;128 const basename = case.sources.items[0].filename;
129 const exe = b.addExecutableSource("test", write_src.getFileSource(basename).?, .static);129 const exe = b.addExecutableSource("test", write_src.getFileSource(basename).?);
130 exe.setBuildMode(mode);130 exe.setBuildMode(mode);
131 if (case.link_libc) {131 if (case.link_libc) {
132 exe.linkSystemLibrary("c");132 exe.linkSystemLibrary("c");
...@@ -147,7 +147,7 @@ pub const CompareOutputContext = struct {...@@ -147,7 +147,7 @@ pub const CompareOutputContext = struct {
147 }147 }
148148
149 const basename = case.sources.items[0].filename;149 const basename = case.sources.items[0].filename;
150 const exe = b.addExecutableSource("test", write_src.getFileSource(basename).?, .static);150 const exe = b.addExecutableSource("test", write_src.getFileSource(basename).?);
151 if (case.link_libc) {151 if (case.link_libc) {
152 exe.linkSystemLibrary("c");152 exe.linkSystemLibrary("c");
153 }153 }
test/tests.zig+1-1
...@@ -656,7 +656,7 @@ pub const StackTracesContext = struct {...@@ -656,7 +656,7 @@ pub const StackTracesContext = struct {
656 const b = self.b;656 const b = self.b;
657 const src_basename = "source.zig";657 const src_basename = "source.zig";
658 const write_src = b.addWriteFile(src_basename, source);658 const write_src = b.addWriteFile(src_basename, source);
659 const exe = b.addExecutableSource("test", write_src.getFileSource(src_basename).?, .static);659 const exe = b.addExecutableSource("test", write_src.getFileSource(src_basename).?);
660 exe.setBuildMode(mode);660 exe.setBuildMode(mode);
661661
662 const run_and_compare = RunAndCompareStep.create(662 const run_and_compare = RunAndCompareStep.create(