Теперь представляется возможным преобразовать байт-код IR LLVM в байт-код Java, используя LLJVM-интерпретатор .
Есть интересный Комментарий Disqus (21/03/ 11) от Гжегожа из kraytracing.com , который вместе с кодом объясняет, как он изменил процедуру вывода класса Java LLJVM для излучения немонолитных классов Java, которые по числу совпадают с входными модулями C / C ++.Он предполагает, что его техника, похоже, избегает слишком длинных «составных» сигнатур аргументов метода Java Constructor, обычно генерируемых LLJVM, и он предоставляет ссылки на свои модификации и примеры.
Хотя LLJVM не выглядит так, как вактивная разработка в течение нескольких лет, он все еще находится на Github, а некоторую документацию можно найти в его прежнем хранилище на GoogleCode:
LLJVM @ Github
LLJVMДокументация @ GoogleCode
Я также натолкнулся на проект ' Proteuscc ', который также использует LLVM для вывода байтового кода Java (предполагается, что это специально для C / C ++, хотя яПредположим, что проект может быть изменен или предоставлен LLVM Intermediate Представительство (IR)).Начиная с http://proteuscc.sourceforge.net:
Общий процесс создания исполняемого Java-файла с помощью Proteus затем можно суммировать следующим образом.
- Создание понятного человеку представления промежуточного представления LLVM (llfile)
- Передайте этот файл ll в качестве аргумента в систему компиляции proteus
- Приведенное выше описание создаст файл jar Java, который можно выполнить или использовать в качестве библиотеки
Я расширил скрипт bash для компиляции последних версий LLVM и Clang в Ubuntu , его можно найти в виде Github Gist, здесь .
[ ОБНОВЛЕНИЕ 31/03/14 ] - LLJVM , похоже, уже давно умерло, однако Говард Чу (https://github.com/hyc), похоже,Сделано LLJVM совместимым с последней версией LLVM (3.3). См. Ветвь Говарда LLJVM-LLVM3.3 в Github, здесь