#!/usr/bin/env bash
#
# Copyright (c) 2020-2021, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#

set -u

bl1_addr="${bl1_addr:-0x0}"
bl31_addr="${bl31_addr:-0x04001000}"
bl32_addr="${bl32_addr:-0x04003000}"
bl33_addr="${bl33_addr:-0x88000000}"
dtb_addr="${dtb_addr:-0x82000000}"
fip_addr="${fip_addr:-0x08000000}"
initrd_addr="${initrd_addr:-0x84000000}"
kernel_addr="${kernel_addr:-0x80080000}"
el3_payload_addr="${el3_payload_addr:-0x80000000}"

# SPM requires following addresses for RESET_TO_BL31 case
spm_addr="${spm_addr:-0x6000000}"
spmc_manifest_addr="${spmc_addr:-0x0403f000}"
sp1_addr="${sp1_addr:-0x7000000}"
sp2_addr="${sp2_addr:-0x7100000}"
sp3_addr="${sp3_addr:-0x7200000}"
# SPM out directories
export spm_secure_out_dir="${spm_secure_out_dir:-secure_aem_v8a_fvp_clang}"
export spm_non_secure_out_dir="${spm_non_secure_out_dir:-aem_v8a_fvp_clang}"

ns_bl1u_addr="${ns_bl1u_addr:-0x0beb8000}"
fwu_fip_addr="${fwu_fip_addr:-0x08400000}"
backup_fip_addr="${backup_fip_addr:-0x09000000}"
romlib_addr="${romlib_addr:-0x03ff2000}"

uboot32_fip_url="$linaro_release/fvp32-latest-busybox-uboot/fip.bin"

rootfs_url="$linaro_release/lt-vexpress64-openembedded_minimal-armv8-gcc-5.2_20170127-761.img.gz"

# Default FVP model variables
default_model_dtb="fvp-base-gicv3-psci.dtb"

# FVP containers and model paths
fvp_arm_std_library_11_12="fvp:fvp_arm_std_library_${model_version_11_12}_${model_build_11_12};/opt/model/FVP_ARM_Std_Library/models/${model_flavour_11_12}"
fvp_arm_std_library="fvp:fvp_arm_std_library_${model_version}_${model_build};/opt/model/FVP_ARM_Std_Library/models/${model_flavour}"
fvp_base_revc_2xaemva="fvp:fvp_base_revc-2xaemva_${model_version}_${model_build};/opt/model/Base_RevC_AEMvA_pkg/models/${model_flavour}"
foundation_platform="fvp:foundation_platform_${model_version}_${model_build};/opt/model/Foundation_Platformpkg/models/${model_flavour}"

# FVP associate array, run_config are keys and fvp container parameters are the values
#   Container parameters syntax: <model name>;<model dir>;<model bin>
# FIXMEs: fix those ;;; values with real values

