Magellan Linux

Contents of /trunk/include/multilib.sminc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 31852 - (show annotations) (download)
Thu Dec 20 13:40:54 2018 UTC (5 years, 4 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