#!/bin/bash # # Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved. # # SPDX-License-Identifier: MIT # ############################################################### # Function: generate build combination. ############################################################### # $1: "arch soc board product" check_project() { LINE_NR=`sed -n '$=' $BUILD_COMBINATION` i=0 while IFS= read -r LINE; do [[ "$1" == "$LINE" ]] && break i=$((i+1)) done < $BUILD_COMBINATION [ $i -ge $LINE_NR ] && $i && return 1 return 0 } # $1: arch # $2: soc # $3: board # $4: product check_build_combination() { [ $# -ne 4 ] && return -1 i=0 for arch in ${ARCHES[*]}; do [[ "$1" == "$arch" ]] && break i=$((i+1)) done [ $i -ge ${#ARCHES[*]} ] && return 1 i=0 for soc in ${SOCS[*]};do [[ "$2" == "$soc" ]] && break i=$((i+1)) done [ "$i" -ge ${#SOCS[*]} ] && return 2 i=0 for board in ${BOARDS[*]};do [[ "$3" == "$board" ]] && break i=$((i+1)) done [ "$i" -ge ${#BOARDS[*]} ] && return 3 i=0 for product in ${PRODUCTS[*]};do [[ "$4" == "$product" ]] && break i=$((i+1)) done [ "$i" -ge ${#PRODUCTS[*]} ] && return 4 return 0 } unset ARCHES SOCS BOARDS PRODUCTS SPLITARCH ARCHES=($(find $PWD/arch -mindepth 1 -maxdepth 1 -type d ! -name ".*" | xargs -r basename -a | sort -n)) PRODUCTS=($(find $PWD/products -mindepth 1 -maxdepth 1 -type d ! -name ".*" | xargs -r basename -a | sort -n)) if [ -e "$PWD/boards/riscv/CMakeLists.txt" ]; then SOCS=($(find $PWD/soc -mindepth 2 -maxdepth 2 -type d ! -name ".*" | xargs -r basename -a | sort -n)) BOARDS=($(find $PWD/boards -mindepth 2 -maxdepth 2 -type d ! -name ".*" | xargs -r basename -a | sort -n)) else SPLITARCH=($(find $PWD/boards -mindepth 2 -maxdepth 2 -type d ! -name ".*" | grep "$PWD/boards/riscv" | xargs -r basename -a | sort -n)) BOARDS=($(find $PWD/boards -mindepth 2 -maxdepth 2 -type d ! -name ".*" | grep -v "$PWD/boards/riscv" | xargs -r basename -a | sort -n)) BOARDS+=($(find $PWD/boards -mindepth 3 -maxdepth 3 -type d ! -name ".*" | grep "$PWD/boards/riscv" | xargs -r basename -a | sort -n)) SOCS=($(find $PWD/soc -mindepth 2 -maxdepth 2 -type d ! -name ".*" | grep -v "$PWD/soc/riscv" | xargs -r basename -a | sort -n)) SOCS+=($(find $PWD/soc -mindepth 3 -maxdepth 3 -type d ! -name ".*" | grep "$PWD/soc/riscv" | xargs -r basename -a | sort -n)) fi export BUILD_COMBINATION="$PWD/output/build_combination.txt" if [ ! -d "$PWD/output" ]; then mkdir -p $PWD/output fi for arch in ${ARCHES[*]}; do BUILD_COMBINATION_INPUT="$PWD/boards/$arch/build_combination.in" if [ -e $BUILD_COMBINATION_INPUT ]; then if [ $BUILD_COMBINATION -ot $BUILD_COMBINATION_INPUT ]; then :> $BUILD_COMBINATION fi else for split in ${fgrep[*]}; do BUILD_COMBINATION_INPUT="$PWD/boards/$arch/$split/build_combination.in" if [ $BUILD_COMBINATION -ot $BUILD_COMBINATION_INPUT ]; then :> $BUILD_COMBINATION fi done fi done if [ ! -s "$BUILD_COMBINATION" ]; then for arch in ${ARCHES[*]}; do BUILD_COMBINATION_INPUT="$PWD/boards/$arch/build_combination.in" if [ -e $BUILD_COMBINATION_INPUT ]; then while IFS= read -r LINE; do a=`echo "$LINE"|awk '{print $1}'` s=`echo "$LINE"|awk '{print $2}'` b=`echo "$LINE"|awk '{print $3}'` p=`echo "$LINE"|awk '{print $4}'` check_build_combination $a $s $b $p [ "$?" -eq 0 ] && echo $LINE >> $BUILD_COMBINATION done < $BUILD_COMBINATION_INPUT else for split in ${SPLITARCH[*]}; do BUILD_COMBINATION_INPUT="$PWD/boards/$arch/$split/build_combination.in" while IFS= read -r LINE; do a=`echo "$LINE"|awk '{print $1}'` s=`echo "$LINE"|awk '{print $2}'` b=`echo "$LINE"|awk '{print $3}'` p=`echo "$LINE"|awk '{print $4}'` check_build_combination $a $s $b $p [ "$?" -eq 0 ] && echo $LINE >> $BUILD_COMBINATION done < $BUILD_COMBINATION_INPUT done fi done fi