Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[gentoo-dev] [PATCH] kernel-2.eclass: Make xmakeopts an array for spaces in toolchain vars

9 views
Skip to first unread message

James Le Cuirot

unread,
Jan 21, 2023, 6:10:03 AM1/21/23
to
Variables like CC can have spaces for additional arguments. This is
particularly useful for reliably setting the sysroot.

Signed-off-by: James Le Cuirot <ch...@gentoo.org>
---
eclass/kernel-2.eclass | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/eclass/kernel-2.eclass b/eclass/kernel-2.eclass
index 873d4a204669..f7fcf15743f0 100644
--- a/eclass/kernel-2.eclass
+++ b/eclass/kernel-2.eclass
@@ -1,4 +1,4 @@
-# Copyright 1999-2022 Gentoo Authors
+# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# @ECLASS: kernel-2.eclass
@@ -756,13 +756,22 @@ env_setup_xmakeopts() {

# When cross-compiling, we need to set the ARCH/CROSS_COMPILE
# variables properly or bad things happen !
- xmakeopts="ARCH=${KARCH}"
+ xmakeopts=( ARCH="${KARCH}" )
if [[ ${CTARGET} != ${CHOST} ]] && ! cross_pre_c_headers; then
- xmakeopts="${xmakeopts} CROSS_COMPILE=${CTARGET}-"
+ xmakeopts+=( CROSS_COMPILE="${CTARGET}-" )
elif type -p ${CHOST}-ar >/dev/null; then
- xmakeopts="${xmakeopts} CROSS_COMPILE=${CHOST}-"
+ xmakeopts+=( CROSS_COMPILE="${CHOST}-" )
fi
- xmakeopts="${xmakeopts} HOSTCC=$(tc-getBUILD_CC) CC=$(tc-getCC) LD=$(tc-getLD) AR=$(tc-getAR) NM=$(tc-getNM) OBJCOPY=$(tc-getOBJCOPY) READELF=$(tc-getREADELF) STRIP=$(tc-getSTRIP)"
+ xmakeopts+=(
+ HOSTCC="$(tc-getBUILD_CC)"
+ CC="$(tc-getCC)"
+ LD="$(tc-getLD)"
+ AR="$(tc-getAR)"
+ NM="$(tc-getNM)"
+ OBJCOPY="$(tc-getOBJCOPY)"
+ READELF="$(tc-getREADELF)"
+ STRIP="$(tc-getSTRIP)"
+ )
export xmakeopts
}

