@@ -1890,93 +1890,39 @@ impl Build {
1890
1890
}
1891
1891
1892
1892
// Target flags
1893
+ if target. contains ( "-apple-" ) {
1894
+ self . apple_flags ( cmd, target) ?;
1895
+ } else {
1896
+ self . target_flags ( cmd, target) ;
1897
+ }
1898
+
1899
+ if self . static_flag . unwrap_or ( false ) {
1900
+ cmd. args . push ( "-static" . into ( ) ) ;
1901
+ }
1902
+ if self . shared_flag . unwrap_or ( false ) {
1903
+ cmd. args . push ( "-shared" . into ( ) ) ;
1904
+ }
1905
+
1906
+ if self . cpp {
1907
+ match ( self . cpp_set_stdlib . as_ref ( ) , cmd. family ) {
1908
+ ( None , _) => { }
1909
+ ( Some ( stdlib) , ToolFamily :: Gnu ) | ( Some ( stdlib) , ToolFamily :: Clang ) => {
1910
+ cmd. push_cc_arg ( format ! ( "-stdlib=lib{}" , stdlib) . into ( ) ) ;
1911
+ }
1912
+ _ => {
1913
+ self . cargo_output . print_warning ( & format_args ! ( "cpp_set_stdlib is specified, but the {:?} compiler does not support this option, ignored" , cmd. family) ) ;
1914
+ }
1915
+ }
1916
+ }
1917
+
1918
+ Ok ( ( ) )
1919
+ }
1920
+
1921
+ fn target_flags ( & self , cmd : & mut Tool , target : & str ) {
1893
1922
match cmd. family {
1894
1923
ToolFamily :: Clang => {
1895
1924
if !( target. contains ( "android" ) && cmd. has_internal_target_arg ) {
1896
- if target. contains ( "darwin" ) {
1897
- if let Some ( arch) =
1898
- map_darwin_target_from_rust_to_compiler_architecture ( target)
1899
- {
1900
- cmd. args
1901
- . push ( format ! ( "--target={}-apple-darwin" , arch) . into ( ) ) ;
1902
- }
1903
- } else if target. contains ( "macabi" ) {
1904
- if let Some ( arch) =
1905
- map_darwin_target_from_rust_to_compiler_architecture ( target)
1906
- {
1907
- cmd. args
1908
- . push ( format ! ( "--target={}-apple-ios-macabi" , arch) . into ( ) ) ;
1909
- }
1910
- } else if target. contains ( "ios-sim" ) {
1911
- if let Some ( arch) =
1912
- map_darwin_target_from_rust_to_compiler_architecture ( target)
1913
- {
1914
- let sdk_details =
1915
- apple_os_sdk_parts ( AppleOs :: Ios , & AppleArchSpec :: Simulator ( "" ) ) ;
1916
- let deployment_target =
1917
- self . apple_deployment_version ( AppleOs :: Ios , None , & sdk_details. sdk ) ;
1918
- cmd. args . push (
1919
- format ! (
1920
- "--target={}-apple-ios{}-simulator" ,
1921
- arch, deployment_target
1922
- )
1923
- . into ( ) ,
1924
- ) ;
1925
- }
1926
- } else if target. contains ( "watchos-sim" ) {
1927
- if let Some ( arch) =
1928
- map_darwin_target_from_rust_to_compiler_architecture ( target)
1929
- {
1930
- let sdk_details =
1931
- apple_os_sdk_parts ( AppleOs :: WatchOs , & AppleArchSpec :: Simulator ( "" ) ) ;
1932
- let deployment_target = self . apple_deployment_version (
1933
- AppleOs :: WatchOs ,
1934
- None ,
1935
- & sdk_details. sdk ,
1936
- ) ;
1937
- cmd. args . push (
1938
- format ! (
1939
- "--target={}-apple-watchos{}-simulator" ,
1940
- arch, deployment_target
1941
- )
1942
- . into ( ) ,
1943
- ) ;
1944
- }
1945
- } else if target. contains ( "tvos-sim" ) || target. contains ( "x86_64-apple-tvos" ) {
1946
- if let Some ( arch) =
1947
- map_darwin_target_from_rust_to_compiler_architecture ( target)
1948
- {
1949
- let sdk_details =
1950
- apple_os_sdk_parts ( AppleOs :: TvOs , & AppleArchSpec :: Simulator ( "" ) ) ;
1951
- let deployment_target = self . apple_deployment_version (
1952
- AppleOs :: TvOs ,
1953
- None ,
1954
- & sdk_details. sdk ,
1955
- ) ;
1956
- cmd. args . push (
1957
- format ! (
1958
- "--target={}-apple-tvos{}-simulator" ,
1959
- arch, deployment_target
1960
- )
1961
- . into ( ) ,
1962
- ) ;
1963
- }
1964
- } else if target. contains ( "aarch64-apple-tvos" ) {
1965
- if let Some ( arch) =
1966
- map_darwin_target_from_rust_to_compiler_architecture ( target)
1967
- {
1968
- let sdk_details =
1969
- apple_os_sdk_parts ( AppleOs :: TvOs , & AppleArchSpec :: Device ( "" ) ) ;
1970
- let deployment_target = self . apple_deployment_version (
1971
- AppleOs :: TvOs ,
1972
- None ,
1973
- & sdk_details. sdk ,
1974
- ) ;
1975
- cmd. args . push (
1976
- format ! ( "--target={}-apple-tvos{}" , arch, deployment_target) . into ( ) ,
1977
- ) ;
1978
- }
1979
- } else if target. starts_with ( "riscv64gc-" ) {
1925
+ if target. starts_with ( "riscv64gc-" ) {
1980
1926
cmd. args . push (
1981
1927
format ! ( "--target={}" , target. replace( "riscv64gc" , "riscv64" ) ) . into ( ) ,
1982
1928
) ;
@@ -2059,14 +2005,6 @@ impl Build {
2059
2005
}
2060
2006
}
2061
2007
ToolFamily :: Gnu => {
2062
- if target. contains ( "darwin" ) {
2063
- if let Some ( arch) = map_darwin_target_from_rust_to_compiler_architecture ( target)
2064
- {
2065
- cmd. args . push ( "-arch" . into ( ) ) ;
2066
- cmd. args . push ( arch. into ( ) ) ;
2067
- }
2068
- }
2069
-
2070
2008
if target. contains ( "-kmc-solid_" ) {
2071
2009
cmd. args . push ( "-finput-charset=utf-8" . into ( ) ) ;
2072
2010
}
@@ -2254,31 +2192,6 @@ impl Build {
2254
2192
}
2255
2193
}
2256
2194
}
2257
-
2258
- if target. contains ( "-apple-" ) {
2259
- self . apple_flags ( cmd) ?;
2260
- }
2261
-
2262
- if self . static_flag . unwrap_or ( false ) {
2263
- cmd. args . push ( "-static" . into ( ) ) ;
2264
- }
2265
- if self . shared_flag . unwrap_or ( false ) {
2266
- cmd. args . push ( "-shared" . into ( ) ) ;
2267
- }
2268
-
2269
- if self . cpp {
2270
- match ( self . cpp_set_stdlib . as_ref ( ) , cmd. family ) {
2271
- ( None , _) => { }
2272
- ( Some ( stdlib) , ToolFamily :: Gnu ) | ( Some ( stdlib) , ToolFamily :: Clang ) => {
2273
- cmd. push_cc_arg ( format ! ( "-stdlib=lib{}" , stdlib) . into ( ) ) ;
2274
- }
2275
- _ => {
2276
- self . cargo_output . print_warning ( & format_args ! ( "cpp_set_stdlib is specified, but the {:?} compiler does not support this option, ignored" , cmd. family) ) ;
2277
- }
2278
- }
2279
- }
2280
-
2281
- Ok ( ( ) )
2282
2195
}
2283
2196
2284
2197
fn has_flags ( & self ) -> bool {
@@ -2469,8 +2382,7 @@ impl Build {
2469
2382
Ok ( ( ) )
2470
2383
}
2471
2384
2472
- fn apple_flags ( & self , cmd : & mut Tool ) -> Result < ( ) , Error > {
2473
- let target = self . get_target ( ) ?;
2385
+ fn apple_flags ( & self , cmd : & mut Tool , target : & str ) -> Result < ( ) , Error > {
2474
2386
let os = if target. contains ( "-darwin" ) {
2475
2387
AppleOs :: MacOs
2476
2388
} else if target. contains ( "-watchos" ) {
@@ -2601,6 +2513,62 @@ impl Build {
2601
2513
cmd. args . push ( sdk_path) ;
2602
2514
}
2603
2515
2516
+ match cmd. family {
2517
+ ToolFamily :: Gnu => {
2518
+ if target. contains ( "darwin" ) {
2519
+ if let Some ( arch) = map_darwin_target_from_rust_to_compiler_architecture ( target)
2520
+ {
2521
+ cmd. args . push ( "-arch" . into ( ) ) ;
2522
+ cmd. args . push ( arch. into ( ) ) ;
2523
+ }
2524
+ }
2525
+ }
2526
+ ToolFamily :: Clang => {
2527
+ if target. contains ( "darwin" ) {
2528
+ if let Some ( arch) = map_darwin_target_from_rust_to_compiler_architecture ( target)
2529
+ {
2530
+ cmd. args
2531
+ . push ( format ! ( "--target={}-apple-darwin" , arch) . into ( ) ) ;
2532
+ }
2533
+ } else if target. contains ( "macabi" ) {
2534
+ if let Some ( arch) = map_darwin_target_from_rust_to_compiler_architecture ( target)
2535
+ {
2536
+ cmd. args
2537
+ . push ( format ! ( "--target={}-apple-ios-macabi" , arch) . into ( ) ) ;
2538
+ }
2539
+ } else if target. contains ( "ios-sim" ) {
2540
+ if let Some ( arch) = map_darwin_target_from_rust_to_compiler_architecture ( target)
2541
+ {
2542
+ cmd. args . push (
2543
+ format ! ( "--target={}-apple-ios{}-simulator" , arch, min_version) . into ( ) ,
2544
+ ) ;
2545
+ }
2546
+ } else if target. contains ( "watchos-sim" ) {
2547
+ if let Some ( arch) = map_darwin_target_from_rust_to_compiler_architecture ( target)
2548
+ {
2549
+ cmd. args . push (
2550
+ format ! ( "--target={}-apple-watchos{}-simulator" , arch, min_version)
2551
+ . into ( ) ,
2552
+ ) ;
2553
+ }
2554
+ } else if target. contains ( "tvos-sim" ) || target. contains ( "x86_64-apple-tvos" ) {
2555
+ if let Some ( arch) = map_darwin_target_from_rust_to_compiler_architecture ( target)
2556
+ {
2557
+ cmd. args . push (
2558
+ format ! ( "--target={}-apple-tvos{}-simulator" , arch, min_version) . into ( ) ,
2559
+ ) ;
2560
+ }
2561
+ } else if target. contains ( "aarch64-apple-tvos" ) {
2562
+ if let Some ( arch) = map_darwin_target_from_rust_to_compiler_architecture ( target)
2563
+ {
2564
+ cmd. args
2565
+ . push ( format ! ( "--target={}-apple-tvos{}" , arch, min_version) . into ( ) ) ;
2566
+ }
2567
+ }
2568
+ }
2569
+ _ => unreachable ! ( "unexpected compiler for apple architectures" ) ,
2570
+ }
2571
+
2604
2572
if let AppleArchSpec :: Catalyst ( _) = arch {
2605
2573
// Mac Catalyst uses the macOS SDK, but to compile against and
2606
2574
// link to iOS-specific frameworks, we should have the support
0 commit comments