根据方舟官方文档编译了方舟编译器的源码,在这里简单谈谈其源码的编译过程:

1、操作系统环境:

64位版本的Ubuntu(官方推荐Ubuntu 16.04)。我自己本身就有Ubuntu 16.04的虚拟机,所以直接就在上面编译了。

2、基础配置:

sudo apt-get -y install openjdk-8-jdk git-core gnupg flex bison gperf build-essential zip curl zlib1g-devlibc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utilsxsltproc unzip lib32z1-dev qemu g++-multilib gcc-multilib python3-paramiko python-paramiko python-jenkins python-requests python-xlwt libglib2.0-dev libpixman-1-dev linux-libc-dev:i386sudo apt-get -y install gcc-5-aarch64-linux-gnu g++-5-aarch64-linux-gnu

官方推荐安装上述库,但是即使是在Ubuntu 16.04上,这里很多库的版本较低。但是小版本号应该没什么太大的影响,我的本地环境以前编译过别的程序,所以导致很多库的版本都比这个推荐的要高,最终没有影响我的编译。所以不用太苛求其版本号。

3、源码下载:

git clone https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler.git

4、llvm和clang的下载及配置:

从LLVM Download Page 下载 LLVM8.0.0的Ubuntu 16.04 (.sig) 二进制包。解压之后,放到OpenArkCompiler/tools目录之下。

打开openarkcompiler/build/config/BUILDCONFIG.gn文件,将其中的GN_C_COMPILERGN_CXX_COMPILER和GN_AR_COMPILER 三个变量配置为Clang编译器所在路径,例如:

GN_C_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang"
GN_CXX_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang++"
GN_AR_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/llvm-ar"

5、下载和配置Ninja、GN:

从https://github.com/ninja-build/ninja/releases 下载Ninja v1.9.0,在tools下新建目录ninja_1.9.0,将ninja可执行文件放到ninja_1.9.0目录之下。

从https://archive.softwareheritage.org/browse/content/sha1_git:2dc0d5b26caef44f467de8120b26f8aad8b878be/raw/?filename=gn 下载GN,在tools下新建目录gn,将gn可执行文件放到gn目录之下。

打开openarkcompiler/Makefile文件,将GN和NINJA两个变量配置为GN和Ninja可执行程序所在路径。例如:

GN := ${MAPLE_ROOT}/tools/gn/gn
NINJA := ${MAPLE_ROOT}/tools/ninja_1.9.0/ninja

6、在OpenArkCompiler目录之下依次执行如下命令:

source build/envsetup.sh
make

命令说明:

  • source build/envsetup.sh 初始化环境,将OpenArkCompiler工具链路径openarkcompiler/src/bin设置到环境变量中
  • make 编译OpenArkCompiler的Release版本
  • make BUILD_TYPE=DEBUG 编译OpenArkCompiler的Debug版本

至此,完成方舟编译器源码的编译。编译完成之后的界面如图所示:

编译完成之后,在OpenArkCompiler/out目录之下,会有如下几个文件:

其实这几个文件在未编译之前,在OpenArkCompiler/src/bin目录下就有。读了下OpenArkCompiler目录下的Makefile,其中java2jarjbc2mplmplcg都是直接从src/bin目录之下copy到out/bin目录之下的。只有maple有点特殊,它应该是编译生成的,然后install的时候反向copy到了src/bin目录之下,所以编译完成之后查看状态(git status),会发现src/bin/maple发生了变化。

OpenArkCompiler/Makefile中关于install的代码:

.PHONY: install
install: mapleall$(shell cp -rf $(MAPLE_ROOT)/src/bin/java2jar $(MAPLE_ROOT)/out/bin/)$(shell cp -rf $(MAPLE_ROOT)/src/bin/jbc2mpl $(MAPLE_ROOT)/out/bin/)$(shell cp -rf $(MAPLE_ROOT)/src/bin/mplcg $(MAPLE_ROOT)/out/bin/)$(shell cp -rf $(MAPLE_ROOT)/out/bin/maple $(MAPLE_ROOT)/src/bin/)

感谢: @六棵核桃树

————

参考文档:

1、环境配置:OpenArkCompiler

2、源码编译:OpenArkCompiler