@@ -850,7 +859,7 @@ install_headers() {
local ddir=$(kernel_header_destdir)

env_setup_xmakeopts
- emake headers_install INSTALL_HDR_PATH="${ED}"${ddir}/.. ${xmakeopts}
+ emake headers_install INSTALL_HDR_PATH="${ED}"${ddir}/.. "${xmakeopts[@]}"

# let other packages install some of these headers
rm -rf "${ED}"${ddir}/scsi || die #glibc/uclibc/etc...
--
2.39.1

Joshua Kinard

unread,
Jan 23, 2023, 11:30:02 AM1/23/23
to
Can we perhaps use this opportunity to make "xmakeopts" more clear via a better name, as well as uppercase it
to indicate that it is an exported variable? E.g., something like "CROSS_MAKEOPTS" is more clear to the
reader than "xmakeopts", IMHO.

I realize such a change may be a tad invasive to the eclass and possibly touch some ebuilds, so that may need
to be a separate patch that this proposed change would then be based off of.

--
Joshua Kinard
Gentoo/MIPS
ku...@gentoo.org
rsa6144/5C63F4E3F5C6C943 2015-04-27
177C 1972 1FB8 F254 BAD0 3E72 5C63 F4E3 F5C6 C943

"The past tempts us, the present confuses us, the future frightens us. And our lives slip away, moment by
moment, lost in that vast, terrible in-between."

--Emperor Turhan, Centauri Republic

James Le Cuirot

unread,
Jan 24, 2023, 6:40:03 PM1/24/23
to
Signed-off-by: James Le Cuirot <ch...@gentoo.org>
---
sys-kernel/linux-headers/linux-headers-5.10-r2.ebuild | 2 +-
sys-kernel/linux-headers/linux-headers-5.15-r3.ebuild | 2 +-
sys-kernel/linux-headers/linux-headers-5.19.ebuild | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/sys-kernel/linux-headers/linux-headers-5.10-r2.ebuild b/sys-kernel/linux-headers/linux-headers-5.10-r2.ebuild
index 08907ac2fb24..06fcc6978ce1 100644
--- a/sys-kernel/linux-headers/linux-headers-5.10-r2.ebuild
+++ b/sys-kernel/linux-headers/linux-headers-5.10-r2.ebuild
@@ -40,7 +40,7 @@ src_prepare() {
}

src_test() {
- emake headers_check ${xmakeopts}
+ emake headers_check "${KERNEL_MAKEOPTS[@]}"
}

src_install() {
diff --git a/sys-kernel/linux-headers/linux-headers-5.15-r3.ebuild b/sys-kernel/linux-headers/linux-headers-5.15-r3.ebuild
index 9d2ebae3daee..dae40c5ab655 100644
--- a/sys-kernel/linux-headers/linux-headers-5.15-r3.ebuild
+++ b/sys-kernel/linux-headers/linux-headers-5.15-r3.ebuild
@@ -43,7 +43,7 @@ src_prepare() {
}

src_test() {
- emake headers_check ${xmakeopts}
+ emake headers_check "${KERNEL_MAKEOPTS[@]}"
}

src_install() {
diff --git a/sys-kernel/linux-headers/linux-headers-5.19.ebuild b/sys-kernel/linux-headers/linux-headers-5.19.ebuild
index 527b4b401d6c..8ae17e59be76 100644
--- a/sys-kernel/linux-headers/linux-headers-5.19.ebuild
+++ b/sys-kernel/linux-headers/linux-headers-5.19.ebuild
@@ -42,7 +42,7 @@ src_prepare() {
}

src_test() {
- emake headers_check ${xmakeopts}
+ emake headers_check "${KERNEL_MAKEOPTS[@]}"
}

src_install() {
--
2.39.1

James Le Cuirot

unread,
Jan 24, 2023, 6:40:03 PM1/24/23
to
An upper-case name suggests that the variable is exported. This variable
is also not just used for cross-compiling any more.

Signed-off-by: James Le Cuirot <ch...@gentoo.org>
---
eclass/kernel-2.eclass | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/eclass/kernel-2.eclass b/eclass/kernel-2.eclass
index f7fcf15743f0..3c78aa5a8445 100644
--- a/eclass/kernel-2.eclass
+++ b/eclass/kernel-2.eclass
@@ -745,24 +745,25 @@ cross_pre_c_headers() {
use headers-only && [[ ${CHOST} != ${CTARGET} ]]
}

-# @FUNCTION: env_setup_xmakeopts
+# @FUNCTION: env_setup_kernel_makeopts
# @USAGE:
# @DESCRIPTION:
-# set the ARCH/CROSS_COMPILE when cross compiling
+# Set the toolchain variables, as well as ARCH and CROSS_COMPILE when
+# cross-compiling.

-env_setup_xmakeopts() {
+env_setup_kernel_makeopts() {
# Kernel ARCH != portage ARCH
export KARCH=$(tc-arch-kernel)

# When cross-compiling, we need to set the ARCH/CROSS_COMPILE
# variables properly or bad things happen !
- xmakeopts=( ARCH="${KARCH}" )
+ KERNEL_MAKEOPTS=( ARCH="${KARCH}" )
if [[ ${CTARGET} != ${CHOST} ]] && ! cross_pre_c_headers; then
- xmakeopts+=( CROSS_COMPILE="${CTARGET}-" )
+ KERNEL_MAKEOPTS+=( CROSS_COMPILE="${CTARGET}-" )
elif type -p ${CHOST}-ar >/dev/null; then
- xmakeopts+=( CROSS_COMPILE="${CHOST}-" )
+ KERNEL_MAKEOPTS+=( CROSS_COMPILE="${CHOST}-" )
fi
- xmakeopts+=(
+ KERNEL_MAKEOPTS+=(
HOSTCC="$(tc-getBUILD_CC)"
CC="$(tc-getCC)"
LD="$(tc-getLD)"
@@ -772,7 +773,7 @@ env_setup_xmakeopts() {
READELF="$(tc-getREADELF)"
STRIP="$(tc-getSTRIP)"
)
- export xmakeopts
+ export KERNEL_MAKEOPTS
}

# @FUNCTION: universal_unpack
@@ -858,8 +859,8 @@ install_universal() {
install_headers() {
local ddir=$(kernel_header_destdir)

- env_setup_xmakeopts
- emake headers_install INSTALL_HDR_PATH="${ED}"${ddir}/.. "${xmakeopts[@]}"
+ env_setup_kernel_makeopts
+ emake headers_install INSTALL_HDR_PATH="${ED}"${ddir}/.. "${KERNEL_MAKEOPTS[@]}"

# let other packages install some of these headers
rm -rf "${ED}"${ddir}/scsi || die #glibc/uclibc/etc...
@@ -1425,8 +1426,8 @@ kernel-2_src_unpack() {
[[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
unpack_fix_install_path

- # Setup xmakeopts and cd into sourcetree.
- env_setup_xmakeopts
+ # Setup KERNEL_MAKEOPTS and cd into sourcetree.
+ env_setup_kernel_makeopts
cd "${S}" || die

if [[ ${K_DEBLOB_AVAILABLE} == 1 ]] && use deblob; then
--
2.39.1

James Le Cuirot

unread,
Jan 24, 2023, 6:50:03 PM1/24/23
to
I hadn't noticed some older linux-headers ebuilds use this variable, so thanks
for bringing that to my attention. Arguably they shouldn't, as it appears to
be an internal variable, even if it is exported, but it's been dropped in
later versions anyway. I've now made further changes. Please see the two
additional patches.
signature.asc

Joshua Kinard

unread,
Jan 27, 2023, 6:50:04 AM1/27/23
to
The changes look good to me, thanks!

Signed-off-by: Joshua Kinard <ku...@gentoo.org>

Mike Pagano

unread,
Jan 27, 2023, 8:50:04 AM1/27/23
to
ACK

--
Mike Pagano
Gentoo Developer - Kernel Project
E-Mail : mpa...@gentoo.org
GnuPG FP : 52CC A0B0 F631 0B17 0142 F83F 92A6 DBEC 81F2 B137
Public Key : http://pgp.mit.edu/pks/lookup?search=0x92A6DBEC81F2B137&op=index
0 new messages