| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- #!/bin/bash
- # Copyright (c) 2024 Huawei Device Co., Ltd.
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- # 执行该脚本时需进入到脚本所在目录
- ROOT_DIR=$(pwd)
- API_VERSION=12 # 三方库对应API版本,用于记录SDK路径,必须和"compileSdkVersion"字段表示的API版本保持一致
- SDK_DIR=$ROOT_DIR/../ohos-sdk-$API_VERSION/linux/$API_VERSION # SDK路径(流水线环境中SDK路径)
- LYCIUM_TOOLS_URL=https://gitee.com/openharmony-sig/tpc_c_cplusplus.git
- LYCIUM_ROOT_DIR=$ROOT_DIR/tpc_c_cplusplus
- LYCIUM_TOOLS_DIR=$LYCIUM_ROOT_DIR/lycium
- LYCIUM_THIRDPARTY_DIR=$LYCIUM_ROOT_DIR/thirdparty
- DEPENDS_DIR=$ROOT_DIR/doc # 依赖库编译脚本在仓库中的位置
- FFMPEG_NAME=FFmpeg-ff4.0 # 依赖库名
- LIBYUV_NAME=libyuv-ijk # 依赖库名
- SOUNDTOUCH_NAME=soundtouch-ijk # 依赖库名
- OPESSL_NAME=openssl_1_1_1w # FFmpeg的依赖库名,需和依赖库一起安装
- CI_OUTPUT_DIR=$ROOT_DIR/../out/tpc/ # hap/har安装目录
- LIBS_NAME=("FFmpeg-ff4.0" "libyuv-ijk" "soundtouch-ijk" "openssl_1_1_1w")
- PACKAGE_NAME=("FFmpeg-ff4.0-ijk0.8.8-20210426-001.tar.gz" "yuv-ijk-r0.2.1-dev.zip" "soundtouch-ijk-r0.1.2-dev.zip" "openssl-OpenSSL_1_1_1w.zip")
- function prepare_lycium_tools()
- {
- local commands=("gcc" "make" "cmake" "pkg-config" "autoconf" "autoreconf" "automake" "patch" "libtool" "autopoint" "gperf" \
- "tcl8.6-dev" "wget" "unzip" "gccgo-go" "flex " "bison" "premake4" "python3" "python3-pip" \
- "ninja-build" "meson" "sox" "gfortran" "subversion" "build-essential" "module-assistant" " gcc-multilib" \
- "g++-multilib" "libltdl7-dev" "cabextract" "libboost-all-dev" "libxml2-utils" "gettext" "libxml-libxml-perl" \
- "libxml2" "libxml2-dev" "libxml-parser-perl" "texinfo" "libtool-bin" "xmlto" "po4a" "yasm" "nasm" "xutils-dev" \
- "libx11-dev" "xtrans-dev" "gfortran-arm-linux-gnueabi" "gfortran-aarch64-linux-gnu")
- apt update >> /dev/null
- for cmd in ${commands[@]}
- do
- which $cmd >> /dev/null
- if [ $? -ne 0 ]
- then
- echo "install $cmd"
- apt install $cmd -y >> /dev/null
- fi
- done
- }
- function prepare_lycium()
- {
- if [ -d $LYCIUM_ROOT_DIR ]
- then
- rm -rf $LYCIUM_ROOT_DIR
- fi
- git clone $LYCIUM_TOOLS_URL -b support_x86 --depth=1
- if [ $? -ne 0 ]
- then
- return 1
- fi
- cd $LYCIUM_TOOLS_DIR/Buildtools
- tar -zxvf toolchain.tar.gz
- if [ $? -ne 0 ]
- then
- echo "unpack sdk toolchain failed!!"
- cd $OLDPWD
- return 1
- fi
- cp toolchain/* $SDK_DIR/native/llvm/bin/
- prepare_lycium_tools
- ret=$?
- cd $OLDPWD
- return $ret
- }
- function copy_depends()
- {
- local dir=$1
- local name=$2
- if [ -d $LYCIUM_THIRDPARTY_DIR/$name ]
- then
- rm -rf $LYCIUM_THIRDPARTY_DIR/$name
- fi
- cp -arf $dir/$name $LYCIUM_THIRDPARTY_DIR/
- }
- function prepare_depends()
- {
- copy_depends $DEPENDS_DIR $LIBYUV_NAME
- copy_depends $DEPENDS_DIR $SOUNDTOUCH_NAME
- }
- function check_sdk()
- {
- if [ ! -d $SDK_DIR ]
- then
- return 1
- fi
- export OHOS_SDK=$SDK_DIR
- return 0
- }
- function check_copy_shasum()
- {
- local libpath=$1
- local pack_name=$2
- local libname=$3
- cd $LYCIUM_THIRDPARTY_DIR/$libpath
- if [ ! -f ./SHA512SUM ]
- then
- sha512sum $pack_name > ./SHA512SUM
- fi
- cp ./SHA512SUM $LYCIUM_TOOLS_DIR/usr/$libname/
- cd $OLDPWD
- }
- function install_shasum()
- {
- check_copy_shasum $FFMPEG_NAME ${PACKAGE_NAME[0]} $FFMPEG_NAME
- check_copy_shasum $LIBYUV_NAME ${PACKAGE_NAME[1]} yuv
- check_copy_shasum $SOUNDTOUCH_NAME ${PACKAGE_NAME[2]} soundtouch
- check_copy_shasum $OPESSL_NAME ${PACKAGE_NAME[3]} $OPESSL_NAME
- }
- function start_build()
- {
- local result=0
- cd $LYCIUM_TOOLS_DIR
- if [ $? -ne 0 ]
- then
- return 1
- fi
- bash build.sh $FFMPEG_NAME $LIBYUV_NAME $SOUNDTOUCH_NAME
- result=$?
- cd $OLDPWD
- return $result
- }
- function install_depends()
- {
- local install_dir=$ROOT_DIR/ijkplayer/src/main/cpp/third_party/
- cp -arf $LYCIUM_TOOLS_DIR/usr/$FFMPEG_NAME $install_dir/ffmpeg/ffmpeg
- if [ $? -ne 0 ]
- then
- echo "FFmpeg build failed!"
- return 1
- fi
- cp -arf $LYCIUM_TOOLS_DIR/usr/yuv $install_dir/yuv
- if [ $? -ne 0 ]
- then
- echo "yuv build failed!"
- return 1
- fi
- cp -arf $LYCIUM_TOOLS_DIR/usr/$OPESSL_NAME $install_dir/openssl
- if [ $? -ne 0 ]
- then
- echo "FFmpeg depends openssl build failed!"
- return 1
- fi
- cp -arf $LYCIUM_TOOLS_DIR/usr/soundtouch $install_dir/soundtouch
- if [ $? -ne 0 ]
- then
- echo "soundtouch build failed!"
- return 1
- fi
- if [ -d $CI_OUTPUT_DIR ]
- then
- cp -arf $LYCIUM_TOOLS_DIR/usr/$FFMPEG_NAME $CI_OUTPUT_DIR
- cp -arf $LYCIUM_TOOLS_DIR/usr/yuv $CI_OUTPUT_DIR
- cp -arf $LYCIUM_TOOLS_DIR/usr/$OPESSL_NAME $CI_OUTPUT_DIR
- cp -arf $LYCIUM_TOOLS_DIR/usr/soundtouch $CI_OUTPUT_DIR
- fi
- return 0
- }
- function prebuild()
- {
- check_sdk
- if [ $? -ne 0 ]
- then
- echo "ERROR: check_sdk failed!!!"
- return 1
- fi
- prepare_lycium
- if [ $? -ne 0 ]
- then
- echo "ERROR: prepare_lycium failed!!!"
- return 1
- fi
- prepare_depends
- start_build
- if [ $? -ne 0 ]
- then
- echo "ERROR: start_build failed!!!"
- return 1
- fi
- install_shasum
- install_depends
- if [ $? -ne 0 ]
- then
- echo "ERROR: install depends failed!!!"
- return 1
- fi
- echo "prebuild success!!"
- return 0
- }
- prebuild $*
- ret=$?
- echo "ret = $ret"
- exit $ret
- #EOF
|