diff --git a/script/build_bmcov.sh b/script/build_bmcov.sh
new file mode 100755
index 0000000..3923ab8
--- /dev/null
+++ b/script/build_bmcov.sh
@@ -0,0 +1,151 @@
+#!/bin/bash
+#
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+set -e
+source "$CI_ROOT/utils.sh"
+
+prepare_json_configuration() {
+    set +e
+    elf_files="${1:-$LIST_OF_BINARIES}"
+    jenkins_sources="${2:-$JENKINS_SOURCES_WORKSPACE}"
+    elf_array=($elf_files)
+    elf=""
+    for index in "${!elf_array[@]}"
+    do
+        if [ "${DEBUG_ELFS}" = "True" ]; then
+            cp "${ELF_FOLDER}/${elf_array[$index]}.elf" ${OUTDIR}/.
+        fi
+        read -r -d '' elf << EOM
+${elf}
+                {
+                    "name": "${ELF_FOLDER}/${elf_array[$index]}.elf",
+                    "traces": [
+                                "${TRACE_FOLDER}/${trace_file_prefix:-covtrace}-*.log"
+                              ]
+                }
+EOM
+    if [ $index -lt $((${#elf_array[@]} - 1)) ];then
+        elf="${elf},"
+    fi
+    done
+    if [ "$REPO" = "SCP" ]; then
+        read -r -d '' sources << EOM
+                [
+                    {
+                    "type": "git",
+                    "URL":  "$CC_SCP_URL",
+                    "COMMIT": "$CC_SCP_COMMIT",
+                    "REFSPEC": "$CC_SCP_REFSPEC",
+                    "LOCATION": "scp"
+                    },
+                    {
+                    "type": "git",
+                    "URL":  "$CC_CMSIS_URL",
+                    "COMMIT": "$CC_CMSIS_COMMIT",
+                    "REFSPEC": "$CC_CMSIS_REFSPEC",
+                    "LOCATION": "scp/cmsis"
+                    }
+                ]
+EOM
+    elif [ "$REPO" = "TRUSTED_FIRMWARE" ]; then
+        read -r -d '' sources << EOM
+                [
+                    {
+                    "type": "git",
+                    "URL":  "$CC_TRUSTED_FIRMWARE_URL",
+                    "COMMIT": "$CC_TRUSTED_FIRMWARE_COMMIT",
+                    "REFSPEC": "$CC_TRUSTED_FIRMWARE_REFSPEC",
+                    "LOCATION": "trusted_firmware"
+                    },
+                    {
+                    "type": "http",
+                    "URL":  "$mbedtls_archive",
+                    "COMPRESSION": "xz",
+                    "LOCATION": "mbedtls"
+                    }
+                ]
+EOM
+    else
+        sources=""
+    fi
+metadata="\"BUILD_CONFIG\": \"${BUILD_CONFIG}\", \"RUN_CONFIG\": \"${RUN_CONFIG}\""
+cat <<EOF > "${CONFIG_JSON}"
+{
+    "configuration":
+        {
+        "remove_workspace": true,
+        "include_assembly": true
+        },
+    "parameters":
+        {
+        "sources": $sources,
+        "workspace": "${jenkins_sources}",
+        "output_file": "${OUTPUT_JSON}",
+        "metadata": {$metadata}
+        },
+    "elfs": [
+            ${elf}
+        ]
+}
+EOF
+set -e
+}
+
+prepare_html_pages() {
+    pushd ${OUTDIR}
+    cp ${BMCOV_REPORT_FOLDER}/reporter_cc.py ${OUTDIR}/.
+    if [ "${DEBUG_ELFS}" = "True" ]; then
+        cp "${TRACE_FOLDER}/${trace_file_prefix}"* ${OUTDIR}/.
+    fi
+    # to be run on the user locally
+    cat <<EOF > "server.sh"
+#!/bin/bash
+
+echo "Running server..."
+type -a firefox || (echo "Please install Firefox..." && exit 1)
+type -a python3 || (echo "Please install python3..." && exit 1)
+
+python - << EOT
+import os
+import reporter_cc
+
+output_file = os.getenv('OUTPUT_JSON', 'output_file.json')
+source_folder = os.getenv('CSOURCE_FOLDER', 'source')
+r = reporter_cc.ReportCC(output_file)
+r.clone_repo(source_folder)
+EOT
+(sleep 2; firefox --new-window http://localhost:8081) &
+python3 -m http.server 8081
+EOF
+    chmod 777 server.sh
+    zip -r server_side.zip *
+    popd
+}
+
+PVLIB_HOME=${PVLIB_HOME:-$warehouse/SysGen/PVModelLib/$model_version/$model_build/external}
+echo "Building Bmcov for code coverage..."
+source "$CI_ROOT/script/test_definitions.sh"
+export BMCOV_FOLDER="${BMCOV_FOLDER:-$workspace/test-definitions/scripts/tools/code_coverage/fastmodel_baremetal/bmcov}"
+pushd "${workspace}"
+git clone "${TEST_DEFINITIONS_REPO}" -b "${TEST_DEFINITIONS_REFSPEC}"
+popd
+pushd "${BMCOV_FOLDER}"
+export MODEL_PLUGIN_FOLDER="${BMCOV_FOLDER}"/model-plugin
+if [ -n "$(find "$warehouse" -maxdepth 0 -type d -empty 2>/dev/null)" ]; then
+    echo "$warehouse not mounted. Falling back to pre-built plugins.."
+    folder="http://files.oss.arm.com/downloads/tf-a/coverage-plugin"
+    wget -q ${folder}/{CoverageTrace.so,CoverageTrace.o,PluginUtils.o} \
+    -P "${MODEL_PLUGIN_FOLDER}"
+ else
+    make -C model-plugin PVLIB_HOME="$PVLIB_HOME"
+fi
+
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MODEL_PLUGIN_FOLDER
+export trace_file_prefix=covtrace
+export BMCOV_REPORT_FOLDER="${BMCOV_FOLDER}"/report
+export coverage_trace_plugin="${MODEL_PLUGIN_FOLDER}"/CoverageTrace.so
+popd
