SoC common: scripts: Add prepare_toolchain.sh [1/1]

PD#SWPL-67525

Problem:
Add prepare_toolchain.sh.

Solution:
move toolchain preparation from Makefile to scripts/prepare_toolchain.sh.

Verify:
ad401_a113l

Change-Id: Ib341f6d809d0ce165065710c43d0b9d9696c6457
Signed-off-by: Keguang Zhang <keguang.zhang@gmail.com>
diff --git a/prepare_toolchain.sh b/prepare_toolchain.sh
new file mode 100755
index 0000000..e0e7129
--- /dev/null
+++ b/prepare_toolchain.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+#
+# Copyright (c) 2021-2024 Amlogic, Inc. All rights reserved.
+#
+# SPDX-License-Identifier: MIT
+#
+
+[ -z "$OUTPUT_DIR" ] && OUTPUT_DIR=$PWD/output
+[ -z "$OUTPUT_DIR" ] && TOOLCHAIN_DIR=$OUTPUT_DIR/toolchains/$COMPILER-$TOOLCHAIN_KEYWORD
+CROSSTOOL=$PWD/arch/$ARCH/toolchain/$COMPILER*$TOOLCHAIN_KEYWORD
+
+if [ -n "$COMPILER" ]; then
+	if [[ "$ARCH" == "arm" || "$ARCH" == "arm64" ]]; then
+		if [ ! -d $TOOLCHAIN_DIR ]; then
+			echo "Extracting cross toolchain ..."
+			mkdir -p $TOOLCHAIN_DIR
+			tar -xf $CROSSTOOL.tar.xz -C $TOOLCHAIN_DIR --strip-components=1
+			touch $TOOLCHAIN_DIR
+		fi
+		if ( find $CROSSTOOL.tar.xz -newer $TOOLCHAIN_DIR | grep -q $CROSSTOOL.tar.xz ); then
+			echo "Updating cross toolchain ..."
+			rm -rf $TOOLCHAIN_DIR/*
+			tar -xf $CROSSTOOL.tar.xz -C $TOOLCHAIN_DIR --strip-components=1
+			touch $TOOLCHAIN_DIR
+		fi
+		if [ -f $CROSSTOOL.patch ]; then
+			cd $OUTPUT_DIR/toolchains
+			if patch -N -f -s --dry-run -p0 < $CROSSTOOL.patch >/dev/null; then
+				echo "Preparing cross toolchain ..."
+				patch -s -p0 < $CROSSTOOL.patch
+			fi
+		fi
+	fi
+else
+	echo "COMPILER is not set, Please execute source scripts/env.sh"
+	exit 1
+fi