@@ -500,6 +500,8 @@ const usage_build_generic =
500500 \\Global Link Options:
501501 \\ -T[script], --script [script] Use a custom linker script
502502 \\ --version-script [path] Provide a version .map file
503+ \\ --undefined-version Allow version scripts to refer to undefined symbols
504+ \\ --no-undefined-version (default) Disallow version scripts from referring to undefined symbols
503505 \\ --dynamic-linker [path] Set the dynamic interpreter path (usually ld.so)
504506 \\ --sysroot [path] Set the system root directory (usually /)
505507 \\ --version [ver] Dynamic library semver
@@ -826,6 +828,7 @@ fn buildOutputType(
826828 var want_compiler_rt : ? bool = null ;
827829 var linker_script : ? []const u8 = null ;
828830 var version_script : ? []const u8 = null ;
831+ var linker_allow_undefined_version : bool = false ;
829832 var disable_c_depfile = false ;
830833 var linker_sort_section : ? link.File.Elf.SortSection = null ;
831834 var linker_gc_sections : ? bool = null ;
@@ -1200,6 +1203,10 @@ fn buildOutputType(
12001203 linker_script = args_iter .nextOrFatal ();
12011204 } else if (mem .eql (u8 , arg , "-version-script" ) or mem .eql (u8 , arg , "--version-script" )) {
12021205 version_script = args_iter .nextOrFatal ();
1206+ } else if (mem .eql (u8 , arg , "--undefined-version" )) {
1207+ linker_allow_undefined_version = true ;
1208+ } else if (mem .eql (u8 , arg , "--no-undefined-version" )) {
1209+ linker_allow_undefined_version = false ;
12031210 } else if (mem .eql (u8 , arg , "--library" ) or mem .eql (u8 , arg , "-l" )) {
12041211 // We don't know whether this library is part of libc
12051212 // or libc++ until we resolve the target, so we append
@@ -2153,6 +2160,10 @@ fn buildOutputType(
21532160 create_module .opts .rdynamic = true ;
21542161 } else if (mem .eql (u8 , arg , "-version-script" ) or mem .eql (u8 , arg , "--version-script" )) {
21552162 version_script = linker_args_it .nextOrFatal ();
2163+ } else if (mem .eql (u8 , arg , "--undefined-version" )) {
2164+ linker_allow_undefined_version = true ;
2165+ } else if (mem .eql (u8 , arg , "--no-undefined-version" )) {
2166+ linker_allow_undefined_version = false ;
21562167 } else if (mem .eql (u8 , arg , "-O" )) {
21572168 linker_optimization = linker_args_it .nextOrFatal ();
21582169 } else if (mem .startsWith (u8 , arg , "-O" )) {
@@ -3166,6 +3177,7 @@ fn buildOutputType(
31663177 .hash_style = hash_style ,
31673178 .linker_script = linker_script ,
31683179 .version_script = version_script ,
3180+ .linker_allow_undefined_version = linker_allow_undefined_version ,
31693181 .disable_c_depfile = disable_c_depfile ,
31703182 .soname = resolved_soname ,
31713183 .linker_sort_section = linker_sort_section ,
0 commit comments