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

# Include variables and functions to be used by these scripts
set -x
source "$CI_ROOT/utils.sh"
################################################################################
# CI VARIABLES:
# workspace, warehouse, artefacts
# GLOBAL VARIABLES:
# OUTDIR, PROJECT, FALLBACK_PLUGIN_URL, FALLBACK_FILES, PLUGIN_BINARY
################################################################################
# Defining constants
GERRIT_URL=${GERRIT_URL:-https://gerrit.oss.arm.com}
QA_REPO_USER=jenkins_auto
QA_REPO_INTERNAL=${QA_REPO_INTERNAL:-https://${QA_REPO_USER}:${QA_REPO_TOKEN}@git.gitlab.arm.com/tooling/qa-tools-internal.git}
QA_REPO_PUBLIC=${QA_REPO_PUBLIC:-https://git.gitlab.arm.com/tooling/qa-tools.git}
QA_REPO_NAME=qa-tools
# Internal globals
CODE_COVERAGE_FOLDER="${OUTDIR:-$workspace}/qa-code-coverage"
DEBUG_FOLDER=${artefacts}/debug
RELEASE_FOLDER=${artefacts}/release
TRACE_FILE_PREFIX=covtrace
CONFIG_JSON=${CODE_COVERAGE_FOLDER}/configuration_file.json
INTERMEDIATE_LAYER_FILE=${CODE_COVERAGE_FOLDER}/intermediate_layer.json
INFO_FILE=${CODE_COVERAGE_FOLDER}/coverage.info
REPORT_FOLDER=${CODE_COVERAGE_FOLDER}/lcov

QA_REPO=${QA_TOOLS_REPO:-$QA_REPO_PUBLIC}
QA_REFSPEC=${QA_TOOLS_BRANCH:-master}


################################################################################
# Deploy qa-tools into the current directory
# GLOBALS:
#   QA_REPO, QA_REPO_NAME, QA_REFSPEC
# ARGUMENTS:
#   None
# OUTPUTS:
#   Clones the qa-tools repo from the global variables with the given
#   commit hash.
# RETURN:
#   0 if succeeds, non-zero on error.
################################################################################
deploy_qa_tools() {
  git clone "${QA_REPO}" ${QA_REPO_NAME}
  cd ${QA_REPO_NAME} && git checkout "${QA_REFSPEC}" && cd ..
}


################################################################################
# Builds or downloads the QA Code Coverage Tool
# GLOBALS:
#   CODE_COVERAGE_FOLDER, QA_REPO, QA_REPO_NAME, QA_REFSPEC, FALLBACK_PLUGIN_URL
# ARGUMENTS:
#   None
# OUTPUTS:
#   Creates coverage folder and builds/downloads there the plugin binaries.
#   It exports the binary plugin location to coverage_trace_plugin.
# RETURN:
#   0 if succeeds, non-zero on error.
################################################################################
build_tool() {
  echo "Building QA Code coverage tool..."
  PLUGIN_BINARY="${FALLBACK_FILES%%,*}" # The first in the list of the binary files
  local PVLIB_HOME="warehouse/SysGen/PVModelLib/$model_version/$model_build/external"
  local LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_COVERAGE_FOLDER
  mkdir -p ${CODE_COVERAGE_FOLDER}
  pushd "${CODE_COVERAGE_FOLDER}"
  deploy_qa_tools
  local cc_source=$(find . -type f -name 'coverage_trace.cc')
  local fallback="wget -q ${FALLBACK_PLUGIN_URL}/{$FALLBACK_FILES}"
  echo "Warehouse=${warehouse}"
  eval "$fallback"
  ls -al
  export coverage_trace_plugin="${CODE_COVERAGE_FOLDER}/${PLUGIN_BINARY}"
  popd
}

  ################################################################################
  # Creates configuration file for intermediate layer generation
  # GLOBALS:
  #   PROJECT, CONFIG_JSON, INTERMEDIATE_LAYER_FILE, CODE_COVERAGE_FOLDER
  # ARGUMENTS:
  #   $1 Folder where are the elf/axf files.
  #   $2 List of elf/axf file names.
  #   $3 Path for trace files.
  #   $4 Root folder name where all the repos are cloned.
  # OUTPUTS:
  #   Creates coverage folder and builds/downloads there the plugin binaries.
  # RETURN:
  #   0 if succeeds, non-zero on error.
  ################################################################################
create_config_json() {
  set +e
  if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]
  then
    cat << END
Missing argument at '${FUNCNAME[0]}'.
USAGE:
  create_config_json ' Glob binaries' 'Glob trace files' 'Repos root folder name'
  Example:
    create_config_json 'bl1.elf bl2.elf' 'tf'
END
    exit 1
  fi
  local ELF_FOLDER=$1
  local dwarf_array=($2)
  local TRACE_FOLDER=$3
  local root_repos_foolder="${4:-$workspace}"
  local scm_sources=""

  # Obtaining binaries from array
  bin_section=""
  for index in "${!dwarf_array[@]}"
  do
      local elf_file="${ELF_FOLDER}/${dwarf_array[$index]}"
      cp "$elf_file" ${CODE_COVERAGE_FOLDER}/.
      read -r -d '' bin_section << EOM
${bin_section}
              {
                  "name": "$elf_file",
                  "traces": [
                              "${TRACE_FOLDER}/${TRACE_FILE_PREFIX:-covtrace}-*.log"
                            ]
              }
EOM
  if [ $index -lt $((${#dwarf_array[@]} - 1)) ];then
      bin_section="${bin_section},"
  fi
  done

  if [ "$PROJECT" = "SCP" ]; then
      read -r -d '' scm_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/contrib/cmsis/git"
                  }
              ]
EOM
elif [ "$PROJECT" = "TF-A" ]; then
      read -r -d '' scm_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",
                  "EXTRA_PARAMS": "--strip-components=1",
                  "LOCATION": "mbedtls"
                  }
              ]
EOM
elif [ "$PROJECT" = "HAFNIUM" ]; then
      read -r -d '' scm_sources << EOM
              [
                  {
                  "type": "git",
                  "URL":  "$CC_TRUSTED_FIRMWARE_URL",
                  "COMMIT": "$CC_TRUSTED_FIRMWARE_COMMIT",
                  "REFSPEC": "$CC_TRUSTED_FIRMWARE_REFSPEC",
                  "LOCATION": "trusted_firmware"
                  },
                  {
                  "type": "git",
                  "URL":  "$CC_SPM_URL",
                  "COMMIT": "$CC_SPM_COMMIT",
                  "REFSPEC": "$CC_SPM_REFSPEC",
                  "LOCATION": "spm"
                  }
              ]
EOM
  else
      echo "SCM sources not provided for project '${PROJECT}'"
      exit 1
  fi
local metadata="\"BUILD_CONFIG\": \"${BUILD_CONFIG}\", \"RUN_CONFIG\": \"${RUN_CONFIG}\""
cat <<EOF > "${CONFIG_JSON}"
{
  "configuration":
      {
      "remove_workspace": true,
      "include_assembly": true
      },
  "parameters":
      {
      "objdump": "${OBJDUMP}",
      "readelf": "${READELF}",
      "sources": $scm_sources,
      "workspace": "${root_repos_foolder}",
      "output_file": "${INTERMEDIATE_LAYER_FILE}",
      "metadata": {$metadata}
      },
  "elfs": [
          ${bin_section}
      ]
}
EOF

}

################################################################################
# Creates intermediate layer json file with trace coverage data.
#
# Creates a configuration JSON file to be the input for the intermediate
# layer file creation.
# GLOBALS:
#   TRACE_FILE_PREFIX, CODE_COVERAGE_FOLDER
# ARGUMENTS:
#   $1 Location of trace files.
#   $2 Location of elf/axf files.
#   $3 List of binaries to be checked the traces.
#   $4 Root folder name where all the repos are cloned.
# OUTPUTS:
#   A configuration JSON file.
#   An intermediate layer JSON  file.
# RETURN:
#   0 if succeeds, non-zero on error.
################################################################################
create_intermediate_layer() {
  local TRACE_FOLDER="$1"
  local ELF_FOLDER="$2"
  local LIST_OF_BINARIES="$3"
  local root_repos_foolder="$4"

  # Copying trace files into the qa-tools executables folder
  if [ $(ls -1 ${TRACE_FOLDER}/${TRACE_FILE_PREFIX}-* 2>/dev/null | wc -l) != 0 ]; then
    cp ${TRACE_FOLDER}/${TRACE_FILE_PREFIX}-* ${CODE_COVERAGE_FOLDER}/.
  else
    echo "Trace files not present, aborting reports..."
    ls -al ${TRACE_FOLDER}
    exit -1
  fi
  create_config_json "${ELF_FOLDER}" "${LIST_OF_BINARIES}" "${TRACE_FOLDER}" "$root_repos_foolder"
  python3 ${CODE_COVERAGE_FOLDER}/qa-tools/coverage-tool/coverage-reporting/intermediate_layer.py \
    --config-json ${CONFIG_JSON}

}


################################################################################
# Creates LCOV coverage report.
# GLOBALS:
#   CODE_COVERAGE_FOLDER, workspace, INTERMEDIATE_LAYER_FILE, INFO_FILE,
#   REPORT_FOLDER
# ARGUMENTS:
#   None
# OUTPUTS:
#   A coverage info file.
#   LCOV HTML coverage report.
# RETURN:
#   0 if succeeds, non-zero on error.
################################################################################
create_coverage_report() {
	python3 ${CODE_COVERAGE_FOLDER}/qa-tools/coverage-tool/coverage-reporting/generate_info_file.py \
	--workspace ${workspace} --json ${INTERMEDIATE_LAYER_FILE} --info ${INFO_FILE}
	genhtml --branch-coverage ${INFO_FILE} --output-directory ${REPORT_FOLDER}
}
