#!/bin/bash
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Generates a tar file containing required artifacts to build and test Kelvin without
# an internet connection.
# To use the artifacts, extract them to a known location, and use the --distdir and --repository_cache
# arguments for Bazel.
# An example command which will build and test is as follows:
# bazel test --distdir=kelvin_airgap_7d188ddd04e3ecd80527a41889e0c6175102af8b/bazel-distdir \
#            --repository_cache=kelvin_airgap_7d188ddd04e3ecd80527a41889e0c6175102af8b/bazel-cachedir \
#            --build_tag_filters="-renode,-verilator" --test_tag_filters="-renode,-verilator" //...
# Additionally, the bazel binary is included in the tarball, in case
# it is not available on your system.

set -euo pipefail

function clean {
    if [[ -d "${WORKDIR}" ]]; then
        rm -rf ${WORKDIR}
    fi
}

REPO_TOP="$(git rev-parse --show-toplevel)"
KELVIN_VERSION="$(git rev-parse HEAD)"
BAZEL_VERSION="$(cat ${REPO_TOP}/.bazelversion)"
WORKDIR=$(mktemp -d)
trap clean EXIT

mkdir ${WORKDIR}/bazel-distdir
cd ${WORKDIR}
curl --silent --location \
    https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/bazel-${BAZEL_VERSION}-linux-x86_64 \
    --output bazel
chmod +x bazel
git clone -b "${BAZEL_VERSION}" --depth 1 \
    https://github.com/bazelbuild/bazel bazel-repo
cd bazel-repo
../bazel build @additional_distfiles//:archives.tar
tar xvf bazel-bin/external/additional_distfiles/archives.tar \
    -C "../bazel-distdir" \
    --strip-components=2
cd ..
rm -rf bazel-repo

cd ${REPO_TOP}
mkdir ${WORKDIR}/bazel-cachedir
${WORKDIR}/bazel clean --expunge
${WORKDIR}/bazel fetch \
    --repository_cache=${WORKDIR}/bazel-cachedir \
    //... \
    @cmake-3.23.2-linux-x86_64//:all \
    @gnumake_src//:all \
    @io_bazel_rules_scala_scala_compiler//:all \
    @io_bazel_rules_scala_scala_library//:all \
    @io_bazel_rules_scala_scala_parser_combinators//:all \
    @io_bazel_rules_scala_scala_reflect//:all \
    @io_bazel_rules_scala_scala_xml//:all \
    @io_bazel_rules_scala_scalactic//:all \
    @io_bazel_rules_scala_scalatest//:all \
    @io_bazel_rules_scala_scalatest_compatible//:all \
    @io_bazel_rules_scala_scalatest_core//:all \
    @io_bazel_rules_scala_scalatest_featurespec//:all \
    @io_bazel_rules_scala_scalatest_flatspec//:all \
    @io_bazel_rules_scala_scalatest_freespec//:all \
    @io_bazel_rules_scala_scalatest_funspec//:all \
    @io_bazel_rules_scala_scalatest_funsuite//:all \
    @io_bazel_rules_scala_scalatest_matchers_core//:all \
    @io_bazel_rules_scala_scalatest_mustmatchers//:all \
    @io_bazel_rules_scala_scalatest_shouldmatchers//:all \
    @ninja_1.11.0_linux//:all \
    @python39//:all \
    @remote_java_tools_linux//:all \
    @remotejdk11_linux//:jdk \
    @rules_hdl//:all \
    @verilator//:all \
    @com_github_grpc_grpc//:all \
    @kelvin_pip_deps_cocotb//:all \
    @kelvin_pip_deps_find_libpython//:all \
    @kelvin_pip_deps_numpy//:all \
    @kelvin_pip_deps_pyelftools//:all \
    @kelvin_pip_deps_tqdm//:all \
    @kelvin_pip_deps_pytest//:all \
    @kelvin_pip_deps_pluggy//:all \
    @kelvin_pip_deps_iniconfig//:all \
    @kelvin_pip_deps_packaging//:all \
    @kelvin_pip_deps_exceptiongroup//:all \
    @kelvin_pip_deps_typing_extensions//:all

cat <<EOF >${WORKDIR}/bazel.sh
SCRIPT_DIR="\$(cd "\$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
\${SCRIPT_DIR}/bazel \$* \\
    --distdir=\${SCRIPT_DIR}/bazel-distdir \\
    --repository_cache=\${SCRIPT_DIR}/bazel-cachedir \\
    --test_tag_filters="-renode,-verilator" \\
    --build_tag_filters="-renode,-verilator"
EOF
chmod +x ${WORKDIR}/bazel.sh

tar --transform="s|/|/kelvin_airgap_${KELVIN_VERSION}/|" -cf "${REPO_TOP}/kelvin_airgap_${KELVIN_VERSION}.tar" -C ${WORKDIR}  .
echo "Tarball containing dependencies for building Kelvin offline are available at ${REPO_TOP}/kelvin_airgap_${KELVIN_VERSION}.tar"
