#!/bin/bash
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

set -e

# make_distribution.sh takes distribution artifacts in $BIN_DIR and packs them
# into a compressed TAR archive, which is deposited into $BIN_DIR. In
# particular, this script should be run after make_build_bin.sh.
#
# The actual artifacts exported are described by the $DIST_ARTIFACTS variable
# below.

. util/build_consts.sh

echo "\$OT_VERSION = $OT_VERSION" >&2

# $DIST_ARTIFACTS is a list of |find| globs to be copied out of
# $BIN_DIR and into the OpenTitan distribution archive.
#
# These globs are relative to $BIN_DIR.
readonly DIST_ARTIFACTS=(
  'sw/device/*.elf'
  'sw/device/*.bin'
  'sw/device/*.vmem'
  'hw/top_earlgrey/Vchip_earlgrey_verilator'
  'hw/top_earlgrey/lowrisc_systems_chip_earlgrey_*.bit.*'
  'hw/top_earlgrey/*.mmi'
)

DIST_DIR="$OBJ_DIR/$OT_VERSION"
mkdir -p "$DIST_DIR"

cp ci/README.snapshot "$DIST_DIR"
cp LICENSE "$DIST_DIR"

for pat in "${DIST_ARTIFACTS[@]}"; do
  echo "Searching for $pat." >&2
  found_file=false
  # Looping over find output is a problem if our file paths have glob
  # characters or spaces.  However, we do not have filenames like that in CI,
  # and the alternative formulations of this for loop are less intuitive.

  # shellcheck disable=SC2044
  for file in $(find "$BIN_DIR" -type f -path "$BIN_DIR/$pat"); do
    found_file=true
    relative_file="${file#"$BIN_DIR/"}"
    echo "Copying \$BIN_DIR/$relative_file." >&2

    destination="$DIST_DIR/$(dirname "$relative_file")"
    mkdir -p "$destination"
    mv "$file" "$destination"
  done
  if [[ "$found_file" == "false" ]]; then
    echo "Did not find any files matching $pat." >&2
    echo "If this is intentional, delete that pattern." >&2
    exit 1
  fi
done

cd "$(dirname "$DIST_DIR")"
tar -cJf "$BIN_DIR/$(basename "$DIST_DIR").tar.xz" \
  "$(basename "$DIST_DIR")"
