summaryrefslogtreecommitdiff
path: root/tcwg_gnu-build.sh
blob: 2e040d4dcc243f313bd93f68a934d0903ca9b0b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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