@@ -867,8 +867,6 @@ pub fn rustc_cargo_env(builder: &Builder<'_>, cargo: &mut Cargo, target: TargetS
867
867
cargo. env ( "RUSTC_VERIFY_LLVM_IR" , "1" ) ;
868
868
}
869
869
870
- // Pass down configuration from the LLVM build into the build of
871
- // rustc_llvm and rustc_codegen_llvm.
872
870
//
873
871
// Note that this is disabled if LLVM itself is disabled or we're in a check
874
872
// build. If we are in a check build we still go ahead here presuming we've
@@ -878,72 +876,80 @@ pub fn rustc_cargo_env(builder: &Builder<'_>, cargo: &mut Cargo, target: TargetS
878
876
&& ( builder. kind != Kind :: Check
879
877
|| crate :: llvm:: prebuilt_llvm_config ( builder, target) . is_ok ( ) )
880
878
{
881
- if builder. is_rust_llvm ( target) {
882
- cargo. env ( "LLVM_RUSTLLVM" , "1" ) ;
883
- }
884
- let llvm:: LlvmResult { llvm_config, .. } = builder. ensure ( llvm:: Llvm { target } ) ;
885
- cargo. env ( "LLVM_CONFIG" , & llvm_config) ;
886
- if let Some ( s) = target_config. and_then ( |c| c. llvm_config . as_ref ( ) ) {
887
- cargo. env ( "CFG_LLVM_ROOT" , s) ;
888
- }
879
+ rustc_llvm_env ( builder, cargo, target)
880
+ }
881
+ }
889
882
890
- // Some LLVM linker flags (-L and -l) may be needed to link `rustc_llvm`. Its build script
891
- // expects these to be passed via the `LLVM_LINKER_FLAGS` env variable, separated by
892
- // whitespace.
893
- //
894
- // For example:
895
- // - on windows, when `clang-cl` is used with instrumentation, we need to manually add
896
- // clang's runtime library resource directory so that the profiler runtime library can be
897
- // found. This is to avoid the linker errors about undefined references to
898
- // `__llvm_profile_instrument_memop` when linking `rustc_driver`.
899
- let mut llvm_linker_flags = String :: new ( ) ;
900
- if builder. config . llvm_profile_generate && target. contains ( "msvc" ) {
901
- if let Some ( ref clang_cl_path) = builder. config . llvm_clang_cl {
902
- // Add clang's runtime library directory to the search path
903
- let clang_rt_dir = get_clang_cl_resource_dir ( clang_cl_path) ;
904
- llvm_linker_flags. push_str ( & format ! ( "-L{}" , clang_rt_dir. display( ) ) ) ;
905
- }
906
- }
883
+ /// Pass down configuration from the LLVM build into the build of
884
+ /// rustc_llvm and rustc_codegen_llvm.
885
+ fn rustc_llvm_env ( builder : & Builder < ' _ > , cargo : & mut Cargo , target : TargetSelection ) {
886
+ let target_config = builder. config . target_config . get ( & target) ;
907
887
908
- // The config can also specify its own llvm linker flags.
909
- if let Some ( ref s) = builder. config . llvm_ldflags {
910
- if !llvm_linker_flags. is_empty ( ) {
911
- llvm_linker_flags. push_str ( " " ) ;
912
- }
913
- llvm_linker_flags. push_str ( s) ;
888
+ if builder. is_rust_llvm ( target) {
889
+ cargo. env ( "LLVM_RUSTLLVM" , "1" ) ;
890
+ }
891
+ let llvm:: LlvmResult { llvm_config, .. } = builder. ensure ( llvm:: Llvm { target } ) ;
892
+ cargo. env ( "LLVM_CONFIG" , & llvm_config) ;
893
+ if let Some ( s) = target_config. and_then ( |c| c. llvm_config . as_ref ( ) ) {
894
+ cargo. env ( "CFG_LLVM_ROOT" , s) ;
895
+ }
896
+
897
+ // Some LLVM linker flags (-L and -l) may be needed to link `rustc_llvm`. Its build script
898
+ // expects these to be passed via the `LLVM_LINKER_FLAGS` env variable, separated by
899
+ // whitespace.
900
+ //
901
+ // For example:
902
+ // - on windows, when `clang-cl` is used with instrumentation, we need to manually add
903
+ // clang's runtime library resource directory so that the profiler runtime library can be
904
+ // found. This is to avoid the linker errors about undefined references to
905
+ // `__llvm_profile_instrument_memop` when linking `rustc_driver`.
906
+ let mut llvm_linker_flags = String :: new ( ) ;
907
+ if builder. config . llvm_profile_generate && target. contains ( "msvc" ) {
908
+ if let Some ( ref clang_cl_path) = builder. config . llvm_clang_cl {
909
+ // Add clang's runtime library directory to the search path
910
+ let clang_rt_dir = get_clang_cl_resource_dir ( clang_cl_path) ;
911
+ llvm_linker_flags. push_str ( & format ! ( "-L{}" , clang_rt_dir. display( ) ) ) ;
914
912
}
913
+ }
915
914
916
- // Set the linker flags via the env var that `rustc_llvm`'s build script will read.
915
+ // The config can also specify its own llvm linker flags.
916
+ if let Some ( ref s) = builder. config . llvm_ldflags {
917
917
if !llvm_linker_flags. is_empty ( ) {
918
- cargo . env ( "LLVM_LINKER_FLAGS" , llvm_linker_flags ) ;
918
+ llvm_linker_flags . push_str ( " " ) ;
919
919
}
920
+ llvm_linker_flags. push_str ( s) ;
921
+ }
920
922
921
- // Building with a static libstdc++ is only supported on linux right now,
922
- // not for MSVC or macOS
923
- if builder. config . llvm_static_stdcpp
924
- && !target. contains ( "freebsd" )
925
- && !target. contains ( "msvc" )
926
- && !target. contains ( "apple" )
927
- && !target. contains ( "solaris" )
928
- {
929
- let file = compiler_file (
930
- builder,
931
- builder. cxx ( target) . unwrap ( ) ,
932
- target,
933
- CLang :: Cxx ,
934
- "libstdc++.a" ,
935
- ) ;
936
- cargo. env ( "LLVM_STATIC_STDCPP" , file) ;
937
- }
938
- if builder. llvm_link_shared ( ) {
939
- cargo. env ( "LLVM_LINK_SHARED" , "1" ) ;
940
- }
941
- if builder. config . llvm_use_libcxx {
942
- cargo. env ( "LLVM_USE_LIBCXX" , "1" ) ;
943
- }
944
- if builder. config . llvm_optimize && !builder. config . llvm_release_debuginfo {
945
- cargo. env ( "LLVM_NDEBUG" , "1" ) ;
946
- }
923
+ // Set the linker flags via the env var that `rustc_llvm`'s build script will read.
924
+ if !llvm_linker_flags. is_empty ( ) {
925
+ cargo. env ( "LLVM_LINKER_FLAGS" , llvm_linker_flags) ;
926
+ }
927
+
928
+ // Building with a static libstdc++ is only supported on linux right now,
929
+ // not for MSVC or macOS
930
+ if builder. config . llvm_static_stdcpp
931
+ && !target. contains ( "freebsd" )
932
+ && !target. contains ( "msvc" )
933
+ && !target. contains ( "apple" )
934
+ && !target. contains ( "solaris" )
935
+ {
936
+ let file = compiler_file (
937
+ builder,
938
+ builder. cxx ( target) . unwrap ( ) ,
939
+ target,
940
+ CLang :: Cxx ,
941
+ "libstdc++.a" ,
942
+ ) ;
943
+ cargo. env ( "LLVM_STATIC_STDCPP" , file) ;
944
+ }
945
+ if builder. llvm_link_shared ( ) {
946
+ cargo. env ( "LLVM_LINK_SHARED" , "1" ) ;
947
+ }
948
+ if builder. config . llvm_use_libcxx {
949
+ cargo. env ( "LLVM_USE_LIBCXX" , "1" ) ;
950
+ }
951
+ if builder. config . llvm_optimize && !builder. config . llvm_release_debuginfo {
952
+ cargo. env ( "LLVM_NDEBUG" , "1" ) ;
947
953
}
948
954
}
949
955
0 commit comments