diff --git a/community/README.md b/community/README.md new file mode 100644 index 0000000000000000000000000000000000000000..cfdbb022da8cae775666a8bfc30e925b097890e1 --- /dev/null +++ b/community/README.md @@ -0,0 +1,3 @@ +# 社区主导的构建库 +暂不支持显示编译,可以隐式的作为thirdparty的依赖库编译。
+如果需要显示编译,可将本目录下的库,直接copy到thirdparty目录即可。 diff --git a/lycium/build.sh b/lycium/build.sh index c3b161882ee8dd70eccaeca41f4f124174337ed9..2fbf7f53bcb0c05ee8f03537e8b702dc151718bb 100755 --- a/lycium/build.sh +++ b/lycium/build.sh @@ -20,6 +20,7 @@ elif [ "$osname" == "Darwi" ] # Darwin then echo "Build OS Darwin" LYCIUM_ROOT=$(cd $(dirname ${BASH_SOURCE[0]}); pwd) + buildcheckflag=false else echo "System cannot recognize, exiting" exit 0 @@ -60,10 +61,28 @@ do done hpksdir="../thirdparty/" # 所有 hpk 项目存放的目录 +communitydir="../community" + +preparetoolchain() { + # 检查工具链,不存在则解压工具链 + if [ ! -f $OHOS_SDK/native/llvm/bin/aarch64-linux-ohos-clang ] || + [ ! -f $OHOS_SDK/native/llvm/bin/aarch64-linux-ohos-clang++ ] || + [ ! -f $OHOS_SDK/native/llvm/bin/arm-linux-ohos-clang ] || + [ ! -f $OHOS_SDK/native/llvm/bin/arm-linux-ohos-clang++ ] || + [ ! -f $OHOS_SDK/native/llvm/bin/aarch64-linux-ohos-clang.cmd ] || + [ ! -f $OHOS_SDK/native/llvm/bin/aarch64-linux-ohos-clang++.cmd ] || + [ ! -f $OHOS_SDK/native/llvm/bin/arm-linux-ohos-clang.cmd ] || + [ ! -f $OHOS_SDK/native/llvm/bin/arm-linux-ohos-clang++.cmd ] + then + cd ${LYCIUM_ROOT}/Buildtools/ + tar -zxf toolchain.tar.gz -C $OHOS_SDK/native/llvm/bin/ + cd ${OLDPWD} + fi +} checkbuildenv() { - cmdlist=("gcc" "cmake" "make" "pkg-config" "autoconf" "autoreconf" "automake" \ - "patch" "unzip" "tar" "git" "ninja" "curl" "sha512sum") + cmdlist=("gcc" "g++" "cmake" "make" "pkg-config" "autoconf" "autoreconf" "automake" \ + "patch" "unzip" "tar" "git" "ninja" "curl" "sha512sum" "wget") for cmd in ${cmdlist[@]} do which $cmd >/dev/null 2>&1 @@ -85,6 +104,7 @@ checkbuildenv() { hpkPaths=() donelist=() donelibs=() +communitylibs=() readdonelibs() { if [ -f $1 ] then @@ -112,6 +132,16 @@ readdonelibs() { donelist=(${donelibs[@]}) } +collectcommunitylibs() { + for file in $(ls $LYCIUM_ROOT/$1) + do + if [ -d $1/$file ] + then + communitylibs[${#communitylibs[@]}]=$LYCIUM_ROOT/$1/$file + fi + done +} + makelibsdir() { jobs=($*) for job in ${jobs[@]} @@ -119,7 +149,8 @@ makelibsdir() { doneflags=false for donelib in ${donelibs[@]} do - if [ $donelib == $job ] + libname=${job##*/} # 截取库名 + if [ $donelib == $libname ] then doneflags=true fi @@ -128,23 +159,36 @@ makelibsdir() { then continue fi - tmppath=$LYCIUM_ROOT/$hpksdir/$job - if [[ -d $tmppath && -f $tmppath/HPKBUILD ]] + if [[ -d $job && -f $job/HPKBUILD ]] + then + hpkPaths[${#hpkPaths[@]}]=$job + fi + done +} + +findarglibsdir() { + libs=($*) + tmplibs=() + for lib in ${libs[@]} + do + tmplib=$LYCIUM_ROOT/$hpksdir/$lib + if [[ -d $tmplib && -f $tmplib/HPKBUILD ]] then - hpkPaths[${#hpkPaths[@]}]=$tmppath + tmplibs[${#tmplibs[@]}]=$tmplib fi done + makelibsdir ${tmplibs[@]} } -# 找到main目录下的所有目录 +# 找到 $1 目录下的所有目录 # 参数1 为项目根路径 -findmainhpkdir() { +findhpkdir() { tmplibs=() - for file in $(ls $1) + for file in $(ls $LYCIUM_ROOT/$1) do if [ -d $1/$file ] then - tmplibs[${#tmplibs[@]}]=$file + tmplibs[${#tmplibs[@]}]=$LYCIUM_ROOT/$1/$file fi done makelibsdir ${tmplibs[@]} @@ -218,14 +262,23 @@ buildhpk() { # echo "添加依赖" for deppkg in `cat ${LYCIUM_DEPEND_PKGNAMES}` do - # echo "Line contents are : $deppkg " + # find in hpksdir tmppath=$LYCIUM_ROOT/$hpksdir/$deppkg if [[ -d $tmppath && -f $tmppath/HPKBUILD ]] + then + deppath=$tmppath + else + # find in communitydir + deppath=$LYCIUM_ROOT/$communitydir/$deppkg + fi + + # 如果 deppath 合法,即将其添加到编译列表 + if [[ -d $deppath && -f $deppath/HPKBUILD ]] then doneflag=false for libname in ${donelist[@]} # 不在已完成的列表中 do - if [ $tmppath == $LYCIUM_ROOT/$hpksdir/$libname ] + if [ $deppath == $LYCIUM_ROOT/$hpksdir/$libname ] then doneflag=true fi @@ -233,7 +286,7 @@ buildhpk() { nextflag=false for libname in ${nextroundlist[@]} # 不在待编译的列表中 do - if [ $tmppath == $libname ] + if [ $deppath == $libname ] then nextflag=true fi @@ -241,7 +294,7 @@ buildhpk() { notdoneflag=false for libname in ${notdonelist[@]} # 不在未完成的列表中 do - if [ $tmppath == $libname ] + if [ $deppath == $libname ] then notdoneflag=true fi @@ -249,16 +302,16 @@ buildhpk() { buildfalseflag=false for libname in ${buildfalselist[@]} # 不在编译失败的列表中 do - if [ $tmppath == $libname ] + if [ $deppath == $libname ] then buildfalseflag=true fi done if ! $doneflag && ! $nextflag && ! $notdoneflag && ! $buildfalseflag # 添加到下一轮的编译中 then - nextroundlist[${#nextroundlist[@]}]=$tmppath - hpkPaths[${#hpkPaths[@]}]=$tmppath - prepareshell $tmppath + nextroundlist[${#nextroundlist[@]}]=$deppath + hpkPaths[${#hpkPaths[@]}]=$deppath + prepareshell $deppath fi fi @@ -277,7 +330,7 @@ buildhpk() { done if ! $roundflag then - nextroundlist[${#nextroundlist[@]}]=${notdonelist[$i]} + nextroundlist[${#nextroundlist[@]}]=${notdonelist[$i]} # 将自己放在依赖库最后(如果有deps) fi echo nextroundlist:${nextroundlist[*]} > $LYCIUM_ROOT/lycium_build_intl.log else @@ -313,37 +366,31 @@ buildhpk() { done } -copytools() { - if [ -e $OHOS_SDK/native/llvm/bin/aarch64-linux-ohos-clang ] - then - return 0 - else - tar xvf Buildtools/toolchain.tar.gz - cp -rfa toolchain/* $OHOS_SDK/native/llvm/bin - rm -rf toolchain - fi -} - main() { - copytools - + # 准备编译工具链 + preparetoolchain + # 检查编译环境 checkbuildenv - + # 读取编译记录 readdonelibs "$LYCIUM_ROOT/usr/hpk_build.csv" - - if [ $# -ne 0 ] + # 搜集 communitydir 目录库 + collectcommunitylibs $communitydir + # 搜集libs + if [ $# -ne 0 ] # 参数个数不为 0 then - makelibsdir $* + # 搜集指定的libs + findarglibsdir $* else - findmainhpkdir $LYCIUM_ROOT/$hpksdir - # exit 2 + # 搜集所有可编译的库 + findhpkdir $hpksdir fi - + # 准备脚本软链接 prepareshell ${hpkPaths[@]} + # 编译 buildhpk - + # 清理 cleanhpkdir - unset LYCIUM_BUILD_OS LYCIUM_ROOT LYCIUM_BUILD_CHECK CLANG_VERSION + unset LYCIUM_BUILD_OS LYCIUM_ROOT CLANG_VERSION } main $* diff --git a/lycium/script/build_hpk.sh b/lycium/script/build_hpk.sh index 8300f9cb02a0c38744ac40f327cb8838b7a3e84d..4fb2c7d62052cb9d6179808c5d1e4b3fcc198e7e 100755 --- a/lycium/script/build_hpk.sh +++ b/lycium/script/build_hpk.sh @@ -22,7 +22,8 @@ download() { then echo ${PWD}/$2",存在" else - curl -f -L -k -- "$1" > ${PWD}/$2 + echo "Downloading "$2 + wget "$1" -O ${PWD}/$2 -o download.log return $? fi } @@ -65,12 +66,7 @@ source ${PWD}/HPKBUILD checksum() { sha512sum -c ${PWD}/$1 ret=$? - if [ $ret -ne 0 ] - then - echo "$pkg2name SHA512SUM 校验失败, 请确认 SHA512SUM 无误后, 重新编译." - rm -rf $packagename - exit $ret - fi + return $ret } newdeps=() @@ -112,7 +108,7 @@ recordbuildlibs() { buildargs= pkgconfigpath= cmakedependpath() { # 参数1为cpu type - buildargs="-LH -DCMAKE_BUILD_TYPE=Release -DCMAKE_SKIP_RPATH=ON -DCMAKE_SKIP_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=${OHOS_SDK}/native/build/cmake/ohos.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$LYCIUM_ROOT/usr/$pkgname/$1 -G \"Unix Makefiles\" -DOHOS_ARCH=$1 " + buildargs="-LH -DCMAKE_BUILD_TYPE=Release -DCMAKE_SKIP_RPATH=ON -DCMAKE_SKIP_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=${OHOS_SDK}/native/build/cmake/ohos.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$LYCIUM_ROOT/usr/$pkgname/$1/ -G \"Unix Makefiles\" -DOHOS_ARCH=$1 " pkgconfigpath="" if [ ${#depends[@]} -ne 0 ] then @@ -137,7 +133,7 @@ cmakedependpath() { # 参数1为cpu type configuredependpath() { pkgconfigpath="" - buildargs="--prefix=$LYCIUM_ROOT/usr/$pkgname/$1" + buildargs="--prefix=$LYCIUM_ROOT/usr/$pkgname/$1/" if [ ${#depends[@]} -ne 0 ] then for depend in ${depends[@]} @@ -185,13 +181,20 @@ builpackage() { done exit 101 fi - echo "Build $pkgname $pkgver start!" + echo "Start building $pkgname $pkgver!" if [ ! $downloadpackage ] || [ $downloadpackage != false ] then sure download $source $packagename if [ -f "SHA512SUM" ] then - sure checksum SHA512SUM + # 判断新下载的源码压缩包正确性。如果失败退出编译,不删除,下载的压缩包 + checksum SHA512SUM + ret=$? + if [ $ret -ne 0 ] + then + echo "SHA512SUM 校验失败, 请确认 SHA512SUM 无误后, 重新编译" + exit $ret + fi fi fi if [ ! $autounpack ] || [ $autounpack != false ] @@ -203,7 +206,7 @@ builpackage() { for arch in ${archs[@]} do # TODO archs1 编译失败,继续编译archs2 - echo "Compile OpenHarmony $arch $pkgname $pkgver libs..." + echo "Compileing OpenHarmony $arch $pkgname $pkgver libs..." ARCH=$arch buildlog=$PKGBUILD_ROOT/$pkgname-$pkgver-$ARCH"-lycium_build.log" publicbuildlog=$PKGBUILD_ROOT/$pkgname"-public-lycium_build.log" @@ -219,9 +222,12 @@ builpackage() { fi sure build $buildargs sure package - if $LYCIUM_BUILD_CHECK + if [ -n "${LYCIUM_BUILD_CHECK}" ] then - sure check + if [ ${LYCIUM_BUILD_CHECK} == "true" ] + then + sure check + fi fi f=`type -t recoverpkgbuildenv` if [ "x$f" = "xfunction" ] @@ -235,6 +241,20 @@ builpackage() { cleanhpk() { sure cleanbuild + # 提前校验已存在的压缩包, 非法则清理. 待后续新下载 + if [ -s ${PWD}/$packagename ] + then + if [ -f "SHA512SUM" ] + then + checksum SHA512SUM + ret=$? + if [ $ret -ne 0 ] + then + rm -f ${PWD}/$packagename + fi + fi + fi + rm -rf *-lycium_build.log } diff --git a/thirdparty/communitybridge/HPKBUILD b/thirdparty/communitybridge/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..8808595c973bac3e3478211847455a139bc5c9cf --- /dev/null +++ b/thirdparty/communitybridge/HPKBUILD @@ -0,0 +1,41 @@ +# Contributor: Jeff Han +# Maintainer: Jeff Han + +pkgname=communitybridge +pkgver=v0.1 +pkgrel=0 +pkgdesc="此库为影子库,只用于 CI 触发 community 目录下的库编译,不可用于其他目的。用于解决 community 下非依赖库,不能主动编译问题。可将 community 下上述情况库的库名(及目录名)填写到本项目的 depends 数组中以依赖库的方式触发其编译。" +url="" +archs=("armeabi-v7a" "arm64-v8a") +license=() +depends=() # 填下 community 下的库目录名,lycium 会自动触发其的编译工作 +makedepends=() + +source= + +autounpack=false +downloadpackage=false + +builddir= +packagename= + +# 所有函数均为空函数 +prepare() { + : +} + +build() { + : +} + +package() { + : +} + +check() { + : +} + +cleanbuild(){ + : +}