blob: d8ca906d91cb65d2a7eed34a3736c3e82607dc4b [file] [log] [blame]
shijie.xiongbc5d3672022-04-01 17:52:16 +08001#!/bin/bash
2#
3# Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
4#
5# SPDX-License-Identifier: MIT
6#
7
8###############################################################
9# Function: generate package combination.
10###############################################################
11
12# $1: arch
13# $2: soc
14# $3: board
15# $4: product
16check_package_combination() {
17 i=0
18 for arch in ${ARCHS[*]}; do
19 [[ "$1" == "$arch" ]] && break
20 i=$((i + 1))
21 done
22 [ $i -ge ${#ARCHS[*]} ] && return 1
23
24 i=0
25 for soc in ${SOCS[*]}; do
26 [[ "$2" == "$soc" ]] && break
27 i=$((i + 1))
28 done
29 [ "$i" -ge ${#SOCS[*]} ] && return 2
30
31 i=0
32 for board in ${BOARDS[*]}; do
33 [[ "$3" == "$board" ]] && break
34 i=$((i + 1))
35 done
36 [ "$i" -ge ${#BOARDS[*]} ] && return 3
37
38 i=0
39 for product in ${PRODUCTS[*]}; do
40 [[ "$4" == "$product" ]] && break
41 i=$((i + 1))
42 done
43 [ "$i" -ge ${#PRODUCTS[*]} ] && return 4
44
45 return 0
46}
47
48unset ARCHS SOCS BOARDS PRODUCTS
49
50ARCHS=($(find $PWD/arch -mindepth 1 -maxdepth 1 -type d ! -name ".*" | xargs basename -a | sort -n))
51SOCS=($(find $PWD/soc -mindepth 2 -maxdepth 2 -type d ! -name ".*" | xargs basename -a | sort -n))
52BOARDS=($(find $PWD/boards -mindepth 2 -maxdepth 2 -type d ! -name ".*" | xargs basename -a | sort -n))
53PRODUCTS=($(find $PWD/products -mindepth 1 -maxdepth 1 -type d ! -name ".*" | xargs basename -a | sort -n))
54
55PACKAGE_COMBINATION_INPUT="$PWD/image_packer/package_combination.in"
56export PACKAGE_COMBINATION="$PWD/output/package_combination.txt"
57
58if [ ! -d "$PWD/output" ]; then
59 mkdir -p $PWD/output
60fi
61if [ ! -s "$PACKAGE_COMBINATION" ] || [ $PACKAGE_COMBINATION -ot $PACKAGE_COMBINATION_INPUT ]; then
62 : >$PACKAGE_COMBINATION
63 while IFS= read -r LINE; do
shijie.xiongbf8b5c02024-12-19 09:54:16 +080064 valid_line=true
65 read -a ARRY <<< "$LINE"
shijie.xiongbc5d3672022-04-01 17:52:16 +080066 for ((loop = 0; loop < ${#ARRY[@]}; loop += 4)); do
67 arch=${ARRY[loop]}
68 soc=${ARRY[loop + 1]}
69 board=${ARRY[loop + 2]}
70 product=${ARRY[loop + 3]}
71 check_package_combination $arch $soc $board $product
shijie.xiongbf8b5c02024-12-19 09:54:16 +080072 if [ $? -ne 0 ]; then
73 valid_line=false
74 break
75 fi
shijie.xiongbc5d3672022-04-01 17:52:16 +080076 done
shijie.xiongbf8b5c02024-12-19 09:54:16 +080077 if [ "$valid_line" = false ]; then
78 continue
79 fi
shijie.xiongbc5d3672022-04-01 17:52:16 +080080 echo $LINE >>$PACKAGE_COMBINATION
81 done <$PACKAGE_COMBINATION_INPUT
82fi