#!/bin/bash if [ -z "$BASH_SOURCE" ]; then echo "Not in bash, switching to it..." case "${@:-shell}" in shell) ./build.sh shell ;; *) ./build.sh $@ bash ;; esac fi usage_clean() { usage_oneline "cleanall" "cleanup all" for s in $(grep -rwl clean_hook "$RK_CHIP_SCRIPTS_DIR" \ "$RK_SCRIPTS_DIR" 2>/dev/null | grep "/mk-" | \ sed "s/^.*mk-\(.*\).sh/\1/" | grep -v "^all$"); do usage_oneline "clean-$s" "cleanup $s" done } usage() { echo "Usage: $(basename $BASH_SOURCE) [OPTIONS]" echo "Available options:" run_build_hooks usage # Global options usage_clean usage_oneline "post-rootfs " "trigger post-rootfs hook scripts" usage_oneline "help" "display this information" echo "" echo "Default option is '$RK_DEFAULT_TARGET'." rm -f "$INITIAL_ENV" exit 0 } # Export global functions set -a rk_log() { LOG_COLOR="$1" shift if [ "$1" = "-n" ]; then shift LOG_FLAG="-ne" else LOG_FLAG="-e" fi echo $LOG_FLAG "\e[${LOG_COLOR}m$@\e[0m" } message() { rk_log 36 "$@" # light blue } notice() { rk_log 35 "$@" # purple } warning() { rk_log 34 "$@" # dark blue } error() { rk_log 91 "$@" # light red } fatal() { rk_log 31 "$@" # dark red } usage_oneline() { printf "%-40s%s\n" "$1" "${*:2}" } usage_makefile_oneline() { printf " %-22s - %s\n" "$(echo "$1" | grep -o "^[^[^:^ ]*")" "${*:2}" } finish_build() { notice "Running $(basename "${BASH_SOURCE[1]}") - ${@:-${FUNCNAME[1]}} succeeded." cd "$RK_SDK_DIR" } load_config() { [ -r "$RK_CONFIG" ] || return 0 for var in $@; do export "$(grep "^$var=" "$RK_CONFIG" | tr -d '"' || true)" \ &>/dev/null || true done } check_config() { unset missing for var in $@; do eval [ -z \"\$$var\" ] || continue missing="$missing $var" done [ "$missing" ] || return 0 notice "Skipping $(basename "${BASH_SOURCE[1]}") - ${FUNCNAME[1]} for missing configs: $missing." return 1 } kernel_version_raw() { [ -d kernel ] || return 0 VERSION_KEYS="VERSION PATCHLEVEL" VERSION="" for k in $VERSION_KEYS; do v=$(grep "^$k = " kernel/Makefile | cut -d' ' -f3) VERSION=${VERSION:+${VERSION}.}$v done echo $VERSION } kernel_version() { [ -d kernel ] || return 0 KERNEL_DIR="$(basename "$(realpath kernel)")" case "$KERNEL_DIR" in kernel-*) echo ${KERNEL_DIR#kernel-} return 0 ;; esac kernel_version_raw } start_log() { LOG_FILE="$RK_LOG_DIR/${2:-$1_$(date +%F_%H-%M-%S)}.log" ln -rsf "$LOG_FILE" "$RK_LOG_DIR/$1.log" echo "# $(date +"%F %T")" >> "$LOG_FILE" echo "$LOG_FILE" } get_toolchain() { MODULE="$1" TC_ARCH="${2/arm64/aarch64}" TC_VENDOR="${3-none}" TC_OS="${4:-linux}" MACHINE=$(uname -m) if [ "$MACHINE" != x86_64 ]; then notice "Using Non-x86 toolchain for $MODULE!" >&2 if [ "$TC_ARCH" = aarch64 -a "$MACHINE" != aarch64 ]; then echo aarch64-linux-gnu- elif [ "$TC_ARCH" = arm -a "$MACHINE" != armv7l ]; then echo arm-linux-gnueabihf- fi return 0 fi # RV1126 uses custom toolchain if [ "$RK_CHIP_FAMILY" = "rv1126_rv1109" ]; then TC_VENDOR=rockchip830 fi TC_DIR="$RK_SDK_DIR/prebuilts/gcc/linux-x86/$TC_ARCH" if [ "$TC_VENDOR" ]; then TC_PATTERN="$TC_ARCH-$TC_VENDOR-$TC_OS-[^-]*-gcc" else TC_PATTERN="$TC_ARCH-$TC_OS-[^-]*-gcc" fi GCC="$(find "$TC_DIR" -name "*gcc" | grep -m 1 "/$TC_PATTERN$" || true)" if [ ! -x "$GCC" ]; then { error "No prebuilt GCC toolchain for $MODULE!" error "Arch: $TC_ARCH" error "Vendor: $TC_VENDOR" error "OS: $TC_OS" } >&2 exit 1 fi echo ${GCC%gcc} } ensure_tools() { for t in "$@"; do if [ "$RK_ROOTFS_PREFER_PREBUILT_TOOLS" ] || \ [ "$RK_ROOTFS_PREBUILT_TOOLS" ] || \ [ ! -e "$t" ]; then install -v -D -m 0755 "$RK_TOOLS_DIR/armhf/${t##*/}" "$t" continue fi if [ ! -e "$t" ]; then warning "Unable to install $t!" fi done } # For developing shell only rroot() { cd "$RK_SDK_DIR" } rout() { cd "$RK_OUTDIR" } rcommon() { cd "$RK_COMMON_DIR" } rscript() { cd "$RK_SCRIPTS_DIR" } rchip() { cd "$(realpath "$RK_CHIP_DIR")" } set +a # End of global functions err_handler() { ret=${1:-$?} if [ "$ret" -eq 0 ]; then return 0 fi fatal "ERROR: Running $BASH_SOURCE - ${2:-${FUNCNAME[1]}} failed!" fatal "ERROR: exit code $ret from line ${BASH_LINENO[0]}:" fatal " ${3:-$BASH_COMMAND}" fatal "ERROR: call stack:" for i in $(seq 1 $((${#FUNCNAME[@]} - 1))); do SOURCE="${BASH_SOURCE[$i]}" LINE=${BASH_LINENO[$(( $i - 1 ))]} fatal " $(basename "$SOURCE"): ${FUNCNAME[$i]}($LINE)" done exit $ret } # option_check ""