Chromium Chronicle #7: 前処理のソース

エピソード 7: Bruce Dawson、ワシントン州シアトル(2019 年 10 月)
前のエピソード

1 つの Chromium ソースファイルを手動でコンパイルすると便利な場合があります。たとえば、コンパイラ最適化オプションを試したり、マクロの微妙な詳細を理解するために 1 つのファイルに前処理したり、コンパイラのバグを最小限に抑えることができます。

Chromium デベロッパーが特定のソースファイルをコンパイルするコマンドを見つけて実行することで、必要に応じて変更を加えることができます。

まず、出力ディレクトリに移動し、autoninja(または ninja)を使用して、^ 接尾辞を使用して対象のファイル(および依存関係)をコンパイルします。このサフィックスは、この場合に指定された file—version.o の出力をビルドするよう ninja に指示します。次に、ファイルをタップし、ninja に -v(詳細)フラグを指定して再度コンパイルします(今回だけコンパイルします)。

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 を追加します。これは、前処理されたファイルを stdout に出力するようコンパイラに指示します。

次のように、出力をファイルにリダイレクトします。

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

Windows の場合、先頭から /showIncludes オプションを削除して(#include ごとに出力を 1 行出力します)、その後に /P を追加します。これはファイルをコンパイルする代わりに前処理するために行います。結果は version.i の現在のディレクトリに保存されます。

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

これで、前処理されたファイルを調べて、マクロの実際の動作を確認したり、コンパイラ スイッチに試験運用版の変更を加えて再コンパイルして動作を確認したりできるようになります。

参考情報

  • Chrome の高速ビルド: ビルドの最適化のヒント(Windows が中心)を紹介します。
  • ETW: Chrome またはビルドで Windows のパフォーマンスに関する問題を発見する方法については、ETW(Xperf とも呼ばれます)のドキュメントをご覧ください。