11use rustc_data_structures:: fx:: FxHashSet ;
22use rustc_fs_util:: fix_windows_verbatim_for_gcc;
33use rustc_hir:: def_id:: CrateNum ;
4- use rustc_middle:: middle:: cstore:: { EncodedMetadata , LibSource , NativeLibrary , NativeLibraryKind } ;
4+ use rustc_middle:: middle:: cstore:: { EncodedMetadata , LibSource , NativeLib } ;
55use rustc_middle:: middle:: dependency_format:: Linkage ;
66use rustc_session:: config:: { self , CFGuard , CrateType , DebugInfo } ;
77use rustc_session:: config:: { OutputFilenames , OutputType , PrintRequest , Sanitizer } ;
88use rustc_session:: output:: { check_file_is_writeable, invalid_output_for_target, out_filename} ;
99use rustc_session:: search_paths:: PathKind ;
10+ use rustc_session:: utils:: NativeLibKind ;
1011/// For all the linkers we support, and information they might
1112/// need out of the shared crate context before we get rid of it.
1213use rustc_session:: { filesearch, Session } ;
@@ -183,6 +184,7 @@ fn get_linker(sess: &Session, linker: &Path, flavor: LinkerFlavor) -> Command {
183184 "x86_64" => Some ( "x64" . to_string ( ) ) ,
184185 "x86" => Some ( "x86" . to_string ( ) ) ,
185186 "aarch64" => Some ( "arm64" . to_string ( ) ) ,
187+ "arm" => Some ( "arm" . to_string ( ) ) ,
186188 _ => None ,
187189 } ;
188190 if let Some ( ref a) = arch {
@@ -327,11 +329,12 @@ fn link_rlib<'a, B: ArchiveBuilder<'a>>(
327329 // metadata of the rlib we're generating somehow.
328330 for lib in codegen_results. crate_info . used_libraries . iter ( ) {
329331 match lib. kind {
330- NativeLibraryKind :: NativeStatic => { }
331- NativeLibraryKind :: NativeStaticNobundle
332- | NativeLibraryKind :: NativeFramework
333- | NativeLibraryKind :: NativeRawDylib
334- | NativeLibraryKind :: NativeUnknown => continue ,
332+ NativeLibKind :: StaticBundle => { }
333+ NativeLibKind :: StaticNoBundle
334+ | NativeLibKind :: Dylib
335+ | NativeLibKind :: Framework
336+ | NativeLibKind :: RawDylib
337+ | NativeLibKind :: Unspecified => continue ,
335338 }
336339 if let Some ( name) = lib. name {
337340 ab. add_native_library ( name) ;
@@ -430,7 +433,7 @@ fn link_staticlib<'a, B: ArchiveBuilder<'a>>(
430433 // object files come from where and selectively skip them.
431434 let skip_object_files = native_libs
432435 . iter ( )
433- . any ( |lib| lib. kind == NativeLibraryKind :: NativeStatic && !relevant_lib ( sess, lib) ) ;
436+ . any ( |lib| lib. kind == NativeLibKind :: StaticBundle && !relevant_lib ( sess, lib) ) ;
434437 ab. add_rlib (
435438 path,
436439 & name. as_str ( ) ,
@@ -907,26 +910,28 @@ enum RlibFlavor {
907910 StaticlibBase ,
908911}
909912
910- fn print_native_static_libs ( sess : & Session , all_native_libs : & [ NativeLibrary ] ) {
913+ fn print_native_static_libs ( sess : & Session , all_native_libs : & [ NativeLib ] ) {
911914 let lib_args: Vec < _ > = all_native_libs
912915 . iter ( )
913916 . filter ( |l| relevant_lib ( sess, l) )
914917 . filter_map ( |lib| {
915918 let name = lib. name ?;
916919 match lib. kind {
917- NativeLibraryKind :: NativeStaticNobundle | NativeLibraryKind :: NativeUnknown => {
920+ NativeLibKind :: StaticNoBundle
921+ | NativeLibKind :: Dylib
922+ | NativeLibKind :: Unspecified => {
918923 if sess. target . target . options . is_like_msvc {
919924 Some ( format ! ( "{}.lib" , name) )
920925 } else {
921926 Some ( format ! ( "-l{}" , name) )
922927 }
923928 }
924- NativeLibraryKind :: NativeFramework => {
929+ NativeLibKind :: Framework => {
925930 // ld-only syntax, since there are no frameworks in MSVC
926931 Some ( format ! ( "-framework {}" , name) )
927932 }
928933 // These are included, no need to print them
929- NativeLibraryKind :: NativeStatic | NativeLibraryKind :: NativeRawDylib => None ,
934+ NativeLibKind :: StaticBundle | NativeLibKind :: RawDylib => None ,
930935 }
931936 } )
932937 . collect ( ) ;
@@ -1696,11 +1701,11 @@ fn add_local_native_libraries(
16961701 None => continue ,
16971702 } ;
16981703 match lib. kind {
1699- NativeLibraryKind :: NativeUnknown => cmd. link_dylib ( name) ,
1700- NativeLibraryKind :: NativeFramework => cmd. link_framework ( name) ,
1701- NativeLibraryKind :: NativeStaticNobundle => cmd. link_staticlib ( name) ,
1702- NativeLibraryKind :: NativeStatic => cmd. link_whole_staticlib ( name, & search_path) ,
1703- NativeLibraryKind :: NativeRawDylib => {
1704+ NativeLibKind :: Dylib | NativeLibKind :: Unspecified => cmd. link_dylib ( name) ,
1705+ NativeLibKind :: Framework => cmd. link_framework ( name) ,
1706+ NativeLibKind :: StaticNoBundle => cmd. link_staticlib ( name) ,
1707+ NativeLibKind :: StaticBundle => cmd. link_whole_staticlib ( name, & search_path) ,
1708+ NativeLibKind :: RawDylib => {
17041709 // FIXME(#58713): Proper handling for raw dylibs.
17051710 bug ! ( "raw_dylib feature not yet implemented" ) ;
17061711 }
@@ -1890,7 +1895,7 @@ fn add_upstream_rust_crates<'a, B: ArchiveBuilder<'a>>(
18901895 let native_libs = & codegen_results. crate_info . native_libraries [ & cnum] ;
18911896 let skip_native = native_libs
18921897 . iter ( )
1893- . any ( |lib| lib. kind == NativeLibraryKind :: NativeStatic && !relevant_lib ( sess, lib) ) ;
1898+ . any ( |lib| lib. kind == NativeLibKind :: StaticBundle && !relevant_lib ( sess, lib) ) ;
18941899
18951900 if ( !are_upstream_rust_objects_already_included ( sess)
18961901 || ignored_for_lto ( sess, & codegen_results. crate_info , cnum) )
@@ -2032,9 +2037,9 @@ fn add_upstream_native_libraries(
20322037 continue ;
20332038 }
20342039 match lib. kind {
2035- NativeLibraryKind :: NativeUnknown => cmd. link_dylib ( name) ,
2036- NativeLibraryKind :: NativeFramework => cmd. link_framework ( name) ,
2037- NativeLibraryKind :: NativeStaticNobundle => {
2040+ NativeLibKind :: Dylib | NativeLibKind :: Unspecified => cmd. link_dylib ( name) ,
2041+ NativeLibKind :: Framework => cmd. link_framework ( name) ,
2042+ NativeLibKind :: StaticNoBundle => {
20382043 // Link "static-nobundle" native libs only if the crate they originate from
20392044 // is being linked statically to the current crate. If it's linked dynamically
20402045 // or is an rlib already included via some other dylib crate, the symbols from
@@ -2046,8 +2051,8 @@ fn add_upstream_native_libraries(
20462051 // ignore statically included native libraries here as we've
20472052 // already included them when we included the rust library
20482053 // previously
2049- NativeLibraryKind :: NativeStatic => { }
2050- NativeLibraryKind :: NativeRawDylib => {
2054+ NativeLibKind :: StaticBundle => { }
2055+ NativeLibKind :: RawDylib => {
20512056 // FIXME(#58713): Proper handling for raw dylibs.
20522057 bug ! ( "raw_dylib feature not yet implemented" ) ;
20532058 }
@@ -2056,7 +2061,7 @@ fn add_upstream_native_libraries(
20562061 }
20572062}
20582063
2059- fn relevant_lib ( sess : & Session , lib : & NativeLibrary ) -> bool {
2064+ fn relevant_lib ( sess : & Session , lib : & NativeLib ) -> bool {
20602065 match lib. cfg {
20612066 Some ( ref cfg) => rustc_attr:: cfg_matches ( cfg, & sess. parse_sess , None ) ,
20622067 None => true ,
0 commit comments