Chromium Chronicle Nr. 7: Quelle für Vorverarbeitung

Folge 7:von Bruce Dawson in Seattle, Washington (Oktober 2019)
Vorherige Folgen

Manchmal ist es hilfreich, eine einzelne Chromium-Quelldatei manuell zu kompilieren, beispielsweise um mit Compiler-Optimierungsoptionen zu experimentieren, sie in eine einzelne Datei vorzuverarbeiten, um subtile Makrodetails zu verstehen, oder einen Compiler-Fehler zu minimieren.

Mit ein paar Tricks kann ein Chromium-Entwickler den Befehl finden und ausführen, der eine bestimmte Quelldatei kompiliert. Diese kann bei Bedarf geändert werden.

Öffnen Sie zuerst Ihr Ausgabeverzeichnis und verwenden Sie Autoninja (oder Ninja), um die gewünschte Datei (und alle Abhängigkeiten) mit dem Suffix ^ zu kompilieren. Dieses Suffix weist Ninja an, die Ausgabe des angegebenen file—version.o in diesem Fall zu erstellen. Tippen Sie dann auf die Datei und kompilieren Sie sie (und nur sie) noch einmal mit dem Flag -v (ausführlich) für Ninja:

Unter Linux oder OSX:

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

In der Windows-Cmd-Shell ist ^ ein Sonderzeichen, das mit Escapezeichen versehen werden muss:

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

Eine typische Ausgabe des Befehls autoninja -v sieht so aus (deutlich zugeschnitten):

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

Mit diesem Befehl können Sie die gewünschte Datei kompilieren. So rufen Sie die vorverarbeitete Ausgabe ab:

Entfernen Sie unter Linux oder OSX den -o obj/base/base/version.o-Block am Ende und fügen Sie -E hinzu. Damit wird der Compiler angewiesen, die vorverarbeitete Datei in stdout auszugeben.

Leiten Sie die Ausgabe wie folgt in eine Datei um:

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

Entfernen Sie unter Windows die Option /showIncludes von Anfang an (sie gibt für jeden #include eine Ausgabezeile aus) und fügen Sie dann /P hinzu, um die Datei vorzuverarbeiten, anstatt sie zu kompilieren. Die Ergebnisse werden im aktuellen Verzeichnis in version.i gespeichert:

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

Jetzt können Sie die vorverarbeitete Datei untersuchen, um zu sehen, was die Makros tatsächlich tun, oder experimentelle Compiler-Switch-Änderungen vornehmen und neu kompilieren, um festzustellen, was passiert.

Weitere Ressourcen

  • Schnelle Chrome-Builds: Weitere Tipps zur Build-Optimierung (Schwerpunkt auf Windows)
  • ETW: In der ETW-Dokumentation (auch als Xperf bezeichnet) erfahren Sie, wie Sie Windows-Leistungsprobleme in Chrome oder im Build ermitteln können.