@@ -1998,83 +1998,7 @@ impl Build {
19981998 } else if target. contains ( "vxworks" ) {
19991999 "wr-c++" . to_string ( )
20002000 } 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) ;
20782002 match prefix {
20792003 Some ( prefix) => format ! ( "{}-{}" , prefix, gnu) ,
20802004 None => default. to_string ( ) ,
@@ -2284,6 +2208,7 @@ impl Build {
22842208 return Ok ( ( self . cmd ( & p) , p) ) ;
22852209 }
22862210 let target = self . get_target ( ) ?;
2211+ let default_ar = "ar" . to_string ( ) ;
22872212 let program = if target. contains ( "android" ) {
22882213 format ! ( "{}-ar" , target. replace( "armv7" , "arm" ) )
22892214 } else if target. contains ( "emscripten" ) {
@@ -2300,12 +2225,105 @@ impl Build {
23002225 Some ( t) => return Ok ( ( t, "lib.exe" . to_string ( ) ) ) ,
23012226 None => "lib.exe" . to_string ( ) ,
23022227 }
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+ }
23032240 } else {
2304- "ar" . to_string ( )
2241+ default_ar
23052242 } ;
23062243 Ok ( ( self . cmd ( & program) , program) )
23072244 }
23082245
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+
23092327 fn get_target ( & self ) -> Result < String , Error > {
23102328 match self . target . clone ( ) {
23112329 Some ( t) => Ok ( t) ,
0 commit comments