declare -A fvp_models
fvp_models=(
[base-aemv8a-quad]=";;;"
[base-aemv8a-revb]=";;;"
[base-aemv8a-latest-revb]=";;;"
[base-aemva]=";;;"
[base-aemv8a-gic600ae]=";;;"
[foundationv8]="${foundation_platform};Foundation_Platform"
[base-aemv8a]="${fvp_base_revc_2xaemva};FVP_Base_RevC-2xAEMvA"
[cortex-a32x4]="${fvp_arm_std_library_11_12};FVP_Base_Cortex-A32x4"
[cortex-a35x4]="${fvp_arm_std_library};FVP_Base_Cortex-A35x4"
[cortex-a53x4]="${fvp_arm_std_library};FVP_Base_Cortex-A53x4"
[cortex-a55x4-a75x4]="${fvp_arm_std_library};FVP_Base_Cortex-A55x4+Cortex-A75x4"
[cortex-a55x4-a76x2]="${fvp_arm_std_library};FVP_Base_Cortex-A55x4+Cortex-A76x2"
[cortex-a57x1-a53x1]="${fvp_arm_std_library};FVP_Base_Cortex-A57x1-A53x1"
[cortex-a57x2-a53x4]="${fvp_arm_std_library};FVP_Base_Cortex-A57x2-A53x4"
[cortex-a57x4]="${fvp_arm_std_library};FVP_Base_Cortex-A57x4"
[cortex-a57x4-a53x4]="${fvp_arm_std_library};FVP_Base_Cortex-A57x4-A53x4"
[cortex-a65aex8]="${fvp_arm_std_library};FVP_Base_Cortex-A65AEx8"
[cortex-a65x4]="${fvp_arm_std_library};FVP_Base_Cortex-A65x4"
[cortex-a72x4]="${fvp_arm_std_library};FVP_Base_Cortex-A72x4"
[cortex-a72x4-a53x4]="${fvp_arm_std_library};FVP_Base_Cortex-A72x4-A53x4"
[cortex-a73x4]="${fvp_arm_std_library};FVP_Base_Cortex-A73x4"
[cortex-a73x4-a53x4]="${fvp_arm_std_library};FVP_Base_Cortex-A73x4-A53x4"
[cortex-a75x4]="${fvp_arm_std_library};FVP_Base_Cortex-A75x4"
[cortex-a76aex4]="${fvp_arm_std_library};FVP_Base_Cortex-A76AEx4"
[cortex-a76aex2]="${fvp_arm_std_library};FVP_Base_Cortex-A76AEx2"
[cortex-a76x4]="${fvp_arm_std_library};FVP_Base_Cortex-A76x4"
[cortex-a77x4]="${fvp_arm_std_library};FVP_Base_Cortex-A77x4"
[cortex-a78x4]="${fvp_arm_std_library};FVP_Base_Cortex-A78x4"
[neoverse_e1x1]="${fvp_arm_std_library};FVP_Base_Neoverse-E1x1"
[neoverse_e1x2]="${fvp_arm_std_library};FVP_Base_Neoverse-E1x2"
[neoverse_e1x4]="${fvp_arm_std_library};FVP_Base_Neoverse-E1x4"
[neoverse_n1]="${fvp_arm_std_library};FVP_Base_Neoverse-N1x1"
[neoverse_n2]=";;;"
[neoverse-v1x4]=";;;"
[matterhornx4]=";;;"
[css-rdv1]=";;;"
[css-rde1edge]=";;;"
[css-rdn1edge]=";;;"
[css-rdn1edgex2]=";;;"
[css-sgi575]=";;;"
[tc0]=";;;"
)


# FVP Kernel URLs
declare -A fvp_kernels
fvp_kernels=(
[fvp-aarch32-zimage]="$linaro_release/fvp32-latest-busybox-uboot/Image"
[fvp-busybox-uboot]="$linaro_release/fvp-latest-busybox-uboot/Image"
[fvp-oe-uboot32]="$linaro_release/fvp32-latest-oe-uboot/Image"
[fvp-oe-uboot]="$linaro_release/fvp-latest-oe-uboot/Image"
[fvp-quad-busybox-uboot]="$tfa_downloads/quad_cluster/Image"
)

# FVP initrd URLs
declare -A fvp_initrd_urls
fvp_initrd_urls=(
[aarch32-ramdisk]="$linaro_release/fvp32-latest-busybox-uboot/ramdisk.img"
[dummy-ramdisk]="$linaro_release/fvp-latest-oe-uboot/ramdisk.img"
[dummy-ramdisk32]="$linaro_release/fvp32-latest-oe-uboot/ramdisk.img"
[default]="$linaro_release/fvp-latest-busybox-uboot/ramdisk.img"
)

get_optee_bin() {
	url="$tfa_downloads/optee/tee.bin" \
           saveas="bl32.bin" fetch_file
	archive_file "bl32.bin"
}

# For Measured Boot tests using a TA based on OPTEE, it is necessary to use a
# specific build rather than the default one generated by Jenkins.
get_ftpm_optee_bin() {
	url="$tfa_downloads/ftpm/optee/tee-header_v2.bin" \
		saveas="bl32.bin" fetch_file
	archive_file "bl32.bin"

	url="$tfa_downloads/ftpm/optee/tee-pager_v2.bin" \
		saveas="bl32_extra1.bin" fetch_file
	archive_file "bl32_extra1.bin"

	# tee-pageable_v2.bin is just a empty file, named as bl32_extra2.bin,
	# so just create the file
	touch "bl32_extra2.bin"
	archive_file "bl32_extra2.bin"
}

