Skip to content

Commit 128b47f

Browse files
committed
init
0 parents  commit 128b47f

File tree

575 files changed

+154810
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

575 files changed

+154810
-0
lines changed

.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
buildconfig = "//build/config/BUILDCONFIG.gn"

BUILD.gn

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
group("maple") {
2+
deps = [
3+
"${MAPLE_ROOT}/src:mapleall",
4+
]
5+
}

Makefile

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#
2+
#Makefile for OpenArkCompiler
3+
#
4+
5+
INSTALL_DIR := ${MAPLE_ROOT}/out
6+
BUILD_TYPE := RELEASE
7+
HOST_ARCH := 64
8+
MIR_JAVA := 1
9+
GN := ${MAPLE_ROOT}/tools/gn/gn
10+
NINJA := ${MAPLE_ROOT}/tools/ninja_1.9.0/ninja
11+
12+
GN_OPTIONS := \
13+
GN_INSTALL_PREFIX="$(MAPLE_ROOT)" \
14+
GN_BUILD_TYPE="$(BUILD_TYPE)" \
15+
HOST_ARCH=$(HOST_ARCH) \
16+
MIR_JAVA=$(MIR_JAVA)
17+
18+
.PHONY: default
19+
default: install
20+
21+
.PHONY: mapleall
22+
mapleall:
23+
$(call build_gn, ${GN_OPTIONS}, maple)
24+
25+
.PHONY: install
26+
install: mapleall
27+
$(shell cp -rf $(MAPLE_ROOT)/src/bin/java2jar $(MAPLE_ROOT)/out/bin/)
28+
$(shell cp -rf $(MAPLE_ROOT)/src/bin/jbc2mpl $(MAPLE_ROOT)/out/bin/)
29+
$(shell cp -rf $(MAPLE_ROOT)/src/bin/mplcg $(MAPLE_ROOT)/out/bin/)
30+
$(shell cp -rf $(MAPLE_ROOT)/out/bin/maple $(MAPLE_ROOT)/src/bin/)
31+
32+
.PHONY: clean
33+
clean:
34+
@rm -rf out/
35+
36+
define build_gn
37+
mkdir -p ${INSTALL_DIR}; \
38+
$(GN) gen ${INSTALL_DIR} --args='$(1)'; \
39+
cd ${INSTALL_DIR}; \
40+
$(NINJA) -v $(2);
41+
endef

Readme.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# OpenArkCompiler
2+
3+
## 概述
4+
-----------------
5+
> 面向IoT、支持多语言多设备的新一代编译器。
6+
7+
OpenArkCompiler是来自华为方舟编译器的开源项目。
8+
9+
### OpenArkCompiler 四个技术点 ###
10+
11+
通过将不同语言代码在开发环境中就编译成一套可执行文件,在运行环境中高效执行:
12+
- 支持多语言联合优化、消除跨语言调用开销;
13+
- 程序运行时无需依赖虚拟机,减少资源占用,具有高效内存回收机制;
14+
- 可针对不同应用灵活编译优化;
15+
- 开发者学习和使用成本低。
16+
17+
### 面向未来的智能硬件生态 ###
18+
当前终端硬件的发展,有向智能IoT多样性发展的趋势,逐步形成以手机为中心,多设备互联互通的硬件形态;硬件多样性的发展,同时带来软件架构、编程框架的复杂性,上层应用及业务软件开发人员,急需一套编译框架,能够实现多种编程语言一次编译、多设备运行,并且具有良好的性能基础。方舟编译器基于上述硬件发展趋势、软件生态发展诉求,结合业界最新的编译器前沿技术,为软件开发人员打造多架构编程语言环境。
19+
20+
## 开源计划
21+
**编译框架代码开源**
22+
- 时间:2019年8月
23+
- 开源范围:编译器IR+中端语言实现
24+
- 开放能力:
25+
- 框架开源供参考学习,了解方舟编译器架构及框架代码
26+
- 开发者可构建出完整编译器工具链,支持Java Sample程序编译(非应用)
27+
28+
**后续开源范围**
29+
陆续开源编译器前端、后端; 支持Java程序编译、JavaScript语言应用的编译等。
30+
31+
**计划持续更新...**
32+
33+
## 相关文档
34+
35+
- 架构设计原理
36+
- [MAPLE IR Design](doc/MapleIRDesign.md)
37+
- [RC API](doc/RC_API.md)
38+
- [朴素版RC操作插入原理](doc/Naive_RC_Principle.md)
39+
- [虚函数表和接口函数表设计介绍](doc/Vtable&Itable.md)
40+
- [Phase设计介绍](doc/Phase_Design.md)
41+
42+
- [环境配置](doc/Development_Preparation.md)
43+
44+
- [开发者指南](doc/Developer_Guide.md)
45+
46+
- [编程规范](doc/Programming_Specifications.md)
47+
48+
49+
50+
## 许可证
51+
- [LICENSE](license/LICENSE)
52+
- [开源软件声明](license/Third_Party_Open_Source_Software_Notice.md)
53+

