Как добавить бэкенд-проход X86 в LLVM без пересборки всевозможных разделяемых библиотек, включая clang?

Как добавить бэкенд-проход X86 в LLVM без пересборки всевозможных разделяемых библиотек, включая clang?

Изучив некоторое время (IR/opt) "средний конец" LLVM, я решил перейти к бэкенду.

Здесь я создал очень простой MachineFunctionPass в .../lib/Target/X86/, который прекрасно компилируется.

Теперь, насколько я понимаю, я не могу просто загрузить бэкенд-проход LLVM, используя llc, как это было возможно для opt w.r.t. ИК-проходы. Вместо этого мне нужно создать новый проход в инфраструктуру LLVM, поэтому я запускаю команду cmake . --build из моего каталога llvm/build.

Это приводит к повторной сборке всех видов разделяемых библиотек, включая все виды clang специфичных файлов .so.

Проблема в том, что это занимает более 30 минут, поэтому это не может быть правильным способом создания простого бэкенд-прохода. Как мне быстро настроить и встроить проход в LLVM, чтобы я мог использовать его с llc?


person Shuzheng    schedule 22.03.2017    source источник


Ответы (2)


Я не эксперт в LLVM, но мне кажется, что это работает:

  1. Перейдите в каталог сборки LLVM: cd ~/llvm/build/.
  2. Перейдите в каталог сборки llc: cd tools/llc/.
  3. Сборка llc: cmake --build.

Теперь вместо использования самого верхнего сценария сборки cmake, который вызывает сборку всего проекта (измененные файлы и зависимости), выполняется сборка только инструмента llc.

Я не проверял это тщательно.

person Nicolas Lykke Iversen    schedule 22.03.2017

Немного отличается от поста выше:

cmake -G Ninja ...

настроить llvm.

потом

ninja llc

должно работать нормально.

person echristo    schedule 22.03.2017
comment
Почему цель по умолчанию создает (почти) каждый исполняемый файл? Разве система сборки не должна обнаруживать, что изменились только зависимости для llc? - person Shuzheng; 23.03.2017
comment
Возможно из-за зависимостей. Вы не сказали, какой файл вы изменили и какую систему сборки вы использовали. - person echristo; 02.06.2017