get_uboot32_bin() {
	local tmpdir="$(mktempdir)"

	pushd "$tmpdir"
	extract_fip "$uboot32_fip_url"
	mv "nt-fw.bin" "uboot.bin"
	archive_file "uboot.bin"
	popd
}

get_uboot_bin() {
	local uboot_url="$linaro_release/fvp-latest-busybox-uboot/bl33-uboot.bin"

	url="$uboot_url" saveas="uboot.bin" fetch_file
	archive_file "uboot.bin"
}

get_uefi_bin() {
	uefi_downloads="${uefi_downloads:-http://files.oss.arm.com/downloads/uefi}"
	uefi_ci_bin_url="${uefi_ci_bin_url:-$uefi_downloads/Artifacts/Linux/github/fvp/static/DEBUG_GCC5/FVP_AARCH64_EFI.fd}"

	url=$uefi_ci_bin_url saveas="uefi.bin" fetch_file
	archive_file "uefi.bin"
}

get_kernel() {
	local kernel_type="${kernel_type:?}"
	local url="${fvp_kernels[$kernel_type]}"

	url="${url:?}" saveas="kernel.bin" fetch_file
	archive_file "kernel.bin"
}

get_initrd() {
	local initrd_type="${initrd_type:?}"
	local url="${fvp_initrd_urls[$initrd_type]}"

	url="${url:?}" saveas="initrd.bin" fetch_file
	archive_file "initrd.bin"
}

get_dtb() {
	local dtb_type="${dtb_type:?}"
	local dtb_url
	local dtb_saveas="$workspace/dtb.bin"
	local cc="$(get_tf_opt CROSS_COMPILE)"
	local pp_flags="-P -nostdinc -undef -x assembler-with-cpp"

	case "$dtb_type" in
		"fvp-base-quad-cluster-gicv3-psci")
			# Get the quad-cluster FDT from pdsw area
			dtb_url="$tfa_downloads/quad_cluster/fvp-base-quad-cluster-gicv3-psci.dtb"
			url="$dtb_url" saveas="$dtb_saveas" fetch_file
			;;
		*)
			# Preprocess DTS file
			${cc}gcc -E ${pp_flags} -I"$tf_root/fdts" -I"$tf_root/include" \
				-o "$workspace/${dtb_type}.pre.dts" \
				"$tf_root/fdts/${dtb_type}.dts"
			# Generate DTB file from DTS
			dtc -I dts -O dtb \
				"$workspace/${dtb_type}.pre.dts" -o "$dtb_saveas"
	esac

	archive_file "$dtb_saveas"
}

get_rootfs() {
	local tmpdir
	local fs_base="$(echo $(basename $rootfs_url) | sed 's/\.gz$//')"
	local cached="$project_filer/ci-files/$fs_base"

	if upon "$jenkins_run" && [ -f "$cached" ]; then
		# Job workspace is limited in size, and the root file system is
		# quite large. This means, parallel runs of root file system
		# tests could fail. So, for Jenkins runs, copy and use the root
		# file system image from the $CI_SCRATCH location
		local private="$CI_SCRATCH/$JOB_NAME-$BUILD_NUMBER"
		mkdir -p "$private"
		rm -f "$private/rootfs.bin"
		url="$cached" saveas="$private/rootfs.bin" fetch_file
		ln -s "$private/rootfs.bin" "$archive/rootfs.bin"
		return
	fi

	tmpdir="$(mktempdir)"
	pushd "$tmpdir"
	url="$rootfs_url" saveas="rootfs.bin" fetch_file

	# Possibly, the filesystem image we just downloaded is compressed.
	# Decompress it if required.
	if file "rootfs.bin" | grep -iq 'gzip compressed data'; then
		echo "Decompressing root file system image rootfs.bin ..."
		gunzip --stdout "rootfs.bin" > uncompressed_fs.bin
		mv uncompressed_fs.bin "rootfs.bin"
	fi

	archive_file "rootfs.bin"
	popd
}

