Повторно использовать результаты внешнего интерфейса компилятора для ускорения компиляции кода C ++ для нескольких конфигураций / платформ - PullRequest
1 голос
/ 04 апреля 2019

Я бы хотел улучшить время компиляции моего проекта.Я поддерживаю несколько платформ: OSX, Linux, Android, iOS.Для каждого из них я создаю проект для отладки и выпуска.

Давайте предположим, что в моем коде нет ни кода, ни платформы, ни конфигурации.

Возможно ли компилятору сохранить свое промежуточное представление после:

1) код синтаксического анализа или

2) фаза оптимизации

, так что я могу улучшить время компиляции, повторно используя результаты для (соответственно):

1) отладка / выпуск конфигурации

2) платформа (выпуск Android, iOS, OSX, Linux)?

1 Ответ

2 голосов
/ 04 апреля 2019

Если вы используете Clang - ответ - да, это возможно:

clang -S -emit-llvm something.c

производит something.ll, который является IR-файлом LLVM. Следующим шагом будет использование утилиты llc для создания файла сборки:

llc -march=x86 something.ll

должен создать something.s со сборкой, специфичной для x86.

Однако я бы посоветовал не использовать его для большого проекта (если вы ищете варианты для ускорения компиляции, возможно, у вас есть большой). Причина в том, что в вашем коде или в сторонних разработчиках могут использоваться макросы, которые зависят от платформы. Например:

#ifdef UNIX
...
#else
...

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

...