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

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

場合によっては、単一の Chromium ソースファイルを手動でコンパイルすると便利です。 コンパイラ最適化オプションを試したり マクロの微妙な細部を理解したり 発生しました。

いくつかのコツを使用すると、Chromium デベロッパーは は、特定のソースファイルを必要に応じて編集してコンパイルします。

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

Linux または OSX の場合:

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

Windows cmd シェルでは ^ は特殊文字であるため、エスケープする必要があります。

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 の出力行)を作成し、/P を追加して以下を行います。 ファイルをコンパイルする代わりに前処理します。結果は version.i のカレント ディレクトリ:

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

前処理されたファイルを調べて、マクロが実際に何をしているか確認してみましょう。 または試験運用版のコンパイラ スイッチの変更を行って再コンパイルすると、どうなるかがわかります。

参考情報

  • Chrome の迅速なビルド: ビルドを最適化するためのその他のヒント (Windows が対象)。
  • ETW: Chrome で Windows のパフォーマンスの問題を検出する方法をご確認ください またはビルドで、ETW(Xperf)ドキュメントを読みます。