as工程放到源码编译_方舟编译器学习笔记2 源码编译相关推荐

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

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

  2. matlab2019 编译器_方舟编译器学习

    ​2.方舟编译器源码编译 3.方舟可执行文件简介 4.方舟编译器文档导读 5.方舟开始接受代码合并请求 6.方舟编译器学习笔记6 方舟开源目录简介 7.方舟编译器学习笔记7 对java2jar及方舟工 ...

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

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

  4. linux中python编译器的配置_方舟编译器环境配置及源码编译过程详解

    1)首先将方舟编译器源代码包下载到本地. https://www.openarkcompiler.cn/download/OpenArkCompiler-0.2.tar.gz 2)Ubuntu系统中方 ...

  5. android源码编译 简书,android学习笔记之源码编译

    编译环境 1.需要Ubuntu 64bit,建议Ubuntu14.04 64-bit 2.安装openJDK7 $ sudo apt-get update $ sudo apt-get install ...

  6. linux安装方舟编译器,华为方舟编译器安装 软件源码地址,华为方舟编译器安装 软件源码地址预约 - 浏览器家园...

    华为方舟编译器下载安装 软件源码下载地址 2019华为全球开发者大会将在8月9日-11日在华为松山湖基地召开.本次开发者大会邀请了1500位合作伙伴.5000名全球开发者,将是华为历来规模最大的一次会 ...

  7. c语言代码闭源,开源被喷,闭源被疑:方舟编译器怎么这么难?

    声明:本文来自于微信公众号 InfoQ(ID:infoqchina),作者:赵钰莹,授权站长之家转载发布. 闭源时被质疑是否真的存在这样一个编译器,开源后又被喷技术含量不行,方舟编译器怎么就这么难?本 ...

  8. sheng的学习笔记-Vector源码分析

    概述 Vector底层也是数组,跟ArrayList很像(先看下ArrayList,再看Vector会很轻松),ArrayList可参考下文,并且由于效率低,已经被淘汰了,大概瞅瞅得了 sheng的学 ...

  9. linux学习笔记(五)编译内核模块生成ko驱动文件

    系列文章目录 linux学习笔记(五)编译内核模块生成ko驱动文件 文章目录 系列文章目录 前言 一.加载内核简介 二.第一个hello world文件 1.文件树 2.hello.c 3.Makef ...

最新文章

  1. Data source rejected establishment of connection, message from server: Too many connections解决办法...
  2. 6-2 链式表的按序号查找
  3. 解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
  4. Microsoft Operations Management Suite 启用NPM网络性能监视
  5. 熊猫python_Python库-------熊猫
  6. 2021年广西高考成绩查询方法,2021年广西高考成绩查询网站查分网址:https://www.gxeea.cn/...
  7. 100例经典炒菜_Python3经典100例(②)
  8. 给侄子推荐的中学教辅资料清单
  9. 常用图表的用法-分布类
  10. 数字电路 逻辑函数的化简之 公式化简法
  11. 抓包工具charles青花瓷的基本使用(android)
  12. 电视hdr测试软件,HDR是什么意思 如何打开电视机的HDR10模式
  13. VScode连接Anaconda
  14. 微信小程序 Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded(二)
  15. collapse mode 严重_Android工具栏collapseMode问题
  16. Android Studio如何创建VR项目。
  17. [译]ng指令中的compile与link函数解析 转
  18. Redis 核心知识——01
  19. 微分电路与积分电路分析
  20. 11、RH850 中断配置

热门文章

  1. ABAP gateway里OData url里的select操作是如何在后端实现的
  2. SAP CRM呼叫中心里confirm按钮的实现逻辑
  3. SAP Cloud for Customer里图片数据读取的逻辑
  4. mysql数据库常用字段类型_快速了解MySQL数据库常用字段类型
  5. 边缘计算框架_【北大成果】一种集成多组网协议多边缘计算框架的边缘计算处理平台...
  6. linux cp -ip,linux cp命令
  7. java判断字符串是什么编码_java可供判断某字符串是什么编码的一行代码
  8. 顶峰Android手机视频转换器,顶峰3GP手机视频转换器
  9. python学习-递归(阶乘、汉诺塔)
  10. php 调取子栏目,Dedecms 如何调取某个栏目所在的顶级栏目及顶级下的子栏目