xref: /OK3568_Linux_fs/device/rockchip/common/scripts/mk-loader.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1#!/bin/bash -e
2
3build_uefi()
4{
5	check_config RK_KERNEL_DTB || return 1
6
7	if [ "$RK_CHIP" != rk3588 -o ! -d uefi ]; then
8		echo "UEFI not supported!"
9		return 1
10	fi
11
12	if [ ! -f "$RK_KERNEL_DTB" ]; then
13		echo "$RK_KERNEL_DTB not exists!"
14		return 1
15	fi
16
17	UEFI_DIR=uefi/edk2-platforms/Platform/Rockchip/DeviceTree
18
19	run_command cp "$RK_KERNEL_DTB" $UEFI_DIR/$RK_CHIP.dtb
20	run_command cd uefi
21	run_command $UMAKE $RK_UBOOT_CFG
22}
23
24build_uboot()
25{
26	check_config RK_UBOOT_CFG || return 0
27
28	if [ -z "$DRY_RUN" ]; then
29		rm -f u-boot/*.bin u-boot/*.img
30	fi
31
32	UARGS_COMMON="$RK_UBOOT_OPTS \
33		${RK_UBOOT_INI:+../rkbin/RKBOOT/$RK_UBOOT_INI} \
34		${RK_UBOOT_TRUST_INI:+../rkbin/RKTRUST/$RK_UBOOT_TRUST_INI}"
35	UARGS="$UARGS_COMMON ${RK_UBOOT_SPL:+--spl-new} \
36		${RK_SECURITY_BURN_KEY:+--burn-key-hash}"
37
38	if [ "$RK_SECURITY" ]; then
39		for IMAGE in ${1:-boot.img ${RK_RECOVERY_CFG:+recovery.img}}; do
40			[ "$DRY_RUN" ] || \
41				cp "$RK_FIRMWARE_DIR/$IMAGE" u-boot/
42
43			UARGS="$UARGS --${IMAGE/./_} $SDK_DIR/u-boot/$IMAGE"
44		done
45	fi
46
47	run_command cd u-boot
48	run_command $UMAKE $RK_UBOOT_CFG $RK_UBOOT_CFG_FRAGMENTS $UARGS
49
50	if [ "$RK_UBOOT_SPL" ]; then
51		if [ "$DRY_RUN" ] || \
52			! grep -q "ROCKCHIP_FIT_IMAGE_PACK=y" .config; then
53			# Repack SPL for non-FIT u-boot
54			run_command $UMAKE $UARGS_COMMON --spl
55		fi
56	fi
57
58	if [ "$RK_UBOOT_RAW" ]; then
59		run_command $UMAKE $UARGS_COMMON --idblock
60	fi
61
62	run_command cd ..
63
64	if [ "$DRY_RUN" ]; then
65		return 0
66	fi
67
68	if [ "$RK_SECURITY" ];then
69		for IMAGE in u-boot/boot.img u-boot/recovery.img; do
70			[ ! -r $IMAGE ] || \
71				ln -rsf $IMAGE "$RK_SECURITY_FIRMWARE_DIR"
72		done
73	fi
74
75	LOADER="$(echo u-boot/*_loader_*.bin | head -1)"
76	ln -rsf "$LOADER" "$RK_FIRMWARE_DIR"/MiniLoaderAll.bin
77
78	ln -rsf u-boot/uboot.img "$RK_FIRMWARE_DIR"
79	[ ! -e u-boot/trust.img ] || \
80		ln -rsf u-boot/trust.img "$RK_FIRMWARE_DIR"
81}
82
83# Hooks
84
85usage_hook()
86{
87	echo -e "loader[:cmds]                    \tbuild loader (uboot)"
88	echo -e "uboot[:cmds]                     \tbuild u-boot"
89	echo -e "uefi[:cmds]                      \tbuild uefi"
90}
91
92clean_hook()
93{
94	make -C u-boot distclean
95}
96
97BUILD_CMDS="loader uboot uefi"
98build_hook()
99{
100	if [ "$RK_RTOS" ]; then
101		RK_UBOOT_TOOLCHAIN="$(get_toolchain "$RK_RTOS_ARCH" arm none)"
102	else
103		RK_UBOOT_TOOLCHAIN="$(get_toolchain "$RK_UBOOT_ARCH")"
104	fi
105
106	echo "Toolchain for loader (u-boot):"
107	echo "${RK_UBOOT_TOOLCHAIN:-gcc}"
108	echo
109
110	export UMAKE="./make.sh CROSS_COMPILE=$RK_UBOOT_TOOLCHAIN"
111
112	if [ "$DRY_RUN" ]; then
113		echo -e "\e[35mCommands of building $1:\e[0m"
114	else
115		echo "=========================================="
116		echo "          Start building $1"
117		echo "=========================================="
118	fi
119
120	TARGET="$1"
121	shift
122	[ "$1" != cmds ] || shift
123
124	case "$TARGET" in
125		uboot | loader) build_uboot $@ ;;
126		uefi) build_uefi $@ ;;
127		*) usage ;;
128	esac
129
130	if [ -z "$DRY_RUN" ]; then
131		finish_build build_$TARGET $@
132	fi
133}
134
135build_hook_dry()
136{
137	DRY_RUN=1 build_hook $@
138}
139
140source "${BUILD_HELPER:-$(dirname "$(realpath "$0")")/../build-hooks/build-helper}"
141
142build_hook ${@:-loader}
143