6 Star 5 Fork 3

fengozl / oh-compile-script

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

oh-compile-script

oh-compile-script是一个基于Conan 2.x的一键编译鸿蒙库脚本

一、简介

该仓库为鸿蒙提供快速编译三方库的能力。它使用Conan框架进行编译三方库,并在此基础上进行封装,提供了统一的编译入口。它具有以下特点:

  • 使用简单:通过一行python 命令即可进行编译。
  • 支持多平台:可在windows/linux下编译,无需配置编译环境
  • 功能强大:支持多版本、支持构建动态库/静态库、支持Debug/Release版本、支持自定义源码编译
  • 易于整理:编译过的三方库会在本地缓存、指定路径下安装、制品仓(需配置)处上传。
  • 扩展性强:整个工程基于Conan构建,Conan基于python开发,方便用户进行客制化修改。

二、前期准备

1. 下载代码

该项目使用了git submodules,可以通过以下命令克隆全部的源码,

git clone --recursive https://gitee.com/fengozl/oh-compile-script.git

后续每次更新都有可能更新子模块,所以每次拉取最新代码后请随手执行更新子模块命令,

git pull
git submodule update

2. 配置环境

2.1. Windows环境

2.1.1. 安装Python

由于Conan基于Python构建,因此需要先安装Python >= 3.X。

2.1.2. 安装Conan

Conan在官方网站上提供了多种下载方式,这里推荐使用Python的pip命令进行安装,具体步骤请参考如下命令:

pip install conan==2.0.14

初次使用Conan需要根据当前构建环境生成对应的profile:

conan profile detect --force

如果安装比较慢或者安装失败,可以使用国内镜像源。目前支持Conan 2.0.12、2.0.14版本 其他安装方式请参考Conan文档中 Install 一章。

2.1.3. 设置SDK

编译三方库的核心是使用鸿蒙工具链编译,鸿蒙工具链获取可以有如下两种方式:

方式一: 使用DevEco Studio中的sdk

前提:本地已安装DevEco Studio。

如果本地已安装DevEco Studio,可直接使用,无需重新下载sdk; DevEco Studio安装可阅读鸿蒙的官方网站,此处不做介绍,仅介绍使用DevEco Studio中sdk进行配置。

在DevEco Studio中打开Tools下的Sdk Manager, deveco sdk manager

找到OpenHarmony或是HarmonyOS对应的location目录: Alt text

在系统环境变量中添加该 OHOS_SDK,它的值等于上面的Location加上api数字,如果不确定当前的api版本可以打开Location查看, sdk list

在新版本的sdk中,包含了hms等其他底层能力,所以需要在路径后添加base。之后即使再有变动,只要保证路径下包含native文件夹就没有问题。 sdk list new

添加设置环境变量, set env

方式二: 直接下载sdk

首先从OpenHarmony的gitee仓库下载sdk,建议下载新版

在网页上搜索 sdk(windows+linux): 获取下载链接, download sdk

解压后进入ohos-sdk/windows文件夹,对下面的zip包全部进行解压, unzip sdk

最后设置环境变量,详见使用DevEco Studio中的sdk的最后一步,OHOS_SDK的值应为当前解压目录。

2.2 Linux环境 (推荐)

2.2.1. 安装Python

$ sudo apt-get update
$ sudo apt-get install python3
$ sudo apt-get install python3-pip

2.2.2. 安装Conan

sudo pip install conan==2.0.14 # -i https://pypi.tuna.tsinghua.edu.cn/simple/
conan profile detect --force # generate profile

2.2.3. 设置SDK

首先打开官方发布渠道, 在网页上搜索 sdk(windows+linux):,右键复制链接地址,

# 通过http进行下载
wget https://gitee.com/link?target=http%3A%2F%2Fdownload.ci.openharmony.cn%2Fversion%2FMaster_Version%2FOpenHarmony_3.2.10.9%2F20230225_073754%2Fversion-Master_Version-OpenHarmony_3.2.10.9-20230225_073754-ohos-sdk-full.tar.gz

# 解压安装包
tar -zxvf version-Master_Version-OpenHarmony_3.2.10.9-20230225_073754-ohos-sdk-full.tar.gz

