commit da96e7efccba51ad3749636d32f82b4193a590b8 (tree)
parent 6bb82dad43aba6530a8ec89ec2d810d000097b76
Author: Michael Dusan <michael.dusan@gmail.com>
Date: Fri, 6 Jan 2023 00:57:08 -0500
stage3 bsd: support dynamic libstdc++/libc++
Currently llvm-linkage mode (static vs dynamic) decides linkage mode
for system libstdc++/libc++ .
A previous commit only tested static mode for *BSD and netbsd was
reported to not work in dynamic mode.
We now special-case freebsd, openbsd, netbsd and dragonfly for dynamic
linking too.
Diffstat:
| M | build.zig | | | 31 | ++++++++++++++++--------------- |
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/build.zig b/build.zig
@@ -589,14 +589,11 @@ fn addCmakeCfgOptionsToExe(
if (use_zig_libcxx) {
exe.linkLibCpp();
} else {
- const need_cpp_includes = true;
- const lib_suffix = switch (cfg.llvm_linkage) {
- .static => exe.target.staticLibSuffix()[1..],
- .dynamic => exe.target.dynamicLibSuffix()[1..],
- };
-
// System -lc++ must be used because in this code path we are attempting to link
// against system-provided LLVM, Clang, LLD.
+ const need_cpp_includes = true;
+ const static = cfg.llvm_linkage == .static;
+ const lib_suffix = if (static) exe.target.staticLibSuffix()[1..] else exe.target.dynamicLibSuffix()[1..];
switch (exe.target.getOsTag()) {
.linux => {
// First we try to link against gcc libstdc++. If that doesn't work, we fall
@@ -613,20 +610,24 @@ fn addCmakeCfgOptionsToExe(
exe.linkSystemLibrary("c++");
},
.freebsd => {
- try addCxxKnownPath(b, cfg, exe, b.fmt("libc++.{s}", .{lib_suffix}), null, need_cpp_includes);
- try addCxxKnownPath(b, cfg, exe, b.fmt("libgcc_eh.{s}", .{lib_suffix}), null, need_cpp_includes);
+ if (static) {
+ try addCxxKnownPath(b, cfg, exe, b.fmt("libc++.{s}", .{lib_suffix}), null, need_cpp_includes);
+ try addCxxKnownPath(b, cfg, exe, b.fmt("libgcc_eh.{s}", .{lib_suffix}), null, need_cpp_includes);
+ } else {
+ try addCxxKnownPath(b, cfg, exe, b.fmt("libc++.{s}", .{lib_suffix}), null, need_cpp_includes);
+ }
},
.openbsd => {
try addCxxKnownPath(b, cfg, exe, b.fmt("libc++.{s}", .{lib_suffix}), null, need_cpp_includes);
try addCxxKnownPath(b, cfg, exe, b.fmt("libc++abi.{s}", .{lib_suffix}), null, need_cpp_includes);
},
- .netbsd => {
- try addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), null, need_cpp_includes);
- try addCxxKnownPath(b, cfg, exe, b.fmt("libgcc_eh.{s}", .{lib_suffix}), null, need_cpp_includes);
- },
- .dragonfly => {
- try addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), null, need_cpp_includes);
- try addCxxKnownPath(b, cfg, exe, b.fmt("libgcc_eh.{s}", .{lib_suffix}), null, need_cpp_includes);
+ .netbsd, .dragonfly => {
+ if (static) {
+ try addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), null, need_cpp_includes);
+ try addCxxKnownPath(b, cfg, exe, b.fmt("libgcc_eh.{s}", .{lib_suffix}), null, need_cpp_includes);
+ } else {
+ try addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), null, need_cpp_includes);
+ }
},
else => {},
}