幕布:
文档链接: https://www.mubucm.com/doc/1z3htgqATZ6
密码: eueu

文章目录

  • 1. 方舟编译器构建体系(逐层向下)
    • 1. 构建流程 :
    • 2. 构建工具介绍:
      • 1. Makefile
      • 2. gn
      • 3. Ninja
        • 1. Ninja的特点:
  • 2. 方舟编译器源码编译
    • 1. 环境配置
      • 1. Ubuntu 环境
      • 2. Clang 工具链
      • 3. gn 和 Ninja
    • 2. 源码编译
      • 1. 编译命令
      • 2. 生成文件目录
  • 3. 方舟编译器官方例子编译
    • 1. 编译前准备
      • 1. 提前完成方舟编译器的源码编译
      • 2. 编译需要依赖 libcore 的 jar 包
        • 1. 获取途径
        • 2. 使用方法:
    • 2. 官方编译例子
      • 1. exceptiontest
      • 2. helloworld
      • 3. iteratorandtemplate
      • 4. polymorphismtest
      • 5. recycletest
      • 6. threadtest
  • 4. Toy runtime
    • 1. 编译 Toy runtime 的步骤:
      • 1. 获取 Toy runtime 源码
      • 2. 安装 aarch64 gnu linux 工具链
      • 3. 修改 Makefile
      • 4. 执行 make 或者 make pacific 编译完成
    • 2. Toy runtime 加载汇编文件

1. 方舟编译器构建体系(逐层向下)

  1. 多个工具层次化配置的构建体系 - 编译速度快 - 能更加快速地适应多种软硬件平台 - 需要开发者熟悉更多的构建工具

1. 构建流程 :

  1. Makefile 作为最上层的构建工具,暴露给编译源码的使用者,并且它会调用 gn;
  2. gn 为 Ninja的构建准备相关的配置文件;
  3. 最终通过 Ninja 完成构建工作。

2. 构建工具介绍:

1. Makefile

  1. 业界使用已久的构建工具。

2. gn

  1. gn 是 Chromium 项目开发的一种元构建系统,用来替代 GPY。
  2. 和 GPY 相比,它的速度更快,能更好地解决依赖问题,能更好地支持调试。
  3. gn 这个构建系统,只生成 Ninja 构建文件,并不进行编译。

3. Ninja

  1. Ninja 是一个小型的构建系统,它聚焦于编译速度
1. Ninja的特点:
  1. 它需要更高级的构建系统为它生成输入文件
  2. 它的设计目的是尽可能快的构建。

2. 方舟编译器源码编译

1. 环境配置

1. Ubuntu 环境

默认为 Ubuntu 16.04

2. Clang 工具链

3. gn 和 Ninja

修改 gn 和 Ninja 的权限

2. 源码编译

1. 编译命令

# 初始化环境
source build/envsetup.sh  # 直接进行编译
make # 编译 Debug 版本
make BUILD_TYPE = DEBUG

2. 生成文件目录

out/bin

3. 方舟编译器官方例子编译

  1. 案例位置: OpenArkCompiler 主目录下的 sample目录中
  2. 注意事项:需要提前完成方舟编译器的源码编译

1. 编译前准备

1. 提前完成方舟编译器的源码编译

2. 编译需要依赖 libcore 的 jar 包

1. 获取途径
  1. Android 代码本地编译获得 libcore 的 jar 包
    建议使用 Android 的 9.0.0_r45 版本
  2. 直接从 gitee 下载
    地址: https://gitee.com/mirrors/java-core
2. 使用方法:
  1. 在 OpenArkCompiler主目录 创建 libjava-core 目录
  2. 将 java-core.jar 复制到此目录下
  3. 在 OpenArkCompiler主目录 执行以下命令
source build/envsetup.shcd libjava-core  #为了编译出 java-core 的 mpl 和 mplt 格式的中间输出文件
jbc2mpl -injar java-core.jar -out libjava-core

2. 官方编译例子

1. exceptiontest

2. helloworld

  1. 使用方法:
    1. 进入helloworld 目录
    2. 编译
  2. 代码
    # 需先回到 OpenArkCompiler主目录
    cd sample/helloworld/  make
    
  3. 最终生成文件
    1. HelloWrold.VtableImpl.s 是最终生成的汇编文件
    2. 位置: 在 sample/helloworld 目录下

3. iteratorandtemplate

4. polymorphismtest

5. recycletest

6. threadtest

4. Toy runtime

  1. Toy runtime(pacific)是方舟编译器的 runtime 参考实现,目前由 PLCT 实验室进行开发和维护。

1. 编译 Toy runtime 的步骤:

1. 获取 Toy runtime 源码

github:https://github.com/isrc-cas/pacific

2. 安装 aarch64 gnu linux 工具链

具体就是安装 gcc-aarch64-linux-gnu

3. 修改 Makefile

将 Makefile 中的 CROSS_AARCH64_GCC = aarch-64-gnu-gcc8 修改成 CROSS_AARCH64_GCC = aarch-64-gnu-gcc

