multilib.eclass: multilib_env(): set LIBDIR=lib for *-musl*
authorSergei Trofimovich <slyfox@gentoo.org>
Fri, 27 Mar 2020 23:47:15 +0000 (23:47 +0000)
committerSergei Trofimovich <slyfox@gentoo.org>
Fri, 27 Mar 2020 23:54:41 +0000 (23:54 +0000)
In contrast to glibc musl profiles use 'lib' layour for 32-bit
and 64-bit targets. multilib_env() did not take it into account
and assumed glibc's lib64 layout.

That breaks crossdev as it uses multilib_env to extract target
definition. Native builds are unaffected by this change.

Bug: https://bugs.gentoo.org/675954
Bug: https://gcc.gnu.org/PR90077
Bug: https://github.com/gentoo/musl/issues/245
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
eclass/multilib.eclass
eclass/tests/multilib.sh

index 63bde5cbb60149dcc05c724ad7ce47c3a4340a7c..8b4a7dacaa3774ed33d7bb76a1c39f5738d7bdb2 100644 (file)
@@ -294,11 +294,22 @@ get_modname() {
 }
 
 # 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() {
        local CTARGET=${1:-${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
                aarch64*)
                        # Not possible to do multilib with aarch64 and a single toolchain.
index 308c456b98de7164b339784bbbba793db25364e7..68c0dd6e1423a5d1f50a24fb836bd132ea6ddd84 100755 (executable)
@@ -57,5 +57,9 @@ test-multilib_env \
        "x86_64-pc-linux-gnux32" \
        "x32:x32 amd64 x86" \
        "x32? ( CHOST=x86_64-pc-linux-gnux32 LIBDIR=libx32 CFLAGS=-mx32 LDFLAGS= ) amd64? ( CHOST=x86_64-pc-linux-gnu LIBDIR=lib64 CFLAGS=-m64 LDFLAGS= ) x86? ( CHOST=i686-pc-linux-gnu LIBDIR=lib CFLAGS=-m32 LDFLAGS= )"
+test-multilib_env \
+       "x86_64-gentoo-linux-musl" \
+       "default:default" \
+       "default? ( CHOST=x86_64-gentoo-linux-musl LIBDIR=lib CFLAGS= LDFLAGS= )"
 
 texit