diff --git a/build.zig b/build.zig index d5e37a5f7b..496c63a1ce 100644 --- 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 => {}, }