From 4885aba41a6ff62e0002ddd3ef438a1288407aea Mon Sep 17 00:00:00 2001 From: Alexander Barker Date: Tue, 12 May 2026 09:32:47 -0700 Subject: [PATCH] sys-devel/crossdev forces multilib for arm toolchains Add support for more specific arm toolchain tripples allowing for USE=-multilib in some scenarios Closes: https://bugs.gentoo.org/868636 Signed-off-by: Alexander Barker (https://github.com/kwhat) --- .github/workflows/crossdev.yml | 16 +++++++++++++++ crossdev | 37 +++++++++++++++------------------- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/.github/workflows/crossdev.yml b/.github/workflows/crossdev.yml index afa4898..544fff5 100644 --- a/.github/workflows/crossdev.yml +++ b/.github/workflows/crossdev.yml @@ -188,6 +188,22 @@ jobs: args: --skip-system gcc: true llvm: false + - target: armv4-none-eabisf + args: --skip-system + gcc: true + llvm: false + - target: armv5tej-none-eabisf + args: --skip-system + gcc: true + llvm: false + - target: armv6j-none-eabihf + args: --skip-system + gcc: true + llvm: false + - target: armv7a-none-eabi + args: --skip-system + gcc: true + llvm: false - target: avr args: --skip-system gcc: true diff --git a/crossdev b/crossdev index 0c1b16e..f96c744 100755 --- a/crossdev +++ b/crossdev @@ -273,7 +273,7 @@ parse_target() { KPKG="[none]" LCAT="dev-embedded" LPKG="avr-libc" GUSE+=" -openmp -fortran -go" # doesn't work - MULTILIB_USE="yes" #377039 + MULTILIB_USE="yes" # avr requires multilib, that provides libgcc for all sub-architectures #378387, #377039 BUSE+=" cxx" WITH_DEF_HEADERS="no" ;; @@ -342,7 +342,8 @@ parse_target() { # for that. GUSE+=" zlib zstd" - # We need multilib for openmp to be built w/ -mgomp + # We need multilib for openmp to be built w/ -mgomp + # https://gcc.gnu.org/legacy-ml/gcc-help/2020-01/msg00106.html MULTILIB_USE="yes" WITH_DEF_HEADERS="no" ;; @@ -367,6 +368,7 @@ parse_target() { GUSE+=" zlib zstd" # We need multilib for openmp to be built w/ -mgomp + # https://gcc.gnu.org/legacy-ml/gcc-help/2020-01/msg00106.html MULTILIB_USE="yes" WITH_DEF_HEADERS="no" ;; @@ -446,7 +448,7 @@ parse_target() { ;; # Bare metal targets - *-newlib|*-elf|*-eabi|*-rtems*) + *-newlib|*-elf|*-eabi*|*-rtems*) LPKG="newlib" KPKG="[none]" GMASK+=" default-stack-clash-protection hardened ssp" @@ -454,7 +456,9 @@ parse_target() { GUSE+=" -fortran" #589672, needs syscalls GUSE+=" -hardened" #687598, needs -fstack-check=specific support GUSE+=" -default-stack-clash-protection -ssp" # SSP isn't supported for freestanding anyway - MULTILIB_USE="yes" #407275 + + [[ "$CTARGET" != armv*-eabi[hs]f ]] \ + && MULTILIB_USE="yes" #868636, #407275 WITH_DEF_HEADERS="no" ;; @@ -546,7 +550,7 @@ parse_target() { mingw*|*-mingw*) pie_support=no ;; # Many bare-metal targets don't work with pie as-is - *-elf|*-eabi) + *-elf|*-eabi*) # mips can't generate freestanding PIC: # cc1: error: position-independent code requires ‘-mabicalls’ # arm firmware packages don't expect pie-by-default: @@ -1518,22 +1522,12 @@ set_portage() { [[ ${pkg} == "[none]" ]] && return 0 - case ${CTARGET} in - # avr requires multilib, that provides - # libgcc for all sub-architectures #378387 - avr*) - mask+=" -multilib" - force+=" multilib" - ;; - accel-nvptx*|nvptx*|*-newlib|*-elf|*-eabi) - # nvptx: needs multilib because of https://gcc.gnu.org/legacy-ml/gcc-help/2020-01/msg00106.html. - mask+=" -multilib" - force+=" multilib" - ;; - *) - mask+=" multilib" - ;; - esac + if [[ ${MULTILIB_USE} == "yes" ]]; then + mask+=" -multilib" + force+=" multilib" + else + mask+=" multilib" + fi set_use_mask ${pkg} "${mask}" set_use_force ${pkg} "${force}" @@ -1825,6 +1819,7 @@ doemerge() { [[ ${pn} == "[none]" ]] && return 0 + # MULTILIB_USE could be overriden at runtime set_use ${pn} ${USE} $( [[ ${MULTILIB_USE} == "no" ]] && echo - )multilib [[ ${INIT_TARGET_ONLY} == "yes" ]] && return 0