diff options
author | Thomas Deutschmann <whissi@gentoo.org> | 2019-07-12 23:35:41 +0200 |
---|---|---|
committer | Thomas Deutschmann <whissi@gentoo.org> | 2019-07-14 13:58:02 +0200 |
commit | 7b3103c0856dd9ad0652bf2ac27d0d907250ea4e (patch) | |
tree | 13f6b440c14ff61a7506db494030fbf8cc2e3583 /gen_compile.sh | |
parent | gen_compile.sh: Refactor compile_modules() (diff) | |
download | genkernel-7b3103c0856dd9ad0652bf2ac27d0d907250ea4e.tar.gz genkernel-7b3103c0856dd9ad0652bf2ac27d0d907250ea4e.tar.bz2 genkernel-7b3103c0856dd9ad0652bf2ac27d0d907250ea4e.zip |
gen_compile.sh: Refactor compile_generic()
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
Diffstat (limited to 'gen_compile.sh')
-rwxr-xr-x | gen_compile.sh | 125 |
1 files changed, 95 insertions, 30 deletions
diff --git a/gen_compile.sh b/gen_compile.sh index aa9457e..27d41bd 100755 --- a/gen_compile.sh +++ b/gen_compile.sh @@ -265,27 +265,94 @@ compile_gen_init_cpio() { } compile_generic() { - local RET - [ "$#" -lt '2' ] && - gen_die 'compile_generic(): improper usage!' + [[ ${#} -ne 2 ]] \ + && gen_die "$(get_useful_function_stack "${FUNCNAME}")Invalid usage of ${FUNCNAME}(): Function takes exactly two arguments (${#} given)!" + local target=${1} local argstype=${2} + local RET case "${argstype}" in kernel|kernelruntask) - export_kernel_args - MAKE=${KERNEL_MAKE} - ;; - utils) - export_utils_args - MAKE=${UTILS_MAKE} - ;; - esac + 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} + fi - case "${argstype}" in - kernel|kernelruntask) - ARGS="$(compile_kernel_args)" - if [[ "${ARGS}" = *O=* ]] + # Build kernel compile parameter. + local ARGS="" + + # Allow for CC/LD... user override! + local -a kernel_vars + kernel_vars+=( 'ARCH' ) + kernel_vars+=( 'AS' ) + kernel_vars+=( 'CC' ) + kernel_vars+=( 'LD' ) + + local kernel_var= + for kernel_var in "${kernel_vars[@]}" + 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 + 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 + + if [ -n "${KERNEL_OUTPUTDIR}" -a "${KERNEL_OUTPUTDIR}" != "${KERNEL_DIR}" ] then if [ -f "${KERNEL_DIR}/.config" -o -d "${KERNEL_DIR}/include/config" ] then @@ -298,11 +365,16 @@ compile_generic() { error_message+=" to compile a kernel with different KERNEL_OUTPUTDIR set." error_message+=" Please re-install a fresh kernel source!" gen_die "${error_message}" + else + ARGS="${ARGS} O=\"${KERNEL_OUTPUTDIR}\"" fi fi ;; - utils) ARGS="$(compile_utils_args)" ;; - *) ARGS="" ;; + *) + local error_msg="${FUNCNAME[1]}(): Unsupported compile type '${argstype}'" + error_msg+=" for ${FUNCNAME}() specified!" + gen_die "${error_msg}" + ;; esac shift 2 @@ -320,30 +392,23 @@ compile_generic() { then # Silent operation, forced -j1 print_info 2 "COMMAND: ${NICEOPTS}${MAKE} ${MAKEOPTS} -j1 ${ARGS} ${target} $*" 1 0 1 - eval ${NICEOPTS}${MAKE} -s ${MAKEOPTS} -j1 "${ARGS}" ${target} $* + eval ${NICEOPTS}${MAKE} -s ${MAKEOPTS} -j1 ${ARGS} ${target} $* RET=$? - elif [ "${LOGLEVEL}" -gt "1" ] + elif [ "${LOGLEVEL}" -gt 3 ] then # Output to stdout and logfile print_info 2 "COMMAND: ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $*" 1 0 1 - eval ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $* 2>&1 | tee -a ${LOGFILE} + eval ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $* 2>&1 | tee -a "${LOGFILE}" RET=${PIPESTATUS[0]} else # Output to logfile only print_info 2 "COMMAND: ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $*" 1 0 1 - eval ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $* >> ${LOGFILE} 2>&1 + eval ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $* >> "${LOGFILE}" 2>&1 RET=$? fi - [ ${RET} -ne 0 ] && - gen_die "Failed to compile the \"${target}\" target ..." - unset MAKE - unset ARGS - - case "${argstype}" in - kernel) unset_kernel_args ;; - utils) unset_utils_args ;; - esac + [ ${RET} -ne 0 ] \ + && gen_die "$(get_useful_function_stack "${FUNCNAME}")${FUNCNAME}() failed to compile the \"${target}\" target!" } compile_modules() { |