summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdocker-run.sh16
-rw-r--r--jenkins-helpers.sh4
-rw-r--r--round-robin.sh39
-rwxr-xr-xstart-container-docker.sh8
-rwxr-xr-xtcwg-benchmark-results.sh1
-rwxr-xr-xtcwg_bmk-build.sh184
-rwxr-xr-xtcwg_gnu-build.sh114
7 files changed, 350 insertions, 16 deletions
diff --git a/docker-run.sh b/docker-run.sh
index b1914333..2af4c8e3 100755
--- a/docker-run.sh
+++ b/docker-run.sh
@@ -1,14 +1,14 @@
#!/bin/bash
-set -ef -o pipefail
-
-qemu="${qemu-}"
-set -u
+set -euf -o pipefail
. $(dirname $0)/jenkins-helpers.sh
convert_args_to_variables "$@"
shift "$SHIFT_CONVERTED_ARGS"
+qemu="${qemu-}"
+ssh_info="${ssh_info-false}"
+
trap "container_cleanup" EXIT
case "$qemu" in
@@ -17,4 +17,10 @@ case "$qemu" in
esac
. ./container.sh
-container_exec "$@"
+if $ssh_info; then
+ ssh_opts="--ssh_host $session_host --ssh_port $session_port"
+else
+ ssh_opts=""
+fi
+
+container_exec "$@" $ssh_opts
diff --git a/jenkins-helpers.sh b/jenkins-helpers.sh
index c9c90560..9c0b7ff6 100644
--- a/jenkins-helpers.sh
+++ b/jenkins-helpers.sh
@@ -671,11 +671,11 @@ print_volume_mounts ()
local volume_id
case "$job" in
- tcwg_kernel-*)
+ tcwg_kernel-*|tcwg_bmk-*)
# Add ccache volume for tcwg_kernel jobs. These jobs
# depend on ccache for fast rebuilds of LLVM and GCC with
# the host compiler.
- job="tcwg_kernel"
+ job="$(echo $job | cut -d- -f 1)"
volume_id=$(print_docker_name "$job$suffix")
mounts+=(ccache-$volume_id:$HOME/.ccache)
;;
diff --git a/round-robin.sh b/round-robin.sh
index 81b04e95..b9c12e99 100644
--- a/round-robin.sh
+++ b/round-robin.sh
@@ -201,7 +201,9 @@ build_abe ()
local component="$1"
- local project stage
+ local project stage action
+ action="build"
+
case "$component" in
stage1)
project=gcc
@@ -211,7 +213,31 @@ build_abe ()
project=gcc
stage="--stage 2"
;;
- *)
+ bootstrap)
+ project=gcc
+ stage="--enable bootstrap"
+ ;;
+ bootstrap_ubsan)
+ project=gcc
+ stage="--set buildconfig=bootstrap-ubsan"
+ ;;
+ bootstrap_O3)
+ project=gcc
+ stage="--set buildconfig=bootstrap-O3"
+ ;;
+ bootstrap_O1)
+ project=gcc
+ stage="--set buildconfig=bootstrap-O1"
+ ;;
+ bootstrap_lto)
+ project=gcc
+ stage="--set buildconfig=bootstrap-lto"
+ ;;
+ bootstrap_debug)
+ project=gcc
+ stage="--set buildconfig=bootstrap-debug"
+ ;;
+ *)
project=$component
stage=""
;;
@@ -256,10 +282,15 @@ build_abe ()
fi
ccache -z
+ local target_opt=""
+ if [ x"${rr[target]}" != x"native" ]; then
+ target_opt="--target $gnu_target"
+ fi
+
# Run "./abe.sh --build $project".
./abe.sh \
- --build $project \
- --target $gnu_target \
+ --$action $project \
+ $target_opt \
--extraconfigdir config/master \
$custom_abe_src_opt \
$stage
diff --git a/start-container-docker.sh b/start-container-docker.sh
index a0f09aa7..ac6d1536 100755
--- a/start-container-docker.sh
+++ b/start-container-docker.sh
@@ -109,6 +109,9 @@ do
[ x${session_name} = x ] && usage
shift 2
;;
+ --ssh_info)
+ shift 2
+ ;;
--task)
task=$2
[ x${task} = x ] && usage
@@ -196,11 +199,6 @@ fi
image=linaro/ci-${container_arch}-tcwg-${task}-ubuntu:${distro}
-case "$session_host" in
- "localhost"*) docker_host="" ;;
- *) docker_host="$session_host" ;;
-esac
-
DOCKER="ssh $session_host docker"
$DOCKER pull $image
diff --git a/tcwg-benchmark-results.sh b/tcwg-benchmark-results.sh
index 6cdd2810..90e6bcd2 100755
--- a/tcwg-benchmark-results.sh
+++ b/tcwg-benchmark-results.sh
@@ -30,6 +30,7 @@ for i in $results_ref $results_id; do
csvs="$csvs results-$num.csv"
num=$(($num+1))
done
+ssh -O exit dev-01.tcwglab
mkdir -p $top_artifacts
diff --git a/tcwg_bmk-build.sh b/tcwg_bmk-build.sh
new file mode 100755
index 00000000..809c097c
--- /dev/null
+++ b/tcwg_bmk-build.sh
@@ -0,0 +1,184 @@
+#!/bin/bash
+
+set -euf -o pipefail
+
+scripts=$(dirname $0)
+. $scripts/jenkins-helpers.sh
+
+convert_args_to_variables "$@"
+
+obligatory_variables rr[ci_config] \
+ BUILD_NUMBER ssh_host ssh_port
+
+# Execution mode: baseline, bisect, continue, jenkins-full
+rr[mode]="${rr[mode]-baseline}"
+
+case "${rr[mode]}" in
+ "jenkins-full")
+ obligatory_variables rr[current_project] rr[current_branch]
+ ;;
+esac
+
+# Set custom revision for one of the projects, and use baseline revisions
+# for all other projects.
+rr[ci_project]="${rr[ci_project]-tcwg_bmk}"
+rr[baseline_branch]="${rr[baseline_branch]-linaro-local/ci/${rr[ci_project]}/${rr[ci_config]}}"
+rr[current_branch]="${rr[current_branch]-default}"
+rr[current_project]="${rr[current_project]-none}"
+rr[reset_baseline]="${rr[reset_baseline]-false}"
+rr[top_artifacts]="${rr[top_artifacts]-$(pwd)/artifacts}"
+
+# {toolchain_name}-{toolchain_ver}-{target}-{bmk}-{cflags}
+IFS=- read -a ci_config <<EOF
+${rr[ci_config]}
+EOF
+rr[toolchain_name]=${rr[toolchain_name]-${ci_config[0]}}
+rr[target]=${rr[target]-${ci_config[2]}}
+cflags=${cflags-${ci_config[4]}}
+
+start_at="${start_at-default}"
+finish_at="${finish_at-default}"
+verbose="${verbose-true}"
+verbose2="${verbose2-false}"
+
+results_id="tx1/${rr[ci_project]}/${rr[ci_config]}-$BUILD_NUMBER"
+
+if $verbose2; then set -x; fi
+
+trap "eval \"echo ERROR at \${FUNCNAME[0]}:\${BASH_LINENO[0]}\"" EXIT
+
+# Set start and finish steps for different modes.
+default_start_at=""
+default_finish_at=""
+base_artifacts_opt="base-artifacts"
+case "${rr[mode]}" in
+ "baseline")
+ default_finish_at="update_baseline"
+ ;;
+ "bisect")
+ case "${rr[toolchain]}:${rr[current_project]}" in
+ gnu:binutils) default_start_at="build_abe-binutils" ;;
+ gnu:gcc) default_start_at="build_abe-stage1" ;;
+ llvm:llvm) default_start_at="build_llvm" ;;
+ esac
+ default_finish_at="check_regression"
+ ;;
+ "continue")
+ # Developer mode.
+ case "${rr[toolchain]}" in
+ "gnu") default_start_at="prepare_abe" ;;
+ "llvm") default_start_at="build_llvm" ;;
+ esac
+ base_artifacts_opt=""
+ ;;
+ "jenkins-full") ;;
+esac
+if [ x"$start_at" = x"default" ]; then
+ start_at="$default_start_at"
+fi
+if [ x"$finish_at" = x"default" ]; then
+ finish_at="$default_finish_at"
+fi
+
+run_step_init "$start_at" "$finish_at" "${rr[top_artifacts]}" "$base_artifacts_opt" "$verbose"
+
+. $scripts/round-robin.sh
+
+benchmark ()
+{
+ (
+ set -euf -o pipefail
+
+ rm -rf $(pwd)/bin
+ mkdir $(pwd)/bin
+
+ local bin cc
+
+ bin="$(pwd)/abe/builds/destdir/x86_64-unknown-linux-gnu/bin"
+ cc="$bin/$(print_gnu_target ${rr[target]})-"
+
+ local hw
+ case "${rr[target]}" in
+ arm*) hw=tk1 ;;
+ *) hw=tx1 ;;
+ esac
+
+ local bmk_flags
+ bmk_flags="$(echo _$cflags | sed -e "s/_/ -/g")"
+ case "$cflags" in
+ "Os*") bmk_flags="$bmk_flags -static" ;;
+ esac
+
+ ssh -p2222 -l $USER@linaro.org ci.linaro.org build tcwg-benchmark -s -v \
+ -p bench_list=all \
+ -p cflags="$bmk_flags" \
+ -p displaytag=${rr[ci_config]} \
+ -p toolchain_url=ssh://$ssh_host:$ssh_port:$cc \
+ -p sysroot=ssh://$ssh_host:$ssh_port:$(pwd)/abe/sysroots/$(print_gnu_target ${rr[target]}) \
+ -p results_id="$results_id" \
+ -p scripts_branch="$scripts_branch" \
+ -p bmk_branch="$bmk_branch"
+
+ echo "$results_id" > "${rr[top_artifacts]}/results_id"
+ cat >> ${rr[top_artifacts]}/results <<EOF
+Succesful benchmark run: $results_id
+0
+EOF
+ )
+}
+
+# Exit with code 0 if no regression compared to base-artifacts/results.
+no_regression_p ()
+{
+ (
+ set -euf -o pipefail
+
+ if ! [ -f base-artifacts/results ]; then
+ return 0
+ fi
+
+ local build_result_ref build_result_new
+ build_result_ref=$(tail -n1 base-artifacts/results)
+ build_result_new=$(tail -n1 ${rr[top_artifacts]}/results)
+
+ if [ $build_result_new -lt $build_result_ref ]; then
+ return 1
+ fi
+
+ if ! [ -f base-artifacts/results_id ]; then
+ return 0
+ fi
+
+ local results_ref
+ results_ref=$(cat base-artifacts/results_id)
+
+ $scripts/tcwg-benchmark-results.sh --results_ref $results_ref --results_id $results_id --top_artifacts "${rr[top_artifacts]}" --verbose $verbose
+
+ while IFS=, read -r bmk symbol speed size; do
+ if [ "$size" -gt 100 ]; then
+ return 1
+ fi
+ done < ${rr[top_artifacts]}/results.csv
+ )
+}
+
+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
+ run_step skip_on_fail -7 build_abe linux
+ run_step skip_on_fail -6 build_abe glibc
+ run_step skip_on_fail -5 build_abe stage2
+ ;;
+ llvm)
+ run_step skip_on_fail -1 build_llvm
+ ;;
+esac
+run_step skip_on_fail x benchmark
+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
diff --git a/tcwg_gnu-build.sh b/tcwg_gnu-build.sh
new file mode 100755
index 00000000..2e040d4d
--- /dev/null
+++ b/tcwg_gnu-build.sh
@@ -0,0 +1,114 @@
+#!/bin/bash
+
+set -euf -o pipefail
+
+scripts=$(dirname $0)
+. $scripts/jenkins-helpers.sh
+
+convert_args_to_variables "$@"
+
+obligatory_variables rr[ci_config]
+
+# Execution mode: baseline, bisect, continue, jenkins-full
+rr[mode]="${rr[mode]-baseline}"
+
+case "${rr[mode]}" in
+ "jenkins-full")
+ obligatory_variables rr[current_project] rr[current_branch]
+ ;;
+esac
+
+# Set custom revision for one of the projects, and use baseline revisions
+# for all other projects.
+rr[ci_project]="${rr[ci_project]-tcwg_gnu}"
+rr[baseline_branch]="${rr[baseline_branch]-linaro-local/ci/${rr[ci_project]}/${rr[ci_config]}}"
+rr[current_branch]="${rr[current_branch]-default}"
+rr[current_project]="${rr[current_project]-none}"
+rr[reset_baseline]="${rr[reset_baseline]-false}"
+rr[top_artifacts]="${rr[top_artifacts]-$(pwd)/artifacts}"
+
+# {toolchain_name}-{toolchain_ver}-{target}-{bmk}-{cflags}
+IFS=- read -a ci_config <<EOF
+${rr[ci_config]}
+EOF
+rr[toolchain_name]=${rr[toolchain_name]-${ci_config[0]}}
+rr[target]="native"
+bootstrap_config=${cflags-${ci_config[3]}}
+
+start_at="${start_at-default}"
+finish_at="${finish_at-default}"
+verbose="${verbose-true}"
+verbose2="${verbose2-false}"
+
+if $verbose2; then set -x; fi
+
+trap "eval \"echo ERROR at \${FUNCNAME[0]}:\${BASH_LINENO[0]}\"" EXIT
+
+# Set start and finish steps for different modes.
+default_start_at=""
+default_finish_at=""
+base_artifacts_opt="base-artifacts"
+case "${rr[mode]}" in
+ "baseline")
+ default_finish_at="update_baseline"
+ ;;
+ "bisect")
+ case "${rr[toolchain]}:${rr[current_project]}" in
+ gnu:binutils) default_start_at="build_abe-binutils" ;;
+ gnu:gcc) default_start_at="build_abe-stage1" ;;
+ llvm:llvm) default_start_at="build_llvm" ;;
+ esac
+ default_finish_at="check_regression"
+ ;;
+ "continue")
+ # Developer mode.
+ case "${rr[toolchain]}" in
+ "gnu") default_start_at="prepare_abe" ;;
+ "llvm") default_start_at="build_llvm" ;;
+ esac
+ base_artifacts_opt=""
+ ;;
+ "jenkins-full") ;;
+esac
+if [ x"$start_at" = x"default" ]; then
+ start_at="$default_start_at"
+fi
+if [ x"$finish_at" = x"default" ]; then
+ finish_at="$default_finish_at"
+fi
+
+run_step_init "$start_at" "$finish_at" "${rr[top_artifacts]}" "$base_artifacts_opt" "$verbose"
+
+. $scripts/round-robin.sh
+
+# Exit with code 0 if no regression compared to base-artifacts/results.
+no_regression_p ()
+{
+ (
+ set -euf -o pipefail
+
+ if ! [ -f base-artifacts/results ]; then
+ return 0
+ fi
+
+ local build_result_ref build_result_new
+ build_result_ref=$(tail -n1 base-artifacts/results)
+ build_result_new=$(tail -n1 ${rr[top_artifacts]}/results)
+
+ if [ $build_result_new -lt $build_result_ref ]; then
+ return 1
+ fi
+
+ return 0
+ )
+}
+
+run_step stop_on_fail -10 reset_artifacts
+run_step stop_on_fail x prepare_abe
+run_step skip_on_fail -5 build_abe ${bootstrap_config}
+
+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