Ответ 1
Как указал @delnan, это вообще невозможно. LLVM - это независимый от цели IR, но он не переносится.
Было несколько попыток построить портативный IR, PNaCl среди них, но они отличаются от LLVM.
На основе официальной страницы LLVM можно оптимизировать время установки, основываясь на моем понимании, которое сначала компилируется в байт-код при сборке перед дистрибутивом, а затем на целевых машинах преобразует байт-код в собственный код при установке.
Есть ли какой-нибудь реальный пример в этой функции? Более конкретно, мне интересно, можно ли взять произвольный проект с открытым исходным кодом C/С++, который использует autoconf (т.е. Обычно построенный и установленный ./configure && make && make install
), и
./configure && make
в специальном
(например, установка некоторых переменных окружения или даже изменение
configure.ac или некоторые другие файлы autoconf), чтобы он генерировал
исполняемый файл и библиотеки в виде байтового кода;make install
особым образом, чтобы он устанавливал все файлы, как обычно,
но преобразует байт-код в собственный код для исполняемых файлов и библиотек.Как указал @delnan, это вообще невозможно. LLVM - это независимый от цели IR, но он не переносится.
Было несколько попыток построить портативный IR, PNaCl среди них, но они отличаются от LLVM.
LLVM IR является независимым от цели, что означает, что он может быть сгенерирован на одном компьютере (время компиляции) и преобразован в байт-код (время соединения) на другом, и он все равно будет генерировать тот же байт-код, что и на первой машине, при условии что вы использовали ту же версию LLVM с теми же параметрами. Это не означает, что генерируемый IR генерирует действительную двоичную информацию на всех машинах.
Проблема заключается в том, что ABI может варьироваться между различными системами.
В этом сообщении рассматриваются эти различия более подробно: кросс-платформенный интерфейс LLVM