SmartAudio/package/allwinner/liballwinner_tina/liballwinner/LIBRARY/configure

767 lines
26 KiB
Bash
Executable File

#!/bin/bash
ROOT_PATH=$(cd "$(dirname "$0")"; pwd)
################################################################################
## files for configuration.
################################################################################
configFiles_mk=("${ROOT_PATH}/config.mk")
configFiles_h=("${ROOT_PATH}/config.h" "${ROOT_PATH}/CODEC/VIDEO/DECODER/include/vdecoder_config.h")
################################################################################
## variables for configuration.
################################################################################
CONFIGURATIONS=(
CONFIG_CC nu 0
CONFIG_OS nu 0
CONFIG_OS_VERSION nu 0
CONFIG_PRODUCT nu 0
CONFIG_CHIP nu 0
CONFIG_LOG_LEVEL nu 0
CONFIG_ENABLE_DEMUX_ASF nu 0
CONFIG_ENABLE_DEMUX_AVI nu 0
CONFIG_ENABLE_DEMUX_BLUERAYDISK nu 0
CONFIG_ENABLE_DEMUX_MPEGDASH nu 0
CONFIG_ENABLE_DEMUX_FLV nu 0
CONFIG_ENABLE_DEMUX_HLS nu 0
CONFIG_ENABLE_DEMUX_MKV nu 0
CONFIG_ENABLE_DEMUX_MMS nu 0
CONFIG_ENABLE_DEMUX_MOV nu 0
CONFIG_ENABLE_DEMUX_MPG nu 0
CONFIG_ENABLE_DEMUX_PMP nu 0
CONFIG_ENABLE_DEMUX_OGG nu 0
CONFIG_ENABLE_DEMUX_RX nu 0
CONFIG_ENABLE_DEMUX_TS nu 0
CONFIG_HAVE_ZLIB nu 0
CONFIG_HAVE_SSL nu 0
CONFIG_HAVE_LIVE555 nu 0
CONFIG_CEDARX_PATH nu 0
CONFIG_MMS nu 0
)
################################################################################
## help message.
################################################################################
show_help()
{
cat <<EOF
********************************************************************************
********************************************************************************
Usage: configure [options]
Options: [read from configuration files if not specified]
Help options:
--help print this message
--show-config print the configurations
Standard options:
--tool-chain=compile_tool_set the compile tool chain, option can be [gnueabihf/gnueabi/ucgnueabi/linuxgnueabi/muslgnueabi/muslgnueabi64/uclibc_arm926], not used for android os.
--cedarx-path=path the absolute path of liballwinner.
--os=target_os the target os, option can be [android/linux].
--os-version=version target os version, for android os, option can be [4.2/4.4/5.0], not used for other os.
--product=product_type the target product type, option can be [pad/tvbox/ott_cmcc/iptv/dvb/loudspeaker].
--chip=chip_code the target chip, option can be [r8/r16/r58/r18/c500/t2/t3/r40/v40].
--debug-level=level log output level for debug, option can be [close/error/warning/default/detail].
--libz-enable=libz the libz library enable or not, option can be [yes/no].
--ssl-enable=ssl the openssl library enable or not, option can be [yes/no].
--live555-enable=live555 the live555 library enable or not, option can be [yes/no].
--mms=enable the mms stream enable or not, option can be [yes/no].
--disable-demux=demuxer disable demux for specific file format, option can be [asf/avi/bd/dash/flv/hls/mkv/mms/mov/mpg/pmp/ogg/rx/ts].
--enable-demux=demuxer enable demux for specific file format, option can be [asf/avi/bd/dash/flv/hls/mkv/mms/mov/mpg/pmp/ogg/rx/ts].
--disable-vdecoder=decoder diable video decoder for specific codec format,
option can be [mjpeg/mpeg1/mpeg2/mpeg4/msmpeg4v1/msmpeg4v2/divx3/divx4/divx5/xvid/h263/s263/rxg2/wmv1/wmv2/wmv3/vp6/vp8/vp9/rx/h264/h265].
--enable-vdecoder=decoder enable video decoder for specific codec format,
option can be [mjpeg/mpeg1/mpeg2/mpeg4/msmpeg4v1/msmpeg4v2/divx3/divx4/divx5/xvid/h263/s263/rxg2/wmv1/wmv2/wmv3/vp6/vp8/vp9/rx/h264/h265].
Note: This script read configurations from files, change configuration according to user command and write back to files.
********************************************************************************
********************************************************************************
EOF
exit 0
}
################################################################################
## read configuration from files.
################################################################################
for myFile in ${configFiles_h[*]}
do
if [ ! -f "$myFile" ]; then
continue
fi
while read line
do
i=0
key=""
value=""
## abstract a configuration from one line.
for element in $line
do
## if the line is not start with "#define", it is not code for configuration, skip it.
if [ $i -eq 0 ]; then
if [ $element != "#define" ]; then
break;
fi
fi
## set key.
if [ $i -eq 1 ]; then
key=$element
fi
## set value.
if [ $i -eq 2 ]; then
value=$element
fi
i=$((i+1))
if [ $i -ge 3 ]; then
break;
fi
done
prefix="CONFIG_"
prefix_length=${#prefix}
if [ ${#value} -gt 0 ]; then
if [ "${key:0:$prefix_length}" != "$prefix" ]; then
continue
fi
else
continue
fi
len=${#CONFIGURATIONS[*]}
for ((j=0; j<len; j=j+3))
do
if [ $key = ${CONFIGURATIONS[$j]} ]; then
CONFIGURATIONS[$((j+1))]=$value
break;
fi
done
done < $myFile
done
################################################################################
## read configuration from files.[config.mk]
################################################################################
for myFile in ${configFiles_mk[*]}
do
if [ ! -f "$myFile" ]; then
continue
fi
while read line
do
i=0
key=""
value=""
## abstract a configuration from one line.
for element in $line
do
## if the line is not start with "CONFIG_", it is not code for configuration, skip it.
if [ $i -eq 0 ]; then
if [ $(echo $element | cut -c 1-7) != "CONFIG_" ]; then
break;
fi
## set key.
key=$element
fi
## if the line has no '=', it is not code for configuration, skip it.
if [ $i -eq 1 ]; then
if [ $element != '=' ]; then
break;
fi
fi
## set value.
if [ $i -eq 2 ]; then
value=$(echo $element | cut -d '(' -f 2 | cut -d ')' -f 1)
fi
i=$((i+1))
if [ $i -ge 3 ]; then
break;
fi
done
prefix="CONFIG_"
prefix_length=${#prefix}
if [ ${#value} -gt 0 ]; then
if [ "${key:0:$prefix_length}" != "$prefix" ]; then
echo ${key:0:$prefix_length}
continue
fi
else
continue
fi
len=${#CONFIGURATIONS[*]}
for ((j=0; j<len; j=j+3))
do
if [ $key = ${CONFIGURATIONS[$j]} ]; then
if [ ${CONFIGURATIONS[$((j+2))]} = 0 ]; then
CONFIGURATIONS[$((j+1))]=$value
CONFIGURATIONS[$((j+2))]=1
break;
fi
fi
done
done < $myFile
done
################################################################################
## process user commands.
################################################################################
for opt do
optval="${opt#*=}"
optval=$(echo $optval)
key=""
value=""
case "$opt" in
## show the help message.
--help|-h) show_help
;;
## show the configurations read from file.
--show-config)
len=${#CONFIGURATIONS[*]}
for((k=0; k<len; k+=3))
do
echo ${CONFIGURATIONS[$k]} = ${CONFIGURATIONS[$((k+1))]}
done
;;
## config the compile tool chain, option can be [gnueabihf/gnueabi/linuxgnueabi], not used for android os.
--tool-chain=*)
key=CONFIG_CC
value=""
if [ ${#optval} -eq 0 ]; then
echo "invalid tool chain option."
continue
fi
if [ $optval = "gnueabihf" ]; then
value=OPTION_CC_GNUEABIHF
elif [ $optval = "gnueabi" ]; then
value=OPTION_CC_GNUEABI
elif [ $optval = "ucgnueabi" ]; then
value=OPTION_CC_UCGNUEABI
elif [ $optval = "linuxgnueabi" ]; then
value=OPTION_CC_LINUX_UCGNUEABI
elif [ $optval = "muslgnueabi" ]; then
value=OPTION_CC_LINUX_MUSLGNUEABI
elif [ $optval = "muslgnueabi64" ]; then
value=OPTION_CC_LINUX_MUSLGNUEABI64
elif [ $optval = "uclibc_arm926" ]; then
value=OPTION_CC_UCLIBC_ARM926
else
echo "invalid tool chain $optval."
continue
fi
;;
## config the target os, option can be [android/linux].
--os=*)
key=CONFIG_OS
value=""
if [ ${#optval} -eq 0 ]; then
echo "invalid os option."
continue
fi
if [ $optval = "android" ]; then
value=OPTION_OS_ANDROID
elif [ $optval = "linux" ]; then
value=OPTION_OS_LINUX
else
echo "invalid os option $optval."
continue
fi
;;
## config the target os version, for android os, option can be [4.2/4.4/5.0], not used for other os.
--os-version=*)
key=CONFIG_OS_VERSION
value=""
if [ ${#optval} -eq 0 ]; then
echo "invalid os version option."
continue
fi
if [ $optval = "4.2" ]; then
value=OPTION_OS_VERSION_ANDROID_4_2
elif [ $optval = "4.4" ]; then
value=OPTION_OS_VERSION_ANDROID_4_4
elif [ $optval = "5.0" ]; then
value=OPTION_OS_VERSION_ANDROID_5_0
else
echo "invalid os version option $optval."
continue
fi
;;
## config which driver to use for allocating physical continue memory block, option can be [sunximem/ion/ion_linux_3_10].
--memory-driver=*)
key=CONFIG_MEMORY_DRIVER
value=""
if [ ${#optval} -eq 0 ]; then
echo "invalid memory diriver option."
continue
fi
if [ $optval = "sunximem" ]; then
value=OPTION_MEMORY_DRIVER_SUNXIMEM
elif [ $optval = "ion" ]; then
value=OPTION_MEMORY_DRIVER_ION
else
echo "invalid memory diriver option $optval."
continue
fi
;;
## config the target product type, option can be [pad/tvbox/ott_cmcc/iptv/dvb/loudspeaker].
--product=*)
key=CONFIG_PRODUCT
value=""
if [ ${#optval} -eq 0 ]; then
echo "invalid product option."
continue
fi
if [ $optval = "pad" ]; then
value=OPTION_PRODUCT_PAD
elif [ $optval = "tvbox" ]; then
value=OPTION_PRODUCT_TVBOX
elif [ $optval = "ott_cmcc" ]; then
value=OPTION_PRODUCT_OTT_CMCC
elif [ $optval = "iptv" ]; then
value=OPTION_PRODUCT_IPTV
elif [ $optval = "dvb" ]; then
value=OPTION_PRODUCT_DVB
elif [ $optval = "loudspeaker" ]; then
value=OPTION_PRODUCT_LOUDSPEAKER
else
echo "invalid product option $optval."
continue
fi
;;
## config the target chip, option can be [r8/r16/r58/r18/c500/t2/t3].
--chip=*)
key=CONFIG_CHIP
value=""
if [ ${#optval} -eq 0 ]; then
echo "invalid chip option."
continue
fi
if [ $optval = "r8" ]; then
echo "r8"
value=OPTION_CHIP_R8
elif [ $optval = "r16" ]; then
value=OPTION_CHIP_R16
elif [ $optval = "c500" ]; then
value=OPTION_CHIP_C500
elif [ $optval = "r58" ]; then
value=OPTION_CHIP_R58
elif [ $optval = "r18" ]; then
value=OPTION_CHIP_R18
elif [ $optval = "t2" ]; then
value=OPTION_CHIP_T2
elif [ $optval = "t3" ]; then
value=OPTION_CHIP_T3
elif [ $optval = "v40" ]; then
value=OPTION_CHIP_T3
elif [ $optval = "r40" ]; then
value=OPTION_CHIP_T3
else
echo "invalid chip option $optval."
continue
fi
;;
## cofig DRAM interface, option can be [ddr1_16bits/ddr1_32bits/ddr2_16bits/ddr2_32bits/ddr3_16bits/ddr3_32bits/ddr3_64bits].
--dram-interface=*)
key=CONFIG_DRAM_INTERFACE
value=""
if [ ${#optval} -eq 0 ]; then
echo "invalid dram interface option."
continue
fi
if [ $optval = "ddr1_16bits" ]; then
value=OPTION_DRAM_INTERFACE_DDR1_16BITS
elif [ $optval = "ddr1_32bits" ]; then
value=OPTION_DRAM_INTERFACE_DDR1_32BITS
elif [ $optval = "ddr2_16bits" ]; then
value=OPTION_DRAM_INTERFACE_DDR2_16BITS
elif [ $optval = "ddr2_32bits" ]; then
value=OPTION_DRAM_INTERFACE_DDR2_32BITS
elif [ $optval = "ddr3_16bits" ]; then
value=OPTION_DRAM_INTERFACE_DDR3_16BITS
elif [ $optval = "ddr3_32bits" ]; then
value=OPTION_DRAM_INTERFACE_DDR3_32BITS
elif [ $optval = "ddr3_64bits" ]; then
value=OPTION_DRAM_INTERFACE_DDR3_64BITS
else
echo "invalid dram interface option $optval."
continue
fi
;;
## config log output level for debug, option can be [close/error/warning/default/detail].
--debug-level=*)
key=CONFIG_LOG_LEVEL
value=""
if [ ${#optval} -eq 0 ]; then
echo "invalid debug level option."
continue
fi
if [ $optval = "close" ]; then
value=OPTION_LOG_LEVEL_CLOSE
elif [ $optval = "error" ]; then
value=OPTION_LOG_LEVEL_ERROR
elif [ $optval = "warning" ]; then
value=OPTION_LOG_LEVEL_WARNING
elif [ $optval = "default" ]; then
value=OPTION_LOG_LEVEL_DEFAULT
elif [ $optval = "detail" ]; then
value=OPTION_LOG_LEVEL_DETAIL
else
echo "invalid debug level option $optval."
continue
fi
;;
## config ve_ipc, option can be [disable/enable].
--ve-ipc=*)
key=CONFIG_VE_IPC
value=""
if [ $optval = "disable" ]; then
value=OPTION_VE_IPC_DISABLE
elif [ $optval = "enable" ]; then
value=OPTION_VE_IPC_ENABLE
else
echo "invalid ve_ipc option $optval."
continue
fi
;;
--mms=*)
key=CONFIG_MMS
value=""
if [ $optval = "yes" ]; then
value=OPTION_MMS_ENABLE
elif [ $optval = "no" ]; then
value=OPTION_MMS_DISABLE
else
echo "invalid ve_ipc option $optval."
continue
fi
;;
## config cedarx path.
--cedarx-path=*)
key=CONFIG_CEDARX_PATH
value=""
echo "==== $optval"
value=$optval
echo "==== value: $value"
if [ $optval ]; then
value=$optval
fi
;;
## disable or enable demux for specific file format,
## option can be [asf/avi/bd/mpegdash/flv/hls/mkv/mms/mov/mpg/pmp/ogg/ts].
--disable-demux=*|--enable-demux=*)
key=""
value=""
if [ ${#optval} -eq 0 ]; then
echo "invalid demux format."
continue
fi
if [ $optval = "asf" ]; then
key=CONFIG_ENABLE_DEMUX_ASF
elif [ $optval = "avi" ]; then
key=CONFIG_ENABLE_DEMUX_AVI
elif [ $optval = "bd" ]; then
key=CONFIG_ENABLE_DEMUX_BLUERAYDISK
elif [ $optval = "mpegdash" ]; then
key=CONFIG_ENABLE_DEMUX_MPEGDASH
elif [ $optval = "flv" ]; then
key=CONFIG_ENABLE_DEMUX_FLV
elif [ $optval = "hls" ]; then
key=CONFIG_ENABLE_DEMUX_HLS
elif [ $optval = "mkv" ]; then
key=CONFIG_ENABLE_DEMUX_MKV
elif [ $optval = "mms" ]; then
key=CONFIG_ENABLE_DEMUX_MMS
elif [ $optval = "mov" ]; then
key=CONFIG_ENABLE_DEMUX_MOV
elif [ $optval = "mpg" ]; then
key=CONFIG_ENABLE_DEMUX_MPG
elif [ $optval = "pmp" ]; then
key=CONFIG_ENABLE_DEMUX_PMP
elif [ $optval = "ogg" ]; then
key=CONFIG_ENABLE_DEMUX_OGG
elif [ $optval = "rx" ]; then
key=CONFIG_ENABLE_DEMUX_RX
elif [ $optval = "ts" ]; then
key=CONFIG_ENABLE_DEMUX_TS
else
echo "invalid demux format $optval."
continue
fi
if [ "${opt:2:6}" = "enable" ]; then
value=1
else
value=0
fi
;;
## diable or enable video decoder for specific codec format,
## option can be [mjpeg/mpeg1/mpeg2/mpeg4/msmpeg4v1/msmpeg4v2/divx3/divx4/divx5/xvid/h263/s263/rxg2/wmv1/wmv2/wmv3/vp6/vp8/vp9/rv8/rv9/h264/h265].
--disable-vdecoder=*|--enable-vdecoder=*)
key=""
value=""
if [ ${#optval} -eq 0 ]; then
echo "invalid video codec format."
continue
fi
if [ $optval = "mjpeg" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_MJPEG
elif [ $optval = "mpeg1" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_MPEG1
elif [ $optval = "mpeg2" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_MPEG2
elif [ $optval = "mpeg4" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_MPEG4
elif [ $optval = "msmpeg4v1" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_MSMPEG4V1
elif [ $optval = "msmpeg4v2" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_MSMPEG4V2
elif [ $optval = "divx3" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_DIVX3
elif [ $optval = "divx4" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_DIVX4
elif [ $optval = "divx5" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_DIVX5
elif [ $optval = "xvid" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_XVID
elif [ $optval = "h263" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_H263
elif [ $optval = "s263" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_SORENSSON_H263
elif [ $optval = "rxg2" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_RXG2
elif [ $optval = "wmv1" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_WMV1
elif [ $optval = "wmv2" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_WMV2
elif [ $optval = "wmv3" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_WMV3
elif [ $optval = "vp6" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_VP6
elif [ $optval = "vp8" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_VP8
elif [ $optval = "vp9" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_VP9
elif [ $optval = "rx" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_RX
elif [ $optval = "h264" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_H264
elif [ $optval = "h265" ]; then
key=CONFIG_ENABLE_VIDEO_DECODER_H265
else
echo "invalid video codec format $optval."
continue
fi
if [ "${opt:2:6}" = "enable" ]; then
value=1
else
value=0
fi
;;
## config cmcc[yes/no].
--cmcc=*)
key=CONFIG_CMCC
value=""
if [ ${optval} = "yes" ]; then
echo "cmcc yes"
value=OPTION_CMCC_YES
elif [ ${optval} = "no" ]; then
echo "cmcc no"
value=OPTION_CMCC_NO
else
echo "invalid cmcc option $optval."
continue
fi
;;
## config libz[yes/no].
--libz-enable=*)
key=CONFIG_HAVE_ZLIB
value=""
if [ ${optval} = "yes" ]; then
echo "zlib yes"
value=OPTION_HAVE_ZLIB
elif [ ${optval} = "no" ]; then
echo "zlib no"
value=OPTION_NO_ZLIB
else
echo "invalid cmcc option $optval."
continue
fi
;;
## config openssl[yes/no].
--ssl-enable=*)
key=CONFIG_HAVE_SSL
value=""
if [ ${optval} = "yes" ]; then
echo "ssl yes"
value=OPTION_HAVE_SSL
elif [ ${optval} = "no" ]; then
echo "ssl no"
value=OPTION_NO_SSL
else
echo "invalid cmcc option $optval."
continue
fi
;;
## config live555[yes/no].
--live555-enable=*)
key=CONFIG_HAVE_LIVE555
value=""
if [ ${optval} = "yes" ]; then
value=OPTION_HAVE_LIVE555
elif [ ${optval} = "no" ]; then
value=OPTION_NO_LIVE555
else
echo "invalid cmcc option $optval."
continue
fi
;;
## config is_camera_decoder[yes/no].
--is_camera_decoder=*)
key=CONFIG_IS_CAMERA_DECODER
value=""
if [ ${optval} = "yes" ]; then
echo "is camera decoder, yes, only compile h264 and mjpegplus decoder"
value=OPTION_IS_CAMERA_DECODER_YES
elif [ ${optval} = "no" ]; then
echo "is camera decoder, no, compile all decoders"
value=OPTION_IS_CAMERA_DECODER_NO
else
echo "invalid is_camera_decoder option $optval."
continue
fi
;;
*)
optname="${opt%%=*}"
optname="${optname#--}"
echo "error: unknown option $optname, quit"
exit 0
;;
esac
## set configuration.
if [ ${#value} -gt 0 ]; then
len=${#CONFIGURATIONS[*]}
for ((j=0; j<len; j=j+3))
do
if [ $key = ${CONFIGURATIONS[$j]} ]; then
CONFIGURATIONS[$((j+1))]=$value
break;
fi
done
fi
done
################################################################################
## write configuration to files [.h].
################################################################################
for myFile in ${configFiles[*]}
do
if [ ! -f "$myFile" ]; then
continue
fi
for ((j=0; j<len; j=j+3))
do
key=${CONFIGURATIONS[$j]}
value=${CONFIGURATIONS[$((j+1))]}
sed -i "/^#define ${key} /c#define ${key} ${value}" $myFile
done
done
################################################################################
## write configuration to config.mk
################################################################################
myFile="${ROOT_PATH}/config.mk"
if [ ! -f "$myFile" ]; then
echo "file config.mk not exist, can not write configuration for makefile."
exit 1
fi
for ((j=0; j<len; j=j+3))
do
key=${CONFIGURATIONS[$j]}
value=${CONFIGURATIONS[$((j+1))]}
if [ $key = "CONFIG_CEDARX_PATH" ]; then
sed -i "/^${key} /c${key} = ${value}" $myFile
else
sed -i "/^${key} /c${key} = \$\(${value}\)" $myFile
fi
done