# This is an example HPKBUILD file. Use this as a start to creating your own,# and remove these comments.# NOTE: Please fill out the license field for your package! If it is unknown,# then please put 'unknown'.# Contributor: Your Name <[email protected]># Maintainer: Your Name <[email protected]>
pkgname=NAME # 库名,必填
pkgver=VERSION # 库版本,必填
pkgrel=0 # 发布号,固定为 0 即可
pkgdesc=""# 库功能描述,必填
url=""# 库官网地址,必填
archs=("armeabi-v7a""arm64-v8a") # 鸿蒙主流 CPU 架构,固定这两个即可
license=() # 开源协议,必填
depends=() # 运行依赖库,无则留空,依赖库需适配同架构
makedepends=() # 编译依赖工具,无则留空source="https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz"# 源码下载链接
downloadpackage=true# 是否自动下载源码包,默认 true
autounpack=true# 是否自动解压源码包,默认 true
buildtools= # 编译方式,支持 cmake/configure/make,必填
builddir= # 源码解压后的目录名
packagename=$builddir.tar.gz # 源码包文件名# 编译前环境准备:创建目录、设置环境变量、源码预处理prepare(){
cd$builddircd${OLDPWD}
}
# 核心编译逻辑:交叉编译核心步骤,架构判断、编译命令执行build(){
cd$builddir${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -DOHOS_ARCH=$ARCH -B$ARCH-build -S./ -L
make -j4 -C $ARCH-build
ret=$?
cd$OLDPWDreturn$ret
}
# 打包安装:将编译产物安装到鸿蒙指定目录package(){
cd$builddir
make -C $ARCH-build install
cd$OLDPWD
}
# 测试说明:鸿蒙设备端测试的前置说明check(){
echo"The test must be on an OpenHarmony device!"
}
# 环境清理:编译完成后清理构建产物cleanbuild(){
rm -rf ${PWD}/$builddir
}
【实战案例 1】fftw3 的 HPKBUILD(无依赖纯算法库,configure 编译)
# Contributor: 小肉头君 <[email protected]># Maintainer: 小肉头君 <[email protected]>
pkgname=fftw3
pkgver=3.3.10
pkgrel=0
pkgdesc="FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data."
url="http://fftw.org/"
archs=("armeabi-v7a""arm64-v8a")
license=("GPL-2.0-or-later")
depends=()
makedepends=()
source="http://fftw.org/fftw-${pkgver}.tar.gz"
autounpack=true downloadpackage=true
buildtools="configure"
builddir=fftw-$pkgver
packagename=$builddir.tar.gz
source envset.sh host=optargs=
prepare(){
mkdir -p $builddir/$ARCH-build
if [$ARCH=="armeabi-v7a"]
then setarm32ENV host=arm-linux fiif [$ARCH=="arm64-v8a"]
then setarm64ENV host=aarch64-linux fi
optargs="--enable-single --with-slow-timer"
}
build(){
cd$builddir/$ARCH-build
PKG_CONFIG_LIBDIR="${pkgconfigpath}"../configure "$@$optargs\
--enable-threads --enable-shared --host=$host>$buildlog2>&1
$MAKEVERBOSE=1>>$buildlog2>&1
ret=$?
cd $OLDPWD
return $ret
}
package(){
cd $builddir/$ARCH-build
$MAKEVERBOSE=1install>>$buildlog2>&1
cd $OLDPWD
if [$ARCH=="armeabi-v7a"];then unsetarm32ENV;fi
if [$ARCH=="arm64-v8a"];then unsetarm64ENV;fi
unsethost optargs
}
check(){
cd $builddir/$ARCH-build
sed -i '/.*check-local: bench$(EXEEXT)/c\check-local: #bench$(EXEEXT)' tests/Makefile
sed -i "s#/usr/bin/sed#sed#g" tests/bench
sed -i "s#/bin/bash#/data/CIusr/bin/bash#g" tests/Makefile tests/bench
cd $OLDPWD
echo "The test must be on an OpenHarmony device!"
}
cleanbuild(){
rm -rf ${PWD}/$builddir
}
# Copyright (c) 2023 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.# Contributor: Jeff Han <[email protected]> ,Tao Han <[email protected]> # Maintainer: Jeff Han <[email protected]>
pkgname=tassl pkgver=1.1.1 pkgrel=0
pkgdesc="TASSL is an SSL/TLS protocol implementation that supports national secret algorithms"
url="https://github.com/jntass/TASSL-1.1.1"
archs=("armeabi-v7a""arm64-v8a")
license=("OpenSSL")
depends=(openssl_1_1_1w zlib_1_3_1)
makedepends=()
commitId="a30d107669fdf7d6909b10f1e179de4aaff38ff5"source="https://github.com/jntass/$pkgname-$pkgver/archive/$commitId.zip"
autounpack=true downloadpackage=true
buildtools="configure"
builddir=TASSL-${pkgver}-$commitId
packagename=$builddir.zip
source envset.sh patchflag=trueprepare(){
if$patchflagthencd$builddir
patch -p1 <`pwd`/../tassl_oh_pkg.patch >>$publicbuildlog2>&1
patchflag=falsecd$OLDPWDficp $builddir${builddir}-${ARCH}-build -rf
if [$ARCH=="armeabi-v7a"];then setarm32ENV;
elif [$ARCH=="arm64-v8a"];then setarm64ENV;
elseecho"${ARCH} not support";return -1;fi
}
build(){
cd$builddir-$ARCH-build
./config "$@" no-asm >$buildlog2>&1
$MAKE>>$buildlog2>&1
ret=$?
cd$OLDPWDreturn$ret
}
package(){
cd$builddir-$ARCH-build
mkdir -p ${LYCIUM_ROOT}/usr/${pkgname}/${ARCH}/
$MAKEinstall>>$buildlog2>&1
cd$OLDPWD
}
check(){
if [$ARCH=="armeabi-v7a"];then unsetarm32ENV;
elif [$ARCH=="arm64-v8a"];thencd$builddir-$ARCH-build
sed -i.bak "s|PERL=/usr/bin/perl|PERL=/data/CIusr/bin/perl|g" ./Makefile
maketest>>$buildlog2>&1
cd$OLDPWD
unsetarm64ENV
elseecho"${ARCH} not support";return -1;fiecho"The test must be on an OpenHarmony device!"
}
cleanbuild(){
rm -rf $builddir-$ARCH-build $packagename$builddir
}
# This is an example HPKCHECK file. Use this as a start to creating your own,# and remove these comments.# Contributor: Your Name <[email protected]># Maintainer: Your Name <[email protected]>source HPKBUILD > /dev/null 2>&1
# 导入 HPKBUILD 的元信息
logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log# 测试前准备,无则留空checkprepare(){
return0
}
# 鸿蒙设备端核心测试接口,所有测试逻辑写在这里openharmonycheck(){
res=0
cd${builddir}/${ARCH}-build
ctest >${logfile}2>&1
# 测试命令,按需修改为 make test/ctest 等
res=$?
cd$OLDPWDreturn$res
}