Magellan Linux

Contents of /trunk/include/multilib.sminc

Parent Directory Parent Directory | Revision Log 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)
-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