Решено: LLVM API - как генерировать нативный бинарник?

Модератор: Модераторы разделов

frp
Сообщения: 1445
ОС: Debian Squeeze

Решено: LLVM API - как генерировать нативный бинарник?

Сообщение frp »

Как сгенерировать нативный линуксовый бинарник средствами LLVM API? (на официальном сайте не нашел)

Как сгенерировать байткод знаю. Как скомпилировать его в нативный бинарник при помощи llvmc или llc+gas+ld тоже знаю.
А еще, хоть это никак не относится к генерации бинарника, JIT юзать умею.

PS. Не пинать если вопрос тупой, но ни на llvm.org, ни в гуле не нашел.
PPS. Пытался осилить исходники llc (хоть он генерит только asm) - не очень понял. Но если другого пути нет, то вооружусь doxygen и попытаюсь понять лучше.
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Решено: LLVM API - как генерировать нативный бинарник?

Сообщение frp »

frp писал(а):
11.09.2010 21:19
PPS. Пытался осилить исходники llc (хоть он генерит только asm) - не очень понял. Но если другого пути нет, то вооружусь doxygen и попытаюсь понять лучше.

Разобрался.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Решено: LLVM API - как генерировать нативный бинарник?

Сообщение serzh-z »

frp
И каков ответ и почему тема без ответа помечена, как "решено"?
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Решено: LLVM API - как генерировать нативный бинарник?

Сообщение frp »

LLVM нормально умеет генерить только asm, как - смотреть исходники llc (там, правда, большая часть кода к генерации асма никакого отношения не имеет). Дальше, чтобы получить бинарник, все как обычно: компиляция, линковка (средствами as, ld, можно как запускалку gcc использовать (как ни странно, именно так поступает clang и llvmc)).
Также можно сразу генерировать объектный код (.o), как - тоже исходник llc. Но это в LLVM 2.7 является экспериментальной фичой, AFAIK ни один серьезный проект так не делает.
Кроме этого, судя по Doxygen и наличию соответствующих классов, возможна генерация сразу готового ELF, но никакой документации, никаких примеров, даже хидеры и исходники практически совсем не документированы. В этом механизме я не разобрался и не нашел абсолютно никаких примеров использования.

Я использую первый вариант.

PS. Ссылка на исходник llc из LLVM 2.7: http://llvm.org/svn/llvm-project/llvm/tags...ols/llc/llc.cpp
Ссылка на исходник llc из транка: http://llvm.org/svn/llvm-project/llvm/trun...ols/llc/llc.cpp
Спасибо сказали: