commit: b432f67903a419af3189abe3637300a42554415d
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 14 15:03:47 2020 +0000
Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Thu Jul 16 14:29:16 2020 +0000
URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=b432f679
gen_compile.sh: compile_generic() refactored
- Use an array to construct command to run.
- Make sure we set all environment variables used by kernel's build
system to honor our toolchain.
Tested with with sys-devel/binutils-config[-native-symlinks]
and sys-devel/gcc-config[-native-symlinks].
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>
gen_compile.sh | 117 +++++++++++++++++----------------------------------------
gen_funcs.sh | 22 +++++++++++
2 files changed, 57 insertions(+), 82 deletions(-)
diff --git a/gen_compile.sh b/gen_compile.sh
index e5254d7..0fa6912 100755
--- a/gen_compile.sh
+++ b/gen_compile.sh
@@ -80,85 +80,42 @@ compile_generic() {
local argstype=${2}
local RET
+ local -a compile_cmd=()
+
+ if [ ${NICE} -ne 0 ]
+ then
+ compile_cmd+=( nice "-n${NICE}" )
+ fi
+
case "${argstype}" in
kernel|kernelruntask)
if [ -z "${KERNEL_MAKE}" ]
then
gen_die "KERNEL_MAKE undefined - I don't know
how to compile a kernel for this arch!"
else
- local MAKE=${KERNEL_MAKE}
+ local -x MAKE=${KERNEL_MAKE}
+ compile_cmd+=( "${MAKE}" "${MAKEOPTS}" )
fi
- # Build kernel compile parameter.
- local ARGS=""
+ if [[ "${argstype}" == 'kernelruntask' ]]
+ then
+ # silent operation, forced -j1
+ compile_cmd+=( -s -j1 )
+ fi
- # Allow for CC/LD... user override!
- local -a kernel_vars
- kernel_vars+=( 'ARCH' )
- kernel_vars+=( 'AS' )
- kernel_vars+=( 'CC' )
- kernel_vars+=( 'LD' )
+ # Pass kernel compile parameter
+ compile_cmd+=( "ARCH='${KERNEL_ARCH}'" )
- local kernel_var=
- for kernel_var in "${kernel_vars[@]}"
+ local tc_var
+ for tc_var in AS AR CC LD NM OBJCOPY OBJDUMP READELF
STRIP
do
- local kernel_varname="KERNEL_${kernel_var}"
- local
kernel_default_varname="DEFAULT_${kernel_varname}"
-
- if [[ -z "${!kernel_default_varname}" ]] \
- || [[ -n "${!kernel_default_varname}"
]] \
- && [[ "${!kernel_varname}" !=
"${!kernel_default_varname}" ]]
- then
- ARGS="${ARGS}
${kernel_var}=\"${!kernel_varname}\""
- fi
+ compile_cmd+=(
"${tc_var}='$(TC_PROG_TYPE=KERNEL tc-get${tc_var})'" )
done
- unset kernel_var kernel_vars kernel_varname
kernel_default_varname
- if isTrue "$(tc-is-cross-compiler)"
- then
- local can_tc_cross_compile=no
- local cpu_cbuild=${CBUILD%%-*}
- local cpu_chost=${CHOST%%-*}
-
- case "${cpu_cbuild}" in
- powerpc64*)
- if [[ "${cpu_chost}" ==
"powerpc" ]]
- then
- can_tc_cross_compile=yes
- fi
- ;;
- x86_64*)
- if [[ "${cpu_chost}" == "i686"
]]
- then
- can_tc_cross_compile=yes
- fi
- ;;
- esac
-
- if isTrue "${can_tc_cross_compile}"
- then
- local -a kernel_vars
- kernel_vars+=( 'AS' )
- kernel_vars+=( 'CC' )
- kernel_vars+=( 'LD' )
-
- local kernel_var=
- for kernel_var in "${kernel_vars[@]}"
- do
- if [[ "${ARGS}" ==
*${kernel_var}=* ]]
- then
- # User wants to run
specific program ...
- continue
- else
- ARGS="${ARGS}
${kernel_var}=\"$(tc-get${kernel_var})\""
- fi
- done
- unset kernel_var kernel_vars
- else
- ARGS="${ARGS}
CROSS_COMPILE=\"${CHOST}-\""
- fi
- unset can_tc_cross_compile cpu_cbuild cpu_chost
- fi
+ compile_cmd+=( "HOSTAR='$(tc-getBUILD_AR)'" )
+ compile_cmd+=( "HOSTCC='$(tc-getBUILD_CC)'" )
+ compile_cmd+=( "HOSTCXX='$(tc-getBUILD_CXX)'" )
+ compile_cmd+=( "HOSTLD='$(tc-getBUILD_LD)'" )
if [ -n "${KERNEL_OUTPUTDIR}" -a "${KERNEL_OUTPUTDIR}"
!= "${KERNEL_DIR}" ]
then
@@ -174,7 +131,7 @@ compile_generic() {
error_message+=" Please re-install a
fresh kernel source!"
gen_die "${error_message}"
else
- ARGS="${ARGS} O=\"${KERNEL_OUTPUTDIR}\""
+ compile_cmd+=(
"O='${KERNEL_OUTPUTDIR}'" )
fi
fi
;;
@@ -184,34 +141,30 @@ compile_generic() {
gen_die "${error_msg}"
;;
esac
- shift 2
- if [ ${NICE} -ne 0 ]
- then
- NICEOPTS="nice -n${NICE} "
- else
- NICEOPTS=""
- fi
+ compile_cmd+=( "${target}" )
+
+ print_info 3 "COMMAND: ${compile_cmd[*]}" 1 0 1
# the eval usage is needed in the next set of code
# as ARGS can contain spaces and quotes, eg:
# ARGS='CC="ccache gcc"'
- if [ "${argstype}" == 'kernelruntask' ]
+ if [[ "${argstype}" == 'kernelruntask' ]]
then
- # Silent operation, forced -j1
- print_info 3 "COMMAND: ${NICEOPTS}${MAKE} ${MAKEOPTS} -j1
${ARGS} ${target} $*" 1 0 1
- eval ${NICEOPTS}${MAKE} -s ${MAKEOPTS} -j1 ${ARGS} ${target} $*
+ eval "${compile_cmd[@]}"
RET=$?
elif [ "${LOGLEVEL}" -gt 3 ]
then
# Output to stdout and logfile
- print_info 3 "COMMAND: ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS}
${target} $*" 1 0 1
- eval ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $* 2>&1 |
tee -a "${LOGFILE}"
+ compile_cmd+=( "2>&1 | tee -a '${LOGFILE}'" )
+
+ eval "${compile_cmd[@]}"
RET=${PIPESTATUS[0]}
else
# Output to logfile only
- print_info 3 "COMMAND: ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS}
${target} $*" 1 0 1
- eval ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $* >>
"${LOGFILE}" 2>&1
+ compile_cmd+=( ">> '${LOGFILE}' 2>&1" )
+
+ eval "${compile_cmd[@]}"
RET=$?
fi
diff --git a/gen_funcs.sh b/gen_funcs.sh
index 81a7026..4d604e4 100755
--- a/gen_funcs.sh
+++ b/gen_funcs.sh
@@ -1240,14 +1240,31 @@ tc-getAS() {
tc-getPROG AR ar "$@"
}
+tc-getBUILD_AR() {
+ tc-getBUILD_PROG AR ar "$@"
+}
+
tc-getBUILD_CC() {
tc-getBUILD_PROG CC gcc "$@"
}
+tc-getBUILD_CPP() {
+ local cc=$(tc-getBUILD_CC)
+ tc-getPROG CPP "${cc} -E" "$@"
+}
+
tc-getBUILD_CXX() {
tc-getBUILD_PROG CXX g++ "$@"
}
+tc-getBUILD_LD() {
+ tc-getBUILD_PROG LD ld "$@"
+}
+
+tc-getBUILD_READELF() {
+ tc-getBUILD_PROG READELF readelf "$@"
+}
+
tc-getCC() {
tc-getPROG CC gcc "$@"
}
@@ -1277,6 +1294,10 @@ tc-getOBJDUMP() {
tc-getPROG OBJDUMP objdump "$@"
}
+tc-getREADELF() {
+ tc-getPROG READELF readelf "$@"
+}
+
tc-getBUILD_PROG() {
local vars="BUILD_$1 $1_FOR_BUILD HOST$1"
# respect host vars if not cross-compiling
@@ -1442,6 +1463,7 @@ gkbuild() {
"OBJCOPY='$(tc-getOBJCOPY)'"
"OBJDUMP='$(tc-getOBJDUMP)'"
"RANLIB='$(tc-getRANLIB)'"
+ "READELF='$(tc-getREADELF)'"
"STRIP='$(tc-getSTRIP)'"
)