mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-16 17:36:59 +02:00
eclass/multilib: Sync with gentoo
It's from gentoo commit f64708850264e93cb54c8857d6eb459a4faf274e.
This commit is contained in:
parent
fca1b3d2a6
commit
43b14b0700
@ -1,14 +1,20 @@
|
|||||||
# Copyright 1999-2015 Gentoo Foundation
|
# Copyright 1999-2021 Gentoo Authors
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
|
||||||
# @ECLASS: multilib.eclass
|
# @ECLASS: multilib.eclass
|
||||||
# @MAINTAINER:
|
# @MAINTAINER:
|
||||||
# amd64@gentoo.org
|
|
||||||
# toolchain@gentoo.org
|
# toolchain@gentoo.org
|
||||||
|
# @SUPPORTED_EAPIS: 5 6 7 8
|
||||||
# @BLURB: This eclass is for all functions pertaining to handling multilib configurations.
|
# @BLURB: This eclass is for all functions pertaining to handling multilib configurations.
|
||||||
# @DESCRIPTION:
|
# @DESCRIPTION:
|
||||||
# This eclass is for all functions pertaining to handling multilib configurations.
|
# This eclass is for all functions pertaining to handling multilib configurations.
|
||||||
|
|
||||||
|
case ${EAPI:-0} in
|
||||||
|
# EAPI=0 is still used by crossdev, bug #797367
|
||||||
|
0|5|6|7|8) ;;
|
||||||
|
*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
if [[ -z ${_MULTILIB_ECLASS} ]]; then
|
if [[ -z ${_MULTILIB_ECLASS} ]]; then
|
||||||
_MULTILIB_ECLASS=1
|
_MULTILIB_ECLASS=1
|
||||||
|
|
||||||
@ -48,7 +54,7 @@ has_multilib_profile() {
|
|||||||
# fall back on old behavior. Any profile that has these set should also
|
# fall back on old behavior. Any profile that has these set should also
|
||||||
# depend on a newer version of portage (not yet released) which uses these
|
# depend on a newer version of portage (not yet released) which uses these
|
||||||
# over CONF_LIBDIR in econf, dolib, etc...
|
# over CONF_LIBDIR in econf, dolib, etc...
|
||||||
if has "${EAPI:-0}" 0 1 2 3 4 5; then
|
if [[ ${EAPI} == [05] ]] ; then
|
||||||
get_libdir() {
|
get_libdir() {
|
||||||
local CONF_LIBDIR
|
local CONF_LIBDIR
|
||||||
if [ -n "${CONF_LIBDIR_OVERRIDE}" ] ; then
|
if [ -n "${CONF_LIBDIR_OVERRIDE}" ] ; then
|
||||||
@ -294,11 +300,22 @@ get_modname() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# This is for the toolchain to setup profile variables when pulling in
|
# This is for the toolchain to setup profile variables when pulling in
|
||||||
# a crosscompiler (and thus they aren't set in the profile)
|
# a crosscompiler (and thus they aren't set in the profile).
|
||||||
multilib_env() {
|
multilib_env() {
|
||||||
local CTARGET=${1:-${CTARGET}}
|
local CTARGET=${1:-${CTARGET}}
|
||||||
local cpu=${CTARGET%%*-}
|
local cpu=${CTARGET%%*-}
|
||||||
|
|
||||||
|
if [[ ${CTARGET} = *-musl* ]]; then
|
||||||
|
# musl has no multilib support and can run only in 'lib':
|
||||||
|
# - https://bugs.gentoo.org/675954
|
||||||
|
# - https://gcc.gnu.org/PR90077
|
||||||
|
# - https://github.com/gentoo/musl/issues/245
|
||||||
|
: ${MULTILIB_ABIS=default}
|
||||||
|
: ${DEFAULT_ABI=default}
|
||||||
|
export MULTILIB_ABIS DEFAULT_ABI
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
case ${cpu} in
|
case ${cpu} in
|
||||||
aarch64*)
|
aarch64*)
|
||||||
# Not possible to do multilib with aarch64 and a single toolchain.
|
# Not possible to do multilib with aarch64 and a single toolchain.
|
||||||
@ -386,19 +403,43 @@ multilib_env() {
|
|||||||
: ${DEFAULT_ABI=ppc64}
|
: ${DEFAULT_ABI=ppc64}
|
||||||
;;
|
;;
|
||||||
riscv64*)
|
riscv64*)
|
||||||
export CFLAGS_lp64d=${CFLAGS_lp64d--mabi=lp64d}
|
export CFLAGS_lp64d=${CFLAGS_lp64d--mabi=lp64d -march=rv64imafdc}
|
||||||
export CHOST_lp64d=${CTARGET}
|
export CHOST_lp64d=${CTARGET}
|
||||||
export CTARGET_lp64d=${CTARGET}
|
export CTARGET_lp64d=${CTARGET}
|
||||||
export LIBDIR_lp64d="lib64/lp64d"
|
export LIBDIR_lp64d=${LIBDIR_lp64d-lib64/lp64d}
|
||||||
|
|
||||||
export CFLAGS_lp64=${CFLAGS_lp64--mabi=lp64}
|
export CFLAGS_lp64=${CFLAGS_lp64--mabi=lp64 -march=rv64imac}
|
||||||
export CHOST_lp64=${CTARGET}
|
export CHOST_lp64=${CTARGET}
|
||||||
export CTARGET_lp64=${CTARGET}
|
export CTARGET_lp64=${CTARGET}
|
||||||
export LIBDIR_lp64="lib64/lp64"
|
export LIBDIR_lp64=${LIBDIR_lp64-lib64/lp64}
|
||||||
|
|
||||||
: ${MULTILIB_ABIS=lp64d lp64}
|
export CFLAGS_ilp32d=${CFLAGS_ilp32d--mabi=ilp32d -march=rv32imafdc}
|
||||||
|
export CHOST_ilp32d=${CTARGET/riscv64/riscv32}
|
||||||
|
export CTARGET_ilp32d=${CTARGET/riscv64/riscv32}
|
||||||
|
export LIBDIR_ilp32d=${LIBDIR_ilp32d-lib32/ilp32d}
|
||||||
|
|
||||||
|
export CFLAGS_ilp32=${CFLAGS_ilp32--mabi=ilp32 -march=rv32imac}
|
||||||
|
export CHOST_ilp32=${CTARGET/riscv64/riscv32}
|
||||||
|
export CTARGET_ilp32=${CTARGET/riscv64/riscv32}
|
||||||
|
export LIBDIR_ilp32=${LIBDIR_ilp32-lib32/ilp32}
|
||||||
|
|
||||||
|
: ${MULTILIB_ABIS=lp64d lp64 ilp32d ilp32}
|
||||||
: ${DEFAULT_ABI=lp64d}
|
: ${DEFAULT_ABI=lp64d}
|
||||||
;;
|
;;
|
||||||
|
riscv32*)
|
||||||
|
export CFLAGS_ilp32d=${CFLAGS_ilp32d--mabi=ilp32d}
|
||||||
|
export CHOST_ilp32d=${CTARGET}
|
||||||
|
export CTARGET_ilp32d=${CTARGET}
|
||||||
|
export LIBDIR_ilp32d=${LIBDIR_ilp32d-lib32/ilp32d}
|
||||||
|
|
||||||
|
export CFLAGS_ilp32=${CFLAGS_ilp32--mabi=ilp32 -march=rv32imac}
|
||||||
|
export CHOST_ilp32=${CTARGET}
|
||||||
|
export CTARGET_ilp32=${CTARGET}
|
||||||
|
export LIBDIR_ilp32=${LIBDIR_ilp32-lib32/ilp32}
|
||||||
|
|
||||||
|
: ${MULTILIB_ABIS=ilp32d ilp32}
|
||||||
|
: ${DEFAULT_ABI=ilp32d}
|
||||||
|
;;
|
||||||
s390x*)
|
s390x*)
|
||||||
export CFLAGS_s390=${CFLAGS_s390--m31} # the 31 is not a typo
|
export CFLAGS_s390=${CFLAGS_s390--m31} # the 31 is not a typo
|
||||||
export CHOST_s390=${CTARGET/s390x/s390}
|
export CHOST_s390=${CTARGET/s390x/s390}
|
||||||
@ -445,9 +486,32 @@ multilib_toolchain_setup() {
|
|||||||
|
|
||||||
export ABI=$1
|
export ABI=$1
|
||||||
|
|
||||||
|
local save_restore_variables=(
|
||||||
|
CBUILD
|
||||||
|
CHOST
|
||||||
|
AR
|
||||||
|
CC
|
||||||
|
CXX
|
||||||
|
F77
|
||||||
|
FC
|
||||||
|
LD
|
||||||
|
NM
|
||||||
|
OBJCOPY
|
||||||
|
OBJDUMP
|
||||||
|
PKG_CONFIG
|
||||||
|
RANLIB
|
||||||
|
READELF
|
||||||
|
STRINGS
|
||||||
|
STRIP
|
||||||
|
PKG_CONFIG_LIBDIR
|
||||||
|
PKG_CONFIG_PATH
|
||||||
|
PKG_CONFIG_SYSTEM_INCLUDE_PATH
|
||||||
|
PKG_CONFIG_SYSTEM_LIBRARY_PATH
|
||||||
|
)
|
||||||
|
|
||||||
# First restore any saved state we have laying around.
|
# First restore any saved state we have laying around.
|
||||||
if [[ ${_DEFAULT_ABI_SAVED} == "true" ]] ; then
|
if [[ ${_DEFAULT_ABI_SAVED} == "true" ]] ; then
|
||||||
for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH} ; do
|
for v in "${save_restore_variables[@]}" ; do
|
||||||
vv="_abi_saved_${v}"
|
vv="_abi_saved_${v}"
|
||||||
[[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v}
|
[[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v}
|
||||||
unset ${vv}
|
unset ${vv}
|
||||||
@ -455,11 +519,9 @@ multilib_toolchain_setup() {
|
|||||||
unset _DEFAULT_ABI_SAVED
|
unset _DEFAULT_ABI_SAVED
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# We want to avoid the behind-the-back magic of gcc-config as it
|
|
||||||
# screws up ccache and distcc. See #196243 for more info.
|
|
||||||
if [[ ${ABI} != ${DEFAULT_ABI} ]] ; then
|
if [[ ${ABI} != ${DEFAULT_ABI} ]] ; then
|
||||||
# Back that multilib-ass up so we can restore it later
|
# Backup multilib state so we can restore it later
|
||||||
for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH} ; do
|
for v in "${save_restore_variables[@]}" ; do
|
||||||
vv="_abi_saved_${v}"
|
vv="_abi_saved_${v}"
|
||||||
[[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv}
|
[[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv}
|
||||||
done
|
done
|
||||||
@ -472,15 +534,30 @@ multilib_toolchain_setup() {
|
|||||||
|
|
||||||
# Set the CHOST native first so that we pick up the native
|
# Set the CHOST native first so that we pick up the native
|
||||||
# toolchain and not a cross-compiler by accident #202811.
|
# toolchain and not a cross-compiler by accident #202811.
|
||||||
|
#
|
||||||
|
# Make sure ${save_restore_variables[@]} list matches below.
|
||||||
export CHOST=$(get_abi_CHOST ${DEFAULT_ABI})
|
export CHOST=$(get_abi_CHOST ${DEFAULT_ABI})
|
||||||
|
|
||||||
|
export AR="$(tc-getAR)" # Avoid 'ar', use '${CHOST}-ar'
|
||||||
export CC="$(tc-getCC) $(get_abi_CFLAGS)"
|
export CC="$(tc-getCC) $(get_abi_CFLAGS)"
|
||||||
export CXX="$(tc-getCXX) $(get_abi_CFLAGS)"
|
export CXX="$(tc-getCXX) $(get_abi_CFLAGS)"
|
||||||
export F77="$(tc-getF77) $(get_abi_CFLAGS)"
|
export F77="$(tc-getF77) $(get_abi_CFLAGS)"
|
||||||
export FC="$(tc-getFC) $(get_abi_CFLAGS)"
|
export FC="$(tc-getFC) $(get_abi_CFLAGS)"
|
||||||
export LD="$(tc-getLD) $(get_abi_LDFLAGS)"
|
export LD="$(tc-getLD) $(get_abi_LDFLAGS)"
|
||||||
|
export NM="$(tc-getNM)" # Avoid 'nm', use '${CHOST}-nm'
|
||||||
|
export OBJCOPY="$(tc-getOBJCOPY)" # Avoid 'objcopy', use '${CHOST}-objcopy'
|
||||||
|
export OBJDUMP="$(tc-getOBJDUMP)" # Avoid 'objdump', use '${CHOST}-objdump'
|
||||||
|
export PKG_CONFIG="$(tc-getPKG_CONFIG)"
|
||||||
|
export RANLIB="$(tc-getRANLIB)" # Avoid 'ranlib', use '${CHOST}-ranlib'
|
||||||
|
export READELF="$(tc-getREADELF)" # Avoid 'readelf', use '${CHOST}-readelf'
|
||||||
|
export STRINGS="$(tc-getSTRINGS)" # Avoid 'strings', use '${CHOST}-strings'
|
||||||
|
export STRIP="$(tc-getSTRIP)" # Avoid 'strip', use '${CHOST}-strip'
|
||||||
|
|
||||||
export CHOST=$(get_abi_CHOST $1)
|
export CHOST=$(get_abi_CHOST $1)
|
||||||
export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
|
export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
|
||||||
export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig
|
export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig
|
||||||
|
export PKG_CONFIG_SYSTEM_INCLUDE_PATH=${EPREFIX}/usr/include
|
||||||
|
export PKG_CONFIG_SYSTEM_LIBRARY_PATH=${EPREFIX}/$(get_libdir):${EPREFIX}/usr/$(get_libdir)
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user