diff options
Diffstat (limited to 'util')
-rwxr-xr-x | util/abuild/abuild | 634 | ||||
-rwxr-xr-x | util/lint/lint-stable-031-gofmt | 33 | ||||
-rw-r--r-- | util/superiotool/nuvoton.c | 4 | ||||
-rwxr-xr-x | util/xcompile/xcompile | 3 |
4 files changed, 362 insertions, 312 deletions
diff --git a/util/abuild/abuild b/util/abuild/abuild index 58f48f2b05f2..66316e2eacde 100755 --- a/util/abuild/abuild +++ b/util/abuild/abuild @@ -11,15 +11,15 @@ #set -x # Turn echo on.... -ABUILD_DATE="Nov 18, 2023" -ABUILD_VERSION="0.11.03" +ABUILD_DATE="Apr 20, 2025" +ABUILD_VERSION="0.11.04" -TOP=$PWD +TOP=${PWD} # Where shall we place all the build trees? TARGET_DEFAULT=coreboot-builds TARGET=${COREBOOT_BUILD_DIR:-${TARGET_DEFAULT}} -XML_DEFAULT="$TOP/abuild.xml" +XML_DEFAULT="${TOP}/abuild.xml" XMLFILE="${XML_DEFAULT}" REAL_XMLFILE="${XML_DEFAULT}" @@ -29,17 +29,20 @@ TESTRUN="${TESTRUN_DEFAULT}" export KCONFIG_OVERWRITECONFIG=1 +# Identify this as a coreboot autobuild +export COREBOOT_ABUILD=1 + # path to payload. Should be more generic PAYLOAD=/dev/null # get path to coreboot XGCC if it's not already set -if [ -z "$XGCCPATH" ]; then +if [[ -z "${XGCCPATH}" ]]; then XGCCPATH="${TOP}/util/crossgcc/xgcc/bin/" fi # Add XGCC to the path. -if [ -d "$XGCCPATH" ] && [[ ":$PATH:" != *":$XGCCPATH:"* ]]; then - PATH="$XGCCPATH:$PATH" +if [[ -d "${XGCCPATH}" ]] && [[ ":${PATH}:" != *":${XGCCPATH}:"* ]]; then + PATH="${XGCCPATH}:${PATH}" fi # Lines of error context to be printed in FAILURE case @@ -61,7 +64,7 @@ checksum_file="" cpus=1 # change with -d <directory> -configdir="$TOP/configs" +configdir="${TOP}/configs" # Timeless builds TIMELESS=0 @@ -70,8 +73,8 @@ TIMELESS=0 for i in make gmake gnumake nonexistent_make; do $i --version 2>/dev/null |grep "GNU Make" >/dev/null && break done -if [ "$i" = "nonexistent_make" ]; then - echo No GNU Make found. +if [[ "$i" = "nonexistent_make" ]]; then + printf "No GNU Make found.\n" exit 1 fi MAKE=$i @@ -100,40 +103,36 @@ ts_basetime_str=$(date -u --date=@${ts_exec_shell}) trap interrupt INT -function interrupt +# shellcheck disable=SC2317 # Disable unreacheable code warning. It's a trap! +interrupt() { printf "\n%s: execution interrupted manually.\n" "$0" - if [ "$mode" == "junit" ]; then + if [[ "$mode" == "junit" ]]; then printf "%s: deleting incomplete xml output file.\n" "$0" fi exit 1 } -function debug -{ - test "$verbose" == "true" && echo "$*" -} - -function junit +junit() { - test "$mode" == "junit" && echo "$*" >> "$XMLFILE" + [[ "${mode}" == "junit" ]] && printf "%s\n" "$*" >> "${XMLFILE}" return 0 } -function junitfile +junitfile() { - test "$mode" == "junit" && { + test "${mode}" == "junit" && { printf '<![CDATA[\n' cat "$1" printf ']]>\n' - } >> "$XMLFILE" + } >> "${XMLFILE}" } # Return mainboard descriptors. # By default all mainboards are listed, but when passing a two-level path # below src/mainboard, such as emulation/qemu-i440fx, or emulation/*, it # returns all board descriptors in that hierarchy. -function get_mainboards +get_mainboards() { local search_space=${1-*/*} # shellcheck disable=SC2086 @@ -143,7 +142,7 @@ function get_mainboards } # Given a mainboard descriptor, return its directory below src/mainboard -function mainboard_directory +mainboard_directory() { local MAINBOARD=$1 @@ -154,7 +153,7 @@ function mainboard_directory } # Given a mainboard descriptor, return its vendor (CONFIG_VENDOR_*) -function mainboard_vendor +mainboard_vendor() { local MAINBOARD=$1 local kconfig_file @@ -164,10 +163,10 @@ function mainboard_vendor grep -l "^[[:space:]]*config\>[[:space:]]*\<BOARD_${MAINBOARD}\>" \ ${ROOT}/src/mainboard/*/*/Kconfig.name | \ sed "s:^\(${ROOT}/src/mainboard/.*\)/.*/\(Kconfig.name\)$:\1/\2:" ) - if [ ! -f "$kconfig_file" ]; then + if [[ ! -f "${kconfig_file}" ]]; then exit 1 fi - grep "^[[:space:]]*config\>[[:space:]]*\<VENDOR_" "$kconfig_file" | \ + grep "^[[:space:]]*config\>[[:space:]]*\<VENDOR_" "${kconfig_file}" | \ sed "s,^.*\<VENDOR_\([A-Z0-9_]*\)\>.*$,\1," } @@ -175,68 +174,78 @@ function mainboard_vendor # descriptors (eg. EMULATION_QEMU_X86_I440F} and returns the latter # format. # If a directory contains multiple boards, returns them all. -function normalize_target +normalize_target() { - # TODO: Change 'targets' variable to an array - local targets + local target_input=$1 + local -a targets=() # Initialize as an empty array local VARIANT_UC + local i VARIANT_UC=$(echo "${variant}" | tr '[:lower:]' '[:upper:]' | tr '-' '_') - targets=$(get_mainboards "$1") - if [ -n "$targets" ]; then - # shellcheck disable=SC2086 - targets="$(grep "${VARIANT_UC}\$" <<< ${targets})" - echo "$targets" + # Read output of get_mainboards into the targets array + mapfile -t targets < <(get_mainboards "${target_input}") + if [[ ${#targets[@]} -gt 0 ]]; then + # Filter the array using grep + mapfile -t targets < <(printf '%s\n' "${targets[@]}" | grep "${VARIANT_UC}\$") + # Print the filtered targets, one per line + if [[ ${#targets[@]} -gt 0 ]]; then + printf '%s\n' "${targets[@]}" + fi return fi - targets=$(echo "$1" | tr ',' ' ') - for i in $targets; do - if [ -n "$(mainboard_directory "$i")" ]; then - echo "$i" + # Handle comma-separated input string + IFS=',' read -ra targets <<< "${target_input}" + for i in "${targets[@]}"; do + # Trim whitespace if necessary (read -ra might include it) + i=$(echo "$i" | xargs) + if [[ -n "$(mainboard_directory "${i}")" ]]; then + printf "%s\n" "${i}" else - echo "$i is not a valid target" >&2 + printf "%s is not a valid target\n" "${i}" >&2 exit 1 fi done } # shellcheck disable=SC2129 -function create_config +create_config() { local BUILD_NAME=$1 local build_dir=$2 local board_srcdir local config_file="${build_dir}/config.build" - board_srcdir="$(mainboard_directory "${BUILD_NAME}")" + board_srcdir=$(mainboard_directory "${BUILD_NAME}") mkdir -p "${build_dir}" - mkdir -p "$TARGET/sharedutils" + mkdir -p "${TARGET}/sharedutils" - if [ "$quiet" == "false" ]; then echo " Creating config file for $BUILD_NAME..."; fi - echo "CONFIG_VENDOR_$(mainboard_vendor "${BUILD_NAME}")=y" > "${config_file}" - echo "CONFIG_BOARD_${BUILD_NAME}=y" >> "${config_file}" - grep "select[\t ]*ARCH" "${ROOT}/src/mainboard/${board_srcdir}/Kconfig" | \ - sed "s,^.*\(ARCH_.*\)[^A-Z0-9_]*,CONFIG_\1=y," >> "${config_file}" - echo "CONFIG_MAINBOARD_DIR=\"${board_srcdir}\"" >> "${config_file}" + if [[ "${quiet}" == "false" ]]; then printf " Creating config file for %s...\n" "${BUILD_NAME}"; fi + { + printf "CONFIG_VENDOR_%s=y\n" "$(mainboard_vendor "${BUILD_NAME}")" + printf "CONFIG_BOARD_%s=y\n" "${BUILD_NAME}" + grep "select[\t ]*ARCH" "${ROOT}/src/mainboard/${board_srcdir}/Kconfig" | \ + sed "s,^.*\\(ARCH_.*\)[^A-Z0-9_]*,CONFIG_\\1=y," + printf "CONFIG_MAINBOARD_DIR=\\\"%s\\\"\n" "${board_srcdir}" + } > "${config_file}" - update_config "$BUILD_NAME" "$build_dir" "$config_file" + update_config "${BUILD_NAME}" "${build_dir}" "${config_file}" ret=$? - if [ $ret -eq 0 ]; then - if [ "$quiet" == "false" ]; then echo " $BUILD_NAME config created."; fi + if [[ ${ret} -eq 0 ]]; then + if [[ "${quiet}" == "false" ]]; then printf " %s config created.\n" "${BUILD_NAME}"; fi return 0 else # Does this ever happen? - if [ "$quiet" == "false" ]; then printf "%s config creation FAILED!\nLog excerpt:\n" "$BUILD_NAME"; fi - tail -n $CONTEXT "$build_dir/config.log" 2> /dev/null || tail -$CONTEXT "$build_dir/config.log" + if [[ "${quiet}" == "false" ]]; then printf "%s config creation FAILED!\nLog excerpt:\n" "${BUILD_NAME}"; fi + tail -n ${CONTEXT} "${build_dir}/config.log" 2> /dev/null || tail -${CONTEXT} "${build_dir}/config.log" return 1 fi } -function update_config +update_config() { local BUILD_NAME=$1 local build_dir=$2 @@ -252,55 +261,55 @@ function update_config # Usage: payload.sh [BOARD] # the script returns an absolute path to the payload binary. - if [ -f "$payloads/payload.sh" ]; then - PAYLOAD=$(sh "$payloads/payload.sh" "$BUILD_NAME") + if [[ -f "${payloads}/payload.sh" ]]; then + PAYLOAD=$(sh "${payloads}/payload.sh" "${BUILD_NAME}") local PAYLOAD_OK=$? - if [ $PAYLOAD_OK -gt 0 ]; then - echo "problem with payload" + if [[ ${PAYLOAD_OK} -gt 0 ]]; then + printf "Problem with payload\n" exit 1 fi - if [ "$quiet" == "false" ]; then printf "Using payload %s\n" "$PAYLOAD"; fi - elif [ "$payloads" = "none" ]; then + if [[ "${quiet}" == "false" ]]; then printf "Using payload %s\n" "${PAYLOAD}"; fi + elif [[ "${payloads}" = "none" ]]; then PAYLOAD=none fi - if [ "$PAYLOAD" = "none" ]; then + if [[ "${PAYLOAD}" = "none" ]]; then { - echo "CONFIG_PAYLOAD_NONE=y" - echo "# CONFIG_PAYLOAD_ELF is not set" + printf "CONFIG_PAYLOAD_NONE=y\n" + printf "# CONFIG_PAYLOAD_ELF is not set\n" } >> "${config_file}" - elif [ "$PAYLOAD" != "/dev/null" ]; then + elif [[ "${PAYLOAD}" != "/dev/null" ]]; then { - echo "# CONFIG_PAYLOAD_NONE is not set" - echo "CONFIG_PAYLOAD_ELF=y" - echo "CONFIG_PAYLOAD_FILE=\"$PAYLOAD\"" + printf "# CONFIG_PAYLOAD_NONE is not set\n" + printf "CONFIG_PAYLOAD_ELF=y\n" + printf "CONFIG_PAYLOAD_FILE=\"%s\"\n" "$PAYLOAD" } >> "${config_file}" fi # Disable all other payload config options { - echo "# CONFIG_PAYLOAD_SEABIOS is not set" - echo "# CONFIG_PAYLOAD_FILO is not set" - echo "# CONFIG_PAYLOAD_GRUB2 is not set" - echo "# CONFIG_PAYLOAD_DEPTHCHARGE is not set" - echo "# CONFIG_PAYLOAD_LINUXBOOT is not set" - echo "# CONFIG_PAYLOAD_UBOOT is not set" - echo "# CONFIG_PAYLOAD_EDK2 is not set" - echo "# CONFIG_PXE is not set" - echo "# CONFIG_BUILD_IPXE is not set" - echo "# CONFIG_MEMTEST_SECONDARY_PAYLOAD is not set" - echo "# CONFIG_COREINFO_SECONDARY_PAYLOAD is not set" - echo "# CONFIG_NVRAMCUI_SECONDARY_PAYLOAD is not set" - echo "# CONFIG_TINT_SECONDARY_PAYLOAD is not set" + printf "# CONFIG_PAYLOAD_SEABIOS is not set\n" + printf "# CONFIG_PAYLOAD_FILO is not set\n" + printf "# CONFIG_PAYLOAD_GRUB2 is not set\n" + printf "# CONFIG_PAYLOAD_DEPTHCHARGE is not set\n" + printf "# CONFIG_PAYLOAD_LINUXBOOT is not set\n" + printf "# CONFIG_PAYLOAD_UBOOT is not set\n" + printf "# CONFIG_PAYLOAD_EDK2 is not set\n" + printf "# CONFIG_PXE is not set\n" + printf "# CONFIG_BUILD_IPXE is not set\n" + printf "# CONFIG_MEMTEST_SECONDARY_PAYLOAD is not set\n" + printf "# CONFIG_COREINFO_SECONDARY_PAYLOAD is not set\n" + printf "# CONFIG_NVRAMCUI_SECONDARY_PAYLOAD is not set\n" + printf "# CONFIG_TINT_SECONDARY_PAYLOAD is not set\n" } >> "${config_file}" - if [ "$quiet" == "false" ]; then echo " $MAINBOARD ($customizing)"; fi + if [[ "${quiet}" == "false" ]]; then printf " %s (%s)\n" "${MAINBOARD}" "${customizing}"; fi # shellcheck disable=SC2059 - printf "$configoptions" >> "${config_file}" + printf "${configoptions}" >> "${config_file}" - $MAKE olddefconfig "$verboseopt" "DOTCONFIG=${config_file}" "obj=${build_dir}" "objutil=$TARGET/sharedutils" &> "${build_dir}/config.log" ; \ + ${MAKE} olddefconfig "${verboseopt}" "DOTCONFIG=${config_file}" "obj=${build_dir}" "objutil=${TARGET}/sharedutils" &> "${build_dir}/config.log" ; \ CONFIG_OK=$? - if [ $CONFIG_OK -eq 0 ]; then - $MAKE savedefconfig "$verboseopt" DEFCONFIG="${defconfig_file}" DOTCONFIG="${config_file}" obj="${build_dir}" objutil="$TARGET/sharedutils" &>> "${build_dir}/config.log" + if [[ ${CONFIG_OK} -eq 0 ]]; then + ${MAKE} savedefconfig "${verboseopt}" DEFCONFIG="${defconfig_file}" DOTCONFIG="${config_file}" obj="${build_dir}" objutil="${TARGET}/sharedutils" &>> "${build_dir}/config.log" return $? else return 1 @@ -308,40 +317,40 @@ function update_config } # shellcheck disable=SC2129 -function create_buildenv +create_buildenv() { local BUILD_NAME=$1 local build_dir=$2 local config_file=$3 - if [ -z "$config_file" ]; then - create_config "$BUILD_NAME" "$build_dir" + if [[ -z "${config_file}" ]]; then + create_config "${BUILD_NAME}" "${build_dir}" else local new_config_file="${build_dir}/config.build" - cp "$config_file" "$new_config_file" - update_config "$BUILD_NAME" "$build_dir" "$new_config_file" + cp "${config_file}" "${new_config_file}" + update_config "${BUILD_NAME}" "${build_dir}" "${new_config_file}" fi local ret=$? # Allow simple "make" in the target directory - local MAKEFILE=$TARGET/${BUILD_NAME}/Makefile - echo "# autogenerated" > "$MAKEFILE" - echo "TOP=$ROOT" >> "$MAKEFILE" - echo "BUILD=$TARGET" >> "$MAKEFILE" - echo "OBJ=\$(BUILD)/${MAINBOARD}" >> "$MAKEFILE" - echo "OBJUTIL=\$(BUILD)/sharedutils" >> "$MAKEFILE" - echo "all:" >> "$MAKEFILE" - echo " @cp -a config.h config.h.bak" >> "$MAKEFILE" - echo " @cd \$(TOP); \$(MAKE) olddefconfig DOTCONFIG=\$(OBJ)/config.build objutil=\$(OBJUTIL) obj=\$(OBJ)" >> "$MAKEFILE" - echo " @tail -n+6 config.h > config.new; tail -n+6 config.h.bak > config.old" >> "$MAKEFILE" - echo " @cmp -s config.new config.old && cp -a config.h.bak config.h || echo \"Config file changed\"" >> "$MAKEFILE" - echo " @rm config.h.bak config.new config.old" >> "$MAKEFILE" - echo " @cd \$(TOP); \$(MAKE) DOTCONFIG=\$(OBJ)/config.build objutil=\$(OBJUTIL) obj=\$(OBJ)" >> "$MAKEFILE" - - return $ret + local MAKEFILE=${TARGET}/${BUILD_NAME}/Makefile + printf "# autogenerated\n" > "${MAKEFILE}" + printf "TOP=%s\n" "${ROOT}" >> "${MAKEFILE}" + printf "BUILD=%s\n" "${TARGET}" >> "${MAKEFILE}" + printf "OBJ=\$(BUILD)/%s\n" "${MAINBOARD}" >> "${MAKEFILE}" + printf "OBJUTIL=\$(BUILD)/sharedutils\n" >> "${MAKEFILE}" + printf "all:\n" >> "${MAKEFILE}" + printf "\t@cp -a config.h config.h.bak\n" >> "${MAKEFILE}" + printf "\t@cd \$(TOP); \$(MAKE) olddefconfig DOTCONFIG=\$(OBJ)/config.build objutil=\$(OBJUTIL) obj=\$(OBJ)\n" >> "${MAKEFILE}" + printf "\t@tail -n+6 config.h > config.new; tail -n+6 config.h.bak > config.old\n" >> "${MAKEFILE}" + printf "\t@cmp -s config.new config.old && cp -a config.h.bak config.h || printf \"Config file changed\"\n" >> "${MAKEFILE}" + printf "\t@rm config.h.bak config.new config.old\n" >> "${MAKEFILE}" + printf "\t@cd \$(TOP); \$(MAKE) DOTCONFIG=\$(OBJ)/config.build objutil=\$(OBJUTIL) obj=\$(OBJ)\n" >> "${MAKEFILE}" + + return ${ret} } -function check_config +check_config() { local BUILD_DIR="$1" local TEST_TYPE="$2" @@ -351,16 +360,16 @@ function check_config local CONFIG_FILE="$BUILD_DIR/config.build" local CONFIG_LOG="$BUILD_DIR/config.log" - if [ -z "$NEGATE" ]; then - if ! grep -q "$TEST_STRING" "$CONFIG_FILE"; then - echo "config file: $CONFIG_FILE has incorrect $TEST_TYPE" - echo "Error: Expected '$TEST_STRING' in config file." >> "$CONFIG_LOG" + if [[ -z "${NEGATE}" ]]; then + if ! grep -q "${TEST_STRING}" "${CONFIG_FILE}"; then + printf "config file: %s has incorrect %s\n" "${CONFIG_FILE}" "${TEST_TYPE}" + printf "Error: Expected '%s' in config file.\n" "${TEST_STRING}" >> "${CONFIG_LOG}" return 1 fi else - if grep -q "$TEST_STRING" "$CONFIG_FILE"; then - echo "config file: $CONFIG_FILE has incorrect $TEST_TYPE" - echo "Error: Expected not to see '$TEST_STRING' in config file." >> "$CONFIG_LOG" + if grep -q "${TEST_STRING}" "${CONFIG_FILE}"; then + printf "config file: %s has incorrect %s\n" "${CONFIG_FILE}" "${TEST_TYPE}" + printf "Error: Expected not to see '%s' in config file.\n" "${TEST_STRING}" >> "${CONFIG_LOG}" return 1 fi fi @@ -369,23 +378,27 @@ function check_config } # Counting microseconds since start of shell -function add_timestamp +add_timestamp() { - local now=${EPOCHREALTIME} - local seconds=$(echo $now | cut -f 1 -d '.') - local usecs=$(echo $now | cut -f 2 -d '.') + local now + local seconds + local usecs + + now=${EPOCHREALTIME} + seconds=$(echo ${now} | cut -f 1 -d '.') + usecs=$(echo ${now} | cut -f 2 -d '.') seconds=$(( seconds - ts_exec_shell )) usecs=$(( seconds * 1000 * 1000 + 10#$usecs )) - printf "%s" $usecs + printf "%s" ${usecs} } -function ts_delta_seconds +ts_delta_seconds() { local delta=$(( ($2 - $1) / (1000 * 1000) )) - printf "%s" $delta + printf "%s" ${delta} } -function ts_delta_string +ts_delta_string() { local ts_minutes local ts_seconds @@ -397,23 +410,23 @@ function ts_delta_string ts_seconds=$(( delta / 1000)) delta=$(( delta % 1000 )) - if [ $ts_minutes -ne 0 ] ; then - printf "%d min %d sec" $ts_minutes $ts_seconds + if [[ ${ts_minutes} -ne 0 ]] ; then + printf "%d min %d sec" ${ts_minutes} ${ts_seconds} else - printf "%d.%03d seconds" $ts_seconds $delta + printf "%d.%03d seconds" ${ts_seconds} ${delta} fi } -function compile_target +compile_target() { local BUILD_NAME=$1 - if [ "$quiet" == "false" ]; then echo " Compiling $MAINBOARD image$cpuconfig..."; fi + if [[ "${quiet}" == "false" ]]; then printf " Compiling %s image%s...\n" "${MAINBOARD}" "${cpuconfig}"; fi CURR=$( pwd ) ts_1=$(add_timestamp) - eval "$BUILDPREFIX" "$MAKE" "$verboseopt" DOTCONFIG="${build_dir}/config.build" obj="${build_dir}" objutil="$TARGET/sharedutils" BUILD_TIMELESS=$TIMELESS \ + eval "${BUILDPREFIX}" "${MAKE}" "${verboseopt}" DOTCONFIG="${build_dir}/config.build" obj="${build_dir}" objutil="${TARGET}/sharedutils" BUILD_TIMELESS=${TIMELESS} \ &> "${build_dir}/make.log" ; \ MAKE_FAILED=$? ts_2=$(add_timestamp) @@ -421,61 +434,63 @@ function compile_target cd "${build_dir}" || return $? timestamps="abuild.timestamps" - printf "Build started %s\n" "${ts_basetime_str}" > "${timestamps}" - printf "BASETIME_SECONDS %d\n" $ts_exec_shell >> "${timestamps}" - printf "TS_0 %d\n" $ts_0 >> "${timestamps}" - printf "TS_1 %d\n" $ts_1 >> "${timestamps}" - printf "TS_2 %d\n" $ts_2 >> "${timestamps}" - - duration=$(ts_delta_seconds $ts_0 $ts_2) - duration_str=$(ts_delta_string $ts_0 $ts_2) - junit " <testcase classname='${TESTRUN}${testclass/#/.}' name='$BUILD_NAME' time='$duration' >" - - if [ $MAKE_FAILED -eq 0 ]; then + { + printf "Build started %s\n" "${ts_basetime_str}" + printf "BASETIME_SECONDS %d\n" "${ts_exec_shell}" + printf "TS_0 %d\n" "${ts_0}" + printf "TS_1 %d\n" "${ts_1}" + printf "TS_2 %d\n" "${ts_2}" + } > "${timestamps}" + + duration=$(ts_delta_seconds "${ts_0}" "${ts_2}") + duration_str=$(ts_delta_string "${ts_0}" "${ts_2}") + junit " <testcase classname='${TESTRUN}${testclass/#/.}' name='${BUILD_NAME}' time='${duration}' >" + + if [[ ${MAKE_FAILED} -eq 0 ]]; then junit "<system-out>" junitfile make.log junit "</system-out>" printf "ok\n" > compile.status - printf "%s built successfully. (took %s)\n" "$BUILD_NAME" "${duration_str}" - echo "$BUILD_NAME" >> "$PASSED_BOARDS" + printf "%s built successfully. (took %s)\n" "${BUILD_NAME}" "${duration_str}" + echo "${BUILD_NAME}" >> "${PASSED_BOARDS}" else junit "<failure type='BuildFailed'>" junitfile make.log junit "</failure>" printf "failed\n" > compile.status - printf "%s build FAILED after %s!\nLog excerpt:\n" "$BUILD_NAME" "${duration_str}" - tail -n $CONTEXT make.log 2> /dev/null || tail -$CONTEXT make.log - if [ "$clean_work" = "true" ]; then - echo "$BUILD_NAME" >> "$FAILED_BOARDS" + printf "%s build FAILED after %s!\nLog excerpt:\n" "${BUILD_NAME}" "${duration_str}" + tail -n ${CONTEXT} make.log 2> /dev/null || tail -${CONTEXT} make.log + if [[ "${clean_work}" = "true" ]]; then + echo "${BUILD_NAME}" >> "${FAILED_BOARDS}" else - echo "$BUILD_NAME - Log: ${build_dir}/make.log" >> "$FAILED_BOARDS" + echo "${BUILD_NAME} - Log: ${build_dir}/make.log" >> "${FAILED_BOARDS}" fi failed=1 fi - cd "$CURR" || return $? - if [ -n "$checksum_file" ]; then + cd "${CURR}" || return $? + if [[ -n "${checksum_file}" ]]; then sha256sum "${build_dir}/coreboot.rom" >> "${checksum_file}_platform" sort "${build_dir}/config.h" | grep CONFIG_ > "${build_dir}/config.h.sorted" sha256sum "${build_dir}/config.h.sorted" >> "${checksum_file}_config" fi stats_files="${build_dir}/${timestamps}" - if [ -f ${build_dir}/ccache.stats ]; then + if [[ -f ${build_dir}/ccache.stats ]]; then stats_files="${stats_files} ${build_dir}/ccache.stats" fi - flock -F -w 0.1 $TARGET/.statslock tar -rf ${stats_archive} ${stats_files} 2> /dev/null + flock -F -w 0.1 "${TARGET}/.statslock" tar -rf "${stats_archive}" "${stats_files}" 2> /dev/null - if [ "$clean_work" = "true" ]; then + if [[ "${clean_work}" = "true" ]]; then rm -rf "${build_dir}" fi - if [ "$clean_objs" = "true" ]; then - find ${build_dir} \! \( -name coreboot.rom -o -name config.h -o -name config.build -o -name make.log \) -type f -exec rm {} + - find ${build_dir} -type d -exec rmdir -p {} + 2>/dev/null + if [[ "${clean_objs}" = "true" ]]; then + find "${build_dir}" \! \( -name coreboot.rom -o -name config.h -o -name config.build -o -name make.log \) -type f -exec rm {} + + find "${build_dir}" -type d -exec rmdir -p {} + 2>/dev/null fi - return $MAKE_FAILED + return ${MAKE_FAILED} } -function build_config +build_config() { local MAINBOARD=$1 local build_dir=$2 @@ -486,120 +501,118 @@ function build_config board_srcdir=$(mainboard_directory "${MAINBOARD}") - if [ "$(cat "${build_dir}/compile.status" 2>/dev/null)" = "ok" ] && \ - [ "$buildall" = "false" ]; then - echo "Skipping $BUILD_NAME; (already successful)" + if [[ "$(cat "${build_dir}/compile.status" 2>/dev/null)" = "ok" ]] && \ + [[ "${buildall}" = "false" ]]; then + printf "Skipping %s; (already successful)\n" "${BUILD_NAME}" + return fi export HOSTCC='gcc' - if [ "$chromeos" = true ] && [ "$(grep -c "^[[:space:]]*select[[:space:]]*MAINBOARD_HAS_CHROMEOS\>" "${ROOT}/src/mainboard/${board_srcdir}/Kconfig")" -eq 0 ]; then - echo "${BUILD_NAME} doesn't support ChromeOS, skipping." + if [[ "${chromeos}" = true ]] && [[ "$(grep -c "^[[:space:]]*select[[:space:]]*MAINBOARD_HAS_CHROMEOS>" "${ROOT}/src/mainboard/${board_srcdir}/Kconfig")" -eq 0 ]]; then + printf "%s doesn't support ChromeOS, skipping.\n" "${BUILD_NAME}" return fi - if [ "$quiet" == "false" ]; then echo "Building $BUILD_NAME"; fi - mkdir -p "$TARGET/${BUILD_NAME}" "$TARGET/abuild" - ABSPATH="$(cd "$TARGET/abuild" && pwd)" - XMLFILE="$ABSPATH/${BUILD_NAME}.xml" + if [[ "${quiet}" == "false" ]]; then printf "Building %s\n" "${BUILD_NAME}"; fi + mkdir -p "${TARGET}/${BUILD_NAME}" "${TARGET}/abuild" + ABSPATH="$(cd "${TARGET}/abuild" && pwd)" + XMLFILE="${ABSPATH}/${BUILD_NAME}.xml" rm -f "${XMLFILE}" ts_0=$(add_timestamp) - create_buildenv "$BUILD_NAME" "$build_dir" "$config_file" + create_buildenv "${BUILD_NAME}" "${build_dir}" "${config_file}" local BUILDENV_CREATED=$? - check_config "$build_dir" "mainboard" "CONFIG_BOARD_${MAINBOARD}=y" + check_config "${build_dir}" "mainboard" "CONFIG_BOARD_${MAINBOARD}=y" local MAINBOARD_OK=$? - check_config "$build_dir" "vendor" "CONFIG_VENDOR_$(mainboard_vendor "${MAINBOARD}")=y" + check_config "${build_dir}" "vendor" "CONFIG_VENDOR_$(mainboard_vendor "${MAINBOARD}")=y" local VENDOR_OK=$? - if [ "$chromeos" = false ]; then + if [[ "${chromeos}" = false ]]; then # Skip this rule for configs created from templates that already # come with CHROMEOS enabled. - grep -q "^CONFIG_CHROMEOS=y" ${config_file:-/dev/null} || \ - check_config "$build_dir" "ChromeOS" "CONFIG_CHROMEOS=y" negate + grep -q "^CONFIG_CHROMEOS=y" "${config_file:-/dev/null}" || \ + check_config "${build_dir}" "ChromeOS" "CONFIG_CHROMEOS=y" negate local FORCE_ENABLED_CROS=$? else local FORCE_ENABLED_CROS=0 fi - if [ "$clang" = true ]; then - check_config "$build_dir" "clang" "CONFIG_COMPILER_LLVM_CLANG=y" - if [ $? -ne 0 ]; then - echo "${MAINBOARD} doesn't support clang, skipping." + if [[ "${clang}" = true ]]; then + if ! check_config "${build_dir}" "clang" "CONFIG_COMPILER_LLVM_CLANG=y"; then + printf "%s doesn't support clang, skipping.\n" "${MAINBOARD}" return fi fi - if [ -n "${skipconfig_set}" ]; then - check_config "${build_dir}" "config value" "CONFIG_${skipconfig_set}=y" negate - if [ $? -ne 0 ]; then - echo "${MAINBOARD} has ${skipconfig_set} set. Skipping at user's request." + if [[ -n "${skipconfig_set}" ]]; then + if ! check_config "${build_dir}" "config value" "CONFIG_${skipconfig_set}=y" negate; then + printf "%s has %s set. Skipping at user's request.\n" "${MAINBOARD}" "${skipconfig_set}" return fi fi - if [ -n "${skipconfig_unset}" ]; then - check_config "${build_dir}" "config value" "CONFIG_${skipconfig_unset}=y" - if [ $? -ne 0 ]; then - echo "${MAINBOARD} does not have ${skipconfig_unset} set. Skipping at user's request." + if [[ -n "${skipconfig_unset}" ]]; then + if ! check_config "${build_dir}" "config value" "CONFIG_${skipconfig_unset}=y"; then + printf "%s does not have %s set. Skipping at user's request.\n" "${MAINBOARD}" "${skipconfig_unset}" return fi fi - if [ $BUILDENV_CREATED -ne 0 ] || [ $MAINBOARD_OK -ne 0 ] || [ $VENDOR_OK -ne 0 ] || [ $FORCE_ENABLED_CROS -eq 1 ]; then - junit " <testcase classname='${TESTRUN}${testclass/#/.}' name='$BUILD_NAME' >" + if [[ ${BUILDENV_CREATED} -ne 0 ]] || [[ ${MAINBOARD_OK} -ne 0 ]] || [[ ${VENDOR_OK} -ne 0 ]] || [[ ${FORCE_ENABLED_CROS} -eq 1 ]]; then + junit " <testcase classname='${TESTRUN}${testclass/#/.}' name='${BUILD_NAME}' >" junit "<failure type='BuildFailed'>" - junitfile "$build_dir/config.log" + junitfile "${build_dir}/config.log" junit "</failure>" printf "failed\n" > compile.status - printf "%s build configuration FAILED!\nLog excerpt:\n" "$BUILD_NAME" - tail -n $CONTEXT "$build_dir/config.log" 2> /dev/null || tail -$CONTEXT "$build_dir/config.log" + printf "%s build configuration FAILED!\nLog excerpt:\n" "${BUILD_NAME}" + tail -n ${CONTEXT} "${build_dir}/config.log" 2> /dev/null || tail -${CONTEXT} "${build_dir}/config.log" junit "</testcase>" - echo "$BUILD_NAME - Log: $build_dir/config.log" >> "$FAILED_BOARDS" + printf "%s - Log: %s/config.log\n" "${BUILD_NAME}" "${build_dir}" >> "${FAILED_BOARDS}" return fi local required_arches - required_arches=$(grep -E "^CONFIG_ARCH_(BOOTBLOCK|R.MSTAGE|VERSTAGE)" "$TARGET/${BUILD_NAME}/config.build" | \ + required_arches=$(grep -E "^CONFIG_ARCH_(BOOTBLOCK|R.MSTAGE|VERSTAGE)" "${TARGET}/${BUILD_NAME}/config.build" | \ sed "s,^CONFIG_ARCH_[^_]*_\([^=]*\)=.*$,\1," |sort -u |tr 'A-Z\n\r' 'a-z ') - missing_arches="$($MAKE --no-print-directory -f - \ - REQUIRED_ARCHES="$required_arches" <<'EOF' + missing_arches="$(${MAKE} --no-print-directory -f - \ + REQUIRED_ARCHES="${required_arches}" <<'EOF' include $(xcompile) .PHONY: missing_arches missing_arches: $(if $(XCOMPILE_COMPLETE),,$(error $(xcompile) is invalid.)) - @echo $(foreach arch,$(REQUIRED_ARCHES),$(if $(filter $(arch),$(SUBARCH_SUPPORTED)),,$(arch))) + @printf "%s\n" "$(foreach arch,$(REQUIRED_ARCHES),$(if $(filter $(arch),$(SUBARCH_SUPPORTED)),,$(arch)))" EOF )" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then - echo "Calculating missing_arches failed" >&2 + printf "Calculating missing_arches failed\n" >&2 exit 1 fi - if [ -n "$missing_arches" ]; then - printf "skipping %s because we're missing compilers for (%s)\n" "$BUILD_NAME" "$missing_arches" + if [[ -n "${missing_arches}" ]]; then + printf "skipping %s because we're missing compilers for (%s)\n" "${BUILD_NAME}" "${missing_arches}" return fi - if [ $BUILDENV_CREATED -eq 0 ] && [ $configureonly -eq 0 ]; then + if [[ ${BUILDENV_CREATED} -eq 0 ]] && [[ ${configureonly} -eq 0 ]]; then BUILDPREFIX= - if [ "$scanbuild" = "true" ]; then - scanbuild_out=$TARGET/${BUILD_NAME}-scanbuild + if [[ "${scanbuild}" = "true" ]]; then + scanbuild_out="${TARGET}/${BUILD_NAME}-scanbuild" rm -rf "${scanbuild_out}" BUILDPREFIX="scan-build ${SCANBUILD_ARGS} -o ${scanbuild_out}tmp" fi compile_target "${BUILD_NAME}" - if [ "$scanbuild" = "true" ]; then - mv "${scanbuild_out}"tmp/* "${scanbuild_out}" + if [[ "${scanbuild}" = "true" ]]; then + mv "${scanbuild_out}tmp"/* "${scanbuild_out}" rmdir "${scanbuild_out}tmp" fi fi @@ -607,74 +620,74 @@ EOF junit "</testcase>" } -function record_mainboard +record_mainboard() { local log=$1 - if test "$mode" != "text" && test -f "$TARGET/abuild/${log}.xml"; then - cat "$TARGET/abuild/${log}.xml" >> "$REAL_XMLFILE" - echo "$TARGET/abuild/${log}.xml written to $REAL_XMLFILE" >&2 + printf "%s/abuild/%s.xml written to %s\n" "${TARGET}" "${log}" "${REAL_XMLFILE}" >&2 + if test "${mode}" != "text" && test -f "${TARGET}/abuild/${log}.xml"; then + cat "${TARGET}/abuild/${log}.xml" >> "${REAL_XMLFILE}" else - echo "Warning: $TARGET/abuild/${log}.xml not found." >&2 + printf "Warning: %s/abuild/%s.xml not found.\n" "${TARGET}" "${log}" >&2 fi } # One target may build several configs -function build_target +build_target() { local MAINBOARD=$1 local MAINBOARD_LC - MAINBOARD_LC=$(echo "$MAINBOARD" | tr '[:upper:]' '[:lower:]') + MAINBOARD_LC=$(echo "${MAINBOARD}" | tr '[:upper:]' '[:lower:]') # look for config files in the config directory that match the boardname - if [ -n "$( find "$configdir" -maxdepth 1 -name "config.${MAINBOARD_LC}*" -print -quit )" ]; then - for config in "$configdir/config.${MAINBOARD_LC}"*; do + if [[ -n "$( find "${configdir}" -maxdepth 1 -name "config.${MAINBOARD_LC}*" -print -quit )" ]]; then + for config in "${configdir}/config.${MAINBOARD_LC}"*; do BUILD_NAME="${config##*/}" BUILD_NAME="${BUILD_NAME##config.}" BUILD_NAME=$(echo "${BUILD_NAME}" | tr '[:lower:]' '[:upper:]') - echo $BUILD_NAME $MAINBOARD + printf "%s %s\n" "${BUILD_NAME}" "${MAINBOARD}" # If the file in configs/ results in the same build_name as the default config # append a '_' to differentiate. Otherwise the default configuration would # override the results. - if [ "${MAINBOARD}" = "${BUILD_NAME}" ]; then + if [[ "${MAINBOARD}" = "${BUILD_NAME}" ]]; then BUILD_NAME=${BUILD_NAME}"_" fi - echo "Building config $BUILD_NAME" - build_dir=$TARGET/${BUILD_NAME} - build_config "$MAINBOARD" "$build_dir" "$BUILD_NAME" "$config" - record_mainboard "$BUILD_NAME" - remove_target "$BUILD_NAME" + printf "Building config %s\n" "${BUILD_NAME}" + build_dir="${TARGET}/${BUILD_NAME}" + build_config "${MAINBOARD}" "${build_dir}" "${BUILD_NAME}" "${config}" + record_mainboard "${BUILD_NAME}" + remove_target "${BUILD_NAME}" done fi - echo "Building board $MAINBOARD (using default config)" - build_dir=$TARGET/${MAINBOARD} - build_config "$MAINBOARD" "$build_dir" "$MAINBOARD" - record_mainboard "$MAINBOARD" - remove_target "$MAINBOARD" + printf "Building board %s (using default config)\n" "${MAINBOARD}" + build_dir="${TARGET}/${MAINBOARD}" + build_config "${MAINBOARD}" "${build_dir}" "${MAINBOARD}" + record_mainboard "${MAINBOARD}" + remove_target "${MAINBOARD}" } -function remove_target +remove_target() { - if [ "$remove" != "true" ]; then + if [[ "${remove}" != "true" ]]; then return fi local BUILD_NAME=$1 # Save the generated coreboot.rom file of each board. - if [ -r "$TARGET/${BUILD_NAME}/coreboot.rom" ]; then - cp "$TARGET/${BUILD_NAME}/coreboot.rom" \ + if [[ -r "${TARGET}/${BUILD_NAME}/coreboot.rom" ]]; then + cp "${TARGET}/${BUILD_NAME}/coreboot.rom" \ "${BUILD_NAME}_coreboot.rom" fi - echo "Removing build dir for $BUILD_NAME..." + printf "Removing build dir for %s...\n" "${BUILD_NAME}" rm -rf "${TARGET:?}/${BUILD_NAME}" return } -function myhelp +myhelp() { cat << __END_OF_HELP Usage: $0 [options] @@ -699,13 +712,13 @@ Options:\n [-n|--name] Set build name - also sets xmlfile if not already set [-o|--outdir <path>] Store build results in path - (defaults to $TARGET) + (defaults to ${TARGET}) [-p|--payloads <dir>] Use payloads in <dir> to build images [-P|--prefix <name>] File name prefix in CBFS [-q|--quiet] Print fewer messages [-r|--remove] Remove output dir after build [-R|--root <path>] Absolute path to coreboot sources - (defaults to $ROOT) + (defaults to ${ROOT}) [--scan-build] Use clang's static analyzer [--skip_set <value>] Skip building boards with this Kconfig set [--skip_unset <value>] Skip building boards with this Kconfig not set @@ -717,7 +730,7 @@ Options:\n [-x|--chromeos] Build with CHROMEOS enabled Skip boards without ChromeOS support [-X|--xmlfile <name>] Set JUnit XML log file filename - (defaults to $XMLFILE) + (defaults to ${XMLFILE}) [-y|--ccache] Use ccache [-z|--clean] Remove build results when finished [-Z|--clean-somewhat] Remove build but keep coreboot.rom + config @@ -729,11 +742,11 @@ Options:\n __END_OF_HELP } -function myversion +myversion() { cat << EOF -coreboot autobuild v$ABUILD_VERSION ($ABUILD_DATE) +coreboot autobuild v${ABUILD_VERSION} (${ABUILD_DATE}) Copyright (C) 2004 by Stefan Reinauer <stepan@openbios.org> Copyright (C) 2006-2010 by coresystems GmbH <info@coresystems.de> @@ -748,14 +761,13 @@ EOF # default options target="" buildall=false -verbose=false test -f util/sconfig/sconfig.l && ROOT=$( pwd ) test -f ../util/sconfig/sconfig.l && ROOT=$( cd .. && pwd ) -test "$ROOT" = "" && ROOT=$( cd ../.. && pwd ) +test "${ROOT}" = "" && ROOT=$( cd ../.. && pwd ) # Look if we have getopt. If not, build it. -export PATH=$PATH:util/abuild +export PATH=${PATH}:util/abuild getopt - > /dev/null 2>/dev/null || gcc -o util/abuild/getopt util/abuild/getopt.c # Save command line for xargs parallelization. @@ -765,19 +777,19 @@ cmdline=("$@") getoptbrand="$(getopt -V)" # shellcheck disable=SC2086 -if [ "${getoptbrand:0:6}" == "getopt" ]; then +if [[ "${getoptbrand:0:6}" == "getopt" ]]; then # Detected GNU getopt that supports long options. args=$(getopt -l version,verbose,quiet,help,all,target:,board-variant:,payloads:,cpus:,silent,junit,config,loglevel:,remove,prefix:,update,scan-build,ccache,blobs,clang,any-toolchain,clean,clean-somewhat,outdir:,chromeos,xmlfile:,kconfig:,dir:,root:,recursive,checksum:,timeless,exitcode,asserts,name:,skip_set:,skip_unset: -o Vvqhat:b:p:c:sJCl:rP:uyBLAzZo:xX:K:d:R:Ien: -- "$@") || exit 1 - eval set -- $args + eval set -- ${args} retval=$? else # Detected non-GNU getopt args=$(getopt Vvqhat:b:p:c:sJCl:rP:uyBLAZzo:xX:K:d:R:Ien: "$@") - set -- $args + set -- ${args} retval=$? fi -if [ $retval != 0 ]; then +if [[ ${retval} != 0 ]]; then myhelp exit 1 fi @@ -793,25 +805,25 @@ configoptions="" unset testclass while true ; do case "$1" in - -J|--junit) shift; mode=junit; rm -f "$XMLFILE" ;; + -J|--junit) shift; mode=junit; rm -f "${XMLFILE}" ;; -t|--target) shift; target="$1"; shift;; -b|--board-variant) shift; variant="$1"; shift;; -a|--all) shift; buildall=true;; -d|--dir) shift; configdir="$1"; shift;; -e|--exitcode) shift; exitcode=1;; -r|--remove) shift; remove=true;; - -v|--verbose) shift; verbose=true; verboseopt='V=1';; + -v|--verbose) shift; verboseopt='V=1';; -q|--quiet) shift; quiet=true;; -V|--version) shift; myversion; exit 0;; -h|--help) shift; myversion; myhelp; exit 0;; -p|--payloads) shift; payloads="$1"; shift;; - -R|--root) shift; ROOT="$1"; MAKE="$MAKE -C $1"; shift;; + -R|--root) shift; ROOT="$1"; MAKE="${MAKE} -C $1"; shift;; -c|--cpus) shift export MAKEFLAGS="-j $1" cpus=$1 - test "$MAKEFLAGS" == "-j max" && export MAKEFLAGS="-j" && cpuconfig=" in parallel" + test "${MAKEFLAGS}" == "-j max" && export MAKEFLAGS="-j" && cpuconfig=" in parallel" test "$1" == "1" && cpuconfig=" on 1 cpu" - expr "$1" : '-\?[0-9]\+$' > /dev/null && test "0$1" -gt 1 && cpuconfig=" on $1 cpus in parallel" + expr "$1" : '-\?[0-9]\+$' > /dev/null && test "0$1" -gt 1 && cpuconfig=" on ${1} cpus in parallel" shift;; # obsolete option -s|--silent) shift;; @@ -914,67 +926,67 @@ if [[ "${TESTRUN}" != "${TESTRUN_DEFAULT}" ]]; then fi fi -if [ -n "$1" ]; then +if [[ -n "$1" ]]; then printf "Invalid option '%s'\n\n" "$1"; myhelp; exit 1; fi -if [ -z "$TARGET" ] || [ "$TARGET" = "/" ]; then - echo "Please specify a valid, non-root build directory." +if [[ -z "${TARGET}" ]] || [[ "${TARGET}" = "/" ]]; then + printf "Please specify a valid, non-root build directory.\n" exit 1 fi -if ! mkdir -p "$TARGET"; then - echo "Unable to create build directory" +if ! mkdir -p "${TARGET}"; then + printf "Unable to create build directory\n" exit 1 fi if echo "${skipconfig_set}${skipconfig_unset}" | grep -q "CONFIG_" >/dev/null 2>&1; then - echo "Error: Do not include CONFIG_ in the Kconfig value to skip" + printf "Error: Do not include CONFIG_ in the Kconfig value to skip\n" exit 1 fi -customizing=$(echo "$customizing" | cut -c3-) -if [ -z "$customizing" ]; then +customizing=$(echo "${customizing}" | cut -c3-) +if [[ -z "${customizing}" ]]; then customizing="Default configuration" fi customizing="Config: ${customizing}" -FAILED_BOARDS="$(realpath ${TARGET}/failed_boards)" -PASSED_BOARDS="$(realpath ${TARGET}/passing_boards)" +FAILED_BOARDS="$(realpath "${TARGET}/failed_boards")" +PASSED_BOARDS="$(realpath "${TARGET}/passing_boards")" -stats_archive="$TARGET/statistics.tar" +stats_archive="${TARGET}/statistics.tar" # Generate a single xcompile for all boards export xcompile="${TARGET}/xcompile" -if [ "$recursive" = "false" ]; then +if [[ "${recursive}" = "false" ]]; then rm -f "${xcompile}" - $MAKE -C"${ROOT}" obj="$TARGET/temp" objutil="$TARGET/sharedutils" UPDATED_SUBMODULES=1 "${xcompile}" || exit 1 - rm -f "$FAILED_BOARDS" "$PASSED_BOARDS" + ${MAKE} -C"${ROOT}" obj="${TARGET}/temp" objutil="${TARGET}/sharedutils" UPDATED_SUBMODULES=1 "${xcompile}" || exit 1 + rm -f "${FAILED_BOARDS}" "${PASSED_BOARDS}" # Initialize empty statistics archive tar -cf "${stats_archive}" "${xcompile}" 2> /dev/null fi USE_XARGS=0 -if [ "$cpus" != "1" ]; then +if [[ "${cpus}" != "1" ]]; then # Limit to 32 parallel builds for now. # Thrashing all caches because we run # 160 abuilds in parallel is no fun. - if [ "$cpus" = "max" ]; then + if [[ "${cpus}" = "max" ]]; then cpus=32 fi # Test if xargs supports the non-standard -P flag - # FIXME: disabled until we managed to eliminate all the make(1) quirks - echo | xargs -P ${cpus:-0} -n 1 echo 2>/dev/null >/dev/null && USE_XARGS=1 + printf "\n" | xargs -P "${cpus:-0}" -n 1 printf "%s\n" 2>/dev/null >/dev/null && USE_XARGS=1 fi -if [ "$USE_XARGS" = "0" ]; then -test "$MAKEFLAGS" == "" && test "$cpus" != "" && export MAKEFLAGS="-j $cpus" -export MAKEFLAGS="$MAKEFLAGS UPDATED_SUBMODULES=1" # no need to re-download +if [[ "${USE_XARGS}" = "0" ]]; then +test "${MAKEFLAGS}" == "" && test "${cpus}" != "" && export MAKEFLAGS="-j ${cpus}" +export MAKEFLAGS="${MAKEFLAGS} UPDATED_SUBMODULES=1" # no need to re-download build_targets() { - local targets=${*-$(get_mainboards)} - for MAINBOARD in $targets; do + local targets + targets=${*-$(get_mainboards)} + for MAINBOARD in ${targets}; do build_target "${MAINBOARD}" done } @@ -986,109 +998,111 @@ build_targets() local etime local num_targets local cpus_per_target + local XMLFILE + local duration local targets=${*-$(get_mainboards)} # seed shared utils TMPCFG=$(mktemp) - printf "%s" "$configoptions" > "$TMPCFG" - $MAKE -j "$cpus" DOTCONFIG="$TMPCFG" obj="$TARGET/temp" objutil="$TARGET/sharedutils" olddefconfig 2>/dev/null + printf "%s" "${configoptions}" > "${TMPCFG}" + ${MAKE} -j "${cpus}" DOTCONFIG="${TMPCFG}" obj="${TARGET}/temp" objutil="${TARGET}/sharedutils" olddefconfig 2>/dev/null BUILDPREFIX= - if [ "$scanbuild" = "true" ]; then - scanbuild_out=$TARGET/sharedutils-scanbuild + if [[ "${scanbuild}" = "true" ]]; then + scanbuild_out="${TARGET}/sharedutils-scanbuild" rm -rf "${scanbuild_out}" BUILDPREFIX="scan-build -o ${scanbuild_out}tmp" fi - mkdir -p "$TARGET/abuild" - ABSPATH="$(cd "$TARGET/abuild" && pwd)" - local XMLFILE="$ABSPATH/__util.xml" + mkdir -p "${TARGET}/abuild" + ABSPATH="$(cd "${TARGET}/abuild" && pwd)" + XMLFILE="${ABSPATH}/__util.xml" rm -f "${XMLFILE}" stime=$(add_timestamp) - $BUILDPREFIX "$MAKE" -j "$cpus" DOTCONFIG="$TMPCFG" obj="$TARGET/temp" objutil="$TARGET/sharedutils" tools > "$TARGET/sharedutils/make.log" 2>&1 + ${BUILDPREFIX} "${MAKE}" -j "${cpus}" DOTCONFIG="${TMPCFG}" obj="${TARGET}/temp" objutil="${TARGET}/sharedutils" tools > "${TARGET}/sharedutils/make.log" 2>&1 local ret=$? etime=$(add_timestamp) - local duration=$(ts_delta_seconds $stime $etime) + duration=$(ts_delta_seconds "${stime}" "${etime}") - junit " <testcase classname='util' name='all' time='$duration' >" - if [ $ret -eq 0 ]; then + junit " <testcase classname='util' name='all' time='${duration}' >" + if [[ ${ret} -eq 0 ]]; then junit "<system-out>" - junitfile "$TARGET/sharedutils/make.log" + junitfile "${TARGET}/sharedutils/make.log" junit "</system-out>" junit "</testcase>" else junit "<failure type='BuildFailed'>" - junitfile "$TARGET/sharedutils/make.log" + junitfile "${TARGET}/sharedutils/make.log" junit "</failure>" junit "</testcase>" - echo "Shared Utilities - Log: $TARGET/sharedutils/make.log" >> "$FAILED_BOARDS" - rm "$TMPCFG" + echo "Shared Utilities - Log: ${TARGET}/sharedutils/make.log" >> "${FAILED_BOARDS}" + rm "${TMPCFG}" return fi - if [ "$scanbuild" = "true" ]; then - mv "${scanbuild_out}tmp/"* "${scanbuild_out}" + if [[ "${scanbuild}" = "true" ]]; then + mv "${scanbuild_out}"tmp/* "${scanbuild_out}" rmdir "${scanbuild_out}tmp" fi - rm -rf "$TARGET/temp" "$TMPCFG" - num_targets=$(wc -w <<<"$targets") + rm -rf "${TARGET}/temp" "${TMPCFG}" + num_targets=$(wc -w <<<"${targets}") cpus_per_target=$(((${cpus:-1} + num_targets - 1) / num_targets)) - echo "$targets" | xargs -P ${cpus:-0} -n 1 "$0" "${cmdline[@]}" -I -c "$cpus_per_target" -t + printf "%s\n" "${targets}" | xargs -P "${cpus:-0}" -n 1 "$0" "${cmdline[@]}" -I -c "${cpus_per_target}" -t } fi junit '<?xml version="1.0" encoding="utf-8"?>' junit '<testsuite>' -if [ "$target" != "" ]; then +if [[ "$target" != "" ]]; then # build a single board MAINBOARD=$(normalize_target "${target}") - if [ -z "${MAINBOARD}" ]; then + if [[ -z "${MAINBOARD}" ]]; then printf "No such target: %s" "${target}" - if [ -n "${variant}" ]; then + if [[ -n "${variant}" ]]; then printf ", variant: %s" "${variant}" fi printf "\n" exit 1 fi build_srcdir="$(mainboard_directory "${MAINBOARD}")" - if [ "$(echo "${MAINBOARD}" | wc -w)" -gt 1 ]; then + if [[ "$(echo "${MAINBOARD}" | wc -w)" -gt 1 ]]; then build_targets "${MAINBOARD}" - elif [ ! -r "$ROOT/src/mainboard/${build_srcdir}" ]; then - echo "No such target: ${MAINBOARD}" + elif [[ ! -r "${ROOT}/src/mainboard/${build_srcdir}" ]]; then + printf "No such target: %s\n" "${MAINBOARD}" exit 1 else build_target "${MAINBOARD}" - XMLFILE=$REAL_XMLFILE + XMLFILE=${REAL_XMLFILE} fi else build_targets - rm -f "$REAL_XMLFILE" - XMLFILE="$REAL_XMLFILE" + rm -f "${REAL_XMLFILE}" + XMLFILE="${REAL_XMLFILE}" junit '<?xml version="1.0" encoding="utf-8"?>' junit '<testsuite>' - if [ "$mode" != "text" ]; then - for xmlfile in $TARGET/abuild/*_*.xml; do - cat "$xmlfile" >> "$REAL_XMLFILE" + if [[ "${mode}" != "text" ]]; then + for xmlfile in "${TARGET}"/abuild/*_*.xml; do + cat "${xmlfile}" >> "${REAL_XMLFILE}" done fi - XMLFILE=$REAL_XMLFILE + XMLFILE=${REAL_XMLFILE} fi junit '</testsuite>' -if [ "$recursive" = "false" ]; then +if [[ "${recursive}" = "false" ]]; then # Print the list of failed configurations - if [ -f "$FAILED_BOARDS" ]; then - printf "%s configuration(s) failed:\n" "$( wc -l < "$FAILED_BOARDS" )" - cat "$FAILED_BOARDS" - echo - if [ "$exitcode" != "0" ]; then + if [[ -f "${FAILED_BOARDS}" ]]; then + printf "%s configuration(s) failed:\n" "$( wc -l < "${FAILED_BOARDS}" )" + cat "${FAILED_BOARDS}" + printf "\n" + if [[ "${exitcode}" != "0" ]]; then failed=1 fi - elif [ -f "$PASSED_BOARDS" ]; then - printf "All %s tested configurations passed.\n" "$( wc -l < "$PASSED_BOARDS" )" + elif [[ -f "${PASSED_BOARDS}" ]]; then + printf "All %s tested configurations passed.\n" "$( wc -l < "${PASSED_BOARDS}" )" else printf "No boards tested.\n" fi fi -exit $failed +exit ${failed} diff --git a/util/lint/lint-stable-031-gofmt b/util/lint/lint-stable-031-gofmt new file mode 100755 index 000000000000..f22d39ae34a0 --- /dev/null +++ b/util/lint/lint-stable-031-gofmt @@ -0,0 +1,33 @@ +#!/usr/bin/env sh +# +# SPDX-License-Identifier: GPL-2.0-only + +# DESCR: Run gofmt on util/intelp2m + +LINTDIR="$( + cd -- "$(dirname "$0")" > /dev/null 2>&1 || return + pwd -P +)" + +# shellcheck source=helper_functions.sh +. "${LINTDIR}/helper_functions.sh" + +# Until we require this by default, we need a list of opted-in directories +# If the script isn't looking at a git repository, just exit +if [ "${IN_GIT_TREE}" -eq 0 ]; then + exit 0 +fi + +files_to_check=$(${GIT} log HEAD~..HEAD --format= --name-only util/intelp2m | grep "\.go$") + +# nothing to do +if [ -z "$files_to_check" ]; then + exit 0 +fi + +diff_files=$(gofmt -l $files_to_check) +if [ "$diff_files" != "" ]; then + echo "Coding style mismatch. Run \"gofmt -w $files_to_check\" before pushing changes" + exit 1 +fi +exit 0 diff --git a/util/superiotool/nuvoton.c b/util/superiotool/nuvoton.c index 05974f27d49b..80ba12ecdd8b 100644 --- a/util/superiotool/nuvoton.c +++ b/util/superiotool/nuvoton.c @@ -596,10 +596,10 @@ static const struct superio_registers reg_table[] = { {0x0b, "Hardware Monitor, Front Panel LED", {0x30,0x60,0x61,0x62,0x63,0x70,0xe0,0xe1,0xe2, 0xe4,0xf0,0xf1,0xf2,0xf5,0xf6,0xf7,0xf8,0xf9, - 0xfa,EOT}, + 0xfa,0xfb,EOT}, {0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x7f,0xff, 0xff,0x00,0x00,0x00,0x10,0x00,0x87,0x47,0x00, - 0x00,EOT}}, + 0x00,0x00,EOT}}, {0x0d, "WDT1", {0xf0,EOT}, {0x00,EOT}}, diff --git a/util/xcompile/xcompile b/util/xcompile/xcompile index 3fb0cb75915b..6443dd2a90ff 100755 --- a/util/xcompile/xcompile +++ b/util/xcompile/xcompile @@ -208,6 +208,9 @@ detect_special_flags() { testcc "$GCC" "$CFLAGS_GCC -Wcalloc-transposed-args" && CFLAGS_GCC="$CFLAGS_GCC -Wcalloc-transposed-args" + testcc "$GCC" "$CFLAGS_GCC -Walloc-size" && + CFLAGS_GCC="$CFLAGS_GCC -Walloc-size" + testcc "$GCC" "$CFLAGS_GCC -Wno-unused-parameter" && CFLAGS_GCC="$CFLAGS_GCC -Wno-unused-parameter" |