Создание кода LLVM с Java - программирование
Подтвердить что ты не робот

Создание кода LLVM с Java

Я хочу использовать структуру генерации кода LLVM с Java.

I.e., я не хочу компилировать Java-код в LLVM. Я просто хочу библиотеку LLVM для генерации кода, которую я могу вызвать из Java. Обычная библиотека LLVM - C, поэтому я не могу ее использовать.

Есть ли какие-либо Java-порты? Если нет, то каким будет самый простой способ сделать это? Оберните API в JNI?

4b9b3361

Ответ 1

Быстрый поиск llvm java api bindings показал несколько проектов, которые кажутся подходящими:

Все эти библиотеки используют JNI для доступа к C-API, поэтому в любом случае у вас есть DLL или SO файл самого LLVM.

Ответ 2

Чтобы ответить на вопрос с более актуальной информацией, основанной на текущем LLVM v3.6. Ваши варианты:

  • RoboVM LLVM Java привязывает часть проекта RoboVM, поддерживающего текущий LLVM v3.6 (лицензия GPL).
  • LLVM-J, который переместился в Github и поддерживает LLVM v3.0 (лицензия MIT).
  • JLLVM, который поддерживает LLVM v3.2 (лицензия LGBL).

Если лицензирование GPL в порядке с вами, вам обязательно нужно перейти на RoboVM. Это активный проект с надежной поддержкой последней версии LLVM. JLLVM и LLVM-J больше не активны, поэтому вам нужно будет сделать дополнительную работу, используя их.

Ответ 3

Самый простой способ доступа к библиотекам C из Java - это JNA. Вы создаете интерфейс Java, который изоморфен частям API C, которые вы хотите использовать, а затем JNA делает все остальное. Это означает, что вам нужно только обновлять методы, непосредственно относящиеся к вам при изменении API.

https://github.com/twall/jna/blob/master/README.md

SWIG сложнее использовать, но JNA может оказаться тупиком, если вам нужно улучшить производительность. JLLVM - это инструмент на основе SWIG, поэтому вы можете подумать о том, чтобы ссылаться на него или разворачивать его в своих целях.

Не используйте базовый JNI - выберите SWIG или JNA.

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

При использовании обеих технологий вам иногда придется искать нужных констант. Если их нелегко читать из файлов заголовков, вы захотите написать простую программу на языке C, которая выведет интересующие вас константы, чтобы вы могли вручную скопировать их на свои интерфейсы Java.