Хроника Chromium #7: Источник предварительной обработки

Эпизод 7: Брюс Доусон, Сиэтл, Вашингтон (октябрь 2019 г.)
Предыдущие серии

Иногда полезно скомпилировать один исходный файл Chromium вручную , например, чтобы поэкспериментировать с параметрами оптимизации компилятора, предварительно обработать его в один файл, чтобы понять некоторые тонкие детали макросов, или свести к минимуму ошибку компилятора.

Несколько приемов позволят разработчику Chromium найти и выполнить команду, компилирующую определенный исходный файл, с необходимыми изменениями.

Начните с перехода в выходной каталог и с помощью autoninja (или ninja) скомпилируйте интересующий файл (и любые зависимости) с использованием суффикса ^ . Этот суффикс сообщает ninja создать выходные данные указанного file—version.o . Затем коснитесь файла и снова скомпилируйте его (и только его) с флагом -v (verbose) в ninja:

В Linux или OSX:

autoninja ../../base/version.cc^
touch ../../base/version.cc
autoninja -v ../../base/version.cc^

В командной оболочке Windows ^ является специальным символом и его необходимо экранировать:

C:\> autoninja ../../base/version.cc^^
C:\> touch ../../base/version.cc
C:\> autoninja -v ../../base/version.cc^^

Типичный вывод команды autoninja -v выглядит следующим образом (значительно обрезанный):

..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo /showIncludes -imsvc ...

Эта команда позволяет скомпилировать интересующий файл. Чтобы получить предварительно обработанный результат, выполните следующие действия:

В Linux или OSX удалите блок -o obj/base/base/version.o с конца и добавьте -E . Это указывает компилятору вывести предварительно обработанный файл на стандартный вывод.

Перенаправьте вывод в файл, например:

../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD ... -E >version.i

В Windows удалите параметр /showIncludes с самого начала (он печатает строку вывода для каждого #include ) , а затем добавьте /P , чтобы предварительно обработать файл вместо его компиляции. Результаты будут сохранены в текущем каталоге version.i :

..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo -imsvc ... /P

Теперь вы можете проверить предварительно обработанный файл, чтобы увидеть, что на самом деле делают макросы, или внести экспериментальные изменения в компилятор и перекомпилировать, чтобы увидеть, что произойдет.

Дополнительные ресурсы

  • Быстрые сборки Chrome : дополнительные советы по оптимизации сборки (с упором на Windows).
  • ETW : узнайте, как обнаружить проблемы с производительностью Windows — в Chrome или в сборке — прочитав документацию ETW (также известную как Xperf).