@@ -115,6 +115,13 @@ impl Build {
115
115
_ => { }
116
116
}
117
117
118
+ let target_pointer_width = env:: var ( "CARGO_CFG_TARGET_POINTER_WIDTH" ) . unwrap ( ) ;
119
+ if target_pointer_width == "32" && env:: var_os ( "HOST_CC" ) . is_none ( ) {
120
+ // 32-bit cross-compilation?
121
+ let host_cc = cc:: Build :: new ( ) . target ( host) . get_compiler ( ) ;
122
+ make. env ( "HOST_CC" , format ! ( "{} -m32" , host_cc. path( ) . display( ) ) ) ;
123
+ }
124
+
118
125
// Infer ar/ranlib tools from cross compilers if the it looks like
119
126
// we're doing something like `foo-gcc` route that to `foo-ranlib`
120
127
// as well.
@@ -129,43 +136,54 @@ impl Build {
129
136
let compiler_path =
130
137
which:: which ( compiler_path) . expect ( & format ! ( "cannot find {compiler_path}" ) ) ;
131
138
let bindir = compiler_path. parent ( ) . unwrap ( ) ;
132
- make. env ( "STATIC_CC" , & compiler_path) ;
133
- make. env ( "TARGET_LD" , & compiler_path) ;
139
+ let compiler_path = compiler_path. to_string_lossy ( ) ;
140
+ let compiler_args = compiler. cflags_env ( ) ;
141
+ let compiler_args = compiler_args. to_string_lossy ( ) ;
142
+ if env:: var_os ( "STATIC_CC" ) . is_none ( ) {
143
+ make. env ( "STATIC_CC" , format ! ( "{compiler_path} {compiler_args}" ) ) ;
144
+ }
145
+ if env:: var_os ( "TARGET_LD" ) . is_none ( ) {
146
+ make. env ( "TARGET_LD" , format ! ( "{compiler_path} {compiler_args}" ) ) ;
147
+ }
134
148
135
149
// Find ar
136
- if bindir. join ( format ! ( "{prefix}ar" ) ) . is_file ( ) {
137
- let mut ar = bindir. join ( format ! ( "{prefix}ar" ) ) . into_os_string ( ) ;
138
- ar. push ( " rcus" ) ;
139
- make. env ( "TARGET_AR" , ar) ;
140
- } else if compiler. is_like_clang ( ) {
141
- if bindir. join ( "llvm-ar" ) . is_file ( ) {
142
- let mut ar = bindir. join ( "llvm-ar" ) . into_os_string ( ) ;
150
+ if env:: var_os ( "TARGET_AR" ) . is_none ( ) {
151
+ if bindir. join ( format ! ( "{prefix}ar" ) ) . is_file ( ) {
152
+ let mut ar = bindir. join ( format ! ( "{prefix}ar" ) ) . into_os_string ( ) ;
153
+ ar. push ( " rcus" ) ;
154
+ make. env ( "TARGET_AR" , ar) ;
155
+ } else if compiler. is_like_clang ( ) {
156
+ if bindir. join ( "llvm-ar" ) . is_file ( ) {
157
+ let mut ar = bindir. join ( "llvm-ar" ) . into_os_string ( ) ;
158
+ ar. push ( " rcus" ) ;
159
+ make. env ( "TARGET_AR" , ar) ;
160
+ } else {
161
+ panic ! ( "cannot find {prefix}ar or llvm-ar" ) ;
162
+ }
163
+ } else if compiler. is_like_gnu ( ) && bindir. join ( "ar" ) . is_file ( ) {
164
+ let mut ar = bindir. join ( "ar" ) . into_os_string ( ) ;
143
165
ar. push ( " rcus" ) ;
144
166
make. env ( "TARGET_AR" , ar) ;
145
167
} else {
146
- panic ! ( "cannot find {prefix}ar or llvm-ar " ) ;
168
+ panic ! ( "cannot find {prefix}ar" ) ;
147
169
}
148
- } else if compiler. is_like_gnu ( ) && bindir. join ( "ar" ) . is_file ( ) {
149
- let mut ar = bindir. join ( "ar" ) . into_os_string ( ) ;
150
- ar. push ( " rcus" ) ;
151
- make. env ( "TARGET_AR" , ar) ;
152
- } else {
153
- panic ! ( "cannot find {prefix}ar" ) ;
154
170
}
155
171
156
172
// Find strip
157
- if bindir. join ( format ! ( "{prefix}strip" ) ) . is_file ( ) {
158
- make. env ( "TARGET_STRIP" , bindir. join ( format ! ( "{prefix}strip" ) ) ) ;
159
- } else if compiler. is_like_clang ( ) {
160
- if bindir. join ( "llvm-strip" ) . is_file ( ) {
161
- make. env ( "TARGET_STRIP" , bindir. join ( "llvm-strip" ) ) ;
173
+ if env:: var_os ( "TARGET_STRIP" ) . is_none ( ) {
174
+ if bindir. join ( format ! ( "{prefix}strip" ) ) . is_file ( ) {
175
+ make. env ( "TARGET_STRIP" , bindir. join ( format ! ( "{prefix}strip" ) ) ) ;
176
+ } else if compiler. is_like_clang ( ) {
177
+ if bindir. join ( "llvm-strip" ) . is_file ( ) {
178
+ make. env ( "TARGET_STRIP" , bindir. join ( "llvm-strip" ) ) ;
179
+ } else {
180
+ panic ! ( "cannot find {prefix}strip or llvm-strip" ) ;
181
+ }
182
+ } else if compiler. is_like_gnu ( ) && bindir. join ( "strip" ) . is_file ( ) {
183
+ make. env ( "TARGET_STRIP" , bindir. join ( "strip" ) ) ;
162
184
} else {
163
- panic ! ( "cannot find {prefix}strip or llvm-strip " ) ;
185
+ panic ! ( "cannot find {prefix}strip" ) ;
164
186
}
165
- } else if compiler. is_like_gnu ( ) && bindir. join ( "strip" ) . is_file ( ) {
166
- make. env ( "TARGET_STRIP" , bindir. join ( "strip" ) ) ;
167
- } else {
168
- panic ! ( "cannot find {prefix}strip" ) ;
169
187
}
170
188
171
189
let mut xcflags = vec ! [ "-fPIC" ] ;
0 commit comments