aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Target/Query.zig
diff options
context:
space:
mode:
authorJacob Young <15544577+jacobly0@users.noreply.github.com>2025-10-30 12:09:13 -0400
committerGitHub <noreply@github.com>2025-10-30 12:09:13 -0400
commit5b060ef9d4acab0a92891e83d354f1c8e8e658e5 (patch)
tree719022194a5bca2d7c2392ca1a3fb3de9ff926bb /lib/std/Target/Query.zig
parent4174ab9c2c98d798452dd745d5d5dc657d601591 (diff)
parent0834e696f75d8477e5bc7a2dc49e7d10800039bc (diff)
downloadzig-5b060ef9d4acab0a92891e83d354f1c8e8e658e5.tar.gz
zig-5b060ef9d4acab0a92891e83d354f1c8e8e658e5.zip
Merge pull request #25558 from jacobly0/elfv2-load-obj
Elf2: start implementing input object loading
Diffstat (limited to 'lib/std/Target/Query.zig')
-rw-r--r--lib/std/Target/Query.zig17
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/std/Target/Query.zig b/lib/std/Target/Query.zig
index f3f5155b06..2f00f54268 100644
--- a/lib/std/Target/Query.zig
+++ b/lib/std/Target/Query.zig
@@ -46,8 +46,9 @@ android_api_level: ?u32 = null,
abi: ?Target.Abi = null,
/// When `os_tag` is `null`, then `null` means native. Otherwise it means the standard path
-/// based on the `os_tag`.
-dynamic_linker: Target.DynamicLinker = .none,
+/// based on the `os_tag`. When `dynamic_linker` is a non-`null` empty string, no dynamic
+/// linker is used regardless of `os_tag`.
+dynamic_linker: ?Target.DynamicLinker = null,
/// `null` means default for the cpu/arch/os combo.
ofmt: ?Target.ObjectFormat = null,
@@ -213,7 +214,7 @@ pub fn parse(args: ParseOptions) !Query {
const diags = args.diagnostics orelse &dummy_diags;
var result: Query = .{
- .dynamic_linker = Target.DynamicLinker.init(args.dynamic_linker),
+ .dynamic_linker = if (args.dynamic_linker) |dynamic_linker| .init(dynamic_linker) else null,
};
var it = mem.splitScalar(u8, args.arch_os_abi, '-');
@@ -381,7 +382,7 @@ pub fn isNativeCpu(self: Query) bool {
pub fn isNativeOs(self: Query) bool {
return self.os_tag == null and self.os_version_min == null and self.os_version_max == null and
- self.dynamic_linker.get() == null and self.glibc_version == null and self.android_api_level == null;
+ self.dynamic_linker == null and self.glibc_version == null and self.android_api_level == null;
}
pub fn isNativeAbi(self: Query) bool {
@@ -599,7 +600,7 @@ pub fn eql(a: Query, b: Query) bool {
if (!versionEqualOpt(a.glibc_version, b.glibc_version)) return false;
if (a.android_api_level != b.android_api_level) return false;
if (a.abi != b.abi) return false;
- if (!a.dynamic_linker.eql(b.dynamic_linker)) return false;
+ if (!dynamicLinkerEqualOpt(a.dynamic_linker, b.dynamic_linker)) return false;
if (a.ofmt != b.ofmt) return false;
return true;
@@ -611,6 +612,12 @@ fn versionEqualOpt(a: ?SemanticVersion, b: ?SemanticVersion) bool {
return SemanticVersion.order(a.?, b.?) == .eq;
}
+fn dynamicLinkerEqualOpt(a: ?Target.DynamicLinker, b: ?Target.DynamicLinker) bool {
+ if (a == null and b == null) return true;
+ if (a == null or b == null) return false;
+ return a.?.eql(b.?);
+}
+
test parse {
const io = std.testing.io;