Commit 140fb615a6
Changed files (6)
lib
std
lib/std/Build/Step/Compile.zig
@@ -611,11 +611,13 @@ pub fn dependsOnSystemLibrary(compile: *const Compile, name: []const u8) bool {
is_linking_libcpp = is_linking_libcpp or module.link_libcpp == true;
}
- if (compile.rootModuleTarget().isLibCLibName(name)) {
+ const target = compile.rootModuleTarget();
+
+ if (std.zig.target.isLibCLibName(target, name)) {
return is_linking_libc;
}
- if (compile.rootModuleTarget().isLibCxxLibName(name)) {
+ if (std.zig.target.isLibCxxLibName(target, name)) {
return is_linking_libcpp;
}
lib/std/Build/Module.zig
@@ -492,11 +492,11 @@ pub fn linkSystemLibrary(
const b = m.owner;
const target = m.requireKnownTarget();
- if (target.isLibCLibName(name)) {
+ if (std.zig.target.isLibCLibName(target, name)) {
m.link_libc = true;
return;
}
- if (target.isLibCxxLibName(name)) {
+ if (std.zig.target.isLibCxxLibName(target, name)) {
m.link_libcpp = true;
return;
}
lib/std/zig/target.zig
@@ -124,4 +124,139 @@ pub fn muslArchName(arch: std.Target.Cpu.Arch) [:0]const u8 {
}
}
+pub fn isLibCLibName(target: std.Target, name: []const u8) bool {
+ const ignore_case = target.os.tag.isDarwin() or target.os.tag == .windows;
+
+ if (eqlIgnoreCase(ignore_case, name, "c"))
+ return true;
+
+ if (target.isMinGW()) {
+ if (eqlIgnoreCase(ignore_case, name, "m"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "mingw32"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "msvcrt-os"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "mingwex"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "uuid"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "bits"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "dmoguids"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "dxerr8"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "dxerr9"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "mfuuid"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "msxml2"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "msxml6"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "amstrmid"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "wbemuuid"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "wmcodecdspuuid"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "dxguid"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "ksguid"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "locationapi"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "portabledeviceguids"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "mfuuid"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "dloadhelper"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "strmiids"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "mfuuid"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "adsiid"))
+ return true;
+
+ return false;
+ }
+
+ if (target.abi.isGnu() or target.abi.isMusl()) {
+ if (eqlIgnoreCase(ignore_case, name, "m"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "rt"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "pthread"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "util"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "resolv"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "dl"))
+ return true;
+ }
+
+ if (target.abi.isMusl()) {
+ if (eqlIgnoreCase(ignore_case, name, "crypt"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "xnet"))
+ return true;
+ }
+
+ if (target.os.tag.isDarwin()) {
+ if (eqlIgnoreCase(ignore_case, name, "System"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "c"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "dbm"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "dl"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "info"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "m"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "poll"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "proc"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "pthread"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "rpcsvc"))
+ return true;
+ }
+
+ if (target.os.isAtLeast(.macos, .{ .major = 10, .minor = 8, .patch = 0 }) orelse false) {
+ if (eqlIgnoreCase(ignore_case, name, "mx"))
+ return true;
+ }
+
+ if (target.os.tag == .haiku) {
+ if (eqlIgnoreCase(ignore_case, name, "root"))
+ return true;
+ if (eqlIgnoreCase(ignore_case, name, "network"))
+ return true;
+ }
+
+ return false;
+}
+
+pub fn isLibCxxLibName(target: std.Target, name: []const u8) bool {
+ const ignore_case = target.os.tag.isDarwin() or target.os.tag == .windows;
+
+ return eqlIgnoreCase(ignore_case, name, "c++") or
+ eqlIgnoreCase(ignore_case, name, "stdc++") or
+ eqlIgnoreCase(ignore_case, name, "c++abi");
+}
+
+fn eqlIgnoreCase(ignore_case: bool, a: []const u8, b: []const u8) bool {
+ if (ignore_case) {
+ return std.ascii.eqlIgnoreCase(a, b);
+ } else {
+ return std.mem.eql(u8, a, b);
+ }
+}
+
const std = @import("std");
lib/std/Target.zig
@@ -2868,141 +2868,6 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 {
);
}
-pub fn isLibCLibName(target: std.Target, name: []const u8) bool {
- const ignore_case = target.os.tag.isDarwin() or target.os.tag == .windows;
-
- if (eqlIgnoreCase(ignore_case, name, "c"))
- return true;
-
- if (target.isMinGW()) {
- if (eqlIgnoreCase(ignore_case, name, "m"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "mingw32"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "msvcrt-os"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "mingwex"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "uuid"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "bits"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "dmoguids"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "dxerr8"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "dxerr9"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "mfuuid"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "msxml2"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "msxml6"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "amstrmid"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "wbemuuid"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "wmcodecdspuuid"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "dxguid"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "ksguid"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "locationapi"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "portabledeviceguids"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "mfuuid"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "dloadhelper"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "strmiids"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "mfuuid"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "adsiid"))
- return true;
-
- return false;
- }
-
- if (target.abi.isGnu() or target.abi.isMusl()) {
- if (eqlIgnoreCase(ignore_case, name, "m"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "rt"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "pthread"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "util"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "resolv"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "dl"))
- return true;
- }
-
- if (target.abi.isMusl()) {
- if (eqlIgnoreCase(ignore_case, name, "crypt"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "xnet"))
- return true;
- }
-
- if (target.os.tag.isDarwin()) {
- if (eqlIgnoreCase(ignore_case, name, "System"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "c"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "dbm"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "dl"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "info"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "m"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "poll"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "proc"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "pthread"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "rpcsvc"))
- return true;
- }
-
- if (target.os.isAtLeast(.macos, .{ .major = 10, .minor = 8, .patch = 0 }) orelse false) {
- if (eqlIgnoreCase(ignore_case, name, "mx"))
- return true;
- }
-
- if (target.os.tag == .haiku) {
- if (eqlIgnoreCase(ignore_case, name, "root"))
- return true;
- if (eqlIgnoreCase(ignore_case, name, "network"))
- return true;
- }
-
- return false;
-}
-
-pub fn isLibCxxLibName(target: std.Target, name: []const u8) bool {
- const ignore_case = target.os.tag.isDarwin() or target.os.tag == .windows;
-
- return eqlIgnoreCase(ignore_case, name, "c++") or
- eqlIgnoreCase(ignore_case, name, "stdc++") or
- eqlIgnoreCase(ignore_case, name, "c++abi");
-}
-
-fn eqlIgnoreCase(ignore_case: bool, a: []const u8, b: []const u8) bool {
- if (ignore_case) {
- return std.ascii.eqlIgnoreCase(a, b);
- } else {
- return std.mem.eql(u8, a, b);
- }
-}
-
pub fn osArchName(target: std.Target) [:0]const u8 {
return target.os.tag.archName(target.cpu.arch);
}
src/main.zig
@@ -3765,11 +3765,11 @@ fn createModule(
info: SystemLib,
}) = .{};
for (create_module.system_libs.keys(), create_module.system_libs.values()) |lib_name, info| {
- if (target.isLibCLibName(lib_name)) {
+ if (std.zig.target.isLibCLibName(target, lib_name)) {
create_module.opts.link_libc = true;
continue;
}
- if (target.isLibCxxLibName(lib_name)) {
+ if (std.zig.target.isLibCxxLibName(target, lib_name)) {
create_module.opts.link_libcpp = true;
continue;
}
src/Sema.zig
@@ -9606,7 +9606,7 @@ fn handleExternLibName(
const comp = zcu.comp;
const target = zcu.getTarget();
log.debug("extern fn symbol expected in lib '{s}'", .{lib_name});
- if (target.isLibCLibName(lib_name)) {
+ if (std.zig.target.isLibCLibName(target, lib_name)) {
if (!comp.config.link_libc) {
return sema.fail(
block,
@@ -9617,7 +9617,7 @@ fn handleExternLibName(
}
break :blk;
}
- if (target.isLibCxxLibName(lib_name)) {
+ if (std.zig.target.isLibCxxLibName(target, lib_name)) {
if (!comp.config.link_libcpp) return sema.fail(
block,
src_loc,