Llvm и установить временную оптимизацию

На основе официальной страницы LLVM можно оптимизировать время установки, основываясь на моем понимании, которое сначала компилируется в байт-код при сборке перед дистрибутивом, а затем на целевых машинах преобразует байт-код в собственный код при установке.

Есть ли какой-нибудь реальный пример в этой функции? Более конкретно, мне интересно, можно ли взять произвольный проект с открытым исходным кодом C/С++, который использует autoconf (т.е. Обычно построенный и установленный ./configure && make && make install), и

  • на машине сборки, запустив ./configure && make в специальном (например, установка некоторых переменных окружения или даже изменение configure.ac или некоторые другие файлы autoconf), чтобы он генерировал исполняемый файл и библиотеки в виде байтового кода;
  • Я переношу дерево сборки на целевую машину и запускаю make install особым образом, чтобы он устанавливал все файлы, как обычно, но преобразует байт-код в собственный код для исполняемых файлов и библиотек.

Ответы

Ответ 1

Как указал @delnan, это вообще невозможно. LLVM - это независимый от цели IR, но он не переносится.

Было несколько попыток построить портативный IR, PNaCl среди них, но они отличаются от LLVM.

Ответ 2

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

Проблема заключается в том, что ABI может варьироваться между различными системами.

В этом сообщении рассматриваются эти различия более подробно: кросс-платформенный интерфейс LLVM