De Chromium Chronicle #7: bron voor voorverwerking

Aflevering 7: door Bruce Dawson in Seattle, WA (oktober 2019)
Vorige afleveringen

Soms is het handig om een ​​enkel Chromium-bronbestand met de hand te compileren , misschien om te experimenteren met compileroptimalisatieopties, om het voor te verwerken tot een enkel bestand om enkele subtiele macrodetails te begrijpen, of om een ​​compilerfout te minimaliseren.

Met een paar trucjes kan een Chromium-ontwikkelaar de opdracht vinden en uitvoeren die een bepaald bronbestand compileert, met eventuele aanpassingen.

Begin door naar je uitvoermap te gaan en autoninja (of ninja) te gebruiken om het gewenste bestand (en eventuele afhankelijkheden) te compileren met behulp van het achtervoegsel ^ . Dit achtervoegsel vertelt ninja om de uitvoer van het opgegeven file—version.o . Raak vervolgens het bestand aan en compileer het (en alleen het) opnieuw met de vlag -v (uitgebreid) naar ninja:

Op Linux of OSX:

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

In de Windows cmd-shell is ^ een speciaal teken en moet worden geëscaped:

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

Typische uitvoer van de opdracht autoninja -v ziet er als volgt uit (aanzienlijk ingekort):

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

Met deze opdracht kunt u het gewenste bestand samenstellen. Gebruik de volgende stappen om de voorverwerkte uitvoer te verkrijgen:

Op Linux of OSX verwijdert u het blok -o obj/base/base/version.o aan het einde en voegt u -E toe . Dit vertelt de compiler om het voorbewerkte bestand naar stdout af te drukken.

Leid de uitvoer om naar een bestand, zoals dit:

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

In Windows verwijdert u de optie /showIncludes vanaf het begin (deze drukt een regel uitvoer af voor elke #include ) en voegt vervolgens /P toe om het bestand voor te verwerken in plaats van het te compileren. De resultaten worden opgeslagen in de huidige map in version.i :

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

Nu kunt u het voorbewerkte bestand onderzoeken om te zien wat de macro's feitelijk doen, of experimentele wijzigingen aanbrengen in de compiler-switch en opnieuw compileren om te zien wat er gebeurt.

Aanvullende bronnen

  • Snelle Chrome-builds : voor meer tips voor build-optimalisatie (gericht op Windows).
  • ETW : Ontdek hoe u Windows-prestatieproblemen kunt vinden (in Chrome of in de build) door de ETW-documentatie (ook bekend als Xperf) te lezen.