aboutsummaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
authordhash <me@dha.sh>2023-09-29 13:38:54 -0400
committerCarl Åstholm <carl@astholm.se>2024-01-09 17:24:11 +0100
commit9bb643031864c8c3c2d4ac52aecb175283e335e3 (patch)
tree20e8fa8787aa7e29e9771edff9d20f8a404ea70b /src/main.zig
parent60094cc3fc979df0928c412c9fded457172f2060 (diff)
downloadzig-9bb643031864c8c3c2d4ac52aecb175283e335e3.tar.gz
zig-9bb643031864c8c3c2d4ac52aecb175283e335e3.zip
Add support for `--(no-)undefined-version`
Co-authored-by: Motiejus Jakštys <motiejus@jakstys.lt> Co-authored-by: Jakub Konka <kubkon@jakubkonka.com> Co-authored-by: Samuel Cantero <scanterog@gmail.com> Co-authored-by: Giorgos Georgiou <giorgos.georgiou@datadoghq.com> Co-authored-by: Carl Åstholm <carl@astholm.se>
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/main.zig b/src/main.zig
index 4442234bd2..5dbb4a0cf7 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -500,6 +500,8 @@ const usage_build_generic =
\\Global Link Options:
\\ -T[script], --script [script] Use a custom linker script
\\ --version-script [path] Provide a version .map file
+ \\ --undefined-version Allow version scripts to refer to undefined symbols
+ \\ --no-undefined-version (default) Disallow version scripts from referring to undefined symbols
\\ --dynamic-linker [path] Set the dynamic interpreter path (usually ld.so)
\\ --sysroot [path] Set the system root directory (usually /)
\\ --version [ver] Dynamic library semver
@@ -826,6 +828,7 @@ fn buildOutputType(
var want_compiler_rt: ?bool = null;
var linker_script: ?[]const u8 = null;
var version_script: ?[]const u8 = null;
+ var linker_allow_undefined_version: bool = false;
var disable_c_depfile = false;
var linker_sort_section: ?link.File.Elf.SortSection = null;
var linker_gc_sections: ?bool = null;
@@ -1200,6 +1203,10 @@ fn buildOutputType(
linker_script = args_iter.nextOrFatal();
} else if (mem.eql(u8, arg, "-version-script") or mem.eql(u8, arg, "--version-script")) {
version_script = args_iter.nextOrFatal();
+ } else if (mem.eql(u8, arg, "--undefined-version")) {
+ linker_allow_undefined_version = true;
+ } else if (mem.eql(u8, arg, "--no-undefined-version")) {
+ linker_allow_undefined_version = false;
} else if (mem.eql(u8, arg, "--library") or mem.eql(u8, arg, "-l")) {
// We don't know whether this library is part of libc
// or libc++ until we resolve the target, so we append
@@ -2153,6 +2160,10 @@ fn buildOutputType(
create_module.opts.rdynamic = true;
} else if (mem.eql(u8, arg, "-version-script") or mem.eql(u8, arg, "--version-script")) {
version_script = linker_args_it.nextOrFatal();
+ } else if (mem.eql(u8, arg, "--undefined-version")) {
+ linker_allow_undefined_version = true;
+ } else if (mem.eql(u8, arg, "--no-undefined-version")) {
+ linker_allow_undefined_version = false;
} else if (mem.eql(u8, arg, "-O")) {
linker_optimization = linker_args_it.nextOrFatal();
} else if (mem.startsWith(u8, arg, "-O")) {
@@ -3166,6 +3177,7 @@ fn buildOutputType(
.hash_style = hash_style,
.linker_script = linker_script,
.version_script = version_script,
+ .linker_allow_undefined_version = linker_allow_undefined_version,
.disable_c_depfile = disable_c_depfile,
.soname = resolved_soname,
.linker_sort_section = linker_sort_section,