Можно ли использовать LLVM IR (промежуточное представление) для создания кроссплатформенных (iphone и Android) исполняемых файлов ARM? - PullRequest
3 голосов
/ 24 декабря 2010

Я ищу возможные способы эффективного создания приложений, ориентированных на 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, если это возможно.

Извинения, если кто-либо извыше смутно.

Спасибо

Богат

Ответы [ 3 ]

3 голосов
/ 25 декабря 2010

Компилятор не проблема.Чтобы разработать оба варианта, вам нужно создать уровень абстракции, который позволит вам написать одно приложение на этом уровне.Затем есть две реализации уровня абстракции, одна из которых выполняет вызовы API Android, а другая - вызовы API iPhone.Компилятор не может вам помочь.

Где LLVM IR может быть интересен своей переносимостью для таких программ, как:

int a,b;

a=7;
b=a-4;

Скомпилируйте в IR, затем возьмите тот же IR и сгенерируйте ассемблер для всех различных типов процессоров и изучите различия.

В случае реальных приложений, которым, например, необходимо записать пиксель на дисплей, существуют регистры, размеры дисплея и целый ряд других различий, и эти различия не отображаются между ИКи бэкэнд ассемблера, но они доступны в основной C-программе и вызовах API, определенных библиотекой платформ, поэтому вам нужно решить проблему в C, а не в IR или ассемблере.

3 голосов
/ 24 декабря 2010

LLVM ничем не отличается от любого другого компилятора в том смысле, что вам нужен, поэтому я боюсь, что ответ - нет.

LLVM IR, с точки зрения неспециалиста, является «частично скомпилированным» кодом и можетиспользовать, скажем, для компиляции остального на конечном устройстве.Например, если у вас графически интенсивное приложение, вы можете отправить его части в IR, а затем скомпилировать на устройстве, чтобы получить максимальную производительность от конкретного оборудования.

Для того, что вам нужно, вам либо понадобитсяиспользовать один из упомянутых вами продуктов или иметь собственный пользовательский интерфейс (с использованием Cocoa / VMKit), но, возможно, поделиться кодом данных / логики в приложении

2 голосов
/ 24 декабря 2010

Для стандартной разработки магазина приложений для устройств со стандартной ОС ни звук, ни графический код в приложении не имеют никакого отношения к базовым наборам микросхем или конкретной архитектуре процессора ARM.Звук и графика (и все другие пользовательские операции ввода / вывода) абстрагируются каждой ОС через зависимые от платформы API и библиотечные связи.Вы можете либо кодировать для совершенно разных API каждой платформы, либо использовать уровень абстракции сверху, такой как Unity, et.al.

LLVM может позволить вам оптимизировать промежуточный код до машинного кода для определенных различий в архитектурах ARM (armv6, armv7, поддержка fp и т. д.), но только в автономном коде, который не используетсяIO или иным образом требует использования интерфейса более высокого уровня для ОС.

...