Можете ли вы сделать статическую библиотеку ".a" с IR-кодом как gcc, так и clang?
И gcc, и clang реализуют оптимизацию во время соединения, позволяя объектные файлы.o
) не только содержать целевой код машины, но и промежуточные представления (битовый код GIMPLE или LLVM), используемые самими компиляторами. Эти объектные файлы могут быть упакованы в статические архивы и подготовлены для статической компоновки.
Норма этих архивов с поддержкой lto заключается в том, что они сделаны "толстыми" благодаря включению как обычного машинного кода (чтобы они могли работать как обычные), так и IR. Но возможно ли создать "очень толстый" архив с несколькими типами IR и заставить компиляторы распознавать эти соответствующие IR? Вот несколько проблем:
- Оба компилятора рекомендуют модифицированные версии
ar
чтобы убедиться, что IR включается и индексируется. GCC имеетgcc-ar
(плагин), и лязгllvm-ar
, - Clang не производит "жирных" архивов. Фактически его объектные файлы с битовым кодом не могут быть интерпретированы стандартными инструментами GNU.