# 进入解压后的sdk中
cd ohos-sdk/linux

进入解压得到 ohos_sdk 目录下的 linux 目录,我们进一步解压,

for i in *.zip; do unzip ${i}; done

解压完毕后,当前文件夹下的路径和目录应为, linux set done

设置环境变量,

export OHOS_SDK=/home/hsun21/ohos-sdk/linux #请替换为您主机下sdk的路径

为了使其每次开机生效,我们可以将其加入到开机运行的脚本下,

# 此处以ubuntu为例,其他版本的unix系统设置方法请自行搜索
echo "export OHOS_SDK=/home/hsun21/ohos-sdk/linux" >> ~/.bashrc
# 执行.bashrc内的命令
source ~/.bashrc

三、如何使用

完成前期准备以后,运行如下命令,

python conanbuild.py

zlib为例进行展示,

$ python conanbuild.py
Please input the supported library name  (name is the folder name below conan-center-index_ohos/recipes) : zlib
['1.3', '1.2.13', '1.2.12', '1.2.11', 'all']
Please input the version from the above list : 1.3
Please set the build type (Debug or Release,empty for Release) :
Please set the compile target as static(False, default) or shared(True) :
Please input the install path(empty for xx\oh-compile-script/build/zlib/1.3/Release) :
Please set the custom source path(not necessary):

参数说明:

  • libName: 当前支持的三方库,为conan-center-index/recipes下的三方库名。当前支持的三方库可以参考当前鸿蒙的开源软件
  • version: 编译的版本,支持的版本会在上方打印出来
  • build type: Debug或者Release
  • static or shared: 生成动态的.so库或静态的.a库
  • install path: 三方库的构建完成后所安装的路径
  • custom source path:自定义源码目录

编译完成后会在 install path 下生成编译完成后的二进制文件和头文件。 在cmdterminal中输入,

conan list zlib:*

如果成功展示出的zlib库,则说明整个项目工作正常。接下来就可以尝试编译更多的三方库了。

conan list

四、 常见问题

  1. 三方库源码下载问题?

    由于三方库源码基本都在github,下载过程中可能出现网络问题,可以考虑使用科学上网工具;

  2. 如何使用本地源码编译?

    可在脚本执行到Please set the custom source path(not necessary):步骤时输入本地的源码目录。

    在使用本地源码时,可能由于源码需要添加自定义特性,而导致脚本中出现patch打不上或是修改(replace_in_file)替换问题,可考虑将脚本中的patch和修改(replace_in_file)去掉,只编译本地源码。后续再根据自己需求添加脚本中提供的patch和修改(replace_in_file)。

    可参考三方库源码修改方法查看基于官方源码的修改调整。

  3. 需要的三方库在已支持开源软件中不存在或是版本不存在?

    可在gitee填写issue,可参考新增三方库issue样例

  4. 出现The system cannot find the path specified.问题?

    检查OHOS_SDK环境配置,OHOS_SDK的值为鸿蒙sdk中native文件夹所在的目录;如配置后未生效,windows环境下需要重新打开CMD窗口。windows环境建议使用cmd或是powershell;

  5. 修改了三方库源码,但是重新编译未生效?

    使用conan remove xxx -c清除缓存后重新编译;

  6. 已支持开源软件中三方库编译不通过,如何解决?

    列表中三方库已经过验证,均能编译通过,如出现编译不通过问题,可参考三方库编译问题填写issue;

  7. Testing the package报错,如何解决?

    Testing the package阶段为生成在鸿蒙系统中可执行二进制文件阶段,此阶段基本上已成功编译出三方库文件,可在build文件夹中查看。也可在config/conan_build_args_mapping.yml文件配置跳过。具体可参考config中配置说明

  8. 如何查看三方库依赖?

    参考三方库编译依赖管理

  9. 如何查看脚本修改了三方库中的哪些源码?

    参考三方库源码修改方法

  10. 如何调整三方库编译时使用的编译工具(cmake、make,configure)的参数和选项?

    参考conanfile.py调整编译参数

  11. 工具链cmake升级

    修改config/profile_ohos中tools.cmake:cmake_program,设置为本地高版本cmake

  12. 如何将完整日志输出至文件中?

    windows环境:python .\conanbuild.py 2>&1 |tee xxx.log

    linux环境: python conanbuild.py 2>&1 | tee xxx.log

  13. 调整动态库soname

    使用patchelf(仅linux环境下使用)工具修改动态库soname。

    # patchelf工具需要在linux环境下使用
    # 将libunwind.so中的soname修改为libunwind.so
    patchelf --set-soname libunwind.so libunwind.so
    
    
    # patchelf修改needed
    # 修改libunwind-aarch64.so中的needed,libunwind.so.8修改为libunwind.so
    patchelf --replace-needed libunwind.so.8 libunwind.so libunwind-aarch64.so

五、已支持开源软件

以下软件已经过测试

软件名字 支持的版本 备注
asio 1.23.0, 1.22.1, 1.22.0, 1.21.0, 1.20.0, 1.19.2, 1.19.1, 1.19.0, 1.18.2, 1.18.1, 1.18.0, 1.17.0, 1.16.1, 1.16.0, 1.14.1, 1.14.0, 1.13.0, 1.12.2
brotli 1.1.0, 1.0.9, 1.0.7
bzip2 1.0.8, 1.0.6
c-ares 1.21.0, 1.20.1, 1.19.1, 1.19.0, 1.18.1, 1.17.2, 1.17.1, 1.16.1, 1.15.0, 1.14.0
chipmunk2d 7.0.3
cpu-features 0.9.0, 0.8.0, 0.7.0, 0.6.0
cunit 2.1-3
detex v0.1.1
double-conversion 3.3.0, 3.2.1, 3.2.0, 3.1.7, 3.1.6, 3.1.5, 3.1.4
eigen 3.4.0, 3.3.9, 3.3.8,3.3.7
expat 2.5.0, 2.4.9, 2.4.8, 2.4.7, 2.4.6, 2.4.5, 2.4.4, 2.4.3, 2.4.2, 2.4.1, 2.3.0, 2.2.10, 2.2.0
freetype 2.10.4, 2.11.1, 2.12.1, 2.13.0
gmp 6.1.2, 6.2.0, 6.2.1, 6.3.0
harfbuzz 8.3.0, 8.2.2, 8.2.1, 8.1.1, 8.0.1, 7.3.0, 6.0.0, 5.1.0,2.4.0
hwcpipe 2.2.0, 2.1.0, 2.0.0, v.2.0
imath 3.1.9, 3.1.8, 3.1.7, 3.1.6, 3.1.5, 3.1.4
jasson 2.14, 2.13, 2.12
jasper 4.0.0, 3.0.6, 2.0.33
jbig 20160605
jxrlib cci.20170615
lcms 2.14, 2.13.1
libcurl 7.34.0, 7.60.0, 7.79.1, 7.80.0, 7.82.0, 7.83.1, 7.84.0, 7.85.0, 7.86.0, 7.87.0, 7.88.1, 8.0.1, 8.1.1, 8.1.2, 8.2.0, 8.2.1, 8.4.0 如何修改openssl依赖参考三方库链接问题
libdeflate 1.19, 1.18, 1.17, 1.15, 1.14, 1.12, 1.10, 1.9, 1.8, 1.7
libev 4.33, 4.27, 4.25
libevent 2.1.12, 2.1.11
libexpat 2.1.12, 2.1.11
libfdk_aac 2.0.2, 2.0.1, 2.0.0
libiconv 1.17, 1.16, 1.15, 1.13.1
libjpeg 9c, 9d, 9e, 9
libmp3lame 3.100, 3.99.5, 3.98.4
libnghttp2 1.58.0, 1.57.0, 1.56.0, 1.55.1, 1.55.0, 1.54.0, 1.53.0, 1.51.0, 1.50.0
libpng 1.5.30, 1.6.32, 1.6.37, 1.6.38, 1.6.39, 1.6.40, 1.6.34
libraw 0.21.1, 0.20.2, 0.20.0
libsamplerate 0.2.2, 0.2.1
libstrophe 0.12.3, 0.12.2, 0.12.0, 0.11.0, 0.10.1, 0.9.3, 0.9.1
libtiff 4.6.0, 4.5.1, 4.5.0, 4.4.0, 4.3.0
libwebp 1.3.2, 1.3.1, 1.2.4, 1.1.0
libwebsockets 4.3.2, 4.3.0, 4.2.1, 4.1.6, 4.1.4, 4.0.15, 3.0.0, 1.7.9, 1.6.3, 1.6.0
libx264 cci.20220602, 20191217, 20190605
libxml2 2.11.5
libyaml 0.2.2,0.2.5
libpbc master
lmdb 0.9.29
luajit 2.1.0-beta3
lz4 1.9.4, 1.9.3, 1.9.2
mikktspace cci.20200325
nettle 3.8.1, 3.6, 3.5
ngtcp2 1.0.1, 1.0.0, 0.19.1
nghttp3 1.0.0, 0.15.0
ogg 1.3.5, 1.3.4
openssl 1.0.1t, 1.0.2u, 1.1.0c, 1.1.0f, 1.1.1, 1.1.1b 1.1.1k, 1.1.1t 1.1.1u, 1.1.1v, 1.1.1w, 3.0.11, 3.0.12, 3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4 3.x版本添加了provider,需配合使用
physX 4.1.1, 4.1.2
sdl 2.28.3, 2.28.2, 2.26.5, 2.26.1, 2.26.0, 2.24.1, 2.24.0, 2.0.20
tinyxml2 7.1.0,8.0.0,9.0.0
theora 1.1.1
tremolo 0.08, 0.07, 0.06
vorbis 1.3.7, 1.3.6
xerces-c 3.2.4, 3.2.3, 3.2.2
xz_utils 5.4.4, 5.4.2, 5.4.0, 5.2.10, 5.2.5, 5.2.4
zlib 1.3, 1.2.13, 1.2.12, 1.2.11, 1.2.8
zstd 1.5.5, 1.5.4, 1.5.2, 1.5.1, 1.5.0, 1.4.9, 1.4.8, 1.4.7, 1.4.5, 1.4.4, 1.4.3, 1.3.8, 1.3.5
spidermonkey v33 仅支持在Linux环境编译,且环境依赖Python27
libjpeg-turbo 3.0.0, 2.1.5, 2.0.6
opus 1.4, 1.3.1
libx265 3.4, 3.2.1
libunwind 1.1, 1.3.1, 1.5.0, 1.6.2, 1.7.0, 1.7.2
libvpx 1.11.0, 1.10.0, 1.9.0
liquidfun 1.1.0, 1.0.0
meshoptimizer 0.17, 0.16, 0.15, 0.14
llvm-openmp 16.0.6, 14.0.6, 13.0.1, 12.0.1, 11.1.0, 10.0.0, 9.0.1
openh264 2.3.1, 2.1.1, 1.7.0
protobuf 3.21.12, 3.21.9, 3.21.4, 3.20.0, 3.19.6, 3.19.4, 3.18.1, 3.17.1, 3.5.1
sparsehash 2.0.3, 2.0.4
box2d 2.3.1, 2.4.0, 2.4.1
clipper 6.4.2, 4.10.0
ffmpeg 6.1, 6.0, 5.1.3, 5.0.3, 5.0, 4.4.4, 4.4.3, 4.4, 4.3.2, 4.2.1, 3.4
freeimage 3.18.0
libart master
openexr 3.1.9, 3.1.7, 3.1.5, 2.5.7, 2.5.5, 2.5.3, 2.5.2, 2.5.0, 2.4.1
speexdsp 1.2.1
openal-soft 1.22.0 不支持脚本直接编译,需通过源码编译。已适配源码参考:https://gitee.com/WayneHalak/open-al-soft/commits/master
yas 7.0.5
mpg123 1.29.3
libxmp 4.2.6
nvcloth master
raknet 3.25, 4.081
libzip 1.5.2
cpr 1.7.0 依赖libcurl和openssl,编译libcurl时,需将cookies功能关闭

扩展阅读

1. conan的使用

官方文档

2. jfrog制品仓

仓库配置

MIT License Copyright (c) 2023 fengozl Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

基于conan技术鸿蒙化脚本 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/fengozl/oh-compile-script.git
git@gitee.com:fengozl/oh-compile-script.git
fengozl
oh-compile-script
oh-compile-script
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891