fvp_romlib_jmptbl_backup="$(mktempdir)/jmptbl.i"

fvp_romlib_runtime() {
	local tmpdir="$(mktempdir)"

	# Save BL1 and romlib binaries from original build
	mv "${tf_build_root:?}/${plat:?}/${mode:?}/romlib/romlib.bin" "$tmpdir/romlib.bin"
	mv "${tf_build_root:?}/${plat:?}/${mode:?}/bl1.bin" "$tmpdir/bl1.bin"

	# Patch index file
	cp "${tf_root:?}/plat/arm/board/fvp/jmptbl.i" "$fvp_romlib_jmptbl_backup"
	sed -i '/fdt/ s/.$/&\ patch/' ${tf_root:?}/plat/arm/board/fvp/jmptbl.i

	# Rebuild with patched file
	echo "Building patched romlib:"
	build_tf

	# Retrieve original BL1 and romlib binaries
	mv "$tmpdir/romlib.bin" "${tf_build_root:?}/${plat:?}/${mode:?}/romlib/romlib.bin"
	mv "$tmpdir/bl1.bin" "${tf_build_root:?}/${plat:?}/${mode:?}/bl1.bin"
}

fvp_romlib_cleanup() {
	# Restore original index
	mv "$fvp_romlib_jmptbl_backup" "${tf_root:?}/plat/arm/board/fvp/jmptbl.i"
}


fvp_gen_bin_url() {
    local bin_mode="${bin_mode:?}"
    local bin="${1:?}"

    if upon "$jenkins_run"; then
        echo "$jenkins_url/job/$JOB_NAME/$BUILD_NUMBER/artifact/artefacts/$bin_mode/$bin"
    else
        echo "file://$workspace/artefacts/$bin_mode/$bin"
    fi
}

gen_fvp_yaml_template() {
    local yaml_template_file="$workspace/fvp_template.yaml"

    # must parameters for yaml generation
    local payload_type="${payload_type:?}"

    "$ci_root/script/gen_fvp_${payload_type}_yaml.sh" > "$yaml_template_file"

    archive_file "$yaml_template_file"
}