build/config/BUILDCONFIG.gn

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# This file is the master GN build configuration, all variables
2+
# declare here will be implicitly global.
3+
4+
# List all the input args
5+
declare_args() {
6+
GN_INSTALL_PREFIX = ""
7+
GN_BUILD_TYPE = ""
8+
HOST_ARCH = 64
9+
MIR_JAVA = 1
10+
}
11+
12+
# Define global args
13+
MAPLE_ROOT = "${GN_INSTALL_PREFIX}"
14+
DYNAMICLANG = true
15+
RC_V2 = true
16+
TEST_BENCHMARK = false
17+
MEMORY_LEAK_CHECK = false
18+
MARK_CYCLE_ROOTS = false
19+
20+
OPENSOURCE_DEPS = "${MAPLE_ROOT}/src/deplibs"
21+
OPENSOURCE_OUTPUT = "${MAPLE_ROOT}/out"
22+
MAPLEALL_ROOT = "${MAPLE_ROOT}/src"
23+
THIRD_PARTY_ROOT = "${MAPLE_ROOT}/src/third_party"
24+
25+
# Put all built library files under lib
26+
GN_ARCHIVE_OUTPUT_DIRECTORY = "${GN_INSTALL_PREFIX}/out/lib"
27+
GN_LIBRARY_OUTPUT_DIRECTORY = "${GN_INSTALL_PREFIX}/out/lib"
28+
29+
# Put all built binary files under bin
30+
GN_BINARY_OUTPUT_DIRECTORY = "${GN_INSTALL_PREFIX}/out/bin"
31+
32+
# Toolchain setup
33+
GN_C_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang"
34+
GN_CXX_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang++"
35+
GN_AR_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/llvm-ar"
36+
target_toolchain = "//build/toolchain:clang"
37+
set_default_toolchain(target_toolchain)
38+
39+
# Cross compile
40+
GN_C_CROSS_COMPILER = "/usr/bin/aarch64-linux-gnu-gcc-5"
41+
GN_CXX_CROSS_COMPILER = "/usr/bin/aarch64-linux-gnu-g++-5"
42+
GN_AR_CROSS_COMPILER = "/usr/bin/aarch64-linux-gnu-ar"
43+
GN_RANLIB_CROSS_COMPILER = "/usr/bin/aarch64-linux-gnu-ranlib"
44+
45+
# C/CXX Build flags
46+
cflags = []
47+
if (GN_BUILD_TYPE == "RELEASE") {
48+
cflags_cc = [ "-O3" ]
49+
cflags_c = [ "-O3" ]
50+
} else if (GN_BUILD_TYPE == "DEBUG") {
51+
cflags_cc = [
52+
"-O0",
53+
"-g3",
54+
]
55+
cflags_c = [
56+
"-O0",
57+
"-g3",
58+
]
59+
}
60+
61+
cflags_c += [
62+
"-Wall",
63+
"-fstack-protector-strong",
64+
"-fPIC",
65+
"-fPIE",
66+
]
67+
cflags_cc += [
68+
"-Wall",
69+
"-fstack-protector-strong",
70+
"-fPIC",
71+
"-fPIE",
72+
]
73+
74+
if (HOST_ARCH == 64) {
75+
cflags_c += [ "-m64" ]
76+
cflags_cc += [ "-m64" ]
77+
} else {
78+
cflags_c += [ "-m32" ]
79+
cflags_cc += [ "-m32" ]
80+
}
81+
82+
if (DYNAMICLANG) {
83+
cflags_cc += [ "-DDYNAMICLANG" ]
84+
}
85+
86+
if (RC_V2) {
87+
cflags_cc += [ "-DRC_NO_MMAP" ]
88+
}
89+
90+
if (TEST_BENCHMARK) {
91+
cflags_cc += [ "-DTEST_BENCHMARK" ]
92+
}
93+
94+
if (MEMORY_LEAK_CHECK) {
95+
cflags_cc += [ "-DMEMORY_LEAK_CHECK" ]
96+
}
97+
98+
if (MARK_CYCLE_ROOTS) {
99+
cflags_cc += [ "-DMARK_CYCLE_ROOTS" ]
100+
}
101+
102+
cflags_cc += [ "-DMIR_FEATURE_FULL=1" ]
103+
104+
if (MIR_JAVA == 1) {
105+
TARGET = "aarch64"
106+
cflags_cc += [ "-DMIR_JAVA=1" ]
107+
} else {
108+
TARGET = "vm"
109+
cflags_cc += [ "-DMIR_JAVA=0" ]
110+
}

