Sync scripts with Arm internal CI
This patch syncs utility scripts and scripts
in the script directory with the internal CI.
Where a path update is required,
the changes have been commented out.
Signed-off-by: Zelalem <zelalem.aweke@arm.com>
Change-Id: Ifa4bd805e345184d1378e8423e5f878a2fbfbcd4
diff --git a/script/build_package.sh b/script/build_package.sh
index 69eedfd..33d8258 100755
--- a/script/build_package.sh
+++ b/script/build_package.sh
@@ -18,19 +18,25 @@
fi
# Directory to where the source code e.g. for Trusted Firmware is checked out.
-tf_root="${tf_root:-$workspace/trusted_firmware}"
-tftf_root="${tftf_root:-$workspace/trusted_firmware_tf}"
-scp_root="${scp_root:-$workspace/scp}"
+export tf_root="${tf_root:-$workspace/trusted_firmware}"
+export tftf_root="${tftf_root:-$workspace/trusted_firmware_tf}"
+export scp_root="${scp_root:-$workspace/scp}"
+scp_tools_root="${scp_tools_root:-$workspace/scp_tools}"
+cc_root="${cc_root:-$ccpathspec}"
+
+scp_tf_tools_root="$scp_tools_root/scp_tf_tools"
# Refspecs
tf_refspec="$TF_REFSPEC"
tftf_refspec="$TFTF_REFSPEC"
scp_refspec="$SCP_REFSPEC"
+scp_tools_commit="${SCP_TOOLS_COMMIT:-master}"
test_config="${TEST_CONFIG:?}"
test_group="${TEST_GROUP:?}"
build_configs="${BUILD_CONFIG:?}"
run_config="${RUN_CONFIG:?}"
+cc_config="${CC_ENABLE:-}"
archive="$artefacts"
build_log="$artefacts/build.log"
@@ -179,6 +185,9 @@
*/mcp_romfw/*)
cp $file $to/mcp_rom.$ext
;;
+ */scp_romfw_bypass/*)
+ cp $file $to/scp_rom_bypass.$ext
+ ;;
*)
echo "Unknown SCP binary: $file" >&2
;;
@@ -533,6 +542,179 @@
)
}
+clone_scp_tools() {
+
+ if [ ! -d "$scp_tools_root" ]; then
+ echo "Cloning SCP-tools ... $scp_tools_commit" |& log_separator
+
+ clone_url="${SCP_TOOLS_CHECKOUT_LOC:-$scp_tools_src_repo_url}" \
+ where="$scp_tools_root" \
+ refspec="${scp_tools_commit}"
+ clone_repo &>>"$build_log"
+ else
+ echo "Already cloned SCP-tools ..." |& log_separator
+ fi
+
+ show_head "$scp_tools_root"
+
+ cd "$scp_tools_root"
+
+ echo "Updating submodules"
+
+ git submodule init
+
+ git submodule update
+
+ cd "scmi"
+
+ git show --quiet --no-color | sed 's/^/ > /g'
+}
+
+clone_tf_for_scp_tools() {
+ scp_tools_arm_tf="$scp_tools_root/arm-tf"
+
+ if [ ! -d "$scp_tools_arm_tf" ]; then
+ echo "Cloning TF-4-SCP-tools ..." |& log_separator
+
+ clone_url="$tf_for_scp_tools_src_repo_url"
+ where="$scp_tools_arm_tf"
+
+ git clone "$clone_url" "$where"
+
+ cd "$scp_tools_arm_tf"
+
+ git checkout --track origin/dev/pedro/juno
+
+ git show --quiet --no-color | sed 's/^/ > /g'
+
+ else
+ echo "Already cloned TF-4-SCP-tools ..." |& log_separator
+ fi
+}
+
+build_scmi_lib_scp_tools() {
+ (
+ cd "$scp_tools_root"
+
+ cd "scmi"
+
+ scp_tools_arm_tf="$scp_tools_root/arm-tf"
+
+ cross_compile="/arm/pdsw/tools/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-"
+
+ std_libs="-I$scp_tools_arm_tf/include/common"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/common/tbbr"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/drivers/arm"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/lib"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/lib/aarch64"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/lib/stdlib"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/lib/stdlib/sys"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/lib/xlat_tables"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/plat/common"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/plat/arm/common"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/plat/arm/css/common"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/plat/arm/board/common"
+ std_libs="$std_libs -I$scp_tools_arm_tf/include/plat/arm/soc/common"
+ std_libs="$std_libs -I$scp_tools_arm_tf/plat/arm/board/juno/include"
+
+ cflags="-Og -g"
+ cflags="$cflags -mgeneral-regs-only"
+ cflags="$cflags -mstrict-align"
+ cflags="$cflags -nostdinc"
+ cflags="$cflags -fno-inline"
+ cflags="$cflags -ffreestanding"
+ cflags="$cflags -ffunction-sections"
+ cflags="$cflags -fdata-sections"
+ cflags="$cflags -DAARCH64"
+ cflags="$cflags -DPRId32=\"ld\""
+
+ cflags="$cflags $std_libs"
+
+ protocols="power,system_power,performance,sensor"
+
+ echo "Building SCMI library (SCP-tools) ..."
+
+ make "CROSS_COMPILE=$cross_compile" \
+ "CFLAGS=$cflags" \
+ "PROTOCOLS=$protocols" \
+ "clean" \
+ "all"
+ )
+}
+
+build_tf_for_scp_tools() {
+
+ cd "$scp_tools_root/arm-tf"
+
+ cross_compile="/arm/pdsw/tools/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-"
+
+ if [ "$1" = "release" ]; then
+ echo "Build TF-4-SCP-Tools rls..."
+ else
+ echo "Build TF-4-SCP-Tools dbg..."
+
+ make realclean
+
+ make "BM_TEST=scmi" \
+ "ARM_BOARD_OPTIMISE_MEM=1" \
+ "BM_CSS=juno" \
+ "CSS_USE_SCMI_SDS_DRIVER=1" \
+ "PLAT=juno" \
+ "DEBUG=1" \
+ "PLATFORM=juno" \
+ "CROSS_COMPILE=$cross_compile" \
+ "BM_WORKSPACE=$scp_tools_root/baremetal"
+
+ archive_file "build/juno/debug/bl1.bin"
+
+ archive_file "build/juno/debug/bl2.bin"
+
+ archive_file "build/juno/debug/bl31.bin"
+ fi
+}
+
+build_fip_for_scp_tools() {
+
+ cd "$scp_tools_root/arm-tf"
+
+ cross_compile="/arm/pdsw/tools/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-"
+
+ if [ ! -d "$scp_root/build/product/juno/scp_ramfw/debug" ]; then
+ make fiptool
+ echo "Make FIP 4 SCP-Tools rls..."
+
+ else
+ make fiptool
+ echo "Make FIP 4 SCP-Tools dbg..."
+
+ make "PLAT=juno" \
+ "all" \
+ "fip" \
+ "DEBUG=1" \
+ "CROSS_COMPILE=$cross_compile" \
+ "BL31=$scp_tools_root/arm-tf/build/juno/debug/bl31.bin" \
+ "BL33=$scp_tools_root/baremetal/dummy_bl33" \
+ "SCP_BL2=$scp_root/build/product/juno/scp_ramfw/debug/bin/firmware.bin"
+
+ archive_file "$scp_tools_root/arm-tf/build/juno/debug/fip.bin"
+ fi
+}
+
+build_cc() {
+# Building code coverage plugin
+ ARM_DIR=/arm
+ pvlibversion=$(/arm/devsys-tools/abs/detag "SysGen:PVModelLib:$model_version::trunk")
+ PVLIB_HOME=$warehouse/SysGen/PVModelLib/$model_version/${pvlibversion}/external
+ if [ -n "$(find "$ARM_DIR" -maxdepth 0 -type d -empty 2>/dev/null)" ]; then
+ echo "Error: Arm warehouse not mounted. Please mount the Arm warehouse to your /arm local folder"
+ exit -1
+ fi # Error if arm warehouse not found
+ cd "$ccpathspec/scripts/tools/code_coverage/fastmodel_baremetal/bmcov"
+
+ make -C model-plugin PVLIB_HOME=$PVLIB_HOME &>>"$build_log"
+}
+
+
# Set metadata for the whole package so that it can be used by both Jenkins and
# shell
set_package_var() {
@@ -772,12 +954,14 @@
tf_config="$(echo "$build_configs" | awk -F, '{print $1}')"
tftf_config="$(echo "$build_configs" | awk -F, '{print $2}')"
scp_config="$(echo "$build_configs" | awk -F, '{print $3}')"
+scp_tools_config="$(echo "$build_configs" | awk -F, '{print $4}')"
test_config_file="$ci_root/group/$test_group/$test_config"
tf_config_file="$ci_root/tf_config/$tf_config"
tftf_config_file="$ci_root/tftf_config/$tftf_config"
scp_config_file="$ci_root/scp_config/$scp_config"
+scp_tools_config_file="$ci_root/scp_tools_config/$scp_tools_config"
# File that keeps track of applied patches
tf_patch_record="$workspace/tf_patches"
@@ -812,6 +996,15 @@
echo
fi
+if ! config_valid "$scp_tools_config"; then
+ scp_tools_config=
+else
+ echo "SCP Tools config:"
+ echo
+ sort "$scp_tools_config_file" | sed '/^\s*$/d;s/^/\t/'
+ echo
+fi
+
if ! config_valid "$run_config"; then
run_config=
fi
@@ -864,6 +1057,15 @@
show_head "$scp_root"
fi
+if [ -n "$cc_config" ] ; then
+ if [ "$cc_config" -eq 1 ] && assert_can_git_clone "cc_root"; then
+ # Copy code coverage repository
+ echo "Cloning Code Coverage..."
+ git clone -q $cc_src_repo_url cc_plugin --depth 1 -b $cc_src_repo_tag > /dev/null
+ show_head "$cc_root"
+ fi
+fi
+
if [ "$run_config" ]; then
# Get candidates for run config
run_config_candiates="$("$ci_root/script/gen_run_config_candidates.py" \
@@ -902,14 +1104,21 @@
mkdir "$build_archive"
if [ "$mode" = "debug" ]; then
+ export bin_mode="debug"
DEBUG=1
else
+ export bin_mode="release"
DEBUG=0
fi
# Perform builds in a subshell so as not to pollute the current and
# subsequent builds' environment
+ if config_valid "$cc_config"; then
+ # Build code coverage plugin
+ build_cc
+ fi
+
# SCP build
if config_valid "$scp_config"; then
(
@@ -928,7 +1137,6 @@
echo "Building SCP Firmware ($mode) ..." |& log_separator
build_scp
-
to="$archive" collect_scp_artefacts
echo "##########"
@@ -936,6 +1144,26 @@
)
fi
+ # SCP-tools build
+ if config_valid "$scp_tools_config"; then
+ (
+ echo "##########"
+
+ archive="$build_archive"
+ scp_tools_build_root="$scp_tools_root/build"
+
+ clone_scp_tools
+
+ echo "##########"
+ echo
+
+ echo "##########"
+ clone_tf_for_scp_tools
+ echo "##########"
+ echo
+ )
+ fi
+
# TFTF build
if config_valid "$tftf_config"; then
(
@@ -1020,14 +1248,7 @@
call_hook post_package
if upon "$jenkins_run" && upon "$artefacts_receiver" && [ -d "artefacts" ]; then
- tar -cJf "artefacts.tar.xz" "artefacts"
- where="$artefacts_receiver/$test_group/$test_config/artefacts.tar.xz"
- where+="?j=$JOB_NAME&b=$BUILD_NUMBER"
- if wget -q --method=PUT --body-file="artefacts.tar.xz" "$where"; then
- echo "Artefacts submitted to $where."
- else
- echo "Error submitting artefacts to $where."
- fi
+ source "$CI_ROOT/script/send_artefacts.sh" "artefacts"
fi
echo