gen_fvp_yaml() {
    local model="${model:?}"

    local yaml_template_file="$workspace/fvp_template.yaml"
    local yaml_file="$workspace/fvp.yaml"
    local yaml_job_file="$workspace/job.yaml"
    local lava_model_params="$workspace/lava_model_params"

    # this function expects a template, quit if it is not present
    if [ ! -f "$yaml_template_file" ]; then
	return
    fi

    local model_params="${fvp_models[$model]}"
    local model_name="$(echo "${model_params}" | awk -F ';' '{print $1}')"
    local model_dir="$(echo "${model_params}"  | awk -F ';' '{print $2}')"
    local model_bin="$(echo "${model_params}"  | awk -F ';' '{print $3}')"

    # model params are required for correct yaml creation, quit if empty
    if [ -z "${model_name}" ]; then
       echo "FVP model param 'model_name' variable empty, yaml not produced"
       return
    elif [ -z "${model_dir}" ]; then
       echo "FVP model param 'model_dir' variable empty, yaml not produced"
       return
    elif [ -z "${model_bin}"  ]; then
       echo "FVP model param 'model_bin' variable empty, yaml not produced"
       return
    fi

    echo "FVP model params: model_name=$model_name model_dir=$model_dir model_bin=$model_bin"

    # FIXME: Foundation plaforms (model=foundationv8) are failing because LAVA [1]
    # should read two ports, 5000 and 5002, but LAVA does not support this
    # feature, so for the moment avoid creating any LAVA test job definition
    # for this model until a solution is found.
    # [1] https://tf.validation.linaro.org/scheduler/job/33871
    if ! is_arm_jenkins_env && not_upon "$local_ci"; then
     if [ "${model}" = "foundationv8" ]; then
         return
     fi
    fi

    # optional parameters, defaults to globals
    local model_dtb="${model_dtb:-$default_model_dtb}"

    # possible artefacts
    backup_fip="$(fvp_gen_bin_url backup_fip.bin)"
    bl1="$(fvp_gen_bin_url bl1.bin)"
    bl2="$(fvp_gen_bin_url bl2.bin)"
    bl31="$(fvp_gen_bin_url bl31.bin)"
    bl32="$(fvp_gen_bin_url bl32.bin)"
    busybox="$(fvp_gen_bin_url busybox.bin.gz)"
    cactus_primary="$(fvp_gen_bin_url cactus-primary.pkg)"
    cactus_secondary="$(fvp_gen_bin_url cactus-secondary.pkg)"
    cactus_tertiary="$(fvp_gen_bin_url cactus-tertiary.pkg)"
    coverage_trace_plugin="${coverage_trace_plugin}"
    dtb="$(fvp_gen_bin_url ${model_dtb})"
    el3_payload="$(fvp_gen_bin_url el3_payload.bin)"
    fip="$(fvp_gen_bin_url fip.bin)"
    fwu_fip="$(fvp_gen_bin_url fwu_fip.bin)"
    generic_trace="${tfa_downloads}/FastModelsPortfolio_${model_version}/plugins/${model_flavour}/GenericTrace.so"
    hafnium="$(fvp_gen_bin_url hafnium.bin)"
    image="$(fvp_gen_bin_url kernel.bin)"
    mcp_rom="$(fvp_gen_bin_url mcp_rom.bin)"
    mcp_rom_hyphen="$(fvp_gen_bin_url mcp-rom.bin)"
    ns_bl1u="$(fvp_gen_bin_url ns_bl1u.bin)"
    ns_bl2u="$(fvp_gen_bin_url ns_bl2u.bin)"
    ramdisk="$(fvp_gen_bin_url initrd.bin)"
    romlib="$(fvp_gen_bin_url romlib.bin)"
    rootfs="$(fvp_gen_bin_url rootfs.bin.gz)"
    secure_hafnium="$(fvp_gen_bin_url secure_hafnium.bin)"
    scp_ram="$(fvp_gen_bin_url scp_ram.bin)"
    scp_ram_hyphen="$(fvp_gen_bin_url scp-ram.bin)"
    scp_rom="$(fvp_gen_bin_url scp_rom.bin)"
    scp_rom_hyphen="$(fvp_gen_bin_url scp-rom.bin)"
    spm="$(fvp_gen_bin_url spm.bin)"
    tftf="$(fvp_gen_bin_url tftf.bin)"
    tmp="$(fvp_gen_bin_url tmp.bin)"
    uboot="$(fvp_gen_bin_url uboot.bin)"

    docker_registry="${docker_registry:-}"
    docker_registry="$(docker_registry_append)"
    docker_name="${docker_registry}$model_name"
    prompt1='/ #'
    prompt2='root@genericarmv8:~#'
    version_string="\"Fast Models"' [^\\n]+'"\""

    # arrays that relates variables and template macros
    # NOTE: any addition on these arrays, requires an addition in the
    # fvp templates
    declare -A yaml_macros
    declare -A artefacts_macros
    yaml_macros=(
        [armlmd_license_file]="{ARMLMD_LICENSE_FILE}"
        [docker_name]="{BOOT_DOCKER_NAME}"
        [model]="{MODEL}"
        [model_bin]="{BOOT_IMAGE_BIN}"
        [model_dir]="{BOOT_IMAGE_DIR}"
        [prompt1]="{PROMPT1}"
        [prompt2]="{PROMPT2}"
        [version_string]="{BOOT_VERSION_STRING}"
    )
    artefacts_macros=(
        [backup_fip]="{BACKUP_FIP}"
        [bl1]="{BL1}"
        [bl2]="{BL2}"
        [bl31]="{BL31}"
        [bl32]="{BL32}"
        [cactus_primary]="{CACTUS_PRIMARY}"
        [cactus_secondary]="{CACTUS_SECONDARY}"
        [cactus_tertiary]="{CACTUS_TERTIARY}"
        [coverage_trace_plugin]="{COVERAGE_TRACE_PLUGIN}"
        [busybox]="{BUSYBOX}"
        [dtb]="{DTB}"
        [el3_payload]="{EL3_PAYLOAD}"
        [fwu_fip]="{FWU_FIP}"
        [fip]="{FIP}"
        [generic_trace]="{GENERIC_TRACE}"
        [hafnium]="{HAFNIUM}"
        [image]="{IMAGE}"
        [mcp_rom]="{MCP_ROM}"
        [mcp_rom_hyphen]="{MCP_ROM_HYPHEN}"
        [ns_bl1u]="{NS_BL1U}"
        [ns_bl2u]="{NS_BL2U}"
        [ramdisk]="{RAMDISK}"
        [romlib]="{ROMLIB}"
        [rootfs]="{ROOTFS}"
        [secure_hafnium]="{SECURE_HAFNIUM}"
        [scp_ram]="{SCP_RAM}"
        [scp_ram_hyphen]="{SCP_RAM_HYPHEN}"
        [scp_rom]="{SCP_ROM}"
        [scp_rom_hyphen]="{SCP_ROM_HYPHEN}"
        [spm]="{SPM}"
        [tftf]="{TFTF}"
        [tmp]="{TMP}"
        [uboot]="{UBOOT}"
    )

    # templates cover all possible artefacts, but model parameters may
    # not required all, i.e. romlib.bin, so delete those irrelevant from
    # the template
    for m in "${!artefacts_macros[@]}"; do
        # there are artefacts where deletion is handled in special case, so treat them accordingly
        case "$m" in
            busybox)
                # besides the macro removal, remove the compression field
                if ! grep -q "${m}.bin" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/,/compression: gz\$/d" "${yaml_template_file}"
                fi
                ;;
            cactus_primary)
                # cactus packages have a hyphen, not an underscore
                if ! grep -E -q "cactus-primary.pkg" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
            cactus_secondary)
                # cactus packages have a hyphen, not an underscore
                if ! grep -E -q "cactus-secondary.pkg" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
            cactus_tertiary)
                # cactus packages have a hyphen, not an underscore
                if ! grep -E -q "cactus-tertiary.pkg" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
            coverage_trace_plugin)
                if ! grep -q "coverage_trace.so" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
            dtb)
                # dtb can come in different names, i.e.  dtb.bin, manifest.dtb,
                # so handle with regex
                if ! grep -E -q "=.*dtb.*@" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
            generic_trace)
                # the image (Linux Kernel) is named as kernel.bin
                if ! grep -q "GenericTrace.so" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
            image)
                # the image (Linux Kernel) is named as kernel.bin
                if ! grep -q "kernel.bin" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
            mcp_rom_hyphen)
                # mcp rom is either present as mcp-rom or mcp_rom, handle the former case
                if ! grep -q "mcp-rom.bin" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
            ramdisk)
                # ramdisk is named initrd and is present with to extensions: bin or img
                if ! grep -E -q "initrd.bin|initrd.img" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
            rootfs)
                # besides the macro removal, remove the compression field
                if ! grep -q "rootfs.bin" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/,/compression: gz\$/d" "${yaml_template_file}"
                fi
                ;;
            scp_ram_hyphen)
                # scp ram is either present as scp-ram or scp_ram, handle the former case
                if ! grep -q "scp-ram.bin" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
            scp_rom_hyphen)
                # scp rom is either present as scp-rom or scp_rom, handle the former case
                if ! grep -q "scp-rom.bin" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
            *)
                if ! grep -q "${m}.bin" "$archive/model_params"; then
                    sed -i "/$m:\$/d" "${yaml_template_file}"
                    sed -i "/url: ${artefacts_macros[$m]}\$/d" "${yaml_template_file}"
                fi
                ;;
        esac
    done

    # copied files are the working files
    cp "${yaml_template_file}" "${yaml_file}"
    cp "$archive/model_params" "$lava_model_params"

    # replace yaml macros with real values
    for m in "${!yaml_macros[@]}"; do
        sed -i -e "s|${yaml_macros[$m]}|${!m}|" "$yaml_file"
    done

    # replace artefact macros with real values
    for m in "${!artefacts_macros[@]}"; do
        sed -i -e "s|${artefacts_macros[$m]}|${!m}|" "$yaml_file"
    done

    # LAVA expects parameters as 'macros', i.e. {X} instead of x.bin, so
    # replace them. As in the macro removal above, handle special cases for several
    # artefacts
    for m in "${!artefacts_macros[@]}"; do
        case "$m" in
            dtb)
                sed -i -e "s|=.*dtb.*@|=${artefacts_macros[$m]}@|" "$lava_model_params"
                ;;
            cactus_primary)
                sed -i -e "s|=cactus-primary.pkg|=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
            cactus_secondary)
                sed -i -e "s|=cactus-secondary.pkg|=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
            cactus_tertiary)
                sed -i -e "s|=cactus-tertiary.pkg|=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
            coverage_trace_plugin)
                sed -i -e "s|--plugin .*coverage_trace.so|--plugin ${artefacts_macros[$m]}|" "$lava_model_params"
                sed -i -e "s|--plugin=.*coverage_trace.so|--plugin=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
            generic_trace)
                sed -i -e "s|--plugin .*GenericTrace.so|--plugin ${artefacts_macros[$m]}|" "$lava_model_params"
		sed -i -e "s|--plugin=.*GenericTrace.so|--plugin=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
            image)
                sed -i -e "s|=kernel.bin|=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
            mcp_rom_hyphen)
                sed -i -e "s|=mcp-rom.bin|=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
            ramdisk)
                sed -i -e "s|=initrd.bin|=${artefacts_macros[$m]}|" "$lava_model_params"
                sed -i -e "s|=initrd.img|=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
            scp_ram_hyphen)
                sed -i -e "s|=scp-ram.bin|=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
            scp_rom_hyphen)
                sed -i -e "s|=scp-rom.bin|=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
            tmp | hafnium | secure_hafnium)
                sed -i -e "s|=.*/${m}.bin|=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
            *)
                sed -i -e "s|=${m}.bin|=${artefacts_macros[$m]}|" "$lava_model_params"
                ;;
        esac
    done

    # include the model parameters
    while read -r line; do
        if [ -n "$line" ]; then
            yaml_line="- \"${line}\""
            sed -i -e "/{BOOT_ARGUMENTS}/i \ \ \ \ $yaml_line" "$yaml_file"
        fi
    done < "$lava_model_params"
    sed -i -e '/{BOOT_ARGUMENTS}/d' "$yaml_file"

    # create job.yaml
    cp "$yaml_file" "$yaml_job_file"

    # archive both yamls
    archive_file "$yaml_file"
    archive_file "$yaml_job_file"
}

