@@ -1998,83 +1998,7 @@ impl Build {
1998
1998
} else if target. contains ( "vxworks" ) {
1999
1999
"wr-c++" . to_string ( )
2000
2000
} else if self . get_host ( ) ? != target {
2001
- // CROSS_COMPILE is of the form: "arm-linux-gnueabi-"
2002
- let cc_env = self . getenv ( "CROSS_COMPILE" ) ;
2003
- let cross_compile = cc_env. as_ref ( ) . map ( |s| s. trim_right_matches ( '-' ) ) ;
2004
- let prefix = cross_compile. or ( match & target[ ..] {
2005
- "aarch64-unknown-linux-gnu" => Some ( "aarch64-linux-gnu" ) ,
2006
- "aarch64-unknown-linux-musl" => Some ( "aarch64-linux-musl" ) ,
2007
- "aarch64-unknown-netbsd" => Some ( "aarch64--netbsd" ) ,
2008
- "arm-unknown-linux-gnueabi" => Some ( "arm-linux-gnueabi" ) ,
2009
- "armv4t-unknown-linux-gnueabi" => Some ( "arm-linux-gnueabi" ) ,
2010
- "armv5te-unknown-linux-gnueabi" => Some ( "arm-linux-gnueabi" ) ,
2011
- "armv5te-unknown-linux-musleabi" => Some ( "arm-linux-gnueabi" ) ,
2012
- "arm-frc-linux-gnueabi" => Some ( "arm-frc-linux-gnueabi" ) ,
2013
- "arm-unknown-linux-gnueabihf" => Some ( "arm-linux-gnueabihf" ) ,
2014
- "arm-unknown-linux-musleabi" => Some ( "arm-linux-musleabi" ) ,
2015
- "arm-unknown-linux-musleabihf" => Some ( "arm-linux-musleabihf" ) ,
2016
- "arm-unknown-netbsd-eabi" => Some ( "arm--netbsdelf-eabi" ) ,
2017
- "armv6-unknown-netbsd-eabihf" => Some ( "armv6--netbsdelf-eabihf" ) ,
2018
- "armv7-unknown-linux-gnueabihf" => Some ( "arm-linux-gnueabihf" ) ,
2019
- "armv7-unknown-linux-musleabihf" => Some ( "arm-linux-musleabihf" ) ,
2020
- "armv7neon-unknown-linux-gnueabihf" => Some ( "arm-linux-gnueabihf" ) ,
2021
- "armv7neon-unknown-linux-musleabihf" => Some ( "arm-linux-musleabihf" ) ,
2022
- "thumbv7-unknown-linux-gnueabihf" => Some ( "arm-linux-gnueabihf" ) ,
2023
- "thumbv7-unknown-linux-musleabihf" => Some ( "arm-linux-musleabihf" ) ,
2024
- "thumbv7neon-unknown-linux-gnueabihf" => Some ( "arm-linux-gnueabihf" ) ,
2025
- "thumbv7neon-unknown-linux-musleabihf" => Some ( "arm-linux-musleabihf" ) ,
2026
- "armv7-unknown-netbsd-eabihf" => Some ( "armv7--netbsdelf-eabihf" ) ,
2027
- "i586-unknown-linux-musl" => Some ( "musl" ) ,
2028
- "i686-pc-windows-gnu" => Some ( "i686-w64-mingw32" ) ,
2029
- "i686-uwp-windows-gnu" => Some ( "i686-w64-mingw32" ) ,
2030
- "i686-unknown-linux-musl" => Some ( "musl" ) ,
2031
- "i686-unknown-netbsd" => Some ( "i486--netbsdelf" ) ,
2032
- "mips-unknown-linux-gnu" => Some ( "mips-linux-gnu" ) ,
2033
- "mipsel-unknown-linux-gnu" => Some ( "mipsel-linux-gnu" ) ,
2034
- "mips64-unknown-linux-gnuabi64" => Some ( "mips64-linux-gnuabi64" ) ,
2035
- "mips64el-unknown-linux-gnuabi64" => Some ( "mips64el-linux-gnuabi64" ) ,
2036
- "mipsisa32r6-unknown-linux-gnu" => Some ( "mipsisa32r6-linux-gnu" ) ,
2037
- "mipsisa32r6el-unknown-linux-gnu" => Some ( "mipsisa32r6el-linux-gnu" ) ,
2038
- "mipsisa64r6-unknown-linux-gnuabi64" => Some ( "mipsisa64r6-linux-gnuabi64" ) ,
2039
- "mipsisa64r6el-unknown-linux-gnuabi64" => {
2040
- Some ( "mipsisa64r6el-linux-gnuabi64" )
2041
- }
2042
- "powerpc-unknown-linux-gnu" => Some ( "powerpc-linux-gnu" ) ,
2043
- "powerpc-unknown-linux-gnuspe" => Some ( "powerpc-linux-gnuspe" ) ,
2044
- "powerpc-unknown-netbsd" => Some ( "powerpc--netbsd" ) ,
2045
- "powerpc64-unknown-linux-gnu" => Some ( "powerpc-linux-gnu" ) ,
2046
- "powerpc64le-unknown-linux-gnu" => Some ( "powerpc64le-linux-gnu" ) ,
2047
- "riscv32i-unknown-none-elf" => Some ( "riscv32-unknown-elf" ) ,
2048
- "riscv32imac-unknown-none-elf" => Some ( "riscv32-unknown-elf" ) ,
2049
- "riscv32imc-unknown-none-elf" => Some ( "riscv32-unknown-elf" ) ,
2050
- "riscv64gc-unknown-none-elf" => Some ( "riscv64-unknown-elf" ) ,
2051
- "riscv64imac-unknown-none-elf" => Some ( "riscv64-unknown-elf" ) ,
2052
- "riscv64gc-unknown-linux-gnu" => Some ( "riscv64-linux-gnu" ) ,
2053
- "s390x-unknown-linux-gnu" => Some ( "s390x-linux-gnu" ) ,
2054
- "sparc-unknown-linux-gnu" => Some ( "sparc-linux-gnu" ) ,
2055
- "sparc64-unknown-linux-gnu" => Some ( "sparc64-linux-gnu" ) ,
2056
- "sparc64-unknown-netbsd" => Some ( "sparc64--netbsd" ) ,
2057
- "sparcv9-sun-solaris" => Some ( "sparcv9-sun-solaris" ) ,
2058
- "armv7a-none-eabi" => Some ( "arm-none-eabi" ) ,
2059
- "armv7a-none-eabihf" => Some ( "arm-none-eabi" ) ,
2060
- "armebv7r-none-eabi" => Some ( "arm-none-eabi" ) ,
2061
- "armebv7r-none-eabihf" => Some ( "arm-none-eabi" ) ,
2062
- "armv7r-none-eabi" => Some ( "arm-none-eabi" ) ,
2063
- "armv7r-none-eabihf" => Some ( "arm-none-eabi" ) ,
2064
- "thumbv6m-none-eabi" => Some ( "arm-none-eabi" ) ,
2065
- "thumbv7em-none-eabi" => Some ( "arm-none-eabi" ) ,
2066
- "thumbv7em-none-eabihf" => Some ( "arm-none-eabi" ) ,
2067
- "thumbv7m-none-eabi" => Some ( "arm-none-eabi" ) ,
2068
- "thumbv8m.base-none-eabi" => Some ( "arm-none-eabi" ) ,
2069
- "thumbv8m.main-none-eabi" => Some ( "arm-none-eabi" ) ,
2070
- "thumbv8m.main-none-eabihf" => Some ( "arm-none-eabi" ) ,
2071
- "x86_64-pc-windows-gnu" => Some ( "x86_64-w64-mingw32" ) ,
2072
- "x86_64-uwp-windows-gnu" => Some ( "x86_64-w64-mingw32" ) ,
2073
- "x86_64-rumprun-netbsd" => Some ( "x86_64-rumprun-netbsd" ) ,
2074
- "x86_64-unknown-linux-musl" => Some ( "musl" ) ,
2075
- "x86_64-unknown-netbsd" => Some ( "x86_64--netbsd" ) ,
2076
- _ => None ,
2077
- } ) ;
2001
+ let prefix = self . prefix_for_target ( & target) ;
2078
2002
match prefix {
2079
2003
Some ( prefix) => format ! ( "{}-{}" , prefix, gnu) ,
2080
2004
None => default. to_string ( ) ,
@@ -2284,6 +2208,7 @@ impl Build {
2284
2208
return Ok ( ( self . cmd ( & p) , p) ) ;
2285
2209
}
2286
2210
let target = self . get_target ( ) ?;
2211
+ let default_ar = "ar" . to_string ( ) ;
2287
2212
let program = if target. contains ( "android" ) {
2288
2213
format ! ( "{}-ar" , target. replace( "armv7" , "arm" ) )
2289
2214
} else if target. contains ( "emscripten" ) {
@@ -2300,12 +2225,105 @@ impl Build {
2300
2225
Some ( t) => return Ok ( ( t, "lib.exe" . to_string ( ) ) ) ,
2301
2226
None => "lib.exe" . to_string ( ) ,
2302
2227
}
2228
+ } else if self . get_host ( ) ? != target {
2229
+ match self . prefix_for_target ( & target) {
2230
+ Some ( p) => {
2231
+ let target_ar = format ! ( "{}-ar" , p) ;
2232
+ if Command :: new ( & target_ar) . output ( ) . is_ok ( ) {
2233
+ target_ar
2234
+ } else {
2235
+ default_ar
2236
+ }
2237
+ }
2238
+ None => default_ar,
2239
+ }
2303
2240
} else {
2304
- "ar" . to_string ( )
2241
+ default_ar
2305
2242
} ;
2306
2243
Ok ( ( self . cmd ( & program) , program) )
2307
2244
}
2308
2245
2246
+ fn prefix_for_target ( & self , target : & str ) -> Option < String > {
2247
+ // CROSS_COMPILE is of the form: "arm-linux-gnueabi-"
2248
+ let cc_env = self . getenv ( "CROSS_COMPILE" ) ;
2249
+ let cross_compile = cc_env
2250
+ . as_ref ( )
2251
+ . map ( |s| s. trim_right_matches ( '-' ) . to_owned ( ) ) ;
2252
+ cross_compile. or ( match & target[ ..] {
2253
+ "aarch64-unknown-linux-gnu" => Some ( "aarch64-linux-gnu" ) ,
2254
+ "aarch64-unknown-linux-musl" => Some ( "aarch64-linux-musl" ) ,
2255
+ "aarch64-unknown-netbsd" => Some ( "aarch64--netbsd" ) ,
2256
+ "arm-unknown-linux-gnueabi" => Some ( "arm-linux-gnueabi" ) ,
2257
+ "armv4t-unknown-linux-gnueabi" => Some ( "arm-linux-gnueabi" ) ,
2258
+ "armv5te-unknown-linux-gnueabi" => Some ( "arm-linux-gnueabi" ) ,
2259
+ "armv5te-unknown-linux-musleabi" => Some ( "arm-linux-gnueabi" ) ,
2260
+ "arm-frc-linux-gnueabi" => Some ( "arm-frc-linux-gnueabi" ) ,
2261
+ "arm-unknown-linux-gnueabihf" => Some ( "arm-linux-gnueabihf" ) ,
2262
+ "arm-unknown-linux-musleabi" => Some ( "arm-linux-musleabi" ) ,
2263
+ "arm-unknown-linux-musleabihf" => Some ( "arm-linux-musleabihf" ) ,
2264
+ "arm-unknown-netbsd-eabi" => Some ( "arm--netbsdelf-eabi" ) ,
2265
+ "armv6-unknown-netbsd-eabihf" => Some ( "armv6--netbsdelf-eabihf" ) ,
2266
+ "armv7-unknown-linux-gnueabihf" => Some ( "arm-linux-gnueabihf" ) ,
2267
+ "armv7-unknown-linux-musleabihf" => Some ( "arm-linux-musleabihf" ) ,
2268
+ "armv7neon-unknown-linux-gnueabihf" => Some ( "arm-linux-gnueabihf" ) ,
2269
+ "armv7neon-unknown-linux-musleabihf" => Some ( "arm-linux-musleabihf" ) ,
2270
+ "thumbv7-unknown-linux-gnueabihf" => Some ( "arm-linux-gnueabihf" ) ,
2271
+ "thumbv7-unknown-linux-musleabihf" => Some ( "arm-linux-musleabihf" ) ,
2272
+ "thumbv7neon-unknown-linux-gnueabihf" => Some ( "arm-linux-gnueabihf" ) ,
2273
+ "thumbv7neon-unknown-linux-musleabihf" => Some ( "arm-linux-musleabihf" ) ,
2274
+ "armv7-unknown-netbsd-eabihf" => Some ( "armv7--netbsdelf-eabihf" ) ,
2275
+ "i586-unknown-linux-musl" => Some ( "musl" ) ,
2276
+ "i686-pc-windows-gnu" => Some ( "i686-w64-mingw32" ) ,
2277
+ "i686-uwp-windows-gnu" => Some ( "i686-w64-mingw32" ) ,
2278
+ "i686-unknown-linux-musl" => Some ( "musl" ) ,
2279
+ "i686-unknown-netbsd" => Some ( "i486--netbsdelf" ) ,
2280
+ "mips-unknown-linux-gnu" => Some ( "mips-linux-gnu" ) ,
2281
+ "mipsel-unknown-linux-gnu" => Some ( "mipsel-linux-gnu" ) ,
2282
+ "mips64-unknown-linux-gnuabi64" => Some ( "mips64-linux-gnuabi64" ) ,
2283
+ "mips64el-unknown-linux-gnuabi64" => Some ( "mips64el-linux-gnuabi64" ) ,
2284
+ "mipsisa32r6-unknown-linux-gnu" => Some ( "mipsisa32r6-linux-gnu" ) ,
2285
+ "mipsisa32r6el-unknown-linux-gnu" => Some ( "mipsisa32r6el-linux-gnu" ) ,
2286
+ "mipsisa64r6-unknown-linux-gnuabi64" => Some ( "mipsisa64r6-linux-gnuabi64" ) ,
2287
+ "mipsisa64r6el-unknown-linux-gnuabi64" => Some ( "mipsisa64r6el-linux-gnuabi64" ) ,
2288
+ "powerpc-unknown-linux-gnu" => Some ( "powerpc-linux-gnu" ) ,
2289
+ "powerpc-unknown-linux-gnuspe" => Some ( "powerpc-linux-gnuspe" ) ,
2290
+ "powerpc-unknown-netbsd" => Some ( "powerpc--netbsd" ) ,
2291
+ "powerpc64-unknown-linux-gnu" => Some ( "powerpc-linux-gnu" ) ,
2292
+ "powerpc64le-unknown-linux-gnu" => Some ( "powerpc64le-linux-gnu" ) ,
2293
+ "riscv32i-unknown-none-elf" => Some ( "riscv32-unknown-elf" ) ,
2294
+ "riscv32imac-unknown-none-elf" => Some ( "riscv32-unknown-elf" ) ,
2295
+ "riscv32imc-unknown-none-elf" => Some ( "riscv32-unknown-elf" ) ,
2296
+ "riscv64gc-unknown-none-elf" => Some ( "riscv64-unknown-elf" ) ,
2297
+ "riscv64imac-unknown-none-elf" => Some ( "riscv64-unknown-elf" ) ,
2298
+ "riscv64gc-unknown-linux-gnu" => Some ( "riscv64-linux-gnu" ) ,
2299
+ "s390x-unknown-linux-gnu" => Some ( "s390x-linux-gnu" ) ,
2300
+ "sparc-unknown-linux-gnu" => Some ( "sparc-linux-gnu" ) ,
2301
+ "sparc64-unknown-linux-gnu" => Some ( "sparc64-linux-gnu" ) ,
2302
+ "sparc64-unknown-netbsd" => Some ( "sparc64--netbsd" ) ,
2303
+ "sparcv9-sun-solaris" => Some ( "sparcv9-sun-solaris" ) ,
2304
+ "armv7a-none-eabi" => Some ( "arm-none-eabi" ) ,
2305
+ "armv7a-none-eabihf" => Some ( "arm-none-eabi" ) ,
2306
+ "armebv7r-none-eabi" => Some ( "arm-none-eabi" ) ,
2307
+ "armebv7r-none-eabihf" => Some ( "arm-none-eabi" ) ,
2308
+ "armv7r-none-eabi" => Some ( "arm-none-eabi" ) ,
2309
+ "armv7r-none-eabihf" => Some ( "arm-none-eabi" ) ,
2310
+ "thumbv6m-none-eabi" => Some ( "arm-none-eabi" ) ,
2311
+ "thumbv7em-none-eabi" => Some ( "arm-none-eabi" ) ,
2312
+ "thumbv7em-none-eabihf" => Some ( "arm-none-eabi" ) ,
2313
+ "thumbv7m-none-eabi" => Some ( "arm-none-eabi" ) ,
2314
+ "thumbv8m.base-none-eabi" => Some ( "arm-none-eabi" ) ,
2315
+ "thumbv8m.main-none-eabi" => Some ( "arm-none-eabi" ) ,
2316
+ "thumbv8m.main-none-eabihf" => Some ( "arm-none-eabi" ) ,
2317
+ "x86_64-pc-windows-gnu" => Some ( "x86_64-w64-mingw32" ) ,
2318
+ "x86_64-uwp-windows-gnu" => Some ( "x86_64-w64-mingw32" ) ,
2319
+ "x86_64-rumprun-netbsd" => Some ( "x86_64-rumprun-netbsd" ) ,
2320
+ "x86_64-unknown-linux-musl" => Some ( "musl" ) ,
2321
+ "x86_64-unknown-netbsd" => Some ( "x86_64--netbsd" ) ,
2322
+ _ => None ,
2323
+ }
2324
+ . map ( |x| x. to_owned ( ) ) )
2325
+ }
2326
+
2309
2327
fn get_target ( & self ) -> Result < String , Error > {
2310
2328
match self . target . clone ( ) {
2311
2329
Some ( t) => Ok ( t) ,
0 commit comments