@@ -2,7 +2,7 @@ use std::collections::BTreeSet;
22use std:: ffi:: OsString ;
33use std:: fs:: { read, File , OpenOptions } ;
44use std:: io:: { BufWriter , Write } ;
5- use std:: ops:: Deref ;
5+ use std:: ops:: { ControlFlow , Deref } ;
66use std:: path:: { Path , PathBuf } ;
77use std:: process:: { ExitStatus , Output , Stdio } ;
88use std:: { env, fmt, fs, io, mem, str} ;
@@ -18,8 +18,8 @@ use rustc_data_structures::temp_dir::MaybeTempDir;
1818use rustc_errors:: { DiagCtxtHandle , ErrorGuaranteed , FatalError } ;
1919use rustc_fs_util:: { fix_windows_verbatim_for_gcc, try_canonicalize} ;
2020use rustc_hir:: def_id:: { CrateNum , LOCAL_CRATE } ;
21- use rustc_metadata:: find_native_static_library;
2221use rustc_metadata:: fs:: { copy_to_stdout, emit_wrapper_file, METADATA_FILENAME } ;
22+ use rustc_metadata:: { find_native_static_library, walk_native_lib_search_dirs} ;
2323use rustc_middle:: bug;
2424use rustc_middle:: middle:: debugger_visualizer:: DebuggerVisualizerFile ;
2525use rustc_middle:: middle:: dependency_format:: Linkage ;
@@ -2110,50 +2110,19 @@ fn add_library_search_dirs(
21102110 return ;
21112111 }
21122112
2113- // Library search paths explicitly supplied by user (`-L` on the command line).
2114- for search_path in sess. target_filesearch ( PathKind :: Native ) . cli_search_paths ( ) {
2115- cmd. include_path ( & fix_windows_verbatim_for_gcc ( & search_path. dir ) ) ;
2116- }
2117- for search_path in sess. target_filesearch ( PathKind :: Framework ) . cli_search_paths ( ) {
2118- // Contrary to the `-L` docs only framework-specific paths are considered here.
2119- if search_path. kind != PathKind :: All {
2120- cmd. framework_path ( & search_path. dir ) ;
2121- }
2122- }
2123-
2124- // The toolchain ships some native library components and self-contained linking was enabled.
2125- // Add the self-contained library directory to search paths.
2126- if self_contained_components. intersects (
2127- LinkSelfContainedComponents :: LIBC
2128- | LinkSelfContainedComponents :: UNWIND
2129- | LinkSelfContainedComponents :: MINGW ,
2130- ) {
2131- let lib_path = sess. target_tlib_path . dir . join ( "self-contained" ) ;
2132- cmd. include_path ( & fix_windows_verbatim_for_gcc ( & lib_path) ) ;
2133- }
2134-
2135- // Toolchains for some targets may ship `libunwind.a`, but place it into the main sysroot
2136- // library directory instead of the self-contained directories.
2137- // Sanitizer libraries have the same issue and are also linked by name on Apple targets.
2138- // The targets here should be in sync with `copy_third_party_objects` in bootstrap.
2139- // FIXME: implement `-Clink-self-contained=+/-unwind,+/-sanitizers`, move the shipped libunwind
2140- // and sanitizers to self-contained directory, and stop adding this search path.
2141- if sess. target . vendor == "fortanix"
2142- || sess. target . os == "linux"
2143- || sess. target . os == "fuchsia"
2144- || sess. target . is_like_osx && !sess. opts . unstable_opts . sanitizer . is_empty ( )
2145- {
2146- cmd. include_path ( & fix_windows_verbatim_for_gcc ( & sess. target_tlib_path . dir ) ) ;
2147- }
2148-
2149- // Mac Catalyst uses the macOS SDK, but to link to iOS-specific frameworks
2150- // we must have the support library stubs in the library search path (#121430).
2151- if let Some ( sdk_root) = apple_sdk_root
2152- && sess. target . llvm_target . contains ( "macabi" )
2153- {
2154- cmd. include_path ( & sdk_root. join ( "System/iOSSupport/usr/lib" ) ) ;
2155- cmd. framework_path ( & sdk_root. join ( "System/iOSSupport/System/Library/Frameworks" ) ) ;
2156- }
2113+ walk_native_lib_search_dirs (
2114+ sess,
2115+ self_contained_components,
2116+ apple_sdk_root,
2117+ |dir, is_framework| {
2118+ if is_framework {
2119+ cmd. framework_path ( dir) ;
2120+ } else {
2121+ cmd. include_path ( & fix_windows_verbatim_for_gcc ( dir) ) ;
2122+ }
2123+ ControlFlow :: < ( ) > :: Continue ( ( ) )
2124+ } ,
2125+ ) ;
21572126}
21582127
21592128/// Add options making relocation sections in the produced ELF files read-only
0 commit comments