build/core/java2jar.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
$(APP_JAR): %.jar : %.java
2+
$(JAVA2JAR) $(APP_JAR) ${MAPLE_ROOT}/libjava-core/java-core.jar "$(wildcard *.java)"

build/core/jbc2mpl.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
$(APP_MPL): %.mpl : %.jar $(JBC2MPL_BIN)
2+
$(JBC2MPL_BIN) --mplt $(LIB_MPLT) -injar $(APP_JAR) -out $(APP)

build/core/maple_test.mk

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
include $(MAPLE_BUILD_CORE)/maple_variables.mk
2+
3+
test: $(APP_S)
4+
include $(MAPLE_BUILD_CORE)/mplcomb.mk
5+
include $(MAPLE_BUILD_CORE)/jbc2mpl.mk
6+
include $(MAPLE_BUILD_CORE)/java2jar.mk
7+
8+
.PHONY: clean
9+
clean:
10+
@rm -rf *.jar
11+
@rm -f *.class
12+
@rm -f *.mpl
13+
@rm -f *.mplt
14+
@rm -f *.s
15+
@rm -f *.groots.txt
16+
@rm -f *.primordials.txt
17+
@rm -rf comb.log

build/core/maple_variables.mk

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
TARGETS := $(APP)
2+
LIB_MPLT := $(MAPLE_ROOT)/libjava-core/libjava-core.mplt
3+
APP_CLASS := $(foreach APP, $(TARGETS), $(APP).class)
4+
APP_JAR := $(foreach APP, $(TARGETS), $(APP).jar)
5+
APP_MPL := $(foreach APP, $(TARGETS), $(APP).mpl)
6+
APP_MPLT:=$(foreach APP, $(TARGETS), $(APP).mplt)
7+
APP_VTABLEIMPL_MPL := $(foreach APP, $(TARGETS), $(APP).VtableImpl.mpl)
8+
APP_S := $(foreach APP, $(TARGETS), $(APP).VtableImpl.s)
9+
10+
JAVA2JAR := $(MAPLE_ROOT)/out/bin/java2jar
11+
JBC2MPL_BIN := $(MAPLE_ROOT)/out/bin/jbc2mpl
12+
MAPLE_BIN := $(MAPLE_ROOT)/out/bin/maple
13+
MPLCG_BIN := $(MAPLE_ROOT)/out/bin/mplcg
14+
MPLME_FLAGS := --quiet
15+
MPL2MPL_FLAGS := --quiet --regnativefunc --maplelinker
16+
MPLCG_SO_FLAGS := --fpic
17+
MPLCG_FLAGS := --quiet --no-pie --verbose-asm --maplelinker
18+
MPLCOMBO_FLAGS := --run=me:mpl2mpl:mplcg --option="$(MPLME_FLAGS):$(MPL2MPL_FLAGS):$(MPLCG_FLAGS) $(MPLCG_SO_FLAGS)"

build/core/mplcomb.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
$(APP_S): %.VtableImpl.s : %.mpl $(MAPLE_BIN) $(MPLCG_BIN)
2+
$(MAPLE_BIN) --infile $< $(MPLCOMBO_FLAGS) --save-temps
3+

build/envsetup.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/bash
2+
3+
curdir=`pwd`
4+
unset MAPLE_ROOT
5+
export MAPLE_ROOT=${curdir}
6+
unset MAPLE_BUILD_CORE
7+
export MAPLE_BUILD_CORE=${MAPLE_ROOT}/build/core
8+
export PATH=$PATH:${MAPLE_ROOT}/src/bin

0 commit comments

Comments
 (0)