-
Notifications
You must be signed in to change notification settings - Fork 16
/
build.sh
executable file
·150 lines (135 loc) · 4.55 KB
/
build.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/bin/bash
#处理参数,规范化参数
ARGS=`getopt -a -o p:b:h:: --long product:,build::,options::,help:: -- "$@"`
#echo $ARGS
#将规范化后的命令行参数分配至位置参数($1,$2,...)
eval set -- "${ARGS}"
TOPDIR=$(dirname "$(readlink -f "$0")")
declare -A TOOLCHAINS #key/value dict ,key is platform,value is toolchain,key must be uppercase
TOOLCHAINS["SIGMA"]=${TOPDIR}/cmake/ssd202-mtitoolchain.cmake
TOOLCHAINS["ALI3528"]=${TOPDIR}/cmake/ali3528-mtitoolchain.cmake
TOOLCHAINS["RISCVD211"]=${TOPDIR}/cmake/riscv64-d211-toolchain.cmake
TOOLCHAINS["R818"]=${TOPDIR}/cmake/r818-toolchain.cmake
TOOLCHAINS["D211"]=${TOPDIR}/cmake/riscv64-d211-toolchain.cmake
TOOLCHAINS["HI3536"]=${TOPDIR}/cmake/hisiv500-toolchain.cmake
TOOLCHAINS["INGENIC"]=${TOPDIR}/cmake/ingenic-x2600-toolchain.cmake
TOOLCHAINS["TINAT113"]=${TOPDIR}/cmake/tinat113-toolchain.cmake
declare -A DEPLIBS #key/value dict,key is platform,value is deplibs dir in vcpkg,key must be uppercase
#VCPKGROOT=/opt/vcpkg
VCPKGROOT=${HOME}/vcpkg
DEPLIBS["X64"]=${VCPKGROOT}/installed/x64-linux-dynamic
DEPLIBS["SIGMA"]=${VCPKGROOT}/installed/arm-linux-dynamic
DEPLIBS["RISCVD211"]=${VCPKGROOT}/installed/riscv64-linux-dynamic
DEPLIBS["R818"]=${VCPKGROOT}/installed/r818-linux
DEPLIBS["D211"]=${VCPKGROOT}/installed/riscv64-d211-linux
DEPLIBS["HI3536"]=${VCPKGROOT}/installed/hisi3536-linux
DEPLIBS["INGENIC"]=${VCPKGROOT}/installed/ingenic-linux
DEPLIBS["TINAT113"]=${VCPKGROOT}/installed/tinat113-linux-dynamic
DEPLIBS["WIN32"]=${VCPKGROOT}/installed/x64-windows:${VCPKGROOT}/installed/x64-windows-release
OSNAME=""
if [ "$(uname)" = "Linux" ]; then
OSNAME="x64"
elif [ -d "/c" ]; then
OSNAME="win32"
fi
CDROID_VALID_PORTS="${OSNAME}"
SHOWHELP=0
PRODUCT="${OSNAME}"
BUILD_TYPE="Release"
for key in "${!TOOLCHAINS[@]}"
do
CDROID_VALID_PORTS="${CDROID_VALID_PORTS},$key"
done
while :
do
case $1 in
-p|--product)
PRODUCT=$2
echo "product=$PRODUCT"
shift
;;
-b|--build)
BUILD_TYPE=$2
echo "build=$BUILD_TYPE"
shift
;;
-h|--help)
SHOWHELP=1
echo "showhelp"
shift
;;
--options)
OPTIONS_FILE="../$2"
;;
--)
shift
break
;;
*)
break
;;
esac
shift
done
PORT=${PORT^^}
PRODUCT=${PRODUCT^^}
BUILD_TYPE=${BUILD_TYPE,,}
BUILD_TYPE=${BUILD_TYPE^}
OPTIONS_FILE="../${PRODUCT,,}.txt"
CDROID_DIR=${TOPDIR}/out${PRODUCT}-${BUILD_TYPE}
echo "VALID_PORTS=${CDROID_VALID_PORTS}"
echo "product=$PRODUCT ${PRODUCT,,}"
echo "build=${BUILD_TYPE}/${BUILD_TYPE,,}"
if [ "$PRODUCT" = "X64" ] || [ "$PRODUCT" = "WIN32" ]; then
echo "x64"
TOOLCHAIN_FILE=""
elif [ "$PRODUCT" != "X64" ] && [ "$PRODUCT" != "WIN32" ]; then
TOOLCHAIN_FILE="-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAINS[${PRODUCT}]}"
if [ "$TOOLCHAIN_FILE" = "-DCMAKE_TOOLCHAIN_FILE=" ]; then
SHOWHELP=1
fi
fi
OUTDIR=out${PRODUCT}-${BUILD_TYPE}
DEPLIBS_DIR=${DEPLIBS[$PRODUCT]}
#Debug version'sDEPLIB seems has some trouble in some platform(r818)
if [ "${BUILD_TYPE,,}" = "debug" ]; then
DEPLIBS_DIR="${DEPLIBS_DIR}" #/debug:${DEPLIBS_DIR}"
fi
echo "DEPLIBS_DIR=${DEPLIBS_DIR} product=$PRODUCT"
echo "TOOLCHAIN_FILE=${TOOLCHAIN_FILE} SHOWHELP=${SHOWHELP}"
echo "========DEPLIBS_DIR=${DEPLIBS_DIR} BUILDTYPE=${BUILD_TYPE}"
export PATH=$DEPLIBS_DIR:$PATH
if [ $SHOWHELP -gt 0 ] ;then
echo "Usage: $0 [options] $#"
echo "-P|--product [${CDROID_VALID_PORTS}] default is x64"
echo "-b|--build[Debug,Release,RelWithDebInfo,MinSizeRel]"
echo "-h|--help Show Help Info,Usage"
echo ""
exit
fi
mkdir -p ${OUTDIR}
pushd ${OUTDIR}
export PKG_CONFIG_PATH=$DEPLIBS_DIR/lib/pkgconfig
export PKG_CONFIG_LIBDIR=$DEPLIBS_DIR/lib/pkgconfig
echo PKG_CONFIG_PATH=${PKG_CONFIG_PATH}
# Create cmake -D options
CMAKE_SWITCHES=""
if [ -f "$OPTIONS_FILE" ]; then
echo "Fetch options from '$OPTIONS_FILE' "
while IFS= read -r line; do
if [[ -n "$line" && ! "$line" =~ ^# ]]; then
key=$(echo "$line" | cut -d'=' -f1)
value=$(echo "$line" | cut -d'=' -f2)
CMAKE_SWITCHES+=" -D${key}=${value}"
fi
done < "$OPTIONS_FILE"
echo "$CMAKE_SWITCHES"
fi
cmake ${TOOLCHAIN_FILE} \
-DCMAKE_INSTALL_PREFIX=./ \
-DCMAKE_PREFIX_PATH=${DEPLIBS_DIR} \
-DCMAKE_MODULE_PATH=${DEPLIBS_DIR} \
-DCDROID_CHIPSET=${PRODUCT,,} \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
${CMAKE_SWITCHES} \
..