我对Pure代数/函数语言很感兴趣。Pure解释器使用LLVM JIT编译器作为其后端。
我希望编译出在Android(ARM)设备上运行的Pure。但是,Pure有一个依赖于LLVM JIT的问题。因此,我需要为Pure编译LLVM源代码才能使其运行。
是否可以为Android (ARM)设备编译LLVM源代码?实际上,在网络上似乎没有关于这个问题的任何信息。也许我的搜索词不对。搜索Android LLVM也没有找到太多好的结果。
我对Pure代数/函数语言很感兴趣。Pure解释器使用LLVM JIT编译器作为其后端。
我希望编译出在Android(ARM)设备上运行的Pure。但是,Pure有一个依赖于LLVM JIT的问题。因此,我需要为Pure编译LLVM源代码才能使其运行。
是否可以为Android (ARM)设备编译LLVM源代码?实际上,在网络上似乎没有关于这个问题的任何信息。也许我的搜索词不对。搜索Android LLVM也没有找到太多好的结果。
现在似乎可以,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。
注意:此功能是实验性的,请尝试并报告任何问题。
虽然你可以在ARM上编译LLVM(这相当简单 —— 只需使用普通的configure和make系统),但你还是运气不太好: 在ARM上的JIT仍然在进展中,所以我不期望它能为所有复杂问题提供支持。
我认为我们应该使用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还活着吗?
configure --target=arm-linux --host=x86_64-linux --disable-shared --targets=arm
的形式运行llvm的配置脚本(还有其他你可能需要的选项)。如果你想使用llvm+clang来引导ARM llvm,则稍微复杂一些,但仍然是可行的。 - SK-logic