有可能将LLVM库编译到Android/ARM平台吗?

21

我对Pure代数/函数语言很感兴趣。Pure解释器使用LLVM JIT编译器作为其后端。

我希望编译出在Android(ARM)设备上运行的Pure。但是,Pure有一个依赖于LLVM JIT的问题。因此,我需要为Pure编译LLVM源代码才能使其运行。

是否可以为Android (ARM)设备编译LLVM源代码?实际上,在网络上似乎没有关于这个问题的任何信息。也许我的搜索词不对。搜索Android LLVM也没有找到太多好的结果。

5个回答

14

现在似乎可以,NDK现在支持使用LLVM的Clang编译器。因此,它可能可以与任何LLVM语言一起使用。AOSP应该能够提供关于如何添加Clang支持的一些见解。有关Clang支持的详细信息,请参见最新的Android NDK

Android NDK,版本8c (2012年11月)
重要变更:
将Clang 3.1编译器添加到NDK中。GNU编译器集合(GCC) 4.6仍然是默认值,因此您必须显式启用Clang编译器选项,方法如下:
对于ndk-build, 导出NDK_TOOLCHAIN_VERSION=clang3.1或将此环境变量设置添加到Application.mk。
对于独立构建,请在make-standalone-toolchain.sh中添加--llvm-version=3.1,并在您的makefile中替换CC和CXX为/bin/clang和/bin/clang++。有关详细信息,请参见STANDALONE-TOOLCHAIN.html。
注意:此功能是实验性的,请尝试并报告任何问题。


13

虽然你可以在ARM上编译LLVM(这相当简单 —— 只需使用普通的configure和make系统),但你还是运气不太好: 在ARM上的JIT仍然在进展中,所以我不期望它能为所有复杂问题提供支持。


实际上问题是关于在Android ARM上使用LLVM,这与传统的Linux ARM略有不同,因为涉及到bionic库等。 - Sid Kshatriya
1
@Sid,Bionic只是普通的C库。只要你有不错的C++编译器,就可以在任何Linux版本(如Android)上构建LLVM,这不是问题。 - Anton Korobeynikov

3
似乎Android NDK可以帮助解决这个问题,因为根据其FAQ页面中的说法之一是重用C/C++代码。请注意保留HTML标记。

感谢您的回答。我知道NDK。问题是LLVM项目是否可以在Android上编译。并不是所有的C/C++代码都能在Android上正确编译和工作。 - Sid Kshatriya

1

我认为我们应该使用LLVM + Android NDK(C ++)的混合。

我正在考虑类似SmallTalk的动态对象系统(*),在Android设备上进行懒惰的动态编译,LLVM的使用非常有趣。

首先,您应该尝试构建类似于tiny Buildroot / OpenWrt Linux系统的东西(或者使用CLFS或我的脚本构建自己的系统:https://github.com/ponyatov/L/tree/clock),用于像树莓派这样的ARM设备(这是我测试的情况)。如果您在此变量上取得了良好的结果,稍后可以迁移到Android设备本身。我认为您将需要一些C ++ / NDK粘合代码来适应LLVM / Pure核心与Android运行时和GUI相对应。(**)

(*)但使用我自己的语言语法,类似Lisp的功能能力来改变所有系统内部,解析器/编译器集成框架,以及可能一些基本的符号计算机代数

(**)Android Pi还活着吗?


-2
据我所知,目前还无法为ARM设备构建LLVM。

2
完全可以在ARM设备上编译和运行LLVM。尚未测试Android,但Debian已被证明是可行的。 - SK-logic
@SK-Logic:似乎在网络上没有关于如何处理这个问题的资源。 - Sid Kshatriya
@SK - 不知道这个。如果你有更多关于这个主题的链接,会很有帮助。 - NullPointer
1
@Sid NoParrots, @NullPointer - 这很简单,要进行交叉编译,你只需要将你的CC和CXX变量设置为你的交叉工具链,并且以 configure --target=arm-linux --host=x86_64-linux --disable-shared --targets=arm 的形式运行llvm的配置脚本(还有其他你可能需要的选项)。如果你想使用llvm+clang来引导ARM llvm,则稍微复杂一些,但仍然是可行的。 - SK-logic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接