ammy-amd64-tf-a-build-lts2.12: Image for TF-A LTS 2.12

build.sh is based on one from /jammy-amd64-tf-a-build-lts2.10, while other
files from jammy-amd64-tf-a-build.

Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
Change-Id: I9a69e07a2720acdae14778645d3550b509138561
diff --git a/jammy-amd64-tf-a-build-lts2.12/build.sh b/jammy-amd64-tf-a-build-lts2.12/build.sh
new file mode 100755
index 0000000..f2ea249
--- /dev/null
+++ b/jammy-amd64-tf-a-build-lts2.12/build.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+set -e
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+  rm -f *.list *.key
+}
+
+export LANG=C
+
+DISTRIBUTION=$(basename ${PWD} | cut -f1 -d '-')
+ARCHITECTURE=$(basename ${PWD} | cut -f2 -d '-')
+#PROJECT=$(basename ${PWD} | cut -f3 -d '-')-$(basename ${PWD} | cut -f4 -d '-')
+PROJECT=tf-a-lts2.12
+
+# This image is a fork of jammy-amd64-tf-a-build. Copy all files from there,
+# unless already exists here.
+for f in $(ls -1 ../jammy-amd64-tf-a-build/*); do
+    if [ ! -e $(basename $f) ]; then
+        cp -a $f .
+    fi
+done
+
+cp -a ../setup-sshd .
+
+# Copy armclang toolchains required for the build (previously fetched
+# from s3://trustedfirmware-private/armclang/ by build harness).
+cp ../ARMCompiler6.18_standalone_linux-x86_64.tar.gz .
+
+image=trustedfirmware/ci-${ARCHITECTURE}-${PROJECT}-ubuntu:${DISTRIBUTION}${DOCKER_SUFFIX}
+docker build --pull --no-cache --tag=$image .
+echo $image > .docker-tag
diff --git a/jammy-amd64-tf-a-build-lts2.12/requirements_python2.txt b/jammy-amd64-tf-a-build-lts2.12/requirements_python2.txt
new file mode 100644
index 0000000..a34ca8a
--- /dev/null
+++ b/jammy-amd64-tf-a-build-lts2.12/requirements_python2.txt
@@ -0,0 +1,2 @@
+pygments==2.2.0
+psutil
diff --git a/jammy-amd64-tf-a-build-lts2.12/requirements_python3.txt b/jammy-amd64-tf-a-build-lts2.12/requirements_python3.txt
new file mode 100644
index 0000000..6ff6fb0
--- /dev/null
+++ b/jammy-amd64-tf-a-build-lts2.12/requirements_python3.txt
@@ -0,0 +1,18 @@
+MarkupSafe==2.1.2
+PyYAML==6.0
+Sphinx==5.3.0
+cbor==1.0.0
+configobj==5.0.6
+cryptography==2.7
+docker==4.3.1
+imgtool==1.6.0
+lavacli==1.5.2
+m2r==0.2.1
+poetry==1.3.2
+pyasn1==0.1.9
+pycryptodome==3.6.6
+sphinx-rtd-theme==1.2.0
+sphinxcontrib-plantuml==0.24.1
+tuxsuite==1.37.1
+unidiff>=0.7.4
+xmltodict==0.12.0
diff --git a/jammy-amd64-tf-a-build-lts2.12/tf-dependencies.install b/jammy-amd64-tf-a-build-lts2.12/tf-dependencies.install
new file mode 100755
index 0000000..26402ba
--- /dev/null
+++ b/jammy-amd64-tf-a-build-lts2.12/tf-dependencies.install
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+set -ex
+
+# Install cppcheck
+wget -q https://github.com/danmar/cppcheck/archive/refs/tags/2.7.tar.gz -O /tmp/cppcheck.tar.gz
+tar -xf /tmp/cppcheck.tar.gz -C /opt
+(cd /opt/cppcheck-*; make FILESDIR=/opt/cppcheck-2.7/cfg; make FILESDIR=/opt/cppcheck-2.7/cfg install; make clean)
+
+# Install PlantUML
+curl --connect-timeout 5 --retry 5 --create-dirs -fsSLo ${PLANTUML_JAR_PATH} \
+  https://repo1.maven.org/maven2/net/sourceforge/plantuml/plantuml/1.2019.6/plantuml-1.2019.6.jar
+cat << EOF > /usr/bin/plantuml
+#!/bin/sh
+/usr/bin/java -jar ${PLANTUML_JAR_PATH} \${@}
+EOF
+chmod 0755 /usr/bin/plantuml
+
+# Install CMake
+curl --connect-timeout 5 --retry 5 --create-dirs -fsSLo /tmp/cmake-Linux-x86_64.tar.gz \
+  https://github.com/Kitware/CMake/releases/download/v3.15.7/cmake-3.15.7-Linux-x86_64.tar.gz
+tar -xf /tmp/cmake-Linux-x86_64.tar.gz -C ${TOOLS_DIR} --strip-components=1
+
+# Install Arm GCC toolchain (arm-none-eabi GNU-A)
+curl --connect-timeout 15 --retry 5 --create-dirs -fsSLo /tmp/gcc-arm-x86_64-arm-none-eabi.tar.xz \
+  https://developer.arm.com/-/media/Files/downloads/gnu/13.3.Rel1/binrel/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz
+tar -Jxf /tmp/gcc-arm-x86_64-arm-none-eabi.tar.xz -C ${TOOLS_DIR} --strip-components=1
+
+# Install Arm GCC toolchain (arm-none-eabi GNU-RM)
+curl --connect-timeout 15 --retry 5 --create-dirs -fsSLo /tmp/gcc-arm-x86_64-arm-none-eabi.tar.bz2 \
+  https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
+mkdir -p ${TOOLS_DIR}/gnu-rm
+tar xjf /tmp/gcc-arm-x86_64-arm-none-eabi.tar.bz2 -C ${TOOLS_DIR}/gnu-rm --strip-components=1
+
+# Install Arm GCC toolchain (aarch64-none-elf)
+curl --connect-timeout 15 --retry 5 --create-dirs -fsSLo /tmp/gcc-arm-x86_64-aarch64-none-elf.tar.xz \
+  https://developer.arm.com/-/media/Files/downloads/gnu/13.3.Rel1/binrel/arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-elf.tar.xz
+tar -Jxf /tmp/gcc-arm-x86_64-aarch64-none-elf.tar.xz -C ${TOOLS_DIR} --strip-components=1
+
+# Install Linaro GCC 6.2.1 toolchain (aarch64-none-elf), which is required by some platforms, i.e. marvell
+# NOTE: Toolchain is not available through PATH so to use it, CROSS_COMPILE should point to
+# CROSS_COMPILE=${TOOLS_DIR}/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
+curl --connect-timeout 5 --retry 5 --create-dirs -fsSLo /tmp/gcc-linaro-x86_64_aarch64-linux-gnu.tar.xz \
+  https://releases.linaro.org/components/toolchain/binaries/6.2-2016.11/aarch64-linux-gnu/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu.tar.xz
+tar -Jxf /tmp/gcc-linaro-x86_64_aarch64-linux-gnu.tar.xz -C ${TOOLS_DIR}
+
+# Install LLVM Clang toolchain (clang)
+curl --connect-timeout 5 --retry 5 --create-dirs -fsSLo /tmp/clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04.tar.xz \
+  https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04.tar.xz
+tar -xf /tmp/clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04.tar.xz -C ${TOOLS_DIR} --strip-components=1
+
+# Install Arm Clang 6.18 toolchain (armclang)
+mkdir -p /tmp/armclang-6.18
+tar -xf /tmp/ARMCompiler6.18_standalone_linux-x86_64.tar.gz -C /tmp/armclang-6.18
+/tmp/armclang-6.18/install_x86_64.sh --no-interactive --i-agree-to-the-contained-eula -d ${TOOLS_DIR}/armclang-6.18
+
+# Install the CUE data constraint language
+go install cuelang.org/go/cmd/cue@v0.5.0
+
+# Additional binaries required
+mkdir -p nfs/downloads/linaro/20.01
+cd nfs/downloads/linaro/20.01
+wget -q -c -m -A .zip -np -nd https://releases.linaro.org/members/arm/platforms/20.01/
+rm -f fvp*-android-*.zip sg*.zip
+for file in *.zip; do
+  unzip -q ${file} -d $(basename ${file} .zip)
+done
+rm -f *.zip
+
+# Install OpenSSL 3.0
+OPENSSL_VER="3.0.7"
+OPENSSL_DIRNAME="openssl-${OPENSSL_VER}"
+OPENSSL_FILENAME="openssl-${OPENSSL_VER}"
+OPENSSL_CHECKSUM="83049d042a260e696f62406ac5c08bf706fd84383f945cf21bd61e9ed95c396e"
+curl --connect-timeout 5 --retry 5 --create-dirs -fsSLo /tmp/${OPENSSL_FILENAME}.tar.gz \
+  https://www.openssl.org/source/${OPENSSL_FILENAME}.tar.gz
+echo "${OPENSSL_CHECKSUM}  /tmp/${OPENSSL_FILENAME}.tar.gz" | sha256sum -c
+mkdir -p ${TOOLS_DIR}/${OPENSSL_DIRNAME} && tar -xzf /tmp/${OPENSSL_FILENAME}.tar.gz -C ${TOOLS_DIR}/${OPENSSL_DIRNAME} --strip-components=1
+cd ${TOOLS_DIR}/${OPENSSL_DIRNAME}
+./Configure --libdir=lib --prefix=/usr --api=1.0.1
+cd ${TOOLS_DIR}
+make -C ${TOOLS_DIR}/${OPENSSL_DIRNAME}
+make -C ${TOOLS_DIR}/${OPENSSL_DIRNAME} install