22set -e
33
44CMD=$0
5- MODULE=$1
6- ARCH=$2
7- MODE=$3
8-
9- # default is linux
10- case $# in
11- 0)
12- MODULE=all;
13- ARCH=linux;
14- MODE=debug;;
15- 1)
16- ARCH=linux;
17- MODE=debug;;
18- 2)
19- MODE=debug;;
20-
21- esac
5+ MODULE=all
6+ ARCH=linux
7+ MODE=debug
8+ ASAN=0
229
2310
2411# add supported platform to here
@@ -28,10 +15,12 @@ PLATFORM="[linux|pi|android|ios]"
2815BASIC_LIBS=" libposix libtime liblog libdarray libthread libgevent libworkq libdict libhash libsort \
2916 librbtree libringbuffer libvector libstrex libmedia-io \
3017 libdebug libfile libqueue libplugin libhal libsubmask"
31- MEDIA_LIBS=" libavcap"
18+ MEDIA_LIBS=" libavcap libmp4 "
3219FRAMEWORK_LIBS=" libipc"
3320NETWORK_LIBS=" libsock libptcp librpc librtsp librtmpc"
3421
22+
23+
3524usage ()
3625{
3726 echo " ==== usage ===="
@@ -66,26 +55,51 @@ usage()
6655 exit
6756}
6857
69- config_linux ()
70- {
71- CROSS_PREFIX=
72- }
73-
74- config_pi ()
75- {
76- CROSS_PREFIX=arm-linux-gnueabihf-
77- }
78-
79- config_android ()
80- {
81- CROSS_PREFIX=arm-linux-androideabi-
82- }
83-
84- config_ios ()
85- {
86- echo " need a mac computer, who can help me :-)"
87- exit 0;
88- }
58+ # -o或--options选项后面接可接受的短选项,如ab:c::,表示可接受的短选项为-a -b -c,其中-a选项不接参数,-b选项后必须接参数,-c选项的参数为可选的
59+ # -l或--long选项后面接可接受的长选项,用逗号分开,冒号的意义同短选项。
60+ # -n选项后接选项解析错误时提示的脚本名字
61+ ARGS=` getopt -o a:m:h --long arch:,module:,help,asan: -n ' build.sh' -- " $@ " `
62+ if [ $? != 0 ]; then
63+ echo " Terminating..."
64+ exit 1
65+ fi
66+
67+ # 将规范化后的命令行参数分配至位置参数($1,$2,...)
68+ eval set -- " ${ARGS} "
69+
70+ while true
71+ do
72+ case " $1 " in
73+ -h|--help)
74+ usage;
75+ shift
76+ ;;
77+ -a|--arch)
78+ ARCH=$2
79+ shift 2
80+ ;;
81+ -m|--mode)
82+ MODE=$2
83+ shift 2
84+ ;;
85+ --module)
86+ MODULE=$2
87+ shift 2
88+ ;;
89+ --asan)
90+ ASAN=$2
91+ shift 2
92+ ;;
93+ --)
94+ shift
95+ break
96+ ;;
97+ * )
98+ echo " invalid arguments: $@ "
99+ exit 1
100+ ;;
101+ esac
102+ done
89103
90104config_common ()
91105{
@@ -98,15 +112,21 @@ config_arch()
98112{
99113 case $ARCH in
100114 " pi" )
101- config_pi;;
115+ CROSS_PREFIX=arm-linux-gnueabihf-
116+ ;;
102117 " android" )
103- config_android;;
118+ CROSS_PREFIX=arm-linux-androideabi-
119+ ;;
104120 " linux" )
105- config_linux;;
121+ CROSS_PREFIX=
122+ ;;
106123 " ios" )
107- config_ios;;
124+ echo " not support cross compile, should compile native on Mac"
125+ exit 0;
126+ ;;
108127 * )
109- usage;;
128+ echo " arch: $ARCH not supported"
129+ ;;
110130 esac
111131}
112132
@@ -175,12 +195,8 @@ build_module()
175195 ;;
176196 * )
177197 echo " ==== build ${ARCH} ${MODULE} start..."
178- MAKE=" make ARCH=${ARCH} OUTPUT=${OUTPUT} MODE=${MODE} "
179- if [[ ${ARCH} == " linux" || ${ARCH} == " pi" || ${ARCH} == " android" ]]; then
180- ${MAKE} > /dev/null
181- else
182- echo " ${ARCH} not support now" # make -f Makefile.${ARCH} > /dev/null
183- fi
198+ MAKE=" make ARCH=${ARCH} OUTPUT=${OUTPUT} MODE=${MODE} ASAN=${ASAN} "
199+ ${MAKE} > /dev/null
184200 if [ $? -ne 0 ]; then
185201 echo " ==== build ${ARCH} ${MODULE} failed"
186202 return ;
0 commit comments