4. 执行 make 或者 make pacific 编译完成

2. Toy runtime 加载汇编文件

# pacific 目录下执行
make sample

方舟编译器的构建(笔记)相关推荐

  1. 方舟编译器学习笔记分类与导读

    方舟学习笔记系列,从方舟开源到现在,已经写了50多篇,保证了每天一篇的更新频率.篇数增加之后,文章的分类以及文章之间的关系,逐渐变得复杂起来.本文将对已发表的学习笔记系列进行分类和导读,方便读者更好的 ...

  2. 方舟编译器只能编译Java_方舟编译器学习笔记8 工具链可运行(helloworld编译成功)...

    前面的文章 方舟可执行文件简介和 对java2jar及方舟工具链的进一步分析 对工具链中的可执行文件以及测试用例的编译都进行了分析,并对java2jar进行了修改,保证了其可运行.但是后续的jbc2m ...

  3. as工程放到源码编译_方舟编译器学习笔记2 源码编译

    根据方舟官方文档编译了方舟编译器的源码,在这里简单谈谈其源码的编译过程: 1.操作系统环境: 64位版本的Ubuntu(官方推荐Ubuntu 16.04).我自己本身就有Ubuntu 16.04的虚拟 ...

  4. 华为鸿蒙系统学习笔记11-鸿蒙(HarmonyOS)2.0方舟编译器官方网址开源地址

    鸿蒙(HarmonyOS)2.0: 开源项目:https://www.openatom.org/openharmony 代码仓库:https://openharmony.gitee.com 方舟编译器 ...

  5. 华为鸿蒙系统学习笔记5-华为方舟编译器正式开源及相关源码下载

    8月9日至8月11日,华为面向全球开发者的2019年开发者大会,将在东莞松山湖举行.据悉,今年也是华为第一次在华为松山湖基地欧洲小镇里举办开发者大会. 前不久,余承东曾在微博上预告:"让我们 ...

  6. 方舟编译器编写鸿蒙软件,华为鸿蒙系统学习笔记4-方舟编译器源码下载及安装...

    2019华为全球开发者大会将在8月9日-11日在华为松山湖基地召开.本次开发者大会邀请了1500位合作伙伴.5000名全球开发者,将是华为历来规模最大的一次会议.在这次大会上,华为方舟编译器也是关注的 ...

  7. 方舟编译器的下载与安装配置及小组分工

    笔者确定本次的项目源码分析课题时,方舟编译器官方网站及码云镜像仓库地址 https://www.openarkcompiler.cn https://gitee.com/harmonyos/OpenA ...

  8. 华为终于放出方舟编译器源代码!开源平台同步亮相,网友:硬核项目

    乾明 边策 发自 凹非寺  量子位 报道 | 公众号 QbitAI 华为方舟编译器终于正式开源,源代码放出,兑现了在8月开源的承诺. 代码不在GitHub,而是在自家开源平台上.这也意味着,华为开源平 ...

  9. 安卓代码拉下来编译后怎么运行_支付宝秒开是因为用了方舟编译器?官方回应...

    近期有不少用户发现,支付宝在更新后可以实现秒开,有传言称支付宝是采用了华为的方舟编译器才达到了这种效果. 有网友在知乎提问:如何看待支付宝采用华为方舟编译器几乎秒开的消息?" 这位网友表示: ...

最新文章

  1. 网络新手ip隐藏器_动态IP代理的用途
  2. 程序猿才感同身受的10个图!
  3. Spring中的异步任务
  4. HTML:Browser 对象
  5. Android开发之GridView的使用(解读谷歌官方API)
  6. python3.7和3.5_Ubuntu更新python3.5到python3.7
  7. python pandas 数据库_Python中pandas函数操作数据库
  8. 寒假作业三:抓老鼠,亏了还是赚了
  9. 【opencv】实时人脸+眼睛+微笑检测
  10. 未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架 解决方案...
  11. 投简历没回音?你没写到点子上,HR当然不看
  12. 与同步传递相关的获取-释放序列
  13. F2工作流引擎之 概述(一)
  14. 【笔记】win10打开注册表的三种方式
  15. JavaWeb之JavaScript及应用
  16. html5 制作书架展示 PHP,简单做出HTML5翻页效果文字特效
  17. Android图像处理-像素化的原理及实现
  18. 内存管理、磁盘和文件拾遗
  19. 不要再逼我们去见旧情人
  20. SQL 随机抽样的总结

热门文章

  1. P2738 [USACO4.1]篱笆回路Fence Loops
  2. mapinfo mif/mid文件格式详解
  3. 业务元数据管理——洞悉数据背后的业务含义
  4. DataTable 已属于另一个 DataSet。 dataTable.copy()方法进另外一个DataSet
  5. 百度apollo源码学习(二)apollo中的工厂模式
  6. Cache(缓存)基本概念
  7. JARVISOJ RE
  8. smarty中文帮助文档
  9. 几种隐藏批处理运行窗口的方法
  10. C++牛顿迭代法解非线性方程