docker_registry_append() {
    # if docker_registry is empty, just use local docker registry
    [ -z "$docker_registry" ] && return

    local last=-1
    local last_char="${docker_registry:last}"

    if [ "$last_char" != '/' ]; then
        docker_registry="${docker_registry}/";
    fi
    echo "$docker_registry"
}

# generate GPT image and archive it
gen_gpt_bin() {
    raw_image="fip_gpt.bin"
    img_uuid="FB90808A-BA9A-4D42-B9A2-A7A937144AEE"
    img_bank_uuid=`uuidgen`
    disk_uuid=`uuidgen`
    bin="${1:?}"

    # maximum FIP size 2MB
    fip_max_size=2097152
    start_sector=34
    sector_size=512
    num_sectors=$(($fip_max_size/$sector_size))
    bin_size=$(stat -c %s $bin)

    if [[ $fip_max_size -lt $bin_size ]]
    then
           echo "FIP binary ($bin_size bytes) larger than max partition 1"
                "size ($fip_max_size byte)"
           return
    fi

    # create raw 5MB image
    dd if=/dev/zero of=$raw_image bs=5M count=1

    # create GPT image
    sgdisk -a 1 -U $disk_uuid -n 1:$start_sector:+$num_sectors \
           -c 1:FIP_A -t 1:$img_uuid $raw_image -u $img_bank_uuid

    echo "write binary $bin at sector $start_sector"
    dd if=$bin of=$raw_image bs=$sector_size seek=$start_sector \
       count=$num_sectors conv=notrunc

    archive_file "fip_gpt.bin"
}

set +u
