blob: e2706d10d05043dc625616505d1c8c5449f8385a [file] [log] [blame]
kelvin.zhangac22e652021-10-18 15:09:21 +08001#!/bin/bash
2
kelvin.zhangf91d7b02021-10-26 16:47:17 +08003###############################################################
4# Function: Auto-generate root CMakeLists.txt and Kconfig according to manifest.xml.
5###############################################################
kelvin.zhangac22e652021-10-18 15:09:21 +08006
kelvin.zhangf91d7b02021-10-26 16:47:17 +08007cmake_file="$PWD/CMakeLists.txt"
8kconfig_file="$PWD/Kconfig"
kelvin.zhang60107092021-10-19 18:12:39 +08009exclude_dir="products"
kelvin.zhang5ef541b2021-10-21 13:24:48 +080010special_dirs="arch soc boards"
11drivers_dir="drivers"
kelvin.zhang4b985472021-10-27 16:02:21 +080012dir=$PWD
13
14if [ -n "$1" ]; then
15 file_name=$1
16else
17 file_name="default.xml"
18fi
19
20while : ; do
kelvin.zhang47e4dfb2021-10-29 16:57:47 +080021 if [[ -n $(find $dir/.repo -name $file_name) ]]; then
22 manifest_file=`find $dir/.repo -name $file_name`
kelvin.zhang4b985472021-10-27 16:02:21 +080023 break
24 fi
25 dir=`dirname $dir`
26 mountpoint -q $dir
27 [ $? -eq 0 ] && break;
28done
29
kelvin.zhang47e4dfb2021-10-29 16:57:47 +080030if [ -f $dir/CMakeLists.txt ] || [ $manifest_file -ot $dir/CMakeLists.txt ]; then
31 exit 0
32fi
33
34if [ ! -f $manifest_file ]; then
kelvin.zhang4b985472021-10-27 16:02:21 +080035 echo "No such file: $file_name"
36 exit 1
37fi
kelvin.zhangac22e652021-10-18 15:09:21 +080038
39cat <<EOF > $cmake_file
40enable_language(C CXX ASM)
41
42target_include_directories(
43 \${TARGET_NAME}
44 PUBLIC
45 include
46)
47
48EOF
49
50cat <<EOF > $kconfig_file
51EOF
52
kelvin.zhang4b985472021-10-27 16:02:21 +080053absolute_prj_dir=$dir
kelvin.zhang47e4dfb2021-10-29 16:57:47 +080054if [[ $absolute_prj_dir == $PWD ]] ; then
kelvin.zhang9e82d8f2021-10-26 20:26:04 +080055 pattern="path="
56else
kelvin.zhang4b985472021-10-27 16:02:21 +080057 relative_prj_dir=`echo ${PWD#*${absolute_prj_dir}/}`
kelvin.zhang9e82d8f2021-10-26 20:26:04 +080058 pattern="path=\"${relative_prj_dir}/"
59fi
60
kelvin.zhangac22e652021-10-18 15:09:21 +080061while IFS= read -r line
62do
63 keyword=`echo "$line" | grep 'path=.* name=' | awk '{print $2}'`
kelvin.zhang5ef541b2021-10-21 13:24:48 +080064
kelvin.zhangac22e652021-10-18 15:09:21 +080065 if [ $keyword ]; then
kelvin.zhang9e82d8f2021-10-26 20:26:04 +080066 repo_path=`echo ${keyword#*${pattern}} | sed 's/\"//g'`
kelvin.zhang5ef541b2021-10-21 13:24:48 +080067 if [[ $repo_path == $drivers_dir* ]] ; then
kelvin.zhangc35b0762021-10-20 15:41:46 +080068 category=$repo_path
69 else
70 category=`dirname $repo_path`
71 fi
72
kelvin.zhang5ef541b2021-10-21 13:24:48 +080073 if [[ $repo_path == $exclude_dir/* ]] ; then
74 continue
75 fi
76
77 # exclude other ARCH dirs
78 case $special_dirs in
79 *"$category"*) arch=`basename $repo_path`
kelvin.zhang53cdc1e2021-10-21 15:28:36 +080080 if [ "$arch" == "$ARCH" ]; then
81 cmake_path="$category/\${ARCH}"
82 kconfig_path="$category/\$(ARCH)"
83 else
84 continue
85 fi;;
86 * ) cmake_path=$repo_path
87 kconfig_path=$repo_path;;
kelvin.zhang5ef541b2021-10-21 13:24:48 +080088 esac
89
kelvin.zhangac22e652021-10-18 15:09:21 +080090 # Generate root CMakeLists.txt
kelvin.zhang5ef541b2021-10-21 13:24:48 +080091 if [ -f $repo_path/CMakeLists.txt ]; then
kelvin.zhang53cdc1e2021-10-21 15:28:36 +080092 echo "add_subdirectory($cmake_path)" >> $cmake_file
kelvin.zhangac22e652021-10-18 15:09:21 +080093 fi
94
95 # Generate root Kconfig
96 if [ -f $repo_path/Kconfig ]; then
kelvin.zhangac22e652021-10-18 15:09:21 +080097 if [ "$last_category" != "$category" ]; then
98 if [ $last_category ]; then
99 echo -e "endmenu\n" >> $kconfig_file
100 fi
101 echo "menu \"${category^} Options\"" >> $kconfig_file
102 fi
kelvin.zhang78a66712021-10-20 17:27:41 +0800103
kelvin.zhang53cdc1e2021-10-21 15:28:36 +0800104 echo "source \"$kconfig_path/Kconfig\"" >> $kconfig_file
kelvin.zhangac22e652021-10-18 15:09:21 +0800105 last_category=$category
106 fi
107 fi
kelvin.zhang47e4dfb2021-10-29 16:57:47 +0800108done < "$manifest_file"
kelvin.zhangac22e652021-10-18 15:09:21 +0800109
110echo "endmenu" >> $kconfig_file