| #!/bin/bash |
| # Copyright 2021 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| VERSION="1.0.0" |
| SCRIPT="$(basename -- "$0")" |
| set -e |
| |
| # Disable a warning about DC_SRC_DIR not being defined; we look for it in |
| # the environment, and if it isn't found, then we'll exit. |
| # shellcheck disable=SC2154 |
| if [[ -z "${DC_SRC_DIR}" ]]; then |
| echo "DC_SRC_DIR must be set in the environment" |
| exit 1 |
| fi |
| |
| if [[ "$#" -lt 3 ]]; then |
| echo "Usage: ${SCRIPT} base_name reference_name variant_name [bug_number]" |
| echo "e.g., ${SCRIPT} brya brya0 primus" |
| echo "e.g., ${SCRIPT} brya brask brask" |
| echo "* Copies the template files for the baseboard to the new variant" |
| exit 1 |
| fi |
| |
| to_lower() { |
| # Convert a string to lower case using ASCII translation rules. |
| LC_ALL=C LOWER="${1,,}" |
| echo "${LOWER}" |
| } |
| |
| to_upper() { |
| # Convert a string to upper case using ASCII translation rules. |
| LC_ALL=C UPPER="${1^^}" |
| echo "${UPPER}" |
| } |
| |
| # shellcheck source=check_standalone.sh |
| # shellcheck disable=SC1091 |
| source "${BASH_SOURCE%/*}/check_standalone.sh" |
| check_standalone |
| |
| # shellcheck source=check_pending_changes.sh |
| # shellcheck disable=SC1091 |
| source "${BASH_SOURCE%/*}/check_pending_changes.sh" |
| |
| # This is the name of the base board |
| BASE="$(to_lower "$1")" |
| # This is the name of the reference board that we're using to make the variant. |
| REFERENCE="$(to_lower "$2")" |
| # This is the name of the variant that is being cloned. |
| VARIANT="$(to_lower "$3")" |
| |
| # Assign BUG= text, or "None" if that parameter wasn't specified. |
| BUG="${4:-None}" |
| |
| # Assign the value for BRANCH= in the commit message, or use None if unspecified |
| COMMIT_MSG_BRANCH="${NEW_VARIANT_BRANCH:-None}" |
| |
| # The template files are in ${DC_SRC_DIR}/util/template |
| DEFCONFIG="${DC_SRC_DIR}/util/template/board/${BASE}/defconfig" |
| VARIANTC="${DC_SRC_DIR}/util/template/src/board/${BASE}/variant.c" |
| |
| pushd "${DC_SRC_DIR}" |
| |
| # Make sure the variant doesn't already exist. |
| if [[ -e "${DC_SRC_DIR}/src/board/${VARIANT}/board.c" ]]; then |
| echo "${VARIANT}/board.c already exists." |
| echo "Have you already created this variant?" |
| exit 1 |
| fi |
| |
| # If there are pending changes, exit the script (unless overridden) |
| check_pending_changes "$(pwd)" |
| |
| # Start a branch. Use YMD timestamp to avoid collisions. |
| DATE="$(date +%Y%m%d)" |
| BRANCH="depthcharge_${VARIANT}_${DATE}" |
| repo start "${BRANCH}" . --head #"${NEW_VARIANT_WIP:+--head}" |
| # ${parameter:+word}" substitutes "word" if $parameter is set to a non-null |
| # value, or substitutes null if $parameter is null or unset. |
| |
| abandon() { |
| # If there is an error after the `repo start` and before we start adding |
| # changes to git, then delete the new variant directory and `repo abandon` |
| # the new branch. |
| rm -rRf "${DC_SRC_DIR}/src/board/${BASE}/${VARIANT}" |
| rm -Rf "${DC_SRC_DIR}/board/${VARIANT}/defconfig" |
| repo abandon "${BRANCH}" . |
| } |
| trap 'abandon' ERR |
| |
| # Copy template defconfig |
| pushd "${DC_SRC_DIR}" |
| mkdir -p "board/${VARIANT}/" |
| cp "${DEFCONFIG}" "board/${VARIANT}/defconfig" |
| |
| # Fixup CONFIG_VARIANT_NAME |
| sed -i -e "s/CONFIG_VARIANT_NAME.*/CONFIG_VARIANT_NAME=\"${VARIANT}\"/" \ |
| "board/${VARIANT}/defconfig" |
| |
| # Copy variant.c |
| cp "${VARIANTC}" "src/board/${BASE}/${VARIANT}.c" |
| |
| git add "src/board/${BASE}/${VARIANT}.c" |
| git add "board/${VARIANT}/defconfig" |
| |
| restore_git() { |
| # After adding changes to git, now to recover from an error we need to |
| # remove the variant from the git commit |
| pushd "${DC_SRC_DIR}/" |
| git restore --staged . |
| git restore . |
| popd |
| # And call the previous trap function. |
| abandon |
| } |
| trap 'restore_git' ERR |
| |
| # Now commit the files. Use fmt to word-wrap the main commit message. |
| MSG=$(echo "Create a depthcharge target ${VARIANT} by copying the template |
| files from the reference ${REFERENCE} to the appropriate |
| places in the source tree." | fmt -w 70) |
| |
| git commit -sm "Create ${VARIANT} variant |
| |
| ${MSG} |
| |
| (Auto-Generated by ${SCRIPT} version ${VERSION}). |
| |
| BUG=${BUG} |
| BRANCH=${COMMIT_MSG_BRANCH} |
| TEST=FW_NAME=${VARIANT} emerge-${BASE} depthcharge |
| " |
| # TODO(b/149702214): verify that it builds correctly |
| |
| popd |