@@ -62,12 +62,15 @@ pub fn walk_native_lib_search_dirs<R>(
6262 f ( & sess. target_tlib_path . dir . join ( "self-contained" ) , false ) ?;
6363 }
6464
65+ let has_shared_llvm_apple_darwin =
66+ sess. target . is_like_darwin && sess. target_tlib_path . dir . join ( "libLLVM.dylib" ) . exists ( ) ;
67+
6568 // Toolchains for some targets may ship `libunwind.a`, but place it into the main sysroot
6669 // library directory instead of the self-contained directories.
6770 // Sanitizer libraries have the same issue and are also linked by name on Apple targets.
6871 // The targets here should be in sync with `copy_third_party_objects` in bootstrap.
69- // Finally there is shared LLVM library, which unlike compiler libraries, is linked by the name,
70- // therefore requiring the search path for the linker.
72+ // On Apple targets, shared LLVM is linked by name, so when `libLLVM.dylib` is
73+ // present in the target libdir, add that directory to the linker search path .
7174 // FIXME: implement `-Clink-self-contained=+/-unwind,+/-sanitizers`, move the shipped libunwind
7275 // and sanitizers to self-contained directory, and stop adding this search path.
7376 // FIXME: On AIX this also has the side-effect of making the list of library search paths
@@ -77,7 +80,8 @@ pub fn walk_native_lib_search_dirs<R>(
7780 || sess. target . os == Os :: Linux
7881 || sess. target . os == Os :: Fuchsia
7982 || sess. target . is_like_aix
80- || sess. target . is_like_darwin && !sess. sanitizers ( ) . is_empty ( )
83+ || sess. target . is_like_darwin
84+ && ( !sess. sanitizers ( ) . is_empty ( ) || has_shared_llvm_apple_darwin)
8185 || sess. target . os == Os :: Windows
8286 && sess. target . env == Env :: Gnu
8387 && sess. target . abi == Abi :: Llvm
0 commit comments