#!/bin/bash set -euf -o pipefail scripts=$(dirname $0) . $scripts/jenkins-helpers.sh . $scripts/round-robin.sh convert_args_to_variables "$@" obligatory_variables rr[ci_config] # Execution mode: baseline, bisect, jenkins-full rr[mode]="${rr[mode]-baseline}" # Set custom revision for one of the projects, and use baseline revisions # for all other projects. rr[ci_project]="${rr[ci_project]-tcwg_kernel}" rr[baseline_branch]="${rr[baseline_branch]-linaro-local/ci/${rr[ci_project]}/${rr[ci_config]}}" rr[reset_baseline]="${rr[reset_baseline]-false}" rr[top_artifacts]="${rr[top_artifacts]-$(pwd)/artifacts}" # {toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config} IFS=- read -a ci_config < $(pwd)/bin/${rr[target]}-cc <> ${rr[top_artifacts]}/results echo "$linux_n_obj" >> ${rr[top_artifacts]}/results if [ $res = 0 ]; then echo "linux build successful:" >> ${rr[top_artifacts]}/results echo "all" >> ${rr[top_artifacts]}/results fi return $res ) } # Boot linux kernel boot_linux () { ( set -euf -o pipefail local image cpu case ${rr[target]} in aarch64) image=linux/arch/arm64/boot/Image.gz cpu="-cpu cortex-a53" ;; arm) image=linux/arch/arm/boot/zImage cpu="" ;; *) assert false ;; esac timeout 10s qemu-system-${rr[target]} \ -kernel $image -machine virt $cpu -m 512 \ -serial mon:stdio -display none \ -append "console=ttyAMA0 panic=-1" -no-reboot echo "linux boot successful:" >> ${rr[top_artifacts]}/results echo "boot" >> ${rr[top_artifacts]}/results ) } # Exit with code 0 if no regression compared to base-artifacts/results. no_regression_p () { ( set -euf -o pipefail local linux_n_obj linux_n_obj=$(tail -n1 ${rr[top_artifacts]}/results) # Assume worst for non-existent baseline. local base_linux_n_obj="-10" if [ -f base-artifacts/results ]; then base_linux_n_obj=$(tail -n1 base-artifacts/results) fi case "$linux_n_obj:$base_linux_n_obj" in boot:*) return 0 ;; *:boot) return 1 ;; all:*) return 0 ;; *:all) return 1 ;; *) if ! [ "$linux_n_obj" -ge "-10" ]; then # Something is very wrong with result (e.g., it's not a number). return 1 fi if ! [ "$base_linux_n_obj" -ge "-10" ]; then # Something is very wrong with result (e.g., it's not a number). return 0 fi if [ $linux_n_obj -ge $base_linux_n_obj ]; then return 0 else return 1 fi ;; esac ) } run_step stop_on_fail -10 reset_artifacts case "${rr[toolchain]}" in gnu) run_step stop_on_fail x prepare_abe run_step skip_on_fail -9 build_abe binutils run_step skip_on_fail -8 build_abe stage1 ;; llvm) run_step skip_on_fail -1 build_llvm ;; esac run_step skip_on_fail x build_linux run_step skip_on_fail x boot_linux run_step reset_on_fail x check_regression run_step stop_on_fail x update_baseline run_step stop_on_fail x push_baseline trap "" EXIT