Contents of /trunk/include/multilib.sminc
Parent Directory | Revision Log
Revision 31852 -
(show annotations)
(download)
Thu Dec 20 13:40:54 2018 UTC (5 years, 9 months ago) by niro
File size: 11526 byte(s)
Thu Dec 20 13:40:54 2018 UTC (5 years, 9 months ago) by niro
File size: 11526 byte(s)
-honor rust targets on multilib builds
1 | # $Id$ |
2 | # multilib abis |
3 | |
4 | # tell the buildsystem that we are doing a multilib build |
5 | export MULTILIB_BUILD="true" |
6 | |
7 | # be verbose or nor (true|false} |
8 | : ${MULTILIB_VERBOSE="true"} |
9 | |
10 | # enter the abi srcdir as default setting |
11 | : ${MULTILIB_ENTER_SRCDIR="true"} |
12 | |
13 | # multilib should call all dependant includes, which gets overridden |
14 | sminclude mtools |
15 | |
16 | # do not define EMUL_LINUX_32 after inherit of multlib !! |
17 | # it may break i*86 builds |
18 | |
19 | # default ABIs to be build |
20 | case ${ARCH} in |
21 | x86_64) |
22 | : ${MULTILIB_ABIS="m32 m64"} |
23 | # default false |
24 | : ${EMUL_LINUX_32="false"} |
25 | |
26 | # add linux32 to the dependencies |
27 | if [[ ${EMUL_LINUX_32} = true ]] |
28 | then |
29 | EMUL_LINUX_32_SDEPEND_x86_64=">= sys-apps/util-linux-2.19" |
30 | SPECIAL_VARS="${SPECIAL_VARS} EMUL_LINUX_32_SDEPEND_x86_64" |
31 | fi |
32 | ;; |
33 | i*86) |
34 | : ${MULTILIB_ABIS="m32"} |
35 | # always false |
36 | EMUL_LINUX_32="false" |
37 | ;; |
38 | esac |
39 | |
40 | # add linux32 to the dependencies |
41 | if [[ ${EMUL_LINUX_32} = true ]] |
42 | then |
43 | # very dirty trick to get the dependencies right |
44 | # ; is the IFS, tr replaces ; with an crlfs |
45 | # the var ist decided with our common eval+echo magic |
46 | if [[ -z ${SDEPEND} ]] |
47 | then |
48 | SDEPEND="$(marchsdepend EMUL_LINUX_32_SDEPEND)" |
49 | else |
50 | SDEPEND="${SDEPEND} |
51 | $(marchsdepend EMUL_LINUX_32_SDEPEND)" |
52 | fi |
53 | fi |
54 | |
55 | ## |
56 | # overide some defaults to respect ABI_LIBDIR |
57 | ## |
58 | mlibdir() |
59 | { |
60 | local libdir=lib |
61 | [[ ${ARCH} = x86_64 ]] && libdir=lib64 |
62 | [[ -n ${ABI_LIBDIR} ]] && libdir="${ABI_LIBDIR}" |
63 | |
64 | echo "${libdir}" |
65 | } |
66 | |
67 | ## |
68 | # multilib abi changers |
69 | ## |
70 | abi-m32() |
71 | { |
72 | export ABI="m32" |
73 | export CC="gcc -${ABI}" |
74 | export CXX="g++ -${ABI}" |
75 | export ABI_LIBDIR="lib" |
76 | if [[ ${EXPORT_ABI_LDFLAGS} != false ]] |
77 | then |
78 | local saved_ldflags="${LDFLAGS}" |
79 | export LDFLAGS="${LDFLAGS} -L/${ABI_LIBDIR} -L/usr/${ABI_LIBDIR}" |
80 | fi |
81 | # keep pkgconfig clean |
82 | local orig_pkg_config_path="${PKG_CONFIG_PATH}" |
83 | export PKG_CONFIG_PATH="/usr/${ABI_LIBDIR}/pkgconfig:${PKG_CONFIG_PATH}" |
84 | |
85 | # honor rust |
86 | case ${ARCH} in |
87 | # use native abi as RUST_TARGET |
88 | i686) export RUST_TARGET="${ARCH}-unknown-linux-gnu" ;; |
89 | # use i686 as RUST_TARGET for i{3,4,5}86 targets and on multilib-x86_64 target too |
90 | i*86|x86_64) export RUST_TARGET="i686-unknown-linux-gnu" ;; |
91 | *) die "unknown RUST_TARGET '${ARCH}'" ;; |
92 | esac |
93 | |
94 | if [[ ${MULTILIB_VERBOSE} = true ]] |
95 | then |
96 | echo -e "${COLBLUE}*** ${COLGREEN}running with -${ABI} ABI${COLDEFAULT}" |
97 | echo -e "${COLBLUE}*** ${COLGREEN} ABI${COLDEFAULT}='${ABI}'" |
98 | echo -e "${COLBLUE}*** ${COLGREEN} CC${COLDEFAULT}='${CC}'" |
99 | echo -e "${COLBLUE}*** ${COLGREEN} CXX${COLDEFAULT}='${CXX}'" |
100 | echo -e "${COLBLUE}*** ${COLGREEN} ABI_LIBDIR${COLDEFAULT}='${ABI_LIBDIR}'" |
101 | if [[ ${EXPORT_ABI_LDFLAGS} != false ]] |
102 | then |
103 | echo -e "${COLBLUE}*** ${COLGREEN} LDFLAGS${COLDEFAULT}='${LDFLAGS}'" |
104 | else |
105 | echo -e "${COLBLUE}*** ${COLGREEN} LDFLAGS${COLDEFAULT}='${COLYELLOW}not exported${COLDEFAULT}'" |
106 | fi |
107 | echo -e "${COLBLUE}*** ${COLGREEN} CHOST${COLDEFAULT}='${CHOST}'" |
108 | echo -e "${COLBLUE}*** ${COLGREEN} SRCDIR${COLDEFAULT}='${SRCDIR}/${SRCSUBDIR}'" |
109 | echo -e "${COLBLUE}*** ${COLGREEN} PKG_CONFIG_PATH${COLDEFAULT}='${PKG_CONFIG_PATH}'" |
110 | fi |
111 | |
112 | # configure a linux32 emulated build |
113 | if [[ ${EMUL_LINUX_32} = true ]] |
114 | then |
115 | if [[ ${MULTILIB_VERBOSE} = true ]] |
116 | then |
117 | echo -e "${COLBLUE}*** ${COLGREEN} EMUL_LINUX_32${COLDEFAULT}='${EMUL_LINUX_32}'" |
118 | fi |
119 | uname(){ linux32 uname $@; } && export -f uname |
120 | local orig_chost="${CHOST}" && export CHOST="i686-pc-linux-gnu" |
121 | fi |
122 | if [[ ${MULTILIB_VERBOSE} = true ]] |
123 | then |
124 | echo -e "${COLBLUE}*** ${COLGREEN} CHOST${COLDEFAULT}='${CHOST}'" |
125 | fi |
126 | |
127 | # run any given command |
128 | if [[ ${MULTILIB_VERBOSE} = true ]] |
129 | then |
130 | echo -e "${COLGREEN}Executing:${COLDEFAULT} '$@'" |
131 | fi |
132 | eval $@ || die |
133 | |
134 | unset ABI CC CXX ABI_LIBDIR RUST_TARGET |
135 | # keep pkgconfig clean |
136 | export PKG_CONFIG_PATH="${orig_pkg_config_path}" |
137 | export LDFLAGS="${saved_ldflags}" |
138 | |
139 | # restore original settings |
140 | if [[ ${EMUL_LINUX_32} = true ]] |
141 | then |
142 | unset uname |
143 | export CHOST="${orig_chost}" && unset orig_chost |
144 | fi |
145 | } |
146 | |
147 | abi-m64() |
148 | { |
149 | export ABI="m64" |
150 | export CC="gcc -${ABI}" |
151 | export CXX="g++ -${ABI}" |
152 | export ABI_LIBDIR="lib64" |
153 | if [[ ${EXPORT_ABI_LDFLAGS} != false ]] |
154 | then |
155 | local saved_ldflags="${LDFLAGS}" |
156 | export LDFLAGS="-L/${ABI_LIBDIR} -L/usr/${ABI_LIBDIR}" |
157 | fi |
158 | # keep pkgconfig clean |
159 | local orig_pkg_config_path="${PKG_CONFIG_PATH}" |
160 | export PKG_CONFIG_PATH="/usr/${ABI_LIBDIR}/pkgconfig:${PKG_CONFIG_PATH}" |
161 | |
162 | # honor rust |
163 | case ${ARCH} in |
164 | # use native abi as RUST_TARGET |
165 | x86_64) export RUST_TARGET="${ARCH}-unknown-linux-gnu" ;; |
166 | *) die "unknown RUST_TARGET '${ARCH}'" ;; |
167 | esac |
168 | |
169 | if [[ ${MULTILIB_VERBOSE} = true ]] |
170 | then |
171 | echo -e "${COLBLUE}*** ${COLGREEN}running with -${ABI} ABI${COLDEFAULT}" |
172 | echo -e "${COLBLUE}*** ${COLGREEN} ABI${COLDEFAULT}='${ABI}'" |
173 | echo -e "${COLBLUE}*** ${COLGREEN} CC${COLDEFAULT}='${CC}'" |
174 | echo -e "${COLBLUE}*** ${COLGREEN} CXX${COLDEFAULT}='${CXX}'" |
175 | echo -e "${COLBLUE}*** ${COLGREEN} ABI_LIBDIR${COLDEFAULT}='${ABI_LIBDIR}'" |
176 | if [[ ${EXPORT_ABI_LDFLAGS} != false ]] |
177 | then |
178 | echo -e "${COLBLUE}*** ${COLGREEN} LDFLAGS${COLDEFAULT}='${LDFLAGS}'" |
179 | else |
180 | echo -e "${COLBLUE}*** ${COLGREEN} LDFLAGS${COLDEFAULT}='${COLYELLOW}not exported${COLDEFAULT}'" |
181 | fi |
182 | echo -e "${COLBLUE}*** ${COLGREEN} CHOST${COLDEFAULT}='${CHOST}'" |
183 | echo -e "${COLBLUE}*** ${COLGREEN} SRCDIR${COLDEFAULT}='${SRCDIR}/${SRCSUBDIR}'" |
184 | echo -e "${COLBLUE}*** ${COLGREEN} PKG_CONFIG_PATH${COLDEFAULT}='${PKG_CONFIG_PATH}'" |
185 | fi |
186 | |
187 | # run any given command |
188 | if [[ ${MULTILIB_VERBOSE} = true ]] |
189 | then |
190 | echo -e "${COLGREEN}Executing:${COLDEFAULT} '$@'" |
191 | fi |
192 | eval $@ || die |
193 | |
194 | unset ABI CC CXX ABI_LIBDIR RUST_TARGET |
195 | # keep pkgconfig clean |
196 | export PKG_CONFIG_PATH="${orig_pkg_config_path}" |
197 | export LDFLAGS="${saved_ldflags}" |
198 | } |
199 | |
200 | only-m32() |
201 | { |
202 | local abi=m32 |
203 | local i |
204 | |
205 | for i in ${MULTILIB_ABIS} |
206 | do |
207 | if [[ ${i} = ${abi} ]] |
208 | then |
209 | # export this for mpatch etc (to repect only-${abi}) |
210 | export MULTILIB_ONLY_ABI=${abi} |
211 | |
212 | if [[ ${MULTILIB_ENTER_SRCDIR} = true ]] |
213 | then |
214 | cd ${SRCDIR}-${abi}/${SRCSUBDIR} |
215 | fi |
216 | abi-${abi} $@ || die |
217 | |
218 | # unset this is very important |
219 | unset MULTILIB_ONLY_ABI |
220 | fi |
221 | done |
222 | } |
223 | |
224 | only-m64() |
225 | { |
226 | local abi=m64 |
227 | local i |
228 | |
229 | for i in ${MULTILIB_ABIS} |
230 | do |
231 | if [[ ${i} = ${abi} ]] |
232 | then |
233 | # export this for mpatch etc (to repect only-${abi}) |
234 | export MULTILIB_ONLY_ABI=${abi} |
235 | |
236 | if [[ ${MULTILIB_ENTER_SRCDIR} = true ]] |
237 | then |
238 | cd ${SRCDIR}-${abi}/${SRCSUBDIR} |
239 | fi |
240 | abi-${abi} $@ || die |
241 | |
242 | # unset this is very important |
243 | unset MULTILIB_ONLY_ABI |
244 | fi |
245 | done |
246 | } |
247 | |
248 | all-abis() |
249 | { |
250 | local abi |
251 | for abi in ${MULTILIB_ABIS} |
252 | do |
253 | if [[ ${MULTILIB_ENTER_SRCDIR} = true ]] |
254 | then |
255 | cd ${SRCDIR}-${abi}/${SRCSUBDIR} |
256 | fi |
257 | abi-${abi} $@ || die |
258 | done |
259 | } |
260 | |
261 | mabi() |
262 | { |
263 | echo \${ABI} |
264 | } |
265 | |
266 | mabi-cc() |
267 | { |
268 | echo "gcc -\${ABI}" |
269 | } |
270 | |
271 | mabi-cxx() |
272 | { |
273 | echo "g++ -\${ABI}" |
274 | } |
275 | |
276 | mabi-cflags() |
277 | { |
278 | echo "\${CFLAGS}" |
279 | } |
280 | |
281 | mabi-cxxflags() |
282 | { |
283 | echo "\${CXXFLAGS}" |
284 | } |
285 | |
286 | mabi-ldflags() |
287 | { |
288 | echo "\${LDFLAGS}" |
289 | } |
290 | |
291 | ## |
292 | # multilib compile functions |
293 | ## |
294 | |
295 | if [[ ! -z $(typeset -f mconfigure) ]] |
296 | then |
297 | # rename the old one |
298 | old_mconfigure=old$(typeset -f mconfigure) |
299 | eval "${old_mconfigure}" |
300 | |
301 | mconfigure() |
302 | { |
303 | local abi |
304 | local abis_to_run="${MULTILIB_ABIS}" |
305 | |
306 | # respect MULTILIB_ONLY_ABI variable |
307 | [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}" |
308 | |
309 | for abi in ${abis_to_run} |
310 | do |
311 | if [[ ${MULTILIB_ENTER_SRCDIR} = true ]] |
312 | then |
313 | cd ${SRCDIR}-${abi}/${SRCSUBDIR} |
314 | fi |
315 | abi-${abi} oldmconfigure $@ || die |
316 | done |
317 | } |
318 | fi |
319 | |
320 | if [[ ! -z $(typeset -f munpack) ]] |
321 | then |
322 | # rename the old one |
323 | old_munpack=old$(typeset -f munpack) |
324 | eval "${old_munpack}" |
325 | |
326 | munpack() |
327 | { |
328 | local abi |
329 | local abis_to_run="${MULTILIB_ABIS}" |
330 | |
331 | # respect MULTILIB_ONLY_ABI variable |
332 | [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}" |
333 | |
334 | for abi in ${abis_to_run} |
335 | do |
336 | echo -e "${COLBLUE}*** ${COLGREEN}unpacking for ABI -${abi}${COLDEFAULT}" |
337 | oldmunpack $@ || die |
338 | mv ${SRCDIR} ${SRCDIR}-${abi} || die |
339 | done |
340 | } |
341 | fi |
342 | |
343 | if [[ ! -z $(typeset -f mmake) ]] |
344 | then |
345 | # rename the old one |
346 | old_mmake=old$(typeset -f mmake) |
347 | eval "${old_mmake}" |
348 | |
349 | mmake() |
350 | { |
351 | local abi |
352 | local abis_to_run="${MULTILIB_ABIS}" |
353 | |
354 | # respect MULTILIB_ONLY_ABI variable |
355 | [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}" |
356 | |
357 | for abi in ${abis_to_run} |
358 | do |
359 | echo -e "${COLBLUE}*** ${COLGREEN}compiling for ABI -${abi}${COLDEFAULT}" |
360 | if [[ ${MULTILIB_ENTER_SRCDIR} = true ]] |
361 | then |
362 | cd ${SRCDIR}-${abi}/${SRCSUBDIR} |
363 | fi |
364 | abi-${abi} oldmmake $@ || die |
365 | done |
366 | } |
367 | fi |
368 | |
369 | if [[ ! -z $(typeset -f minstall) ]] |
370 | then |
371 | # rename the old one |
372 | old_minstall=old$(typeset -f minstall) |
373 | eval "${old_minstall}" |
374 | |
375 | minstall() |
376 | { |
377 | local abi |
378 | local abis_to_run="${MULTILIB_ABIS}" |
379 | |
380 | # respect MULTILIB_ONLY_ABI variable |
381 | [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}" |
382 | |
383 | for abi in ${abis_to_run} |
384 | do |
385 | echo -e "${COLBLUE}*** ${COLGREEN}installing for ABI -${abi}${COLDEFAULT}" |
386 | if [[ ${MULTILIB_ENTER_SRCDIR} = true ]] |
387 | then |
388 | cd ${SRCDIR}-${abi}/${SRCSUBDIR} |
389 | fi |
390 | abi-${abi} oldminstall $@ || die |
391 | done |
392 | } |
393 | fi |
394 | |
395 | minstall_destdir() |
396 | { |
397 | local abi |
398 | local abis_to_run="${MULTILIB_ABIS}" |
399 | |
400 | # respect MULTILIB_ONLY_ABI variable |
401 | [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}" |
402 | |
403 | for abi in ${abis_to_run} |
404 | do |
405 | echo -e "${COLBLUE}*** ${COLGREEN}installing for ABI -${abi}${COLDEFAULT}" |
406 | if [[ ${MULTILIB_ENTER_SRCDIR} = true ]] |
407 | then |
408 | cd ${SRCDIR}-${abi}/${SRCSUBDIR} |
409 | fi |
410 | make DESTDIR=${BINDIR} $@ install || die |
411 | done |
412 | } |
413 | |
414 | if [[ ! -z $(typeset -f mpatch) ]] |
415 | then |
416 | # rename the old one |
417 | old_mpatch=old$(typeset -f mpatch) |
418 | eval "${old_mpatch}" |
419 | |
420 | mpatch() |
421 | { |
422 | local abi |
423 | local abis_to_run="${MULTILIB_ABIS}" |
424 | |
425 | # respect MULTILIB_ONLY_ABI variable |
426 | [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}" |
427 | |
428 | for abi in ${abis_to_run} |
429 | do |
430 | echo -e "${COLBLUE}*** ${COLGREEN}appling patch for ABI -${abi}${COLDEFAULT}" |
431 | if [[ ${MULTILIB_ENTER_SRCDIR} = true ]] |
432 | then |
433 | cd ${SRCDIR}-${abi}/${SRCSUBDIR} |
434 | fi |
435 | oldmpatch $@ || die |
436 | done |
437 | } |
438 | fi |
439 | |
440 | if [[ ! -z $(typeset -f mlibtoolize) ]] |
441 | then |
442 | # rename the old one |
443 | old_mlibtoolize=old$(typeset -f mlibtoolize) |
444 | eval "${old_mlibtoolize}" |
445 | |
446 | mlibtoolize() |
447 | { |
448 | local abi |
449 | local abis_to_run="${MULTILIB_ABIS}" |
450 | |
451 | # respect MULTILIB_ONLY_ABI variable |
452 | [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}" |
453 | |
454 | for abi in ${abis_to_run} |
455 | do |
456 | echo -e "${COLBLUE}*** ${COLGREEN}running mlibtoolize for ABI -${abi}${COLDEFAULT}" |
457 | if [[ ${MULTILIB_ENTER_SRCDIR} = true ]] |
458 | then |
459 | cd ${SRCDIR}-${abi}/${SRCSUBDIR} |
460 | fi |
461 | oldmlibtoolize $@ || die |
462 | done |
463 | } |
464 | fi |
465 | |
466 | if [[ ! -z $(typeset -f mautoreconf) ]] |
467 | then |
468 | # rename the old one |
469 | old_mautoreconf=old$(typeset -f mautoreconf) |
470 | eval "${old_mautoreconf}" |
471 | |
472 | mautoreconf() |
473 | { |
474 | local abi |
475 | local abis_to_run="${MULTILIB_ABIS}" |
476 | |
477 | # respect MULTILIB_ONLY_ABI variable |
478 | [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}" |
479 | |
480 | for abi in ${abis_to_run} |
481 | do |
482 | echo -e "${COLBLUE}*** ${COLGREEN}running mautoreconf for ABI -${abi}${COLDEFAULT}" |
483 | if [[ ${MULTILIB_ENTER_SRCDIR} = true ]] |
484 | then |
485 | cd ${SRCDIR}-${abi}/${SRCSUBDIR} |
486 | fi |
487 | oldmautoreconf $@ || die |
488 | done |
489 | } |
490 | fi |
491 | |
492 | if [[ ! -z $(typeset -f minstalldocs) ]] |
493 | then |
494 | # rename the old one |
495 | old_minstalldocs=old$(typeset -f minstalldocs) |
496 | eval "${old_minstalldocs}" |
497 | |
498 | minstalldocs() |
499 | { |
500 | local abi |
501 | local docfiles |
502 | |
503 | local abis_to_run="${MULTILIB_ABIS}" |
504 | |
505 | # respect MULTILIB_ONLY_ABI variable |
506 | [[ ! -z ${MULTILIB_ONLY_ABI} ]] && abis_to_run="${MULTILIB_ONLY_ABI}" |
507 | |
508 | for abi in ${abis_to_run} |
509 | do |
510 | if [[ ${MULTILIB_ENTER_SRCDIR} = true ]] |
511 | then |
512 | cd ${SRCDIR}-${abi}/${SRCSUBDIR} |
513 | fi |
514 | oldminstalldocs $@ || die |
515 | done |
516 | } |
517 | fi |