Идиоматическое связывание, оптимизация и компиляция файлов битового кода LLVM с помощью Meson

Я надеюсь указать правильное направление для наиболее идиоматического способа связывания и компиляции файлов битового кода LLVM (.bc), созданных различными компиляторами с использованием системы сборки Meson.

В двух словах (из часто задаваемых вопросов ISPC ):

      $ ispc --emit-llvm -o foo_ispc.bc foo.ispc
$ clang -O2 -c -emit-llvm -o foo_cpp.bc foo.cpp

$ llvm-link foo_ispc.bc foo_cpp.bc -o - | opt -O3 -o foo_opt.bc
$ llc -filetype=obj foo_opt.bc -o foo.o

Цель состоит в том, чтобы облегчить встраивание и кросс-функциональную оптимизацию в коде, скомпилированном с помощью компилятора Intel ISPC и vanilla clang.

Я нашел примеры определения generatorдля ISPC пробел в знаниях заключается в том, как лучше связать/оптимизировать/скомпилировать файлы битового кода LLVM (.bc) с помощью компоновщика битового кода LLVM (llvm-link), оптимизатор (opt) и статический компилятор (llc). Я не могу найти какие-либо сценарии сборки мезонов в дикой природе, которые достигают этого.

Я вижу, что файлы ассемблера (.S) и LLVM IR (.ll) поддерживаютсяlibrary()иexecutable(), но не могу найти упоминания о битовом коде LLVM ни в документах, ни в источнике.

Огромное спасибо!

1 ответ

Если вы ищете способ сделатьlibrary()иexecutable()работать с файлами .bc, к сожалению, ваш единственный вариант — внести изменения в исходную версию. В FAQ есть аналогичный вопрос, который резюмирует рассуждения:

https://mesonbuild.com/FAQ.html#i-have-proprietary-compiler-toolchain-x-that-does-not-work-with-meson-how-can-i-make-it-work

Meson необходимо знать некоторые подробности о каждом компиляторе, чтобы скомпилировать с его помощью код. К ним относятся такие вещи, как, какие флаги компилятора использовать для каждого параметра и как определить компилятор по его выводам. Эту информацию нельзя ввести через файл конфигурации, вместо этого требуются изменения в исходном коде Meson, которые необходимо отправить в главный репозиторий Meson. Теоретически вы можете запустить свою собственную раздвоенную версию со своими патчами, но это не будет хорошей тратой вашего времени. Пожалуйста, отправьте код в исходную версию, чтобы каждый мог использовать набор инструментов.

Ваш вопрос касается связывания, а не компиляции, но я думаю, что ответ тот же.

Другие вопросы по тегам