blob: fb288f1a36c61c6e187b60be42f20b7514fa4ea7 [file] [log] [blame]
Leonardo Sandoval9dfdd1b2020-08-06 17:08:11 -05001#!/usr/bin/env bash
Fathi Boudra422bf772019-12-02 11:10:16 +02002#
laurenw-arm92881b92024-03-28 12:57:42 -05003# Copyright (c) 2019-2024, Arm Limited. All rights reserved.
Fathi Boudra422bf772019-12-02 11:10:16 +02004#
5# SPDX-License-Identifier: BSD-3-Clause
6#
7
8# This file is meant to be SOURCED only after setting $ci_root. $ci_root must be
9# the absolute path to the root of the CI repository
10#
11# A convenient way to set ci_root from the calling script like this:
12# ci_root="$(readlink -f "$(dirname "$0")/..")"
13#
14
Chris Kay197b1022023-08-16 21:31:41 +010015set -ETe -o pipefail
16
Fathi Boudra422bf772019-12-02 11:10:16 +020017# Accept root of CI location from $CI_ROOT or $ci_root, in that order
18ci_root="${ci_root:-$CI_ROOT}"
19ci_root="${ci_root:?}"
20
Chris Kay197b1022023-08-16 21:31:41 +010021source "${ci_root}/backtrace.sh" && trap backtrace ERR
Harrison Mutai9b099892023-01-13 11:34:36 +000022source "${ci_root}/lava_utils.sh"
23
Sandrine Bailleuxaaaffe02020-08-07 11:15:55 +020024# Optionally source a file containing environmental settings.
25if [ -n "$host_env" ]; then
26 source "$host_env"
27else
28 # Are we running on Arm infrastructure?
Arthur Shebc61db72025-02-03 21:39:57 -080029 if echo "$JENKINS_PUBLIC_URL" | grep -q "oss.arm.com"; then
Sandrine Bailleuxaaaffe02020-08-07 11:15:55 +020030 source "$ci_root/arm-env.sh"
Saheer Babudd9d8122025-02-10 14:32:54 +000031 elif echo "$JENKINS_PUBLIC_URL" | grep -q "jenkins.openci"; then
32 # This is Arm infrastructure while migration from ci.trustedfirmware.org
33 source "$ci_root/openci-env.sh"
Arthur Shebc61db72025-02-03 21:39:57 -080034 elif echo "$JENKINS_PUBLIC_URL" | grep -q "ci.trustedfirmware.org"; then
Paul Sokolovskyc90cb772023-07-31 14:28:41 +030035 if echo "$TF_GERRIT_BRANCH" | grep -q "lts-v2.8"; then
laurenw-arm8f595d02023-07-10 15:05:43 -050036 source "$ci_root/openci-lts-v2.8-env.sh"
laurenw-arm92881b92024-03-28 12:57:42 -050037 elif echo "$TF_GERRIT_BRANCH" | grep -q "lts-v2.10"; then
38 source "$ci_root/openci-lts-v2.10-env.sh"
laurenw-arm8f595d02023-07-10 15:05:43 -050039 else
40 source "$ci_root/openci-env.sh"
41 fi
Arthur Shebc61db72025-02-03 21:39:57 -080042 elif echo "$JENKINS_PUBLIC_URL" | grep -q "ci.staging.trustedfirmware.org"; then
Chris Kay73a91b02022-12-19 16:56:51 +000043 source "$ci_root/openci-staging-env.sh"
Sandrine Bailleuxaaaffe02020-08-07 11:15:55 +020044 fi
45fi
46
Fathi Boudra422bf772019-12-02 11:10:16 +020047# Storage area to host toolchains, rootfs, tools, models, binaries, etc...
48nfs_volume="${nfs_volume:-$NFS_VOLUME}"
49nfs_volume="${nfs_volume:?}"
50
51# Override workspace for local runs
52workspace="${workspace:-$WORKSPACE}"
53workspace="${workspace:?}"
54workspace="$(readlink -f "$workspace")"
55artefacts="$workspace/artefacts"
56
57# pushd and popd outputs the directory stack every time, which could be
58# confusing when shown on the log. Suppress its output.
59pushd() {
60 builtin pushd "$1" &>/dev/null
61}
62popd() {
63 builtin popd &>/dev/null
64}
65
66# Copy a file to the $archive directory
67archive_file() {
68 local f out target md5
69 f="${1:?}"
70
71 out="${archive:?}"
72 [ ! -d "$out" ] && die "$out is not a directory"
73
74 target="$out/$(basename $f)"
75 if [ -f "$target" ]; then
76 # Prevent same file error
77 if [ "$(stat --format=%i "$target")" = \
78 "$(stat --format=%i "$f")" ]; then
79 return
80 fi
81 fi
82
83 md5="$(md5sum "$f" | awk '{print $1}')"
84 cp -t "$out" "$f"
85 echo "Archived: $f (md5: $md5)"
86}
87
88die() {
89 [ "$1" ] && echo "$1" >&2
90 exit 1
91}
92
93# Emit environment variables for the purpose of sourcing from shells and as
94# Jenkins property files. Whether the RHS is quoted depends on "$quote".
95emit_env() {
96 local env_file="${env_file:?}"
97 local var="${1:?}"
98
99 # Value parameter is mandatory, but allow for it to be empty
100 local val="${2?}"
101
102 if upon "$quote"; then
103 val="\"$val\""
104 else
105 # If RHS is not required to be quoted, any white space in it
106 # won't go well with a shell sourcing this file.
107 if echo "$var" | grep -q '\s'; then
108 die "$var: value '$val' has white space"
109 fi
110 fi
111
112 echo "$var=$val" >> "$env_file"
113}
114
Fathi Boudra422bf772019-12-02 11:10:16 +0200115fetch_directory() {
116 local base="$(basename "${url:?}")"
117 local sa
118
Fathi Boudradd31e7b2020-01-29 15:44:42 +0200119 case "${url}" in
120 http*://*)
121 # Have exactly one trailing /
122 local modified_url="$(echo "${url}" | sed 's#/*$##')/"
Fathi Boudra422bf772019-12-02 11:10:16 +0200123
Fathi Boudradd31e7b2020-01-29 15:44:42 +0200124 # Figure out the number of components between hostname and the
125 # final one
126 local cut_dirs="$(echo "$modified_url" | awk -F/ '{print NF - 5}')"
127 sa="${saveas:-$base}"
128 echo "Fetch: $modified_url -> $sa"
laurenw-arm2d62c712022-09-13 14:27:15 -0500129 wget -rq -nH --cut-dirs="$cut_dirs" --no-parent -e robots=off \
Fathi Boudradd31e7b2020-01-29 15:44:42 +0200130 --reject="index.html*" "$modified_url"
131 if [ "$sa" != "$base" ]; then
132 mv "$base" "$sa"
133 fi
134 ;;
135 file://*)
136 sa="${saveas:-.}"
137 echo "Fetch: ${url} -> $sa"
138 cp -r "${url#file://}" "$sa"
139 ;;
140 *)
141 sa="${saveas:-.}"
142 echo "Fetch: ${url} -> $sa"
143 cp -r "${url}" "$sa"
144 ;;
145 esac
Fathi Boudra422bf772019-12-02 11:10:16 +0200146}
147
148fetch_file() {
149 local url="${url:?}"
150 local sa
151 local saveas
152
153 if is_url "$url"; then
Fathi Boudra422bf772019-12-02 11:10:16 +0200154 saveas="${saveas-"$(basename "$url")"}"
Sandrine Bailleux3da4bd12020-08-06 16:18:36 +0200155 sa="${saveas+-o $saveas}"
Fathi Boudra422bf772019-12-02 11:10:16 +0200156 echo "Fetch: $url -> $saveas"
157 # Use curl to support file protocol
Paul Sokolovsky532a4882023-05-22 15:50:04 +0300158 curl --fail --no-progress-meter --connect-timeout 10 --retry 6 -LS $sa "$url"
Fathi Boudra422bf772019-12-02 11:10:16 +0200159 else
160 sa="${saveas-.}"
161 echo "Fetch: $url -> $sa"
162 cp "$url" "$sa"
163 fi
164}
165
Harrison Mutaia197d5d2022-09-15 13:45:21 +0100166fetch_and_archive() {
167 url=${url:?}
168 filename=${filename:-basename $url}
169
170 url="$url" saveas="$filename" fetch_file
171 archive_file "$filename"
172}
173
174filter_artefacts(){
175 local model_param_file="${model_param_file-$archive/model_params}"
176
177 # Bash doesn't have array values, we have to create references to the
178 # array of artefacts and the artefact filters.
179 declare -ga "$1"
180 declare -n artefacts="$1"
181 declare -n filters="$2"
182
183 for artefact in "${!filters[@]}"; do
184 if grep -E -q "${filters[${artefact}]}" "$model_param_file"; then
185 artefacts+=("${artefact}")
186 fi
187 done
188}
189
Harrison Mutaia197d5d2022-09-15 13:45:21 +0100190# Generate link to an archived binary.
191gen_bin_url() {
192 local bin_mode="${bin_mode:?}"
Tomás González1eb7de02025-01-17 16:32:20 +0000193 local next_bin="${next_bin:?}"
Harrison Mutaia197d5d2022-09-15 13:45:21 +0100194 local bin="${1:?}"
195
196 if upon "$jenkins_run"; then
Tomás González1eb7de02025-01-17 16:32:20 +0000197 if upon "$next_bin"; then
198 date_time="$(date +'%Y-%m-%d-%H%M%S')"
Saheer Babued571482025-02-25 18:46:02 +0000199 echo "https://downloads.openci.arm.com/tf-a/next/artifacts/$date_time/$bin_mode/$bin"
Tomás González1eb7de02025-01-17 16:32:20 +0000200 else
201 echo "$jenkins_url/job/$JOB_NAME/$BUILD_NUMBER/artifact/artefacts/$bin_mode/$bin"
202 fi
Harrison Mutaia197d5d2022-09-15 13:45:21 +0100203 else
204 echo "file://$workspace/artefacts/$bin_mode/$bin"
205 fi
206}
207
Harrison Mutaid993ce12023-03-27 13:21:28 +0100208get_boot_image() {
209 local image=${image:?}
210 local type=${type:?}
Harrison Mutaia197d5d2022-09-15 13:45:21 +0100211
Harrison Mutaid993ce12023-03-27 13:21:28 +0100212 declare -n image_list=${image_list-${image}_list}
213
214 local url="${image_list[${type}]}"
215
216 url="${url:?}" filename="${image}.bin" fetch_and_archive
Harrison Mutaia197d5d2022-09-15 13:45:21 +0100217}
218
Harrison Mutaid993ce12023-03-27 13:21:28 +0100219get_boot_image_from_fip() {(
220 local url="${url:?}"
221 local image="${image:?}"
222 local output_name="${output_name-bl32.bin}"
223
224 cd "$(mktempdir)"
225
226 extract_fip "$url"
227 mv "$image" "$output_name"
228 archive_file "$output_name"
229)}
230
Chris Kay03ffbe72022-11-17 18:53:50 +0000231# Get the path to the run environment variables file.
232#
233# Run environment variables are the test-specific environment variables
234# configured by the CI's test configuration.
235#
236# Usage: get_run_env_path <archive>
237get_run_env_path() {
238 echo "${1:?}/run/env"
239}
240
241# Get a run environment variable.
242#
243# Run environment variables are the test-specific environment variables
244# configured by the CI's test configuration.
245#
246# Usage: get_run_env <archive> <variable> [default]
247get_run_env() {
248 if [ -f "$(get_run_env_path "${1:?}")" ] && [ ! -v "${2:?}" ]; then
249 . "$(get_run_env_path "${1:?}")"
250 fi
251
252 echo "${!2:-${3}}"
253}
254
255# Get the number of UARTs configured by the current test configuration. This
256# defaults to `4`.
257#
258# Usage: get_num_uarts <archive> [default]
259get_num_uarts() {
260 local default=4
261
262 get_run_env "${1:?}" num_uarts "${2-${default}}"
263}
264
265# Get the ports script configured by the current test configuration. This
266# defaults to `script/default-ports-script.awk`.
267#
268# Usage: get_ports_script <archive> [default]
269get_ports_script() {
270 local default="${ci_root}/script/default-ports-script.awk"
271
272 get_run_env "${1:?}" ports_script "${2-${default}}"
273}
274
275# Get the primary UART configured by the current test configuration. This
276# defaults to `0`.
277#
278# Usage: get_primary_uart <archive> [default]
279get_primary_uart() {
280 local default=0
281
282 get_run_env "${1:?}" primary_uart "${2-${default}}"
283}
284
285# Get the payload UART configured by the current test configuration. This
286# defaults to the primary UART.
287#
288# Usage: get_payload_uart <archive> [default]
289get_payload_uart() {
290 local default="$(get_primary_uart "${1:?}")"
291
292 get_run_env "${1:?}" payload_uart "${2-${default}}"
293}
294
295# Get the path to a UART's environment variable directory.
296#
297# UART environment variables are the UART-specific environment variables
298# configured by the CI's test configuration.
299#
300# Usage: get_uart_env_path <archive> <uart>
301get_uart_env_path() {
302 echo "${1:?}/run/uart${2:?}"
303}
304
305# Get a UART environment variable.
306#
307# UART environment variables are the UART-specific environment variables
308# configured by the CI's test configuration.
309#
310# Usage: get_uart_env <archive> <uart> <variable> [default]
311get_uart_env() {
312 if [ ! -v "${3:?}" ] && [ -f "$(get_uart_env_path "${1:?}" "${2:?}")/${3:?}" ]; then
313 cat "$(get_uart_env_path "${1:?}" "${2:?}")/${3:?}"
314 else
Chris Kayfab6edc2022-11-17 19:18:32 +0000315 echo "${!3-${4}}"
Chris Kay03ffbe72022-11-17 18:53:50 +0000316 fi
317}
318
319# Get the path to the Expect script for a given UART. This defaults to nothing.
320#
321# Usage: get_uart_expect_script <archive> <uart> [default]
322get_uart_expect_script() {
323 local default=
324
325 get_uart_env "${1:?}" "${2:?}" expect "${3-${default}}"
326}
327
328# Get the FVP port for a given UART. This defaults to `5000 + ${uart}`.
329#
330# Usage: get_uart_port <archive> <uart> [default]
331get_uart_port() {
332 local default="$(( 5000 + "${2:?}" ))"
333
334 get_uart_env "${1:?}" "${2:?}" port "${3-${default}}"
335}
336
Chris Kay24d039f2022-11-23 12:53:30 +0000337# Set a UART environment variable.
338#
339# UART environment variables are the UART-specific environment variables
340# configured by the CI's test configuration.
341#
342# Usage: set_uart_env <archive> <uart> <variable> <value>
343set_uart_env() {
344 local path="$(get_uart_env_path "${1:?}" "${2:?}")"
345
346 mkdir -p "${path}" && \
347 echo "${4:?}" > "${path}/${3:?}"
348}
349
350# Set the FVP port for a given UART.
351#
352# Usage: set_uart_port <archive> <uart> <port>
353set_uart_port() {
354 set_uart_env "${1:?}" "${2:?}" port "${3:?}"
355}
356
Fathi Boudra422bf772019-12-02 11:10:16 +0200357# Make a temporary directory/file insdie workspace, so that it doesn't need to
358# be cleaned up. Jenkins is setup to clean up workspace before a job runs.
359mktempdir() {
360 local ws="${workspace:?}"
361
362 mktemp -d --tmpdir="$ws"
363}
364mktempfile() {
365 local ws="${workspace:?}"
366
367 mktemp --tmpdir="$ws"
368}
369
370not_upon() {
371 ! upon "$1"
372}
373
374# Use "$1" as a boolean
375upon() {
376 case "$1" in
377 "" | "0" | "false") return 1;;
378 *) return 0;;
379 esac
380}
381
382# Check if the argument is a URL
383is_url() {
384 echo "$1" | grep -q "://"
385}
386
387# Check if a path is absolute
388is_abs() {
389 [ "${1:0:1}" = "/" ]
390}
391
392# Unset a variable based on its boolean value
393# If foo=, foo will be unset
394# If foo=blah, then leave it as is
395reset_var() {
396 local var="$1"
397 local val="${!var}"
398
399 if [ -z "$val" ]; then
400 unset "$var"
401 else
402 var="$val"
403 fi
404}
405
406default_var() {
407 local var="$1"
408 local val="${!var}"
409 local default="$2"
410
411 if [ -z "$val" ]; then
412 eval "$var=$default"
413 fi
414}
415
416# String various items joined by ":" to form a path. Items are prepended by
417# default; or 'op' can be set to 'append' to have them appended.
418# For example, to set: PATH=foo:bar:baz:$PATH
419extend_path() {
420 local path_var="$1"
421 local array_var="$2"
Leonardo Sandoval2af93202020-07-16 17:29:18 -0500422 local path_val="${!path_var}"
Fathi Boudra422bf772019-12-02 11:10:16 +0200423 local op="${op:-prepend}"
Leonardo Sandoval2af93202020-07-16 17:29:18 -0500424 local sep=':'
425 local array_val
Fathi Boudra422bf772019-12-02 11:10:16 +0200426
Leonardo Sandoval2af93202020-07-16 17:29:18 -0500427 eval "array_val=\"\${$array_var[@]}\""
428 array_val="$(echo ${array_val// /:})"
429
430 [ -z "$path_val" ] && sep=''
431
432 if [ "$op" = "prepend" ]; then
433 array_val="${array_val}${sep}${path_val}"
434 elif [ "$op" = "append" ]; then
435 array_val="${path_val}${sep}${array_val}"
436 fi
437
438 eval "$path_var=\"$array_val\""
Fathi Boudra422bf772019-12-02 11:10:16 +0200439}
440
Chris Kay3d807882022-08-31 16:00:02 +0100441# Expand and evaluate Bash variables and expressions in a file, whose path is
442# given by the first parameter.
443#
444# For example, to expand a file containing the following:
445#
446# My name is ${name}!
447#
448# You might use:
449#
450# name="Chris" expand_template "path-to-my-file.txt"
451#
452# This would yield:
453#
454# My name is Chris!
455#
456# If you need to run multiple expansions on a file (e.g. to fill out information
457# incrementally), then you can escape expansion of a variable with a backslash,
458# e.g. `\${name}`.
459#
460# The expanded output is printed to the standard output stream.
461expand_template() {
462 local path="$1"
463
464 eval "cat <<-EOF
465 $(<${path})
466 EOF"
467}
468
Harrison Mutai013f6332022-02-16 16:06:33 +0000469# Fetch and extract the latest supported version of the LLVM toolchain from
470# a compressed archive file to a target directory, if it is required.
471setup_llvm_toolchain() {
472 link="${1:-$llvm_archive}"
473 archive="${2:-"$workspace/llvm.tar.xz"}"
474 target_dir="${3:-$llvm_dir}"
475
476 if is_arm_jenkins_env || upon "$local_ci"; then
477 url="$link" saveas="$archive" fetch_file
478 mkdir -p $target_dir
479 extract_tarball $archive $target_dir --strip-components=1 -k
480 fi
481}
482
483# Extract files from compressed archive to target directory. Supports .zip,
484# .tar.gz, and tar.xf format
Madhukar Pappireddy4b686cf2020-03-31 13:05:14 -0500485extract_tarball() {
486 local archive="$1"
487 local target_dir="$2"
Leonardo Sandovalec9e16c2020-09-09 14:32:40 -0500488 local extra_params="${3:-}"
Madhukar Pappireddy4b686cf2020-03-31 13:05:14 -0500489
490 pushd "$target_dir"
491 case $(file --mime-type -b "$archive") in
492 application/gzip)
Leonardo Sandovalec9e16c2020-09-09 14:32:40 -0500493 tar -xz $extra_params -f $archive
Zelalem219df412020-05-17 19:21:20 -0500494 ;;
Madhukar Pappireddy4b686cf2020-03-31 13:05:14 -0500495 application/zip)
Leonardo Sandovalec9e16c2020-09-09 14:32:40 -0500496 unzip -q $extra_params $archive
Zelalem219df412020-05-17 19:21:20 -0500497 ;;
Harrison Mutai013f6332022-02-16 16:06:33 +0000498 application/x-xz)
499 tar -x $extra_params -f $archive
500 ;;
Madhukar Pappireddy4b686cf2020-03-31 13:05:14 -0500501 esac
Zelalem219df412020-05-17 19:21:20 -0500502 popd "$target_dir"
Madhukar Pappireddy4b686cf2020-03-31 13:05:14 -0500503}
504
Gary Morrison999a9d72022-03-14 18:29:06 -0500505# See if execution is done by Jenkins. If called with a parameter,
506# representing a 'domain', e.g. arm.com, it will also check if
Arthur Shebc61db72025-02-03 21:39:57 -0800507# JENKINS_PUBLIC_URL contains the latter.
Leonardo Sandoval795b6212020-08-14 16:20:00 -0500508is_jenkins_env () {
509 local domain="${1-}"
510
511 # check if running under Jenkins, if not, return non-zero
512 # the checks assumes Jenkins executing if JENKINS_HOME is set
513 [ -z "$JENKINS_HOME" ] && return 1
514
515 # if no parameter passed, no more checks, quit
516 [ -z "$domain" ] && return 0
517
Arthur Shebc61db72025-02-03 21:39:57 -0800518 if echo "$JENKINS_PUBLIC_URL" | grep -q "$domain"; then
Leonardo Sandoval795b6212020-08-14 16:20:00 -0500519 return 0
520 fi
521
522 return 1
523}
524
525
526# Check if execution is under ARM's jenkins
527is_arm_jenkins_env() {
Saheer Babuea91a772025-01-08 16:32:17 +0000528 local arm_domain="oss.arm.com"
Leonardo Sandoval795b6212020-08-14 16:20:00 -0500529 return $(is_jenkins_env "$arm_domain")
530}
531
Leonardo Sandovalfeae3a22020-11-17 16:53:59 -0600532
533# Provide correct linaro cross toolchain based on environment
534set_cross_compile_gcc_linaro_toolchain() {
535 local cross_compile_path="/home/buildslave/tools"
536
537 # if under arm enviroment, overide cross-compilation path
Madhukar Pappireddy21a5e672021-03-08 17:49:45 -0600538 is_arm_jenkins_env || upon "$local_ci" && cross_compile_path="/arm/pdsw/tools"
Leonardo Sandovalfeae3a22020-11-17 16:53:59 -0600539
540 echo "${cross_compile_path}/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-"
541}
542
Leonardo Sandoval795b6212020-08-14 16:20:00 -0500543if is_jenkins_env; then
Fathi Boudra422bf772019-12-02 11:10:16 +0200544 jenkins_run=1
545 umask 0002
546else
547 unset jenkins_run
548fi
549
550# Project scratch location for Trusted Firmware CI
551project_filer="${nfs_volume}/projectscratch/ssg/trusted-fw"
552project_scratch="${PROJECT_SCRATCH:-$project_filer/ci-workspace}"
553warehouse="${nfs_volume}/warehouse"
Arthur Shebc61db72025-02-03 21:39:57 -0800554jenkins_url="${JENKINS_PUBLIC_URL%/*}"
555JENKINS_PUBLIC_URL="${JENKINS_PUBLIC_URL:-https://ci.trustedfirmware.org/}"
Fathi Boudra422bf772019-12-02 11:10:16 +0200556
557# Model revisions
Govindraj Raja02e14fa2024-06-18 13:34:17 -0500558model_version_11_24="${model_version:-11.24}"
559model_build_11_24="${model_build:-24}"
560
Govindraj Raja8962c452024-06-04 14:50:28 -0500561model_version="${model_version:-11.26}"
562model_build="${model_build:-11}"
Maksims Svecovs5c542512022-03-29 10:13:05 +0100563model_flavour="${model_flavour:-Linux64_GCC-9.3}"
Fathi Boudra422bf772019-12-02 11:10:16 +0200564
565# Model snapshots from filer are not normally not accessible from developer
566# systems. Ignore failures from picking real path for local runs.
567pinned_cortex="$(readlink -f ${pinned_cortex:-$project_filer/models/cortex})" || true
568pinned_css="$(readlink -f ${pinned_css:-$project_filer/models/css})" || true
569
Fathi Boudra422bf772019-12-02 11:10:16 +0200570tforg_gerrit_url="review.trustedfirmware.org"
571
572# Repository URLs. We're using anonymous HTTP as they appear to be faster rather
573# than any scheme with authentication.
Fathi Boudra422bf772019-12-02 11:10:16 +0200574tf_src_repo_url="${tf_src_repo_url:-$TF_SRC_REPO_URL}"
575tf_src_repo_url="${tf_src_repo_url:-https://$tforg_gerrit_url/TF-A/trusted-firmware-a}"
Fathi Boudra422bf772019-12-02 11:10:16 +0200576tftf_src_repo_url="${tftf_src_repo_url:-$TFTF_SRC_REPO_URL}"
577tftf_src_repo_url="${tftf_src_repo_url:-https://$tforg_gerrit_url/TF-A/tf-a-tests}"
Jimmy Brisson29ca0a02020-09-22 16:15:35 -0500578ci_src_repo_url="${ci_src_repo_url:-$CI_SRC_REPO_URL}"
579ci_src_repo_url="${ci_src_repo_url:-https://$tforg_gerrit_url/ci/tf-a-ci-scripts}"
Zelalemdd655272020-10-06 16:29:05 -0500580tf_ci_repo_url="$ci_src_repo_url"
Fathi Boudra422bf772019-12-02 11:10:16 +0200581scp_src_repo_url="${scp_src_repo_url:-$SCP_SRC_REPO_URL}"
Girish Pathak97f7ad42020-08-27 11:38:15 +0100582scp_src_repo_url="${scp_src_repo_url:-$scp_src_repo_default}"
Olivier Deprez965a7792019-12-16 14:09:03 +0100583spm_src_repo_url="${spm_src_repo_url:-$SPM_SRC_REPO_URL}"
584spm_src_repo_url="${spm_src_repo_url:-https://$tforg_gerrit_url/hafnium/hafnium}"
Jimmy Brisson0d5e12c2023-05-16 14:51:51 -0500585tf_m_tests_src_repo_url="${tf_m_tests_src_repo_url:-$TF_M_TESTS_REPO_URL}"
586tf_m_tests_src_repo_url="${tf_m_tests_src_repo_url:-https://$tforg_gerrit_url/TF-M/tf-m-tests}"
587tf_m_extras_src_repo_url="${tf_m_extras_src_repo_url:-$TF_M_EXTRAS_REPO_URL}"
588tf_m_extras_src_repo_url="${tf_m_extras_src_repo_url:-https://$tforg_gerrit_url/TF-M/tf-m-extras}"
Fathi Boudra422bf772019-12-02 11:10:16 +0200589
Leonardo Sandovald98f8332021-04-13 16:46:38 -0500590tf_downloads="${tf_downloads:-file:///downloads/}"
Fathi Boudra422bf772019-12-02 11:10:16 +0200591tfa_downloads="${tfa_downloads:-file:///downloads/tf-a}"
592css_downloads="${css_downloads:-$tfa_downloads/css}"
593
Chris Kay52b8d432023-04-27 16:10:57 +0100594# SCP/MCP release binaries.
Sona Mathew914d6b42024-04-04 18:04:48 -0500595scp_mcp_downloads="${scp_mcp_downloads:-$tfa_downloads/css_scp_2.14.0}"
Alexei Fedorov9e4473d2020-11-04 10:13:07 +0000596
Leonardo Sandoval15676062020-11-19 11:58:09 -0600597linaro_2001_release="${linaro_2001_release:-$tfa_downloads/linaro/20.01}"
Alexei Fedorove405cc32020-09-30 18:13:55 +0100598linaro_release="${linaro_release:-$linaro_2001_release}"
Jimmy Brisson6b73bd32024-04-16 11:19:56 -0500599mbedtls_version="${mbedtls_version:-3.6.0}"
Zelalem219df412020-05-17 19:21:20 -0500600
Madhukar Pappireddy4b686cf2020-03-31 13:05:14 -0500601# mbedTLS archive public hosting available at github.com
Govindraj Raja827823f2023-02-28 14:19:00 +0000602mbedtls_archive="${mbedtls_archive:-https://github.com/Mbed-TLS/mbedtls/archive/mbedtls-${mbedtls_version}.tar.gz}"
Fathi Boudra422bf772019-12-02 11:10:16 +0200603
Harrison Mutai013f6332022-02-16 16:06:33 +0000604# FIXME: workaround to allow all on-prem host machines to access the latest LLVM
605# LLVM archive public hosting available at github.com
606llvm_version="${llvm_version:-14.0.0}"
607llvm_dir="$workspace/llvm-$llvm_version"
608llvm_archive="${llvm_archive:-https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvm_version/clang+llvm-$llvm_version-x86_64-linux-gnu-ubuntu-18.04.tar.xz}"
609
Mark Dykes30138ad2021-11-09 16:48:17 -0600610coverity_path="${coverity_path:-${nfs_volume}/tools/coverity/static-analysis/2020.12}"
Fathi Boudra422bf772019-12-02 11:10:16 +0200611coverity_default_checkers=(
612"--all"
613"--checker-option DEADCODE:no_dead_default:true"
Fathi Boudra422bf772019-12-02 11:10:16 +0200614"--enable AUDIT.SPECULATIVE_EXECUTION_DATA_LEAK"
Zelalem219df412020-05-17 19:21:20 -0500615"--enable ENUM_AS_BOOLEAN"
Fathi Boudra422bf772019-12-02 11:10:16 +0200616"--enable-constraint-fpp"
Fathi Boudra422bf772019-12-02 11:10:16 +0200617"--ticker-mode none"
Zelalem219df412020-05-17 19:21:20 -0500618"--hfa"
Fathi Boudra422bf772019-12-02 11:10:16 +0200619)
620
Leonardo Sandovald76d1e22020-10-06 16:02:52 -0500621docker_registry="${docker_registry:-}"
622
Leonardo Sandoval1c24ae52020-07-08 11:47:23 -0500623# Define toolchain version and toolchain binary paths
Jayanth Dodderi Chidanand06df2b42024-04-05 12:44:38 +0100624toolchain_version="13.2.Rel1"
Leonardo Sandoval1c24ae52020-07-08 11:47:23 -0500625
Jayanth Dodderi Chidanandcc4d2342022-09-12 14:44:21 +0100626aarch64_none_elf_dir="${nfs_volume}/pdsw/tools/arm-gnu-toolchain-${toolchain_version}-x86_64-aarch64-none-elf"
Leonardo Sandoval1c24ae52020-07-08 11:47:23 -0500627aarch64_none_elf_prefix="aarch64-none-elf-"
628
Jayanth Dodderi Chidanandcc4d2342022-09-12 14:44:21 +0100629arm_none_eabi_dir="${nfs_volume}/pdsw/tools/arm-gnu-toolchain-${toolchain_version}-x86_64-arm-none-eabi"
Leonardo Sandoval1c24ae52020-07-08 11:47:23 -0500630arm_none_eabi_prefix="arm-none-eabi-"
631
Fathi Boudra422bf772019-12-02 11:10:16 +0200632path_list=(
Leonardo Sandoval1c24ae52020-07-08 11:47:23 -0500633 "${aarch64_none_elf_dir}/bin"
634 "${arm_none_eabi_dir}/bin"
Harrison Mutai013f6332022-02-16 16:06:33 +0000635 "${llvm_dir}/bin"
Leonardo Sandoval1c24ae52020-07-08 11:47:23 -0500636 "${nfs_volume}/pdsw/tools/gcc-arm-none-eabi-5_4-2016q3/bin"
637 "$coverity_path/bin"
Fathi Boudra422bf772019-12-02 11:10:16 +0200638)
639
640ld_library_path_list=(
641)
642
Sandrine Bailleuxa6a1d6e2020-08-07 10:24:17 +0200643license_path_list=${license_path_list-(
644)}
Fathi Boudra422bf772019-12-02 11:10:16 +0200645
646# Setup various paths
647if upon "$retain_paths"; then
648 # If explicitly requested, retain local paths; apppend CI paths to the
649 # existing ones.
650 op="append" extend_path "PATH" "path_list"
651 op="append" extend_path "LD_LIBRARY_PATH" "ld_library_path_list"
652 op="append" extend_path "LM_LICENSE_FILE" "license_path_list"
653else
654 # Otherwise, prepend CI paths so that they take effect before local ones
655 extend_path "PATH" "path_list"
656 extend_path "LD_LIBRARY_PATH" "ld_library_path_list"
657 extend_path "LM_LICENSE_FILE" "license_path_list"
658fi
659
660export LD_LIBRARY_PATH
661export LM_LICENSE_FILE
Fathi Boudra422bf772019-12-02 11:10:16 +0200662export ARM_TOOL_VARIANT=ult
663
664# vim: set tw=80 sw=8 noet: