xref: /OK3568_Linux_fs/device/rockchip/common/build-hooks/example.sh.in (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash -e
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunNAME=$(basename $0)
4*4882a593SmuzhiyunNAME=${NAME%.sh}
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun# Print available options for this module
7*4882a593Smuzhiyunusage_hook()
8*4882a593Smuzhiyun{
9*4882a593Smuzhiyun	echo -e "dummy                             \tbuild dummy"
10*4882a593Smuzhiyun	echo -e "A                                 \tbuild dummy A"
11*4882a593Smuzhiyun	echo -e "B                                 \tbuild dummy B"
12*4882a593Smuzhiyun	echo -e "C                                 \tbuild dummy C"
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun# Test:
15*4882a593Smuzhiyun# ./build.sh shell
16*4882a593Smuzhiyun# ./device/rockchip/common/build-hooks/example.sh -h
17*4882a593Smuzhiyun# Output:
18*4882a593Smuzhiyun# Usage: ./device/rockchip/common/build-hooks/example.sh [OPTIONS]
19*4882a593Smuzhiyun# dummy                                   build dummy
20*4882a593Smuzhiyun# A                                       build dummy A
21*4882a593Smuzhiyun# B                                       build dummy B
22*4882a593Smuzhiyun# C                                       build dummy C
23*4882a593Smuzhiyun# clean                                   cleanup
24*4882a593Smuzhiyun# help                                    usage
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun# Test:
28*4882a593Smuzhiyun# ./build.sh -h
29*4882a593Smuzhiyun# Output:
30*4882a593Smuzhiyun# Usage: build.sh [OPTIONS]
31*4882a593Smuzhiyun# Available options:
32*4882a593Smuzhiyun# dummy                                   build dummy
33*4882a593Smuzhiyun# A                                       build dummy A
34*4882a593Smuzhiyun# B                                       build dummy B
35*4882a593Smuzhiyun# C                                       build dummy C
36*4882a593Smuzhiyun}
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun# Cleanup hook for "./build.sh cleanall"
39*4882a593Smuzhiyunclean_hook()
40*4882a593Smuzhiyun{
41*4882a593Smuzhiyun	echo "cleanup $NAME"
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun# Test:
44*4882a593Smuzhiyun# ./build.sh cleanall
45*4882a593Smuzhiyun# Output:
46*4882a593Smuzhiyun# ...
47*4882a593Smuzhiyun# cleanup example
48*4882a593Smuzhiyun}
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun# Build stages:
51*4882a593Smuzhiyun#   init (preparing SDK configs, etc.)
52*4882a593Smuzhiyun#   (inherit configs)
53*4882a593Smuzhiyun#   pre-build (submodule configuring, etc.)
54*4882a593Smuzhiyun#   build (building, etc.)
55*4882a593Smuzhiyun#   post-build (firmware packing, etc.)
56*4882a593Smuzhiyun#
57*4882a593Smuzhiyun# <STAGE>_CMDS:
58*4882a593Smuzhiyun# call "<stage>_hook <command> [args]" when commands matched
59*4882a593Smuzhiyun# "default" command means unconditional match.
60*4882a593Smuzhiyun# args are parsed from command:arg1:arg2...
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun# Call init_hook() in init stage for "dummy" command and call it again
63*4882a593Smuzhiyun# unconditionally
64*4882a593SmuzhiyunINIT_CMDS="dummy default"
65*4882a593Smuzhiyuninit_hook()
66*4882a593Smuzhiyun{
67*4882a593Smuzhiyun	echo "init hook for $0 - $@"
68*4882a593Smuzhiyun	finish_build init-$NAME $@
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun# Test:
71*4882a593Smuzhiyun# ./build.sh dummy
72*4882a593Smuzhiyun# Output:
73*4882a593Smuzhiyun# ...
74*4882a593Smuzhiyun# init hook for /XXX/device/rockchip/common/build-hooks/example.sh - dummy
75*4882a593Smuzhiyun# Running example.sh - init-example dummy succeeded.
76*4882a593Smuzhiyun# init hook for /XXX/device/rockchip/common/build-hooks/example.sh - default
77*4882a593Smuzhiyun# Running example.sh - init-example default succeeded.
78*4882a593Smuzhiyun}
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun# Call pre_build_hook() in pre-build stage unconditionally and call it again
81*4882a593Smuzhiyun# for "A" command
82*4882a593SmuzhiyunPRE_BUILD_CMDS="default A"
83*4882a593Smuzhiyunpre_build_hook()
84*4882a593Smuzhiyun{
85*4882a593Smuzhiyun	echo "pre-build hook for $0 - $@"
86*4882a593Smuzhiyun	finish_build pre-build-$NAME $@
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun# Test:
89*4882a593Smuzhiyun# ./build.sh A
90*4882a593Smuzhiyun# Output:
91*4882a593Smuzhiyun# ...
92*4882a593Smuzhiyun# pre-build hook for /XXX/device/rockchip/common/build-hooks/example.sh - default
93*4882a593Smuzhiyun# Running example.sh - pre-build-example default succeeded.
94*4882a593Smuzhiyun# pre-build hook for /XXX/device/rockchip/common/build-hooks/example.sh - A
95*4882a593Smuzhiyun# Running example.sh - pre-build-example A succeeded.
96*4882a593Smuzhiyun}
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun# Call build_hook() in build stage for "B" and "C" commands
99*4882a593SmuzhiyunBUILD_CMDS="B C"
100*4882a593Smuzhiyunbuild_hook()
101*4882a593Smuzhiyun{
102*4882a593Smuzhiyun	echo "build hook for $0 - $@"
103*4882a593Smuzhiyun	finish_build build-$NAME $@
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun# Test:
106*4882a593Smuzhiyun# ./build.sh C B
107*4882a593Smuzhiyun# Output:
108*4882a593Smuzhiyun# ...
109*4882a593Smuzhiyun# build hook for /XXX/device/rockchip/common/build-hooks/example.sh - C
110*4882a593Smuzhiyun# Running example.sh - build-example C succeeded.
111*4882a593Smuzhiyun# build hook for /XXX/device/rockchip/common/build-hooks/example.sh - B
112*4882a593Smuzhiyun# Running example.sh - build-example B succeeded.
113*4882a593Smuzhiyun}
114*4882a593Smuzhiyun
115*4882a593Smuzhiyun# Call post_build_hook() in post-build stage for "A" "C" and "B" commands
116*4882a593SmuzhiyunPOST_BUILD_CMDS="A C B"
117*4882a593Smuzhiyunpost_build_hook()
118*4882a593Smuzhiyun{
119*4882a593Smuzhiyun	echo "post-build hook for $0 - $@"
120*4882a593Smuzhiyun	finish_build post-build-$NAME $@
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun# Test:
123*4882a593Smuzhiyun# ./build.sh A:arg1:arg2
124*4882a593Smuzhiyun# Output:
125*4882a593Smuzhiyun# ...
126*4882a593Smuzhiyun# post-build hook for /XXX/device/rockchip/common/build-hooks/example.sh - A arg1 arg2
127*4882a593Smuzhiyun# Running example.sh - post-build-example A arg1 arg2 succeeded.
128*4882a593Smuzhiyun}
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun# 1: Inherit initial checks
131*4882a593Smuzhiyun#    Make sure that it's been executed inside of build.sh, or after
132*4882a593Smuzhiyun#    "./build.sh shell" for developing.
133*4882a593Smuzhiyun# 2: Call build hooks when needed
134*4882a593Smuzhiyunsource "${BUILD_HELPER:-$(dirname "$(realpath "$0")")/../build-hooks/build-helper}"
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun# Test:
137*4882a593Smuzhiyun# ./device/rockchip/common/build-hooks/example.sh
138*4882a593Smuzhiyun# Output:
139*4882a593Smuzhiyun# /XXX/device/rockchip/common/build-hooks/example.sh.in is not supposed to be executed directly
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun# Reaching here when executed directly(not from hook triggers)
142*4882a593Smuzhiyun
143*4882a593Smuzhiyunecho "$0 is executed directly${@:+ with $@}."
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun# Do something
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun# Test:
148*4882a593Smuzhiyun# ./build.sh shell
149*4882a593Smuzhiyun# ./device/rockchip/common/build-hooks/example.sh
150*4882a593Smuzhiyun# Output:
151*4882a593Smuzhiyun# ...
152*4882a593Smuzhiyun# ./device/rockchip/common/build-hooks/example.sh is executed directly.
153