LLVM IR(中间表示)可以用来创建跨平台(iphone 和 Android)ARM 可执行文件吗?

发布于 2024-10-09 01:33:56 字数 424 浏览 2 评论 0原文

我正在研究从相同的代码库高效创建 Android 和 iPhone 目标应用程序的可能方法,无论是 C/C++/C#/Objective-C 还是 Java(使用 VMKit)。

LLVM 看起来很有希望,但是我对围绕不同 ARM CPU 实现的兼容性问题有点困惑,主要是从图形和声音代码如何通过底层芯片组“解析”的方面(即我是否必须编码到特定的 ARM 芯片组,或者更高级别的 API(例如 OpenGL)就足够了吗?)。

我确实对各种 Cross Dev 产品(即 Airplay SDK、MoSync (GPL-GCC)、Unity3d、XMLVM 等)了解一点,但我真正想做的是用 Java 编写或使用 C/C++ 引擎,发出 LLVM IR 并创建兼容的 ARM 可执行文件(如果可能)。

如果上述任何内容含糊不清,我们深表歉意。

谢谢

里奇

I'm looking into possible means of efficiently creating an Android and iPhone targeted application from the same code base, be it in C/C++/C#/Objective-C or Java (using VMKit).

LLVM looks promising, however I'm slightly confused regarding compatibility issues surrounding the differing ARM CPU implementations, mainly from the aspect of how graphics and sound code are 'resolved' by underlying chipsets (i.e. do I have to code to specific ARM chipsets, or will a higher-level API, like OpenGL, suffice?).

I do know a little about various Cross Dev products (i.e. Airplay SDK, MoSync (GPL-GCC), Unity3d, XMLVM etc.), but what I'd really like to do is either write in Java or use a C/C++ engine, emit LLVM IR and create compatible ARM executables, if possible.

Apologies if any of the above is vague.

Thanks

Rich

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

日裸衫吸 2024-10-16 01:33:57

不是编译器的问题。要为两者进行开发,您需要创建一个抽象层,允许您在该层上编写单个应用程序。然后有两种抽象层的实现,一种进行 Android api 调用,另一种进行 iPhone api 调用。编译器无法帮助您。

LLVM IR 可能因其可移植性而有趣的地方是对于以下程序:

int a,b;

a=7;
b=a-4;

编译为 IR,然后采用相同的 IR 并为所有不同的处理器类型生成汇编程序并检查差异。

在实际应用程序中,例如需要在显示器上写入像素,寄存器、显示器尺寸和大量其他差异都存在,并且这些差异不会在 IR 和汇编器后端之间暴露,而是会暴露在主C程序和平台库定义的api调用中,所以你必须用C而不是IR或汇编程序来解决问题。

The compiler is not the problem. To develop for both you need to create an abstraction layer that allows you to write a single application on that layer. Then have two implementations of the abstraction layer, one that makes Android api calls and one that makes iPhone api calls. There is nothing the compiler can do to help you.

Where LLVM IR might be interesting in its portability is for programs like:

int a,b;

a=7;
b=a-4;

Compile to IR then take the same IR and generate assembler for all the different processor types and examine the differences.

In the case of real applications that for example need to write a pixel on a display, the registers, sizes of the display and a whole host of other differences exist, and those differences are not exposed between the IR and the assembler backend but are exposed in the main C program and the api calls defined by the platforms library, so you have to solve the problem in C not IR or assembler.

嘿嘿嘿 2024-10-16 01:33:57

从您需要的意义上来说,LLVM 与任何其他编译器没有什么不同,所以恐怕答案是否定的。

通俗地说,LLVM IR 是“部分编译”的代码,可以用来编译终端设备上的其余部分。例如,如果您有一个图形密集型应用程序,您可以将其部分内容以 IR 形式交付,然后在设备上进行编译,以充分利用特定硬件的性能。

对于您想要的,您要么需要使用您提到的产品之一,要么拥有本机 UI(使用 Cocoa/VMKit),但可以在应用程序中共享数据/逻辑代码

LLVM is no different from any other compiler in the sense that you need, so I'm afraid the answer is no.

The LLVM IR is in layman's terms a "partly compiled" code, and can be used, say, to compile the rest on the end device. For example, if you have a graphically intensive app, you might ship parts of it in IR, then compile on the device to get the most performance out of the specific hardware.

For what you want, you either need to use one of the products you mentioned, or have native UIs (using Cocoa/VMKit), but possible share the data/logic code in the app

瑾兮 2024-10-16 01:33:57

对于库存操作系统设备的标准应用程序商店合法开发,应用程序中的声音和图形代码都与底层芯片组或特定的 ARM CPU 架构无关。声音和图形(以及所有其他用户 IO)由每个操作系统通过平台相关的 API 和库链接进行抽象。您可以为每个平台完全不同的 API 进行编码,也可以在顶部使用抽象层,例如 Unity 等。等人。

LLVM 可能允许您针对 ARM 架构中的某些差异(armv6、armv7、fp 支持等)从中间代码到机器代码进行优化,但仅限于不需要用户 IO 或需要任何更高级别的独立代码与操作系统的接口使用。

For standard app store legal development for stock OS devices, neither the sound nor the graphics code in an app have anything to do with the underlying chipsets or specific ARM CPU architecture. The sound and graphics (and all other user IO) are abstracted by each OS through platform dependent APIs and library linkages. You can either code to each platform's completely different APIs, or use an abstraction layer on top, such as Unity, et. al.

LLVM might allow you to optimize from intermediate code to machine code for certain differences in the ARM architectures (armv6, armv7, fp support, etc.), but only in self-contained code that does no user IO, or otherwise require any higher level interface use to the OS.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文