2025-05-10 21:49:39 +08:00

153 lines
4.1 KiB
Bash
Executable File

#!/bin/bash -e
NAME=$(basename $0)
NAME=${NAME%.sh}
# Print available options for this module
usage_hook()
{
echo -e "dummy \tbuild dummy"
echo -e "A \tbuild dummy A"
echo -e "B \tbuild dummy B"
echo -e "C \tbuild dummy C"
# Test:
# ./build.sh shell
# ./device/rockchip/common/build-hooks/example.sh -h
# Output:
# Usage: ./device/rockchip/common/build-hooks/example.sh [OPTIONS]
# dummy build dummy
# A build dummy A
# B build dummy B
# C build dummy C
# clean cleanup
# help usage
# Test:
# ./build.sh -h
# Output:
# Usage: build.sh [OPTIONS]
# Available options:
# dummy build dummy
# A build dummy A
# B build dummy B
# C build dummy C
}
# Cleanup hook for "./build.sh cleanall"
clean_hook()
{
echo "cleanup $NAME"
# Test:
# ./build.sh cleanall
# Output:
# ...
# cleanup example
}
# Build stages:
# init (preparing SDK configs, etc.)
# (inherit configs)
# pre-build (submodule configuring, etc.)
# build (building, etc.)
# post-build (firmware packing, etc.)
#
# <STAGE>_CMDS:
# call "<stage>_hook <command> [args]" when commands matched
# "default" command means unconditional match.
# args are parsed from command:arg1:arg2...
# Call init_hook() in init stage for "dummy" command and call it again
# unconditionally
INIT_CMDS="dummy default"
init_hook()
{
echo "init hook for $0 - $@"
finish_build init-$NAME $@
# Test:
# ./build.sh dummy
# Output:
# ...
# init hook for /XXX/device/rockchip/common/build-hooks/example.sh - dummy
# Running example.sh - init-example dummy succeeded.
# init hook for /XXX/device/rockchip/common/build-hooks/example.sh - default
# Running example.sh - init-example default succeeded.
}
# Call pre_build_hook() in pre-build stage unconditionally and call it again
# for "A" command
PRE_BUILD_CMDS="default A"
pre_build_hook()
{
echo "pre-build hook for $0 - $@"
finish_build pre-build-$NAME $@
# Test:
# ./build.sh A
# Output:
# ...
# pre-build hook for /XXX/device/rockchip/common/build-hooks/example.sh - default
# Running example.sh - pre-build-example default succeeded.
# pre-build hook for /XXX/device/rockchip/common/build-hooks/example.sh - A
# Running example.sh - pre-build-example A succeeded.
}
# Call build_hook() in build stage for "B" and "C" commands
BUILD_CMDS="B C"
build_hook()
{
echo "build hook for $0 - $@"
finish_build build-$NAME $@
# Test:
# ./build.sh C B
# Output:
# ...
# build hook for /XXX/device/rockchip/common/build-hooks/example.sh - C
# Running example.sh - build-example C succeeded.
# build hook for /XXX/device/rockchip/common/build-hooks/example.sh - B
# Running example.sh - build-example B succeeded.
}
# Call post_build_hook() in post-build stage for "A" "C" and "B" commands
POST_BUILD_CMDS="A C B"
post_build_hook()
{
echo "post-build hook for $0 - $@"
finish_build post-build-$NAME $@
# Test:
# ./build.sh A:arg1:arg2
# Output:
# ...
# post-build hook for /XXX/device/rockchip/common/build-hooks/example.sh - A arg1 arg2
# Running example.sh - post-build-example A arg1 arg2 succeeded.
}
# 1: Inherit initial checks
# Make sure that it's been executed inside of build.sh, or after
# "./build.sh shell" for developing.
# 2: Call build hooks when needed
source "${BUILD_HELPER:-$(dirname "$(realpath "$0")")/../build-hooks/build-helper}"
# Test:
# ./device/rockchip/common/build-hooks/example.sh
# Output:
# /XXX/device/rockchip/common/build-hooks/example.sh.in is not supposed to be executed directly
# Reaching here when executed directly(not from hook triggers)
echo "$0 is executed directly${@:+ with $@}."
# Do something
# Test:
# ./build.sh shell
# ./device/rockchip/common/build-hooks/example.sh
# Output:
# ...
# ./device/rockchip/common/build-hooks/example.sh is executed directly.