方舟,渡人先渡己:Toolchain怎么跑?

上篇文章中我們對(duì)OpenArkCompiler的編譯作了簡(jiǎn)單介紹。這次我們將試著讓Toolchain跑起來(并不可能).

編譯產(chǎn)物在OpenArkCompiler/out/bin中,有mplcg,jbc2mpl兩個(gè)二進(jìn)制文件,java2jar腳本(shell script)以及irbuild,maple兩個(gè)庫(kù)文件(shared library).回頭看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/)

很顯然,只有irbuild,maple是先前的編譯產(chǎn)物,而另外三個(gè)可執(zhí)行文件都是直接cp過來的。我們?cè)诖酥饌€(gè)分析一下這些可執(zhí)行文件的作用。

既然java2jar是shell script,我們不妨來看看里面都寫了啥:

#!/bin/bash

OUTPUT=$1

CORE_ALL_JAR=$2

shift 2

javac -g -d . -bootclasspath ${CORE_ALL_JAR} $@

jar -cvf ${OUTPUT} *.class

是先用javac將.java編譯成.class,再用jar打包。

再看jbc2mpl,inclass/-injar參數(shù)傳入.class/.jar,然后輸出為.mpl/.mplt:

//HelloWorld.java

public class HelloWorld {

????public static void main(String[] args) {

????????System.out.println("Hello World");

????}

}

HelloWorld測(cè)試一下:

報(bào)錯(cuò)。但是jbc2mpl并沒開源,自然也不知道發(fā)生了啥。

試著反編譯查一下fe_type_manager這個(gè)值,無果。

mplcg,從它支持的parameters來看大概是輸入.mpl然后輸出.s文件供MapleLinker用?

maple和irbuild,大概是針對(duì)編譯器中間語言的工具。由于剛才jbc2mpl沒能跑起來,這里我們也無法對(duì)其進(jìn)行測(cè)試。

在官方文檔中我找到了如下的表述,解釋了Maple IR的作用:

MAPLE IR is an internal program representation to support program compilation and execution. Because any information in the source program may be useful for program analysis and optimization, MAPLE IR aims to provide information about the source program that is as complete as possible.

Reference:?https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler/file?ref=master&path=doc%2FMapleIRDesign.md

所以要讓Toolchain跑起來,關(guān)鍵就是jbn2mpl.回頭看OpenArkCompiler/build/core/目錄下的幾個(gè)makefile,我似乎發(fā)現(xiàn)了一些有趣的東西。

也就是說,我們需要java-core.jar,而出于某些原因這個(gè)包并不在開源列表中,也沒有被官方文檔提及。

(此處忽略筆者的吐槽)

Google上可以查到一些同名文件,不過顯然不適用。不管怎樣,反正我沒有咕咕咕(滑稽)如果能解決這個(gè)問題,或許能在后續(xù)的文章中對(duì)Maple IR和OpenArkCompiler/samples中的測(cè)試用例作更深入的探討。

寫到這里,筆者回頭看了下方舟編譯器的“開源計(jì)劃”,仍然停留在2019年8月,并且因?yàn)楸匾募娜笔В_發(fā)者并不能“構(gòu)建出完整編譯器工具鏈”。

算了,我們還是一起沸騰吧…


本文首發(fā)于淀粉月刊:https://dfkan.com

本文作者:無用掛件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容