Magellan Linux

Contents of /trunk/include/multilib.sminc

Parent Directory Parent Directory | Revision Log Revision Log


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