util/abuild: Use ${} around variable names
While not always necessary, for consistency, use the ${} around all
variables.
Change-Id: I53fdddfd41e8aaa062bee73f441c5a816282c8ed
Signed-off-by: Martin Roth <gaumless@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/87370
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Matt DeVillier <matt.devillier@gmail.com>
This commit is contained in:
parent
9ddb54e6ad
commit
a2baaec067
1 changed files with 209 additions and 210 deletions
|
|
@ -14,12 +14,12 @@
|
|||
ABUILD_DATE="Nov 18, 2023"
|
||||
ABUILD_VERSION="0.11.03"
|
||||
|
||||
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}"
|
||||
|
||||
|
|
@ -36,13 +36,13 @@ export COREBOOT_ABUILD=1
|
|||
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
|
||||
|
|
@ -64,7 +64,7 @@ checksum_file=""
|
|||
cpus=1
|
||||
|
||||
# change with -d <directory>
|
||||
configdir="$TOP/configs"
|
||||
configdir="${TOP}/configs"
|
||||
|
||||
# Timeless builds
|
||||
TIMELESS=0
|
||||
|
|
@ -114,22 +114,22 @@ interrupt()
|
|||
|
||||
debug()
|
||||
{
|
||||
[[ "$verbose" == "true" ]] && printf "%s\n" "$*"
|
||||
[[ "${verbose}" == "true" ]] && printf "%s\n" "$*"
|
||||
}
|
||||
|
||||
junit()
|
||||
{
|
||||
[[ "$mode" == "junit" ]] && printf "%s\n" "$*" >> "$XMLFILE"
|
||||
[[ "${mode}" == "junit" ]] && printf "%s\n" "$*" >> "${XMLFILE}"
|
||||
return 0
|
||||
}
|
||||
|
||||
junitfile()
|
||||
{
|
||||
test "$mode" == "junit" && {
|
||||
test "${mode}" == "junit" && {
|
||||
printf '<![CDATA[\n'
|
||||
cat "$1"
|
||||
printf ']]>\n'
|
||||
} >> "$XMLFILE"
|
||||
} >> "${XMLFILE}"
|
||||
}
|
||||
|
||||
# Return mainboard descriptors.
|
||||
|
|
@ -167,10 +167,10 @@ 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,"
|
||||
}
|
||||
|
||||
|
|
@ -187,19 +187,19 @@ normalize_target()
|
|||
VARIANT_UC=$(echo "${variant}" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
|
||||
|
||||
targets=$(get_mainboards "$1")
|
||||
if [[ -n "$targets" ]]; then
|
||||
if [[ -n "${targets}" ]]; then
|
||||
# shellcheck disable=SC2086
|
||||
targets="$(grep "${VARIANT_UC}\$" <<< ${targets})"
|
||||
echo "$targets"
|
||||
echo "${targets}"
|
||||
return
|
||||
fi
|
||||
|
||||
targets=$(echo "$1" | tr ',' ' ')
|
||||
for i in $targets; do
|
||||
if [[ -n "$(mainboard_directory "$i")" ]]; then
|
||||
printf "%s\n" "$i"
|
||||
for i in ${targets}; do
|
||||
if [[ -n "$(mainboard_directory "${i}")" ]]; then
|
||||
printf "%s\n" "${i}"
|
||||
else
|
||||
printf "%s is not a valid target\n" "$i" >&2
|
||||
printf "%s is not a valid target\n" "${i}" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
|
@ -213,12 +213,12 @@ create_config()
|
|||
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 printf " Creating config file for %s...\n" "$BUILD_NAME"; fi
|
||||
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}"
|
||||
|
|
@ -227,16 +227,16 @@ create_config()
|
|||
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 printf " %s config created.\n" "$BUILD_NAME"; 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
|
||||
}
|
||||
|
|
@ -257,24 +257,24 @@ 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
|
||||
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
|
||||
{
|
||||
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
|
||||
{
|
||||
printf "# CONFIG_PAYLOAD_NONE is not set\n"
|
||||
printf "CONFIG_PAYLOAD_ELF=y\n"
|
||||
|
|
@ -298,14 +298,14 @@ update_config()
|
|||
printf "# CONFIG_TINT_SECONDARY_PAYLOAD is not set\n"
|
||||
} >> "${config_file}"
|
||||
|
||||
if [[ "$quiet" == "false" ]]; then printf " %s (%s)\n" "$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
|
||||
|
|
@ -319,31 +319,31 @@ create_buildenv()
|
|||
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
|
||||
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"
|
||||
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
|
||||
return ${ret}
|
||||
}
|
||||
|
||||
check_config()
|
||||
|
|
@ -356,16 +356,16 @@ 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
|
||||
printf "config file: %s has incorrect %s\n" "$CONFIG_FILE" "$TEST_TYPE"
|
||||
printf "Error: Expected '%s' in config file.\n" "$TEST_STRING" >> "$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
|
||||
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"
|
||||
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
|
||||
|
|
@ -377,17 +377,17 @@ check_config()
|
|||
add_timestamp()
|
||||
{
|
||||
local now=${EPOCHREALTIME}
|
||||
local seconds=$(echo $now | cut -f 1 -d '.')
|
||||
local usecs=$(echo $now | cut -f 2 -d '.')
|
||||
local seconds=$(echo ${now} | cut -f 1 -d '.')
|
||||
local usecs=$(echo ${now} | cut -f 2 -d '.')
|
||||
seconds=$(( seconds - ts_exec_shell ))
|
||||
usecs=$(( seconds * 1000 * 1000 + 10#$usecs ))
|
||||
printf "%s" $usecs
|
||||
printf "%s" ${usecs}
|
||||
}
|
||||
|
||||
ts_delta_seconds()
|
||||
{
|
||||
local delta=$(( ($2 - $1) / (1000 * 1000) ))
|
||||
printf "%s" $delta
|
||||
printf "%s" ${delta}
|
||||
}
|
||||
|
||||
ts_delta_string()
|
||||
|
|
@ -402,10 +402,10 @@ 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
|
||||
}
|
||||
|
||||
|
|
@ -413,12 +413,12 @@ compile_target()
|
|||
{
|
||||
local BUILD_NAME=$1
|
||||
|
||||
if [[ "${quiet}" == "false" ]]; then printf " Compiling %s image%s...\n" "$MAINBOARD" "$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)
|
||||
|
|
@ -427,38 +427,38 @@ compile_target()
|
|||
|
||||
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}"
|
||||
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' >"
|
||||
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
|
||||
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"
|
||||
|
|
@ -468,16 +468,16 @@ compile_target()
|
|||
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
|
||||
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}
|
||||
}
|
||||
|
||||
build_config()
|
||||
|
|
@ -492,48 +492,48 @@ build_config()
|
|||
board_srcdir=$(mainboard_directory "${MAINBOARD}")
|
||||
|
||||
if [[ "$(cat "${build_dir}/compile.status" 2>/dev/null)" = "ok" ]] && \
|
||||
[[ "$buildall" = "false" ]]; then
|
||||
printf "Skipping %s; (already successful)\n" "$BUILD_NAME"
|
||||
[[ "${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
|
||||
printf "%s doesn't support ChromeOS, skipping.\n" "${BUILD_NAME}"
|
||||
|
||||
if [[ "${chromeos}" = true ]] && [[ "$(grep -c "^[[:space:]]*select[[:space:]]*MAINBOARD_HAS_CHROMEOS>" "${ROOT}/src/mainboard/${board_srcdir}/Kconfig")" -eq 0 ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
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"
|
||||
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
|
||||
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 [[ "${clang}" = true ]]; then
|
||||
check_config "${build_dir}" "clang" "CONFIG_COMPILER_LLVM_CLANG=y"
|
||||
if [[ $? -ne 0 ]]; then
|
||||
printf "%s doesn't support clang, skipping.\n" "${MAINBOARD}"
|
||||
return
|
||||
|
|
@ -556,28 +556,28 @@ build_config()
|
|||
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>"
|
||||
printf "%s - Log: %s/config.log\n" "$BUILD_NAME" "$build_dir" >> "$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:
|
||||
|
|
@ -591,20 +591,20 @@ EOF
|
|||
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
|
||||
if [[ "${scanbuild}" = "true" ]]; then
|
||||
mv "${scanbuild_out}"tmp/* "${scanbuild_out}"
|
||||
rmdir "${scanbuild_out}tmp"
|
||||
fi
|
||||
|
|
@ -617,12 +617,11 @@ record_mainboard()
|
|||
{
|
||||
local log=$1
|
||||
|
||||
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"
|
||||
printf "%s/abuild/%s.xml written to %s\\n" "$TARGET" "${log}" "$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
|
||||
printf "Warning: %s/abuild/%s.xml not found.\n" "$TARGET" "${log}" >&2
|
||||
printf "Warning: %s/abuild/%s.xml not found.\n" "${TARGET}" "${log}" >&2
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
@ -631,51 +630,51 @@ 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:]')
|
||||
printf "%s %s\n" "$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
|
||||
BUILD_NAME=${BUILD_NAME}"_"
|
||||
fi
|
||||
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"
|
||||
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
|
||||
|
||||
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"
|
||||
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}"
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
printf "Removing build dir for %s...\n" "$BUILD_NAME"
|
||||
printf "Removing build dir for %s...\n" "${BUILD_NAME}"
|
||||
rm -rf "${TARGET:?}/${BUILD_NAME}"
|
||||
|
||||
return
|
||||
|
|
@ -706,13 +705,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
|
||||
|
|
@ -724,7 +723,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
|
||||
|
|
@ -740,7 +739,7 @@ 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>
|
||||
|
|
@ -759,10 +758,10 @@ 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.
|
||||
|
|
@ -775,16 +774,16 @@ getoptbrand="$(getopt -V)"
|
|||
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
|
||||
|
|
@ -800,7 +799,7 @@ 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;;
|
||||
|
|
@ -812,13 +811,13 @@ while true ; do
|
|||
-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;;
|
||||
|
|
@ -925,13 +924,13 @@ if [[ -n "$1" ]]; then
|
|||
printf "Invalid option '%s'\n\n" "$1"; myhelp; exit 1;
|
||||
fi
|
||||
|
||||
if [[ -z "$TARGET" ]] || [[ "$TARGET" = "/" ]]; then
|
||||
printf "Please specify a valid, non-root build directory.\n"
|
||||
if [[ -z "${TARGET}" ]] || [[ "${TARGET}" = "/" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! mkdir -p "$TARGET"; then
|
||||
printf "Unable to create build directory\\n"
|
||||
if ! mkdir -p "${TARGET}"; then
|
||||
printf "Unable to create build directory\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
@ -940,34 +939,34 @@ if echo "${skipconfig_set}${skipconfig_unset}" | grep -q "CONFIG_" >/dev/null 2>
|
|||
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)"
|
||||
|
||||
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
|
||||
|
|
@ -975,13 +974,13 @@ if [[ "$cpus" != "1" ]]; then
|
|||
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
|
||||
for MAINBOARD in ${targets}; do
|
||||
build_target "${MAINBOARD}"
|
||||
done
|
||||
}
|
||||
|
|
@ -997,48 +996,48 @@ build_targets()
|
|||
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)"
|
||||
local 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)
|
||||
local 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")
|
||||
cpus_per_target=$(((${cpus:-1} + num_targets - 1) / num_targets))
|
||||
printf "%s\n" "$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
|
||||
rm -rf "${TARGET}/temp" "${TMPCFG}"
|
||||
num_targets=$(wc -w <<<"${targets}")
|
||||
}
|
||||
fi
|
||||
|
||||
|
|
@ -1059,43 +1058,43 @@ if [[ "$target" != "" ]]; then
|
|||
build_srcdir="$(mainboard_directory "${MAINBOARD}")"
|
||||
if [[ "$(echo "${MAINBOARD}" | wc -w)" -gt 1 ]]; then
|
||||
build_targets "${MAINBOARD}"
|
||||
elif [[ ! -r "$ROOT/src/mainboard/${build_srcdir}" ]]; then
|
||||
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"
|
||||
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"
|
||||
if [[ -f "${FAILED_BOARDS}" ]]; then
|
||||
printf "%s configuration(s) failed:\n" "$( wc -l < "${FAILED_BOARDS}" )"
|
||||
cat "${FAILED_BOARDS}"
|
||||
printf "\n"
|
||||
if [[ "$exitcode" != "0" ]]; then
|
||||
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}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue