lycium_plusplus:基于OpenHarmony的C++编译框架增强项目

基于openharmony cpp 编译框架lycium的增强,扩展外部代码仓引入和版本级管理

分支1Tags0
文件最后提交记录最后更新时间
6 个月前
5 个月前
5 个月前
6 个月前
6 个月前
6 个月前
6 个月前
6 个月前
6 个月前

lycium_plusplus

基于openharmony cpp 编译框架lycium的增强

[x] 1. 针对目标产物,构建依赖关系树,一键构建

[x] 2. 对于三方库的HPKBUILD,提供多版本构建能力,代码仓脱离本仓独立发布,可通过三方件源码仓获取编译

[x] 3. 提供hnp构建产物的生成,支持HarmonyOS使用

[x] 4. 提供在华为电脑上直接编译的支持

[ ] 5. 产物针对开源声明进行聚合,生成html文件

关于lycium编译框架,请访问OpenHarmony-SIG/tpc_c_cplusplus了解更多

如何使用

原生交叉编译

本项目遵循lycium编译框架,您可以基于lycium基础进行构建,如

cd lyium
./build.sh unzip

通过原生方式,lycium编译框架会基于community/thirdparty 中已存在的三方库进行编译构建

增强型交叉编译

框架示意 image.png

外部适配仓参与构建

本项目新增目录external_deps用于临时存放外部仓,外部仓信息存放在external_deps/module.json

该文件中包含的关键要素如下:

    "module" : [
        {
            "name" : "tree",
            "branch" : "ohos_2.2.1",
            "version" : "2.2.1",
            "type" : "git",
            "url" : "https://gitcode.com/OpenHarmonyPCDeveloper/ohos_tree.git"
        }
    ]
  1. name为模块名称,如上述示例中的tree
  2. url为适配仓代码地址,以及适配仓所对应的原生代码tree的版本信息version
  3. branch为适配仓为该对应关系中适配仓的对应分支信息
  4. type为适配仓托管类型的下载方式,如上述中,ohos_tree适配仓的下载方式为git(其他获取源码方式待扩展)

外部ports仓规范

外部代码仓适配遵循lycium原生框架所需要的内容,仅作为独立仓库部署,例如tree的适配,额外可以增加打包hnp时的配置文件hnp.json

├── 0001-ports-for-ohos.patch
├── HPKBUILD
└── hnp.json

hnp.json示例如下:

{
    "type":"hnp-config",
    "name":"tree",
    "version":"2.2.1",
    "install":{}
}

此外,在HPKBUILD中,按照需求可以增加archive阶段

archive() {
    mkdir -p ${LYCIUM_ROOT}/output/$ARCH
    pushd $LYCIUM_ROOT/usr/$pkgname/$ARCH
        tar -zvcf ${LYCIUM_ROOT}/output/$ARCH/${pkgname}_${pkgver}.tar.gz *
    popd
    cp hnp.json $LYCIUM_ROOT/usr/$pkgname/$ARCH
    ${HNP_TOOL} pack -i ${LYCIUM_ROOT}/usr/$pkgname/$ARCH -o ${LYCIUM_ROOT}/output/$ARCH/
}

e1c99a92-c3f7-43ab-a6e4-78965ffcadcd.png 该阶段将会在package()阶段后被调用,该阶段需要按照${LYCIUM_ROOT}/output/$ARCH路径进行输出

编译

适配完成后,可以按照原生编译的方式执行,仍以tree举例:

 cd lyium
 ./build.sh tree

14684e05-c8f5-403a-a184-7145ffb68ce3.png

产物获取

获取编译产物

  1. 可在lycium/usr/tree/<ARCH>下获取对应架构下的二进制产物
  2. 可在lycium/output/<ARCH>/下获取对应架构下的归档产物

在华为电脑本机编译

原理介绍

我们在DevBox中提供了llvm、clang、make、cmake等一系列工具,这意味者我们可以在鸿蒙电脑上进行C/C++三方库构建具备了基础,但由于一些历史代码未进行适配鸿蒙相关的架构平台(尤其是采用autoconf,configure/config等自动通过uname识别构建机和目标机)的无法做到自动编译

因此,当前框架也进行了一部分调整

  1. 增加了build_local.sh本机构建入口
  2. lycium/script/build_hpk.sh调整了在执行build_local.sh时,仅构建适配平台的架构,当前适配了HarmonyOS,因此在TARGET_HARMONYOS变量为华为鸿蒙电脑构建的标识,在执行arch选择时,仅执行arm64-v8a
  3. 由于大部分脚本编写都是基于bash的,为了保证兼容性,将sh脚本的解释器指定为#!/bin/env bash

HPKBUILD适配

  1. 在prepare阶段,判断TARGET_HARMONYOS变量,若为true,怎执行setHarmonyOSENV环境变量设置(该设置指定了CC/CXX等常用的构建命令)
  2. host/type/build通过BUILD_SYSTEM_CONFIG变量指定为aarch64-linux,欺骗config类架构判断方式
  3. 其他保持不变

构建

cd lyium
./build_local.sh unzip

其他

构建结果、产物等,与交叉编译无异

项目介绍

基于openharmony cpp 编译框架lycium的增强,扩展外部代码仓引入和版本级管理

定制我的领域