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(){
+ :
+}