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