The Chromium Chronicle n. 7: origine di pre-elaborazione

Episodio 7: di Bruce Dawson a Seattle, WA (ottobre 2019)
Puntate precedenti

A volte è utile compilare manualmente un singolo file di origine di Chromium, magari per fare delle prove con le opzioni di ottimizzazione del compilatore, per pre-elaborarle a un singolo file per comprendere alcuni dettagli macro più discreti o per ridurre al minimo del compilatore.

Ecco alcuni suggerimenti per consentire a uno sviluppatore di Chromium di trovare ed eseguire il comando compila un determinato file sorgente, apportando le modifiche necessarie.

Inizia andando alla directory di output e utilizzando autoninja (o ninja) per compila il file che ti interessa (ed eventuali dipendenze) utilizzando il suffisso ^. Questo suffisso indica a ninja di creare l'output dell'oggetto file—version.o specificato in questo caso. Quindi, tocca il file e compilalo (e solo questo) di nuovo con la bandiera -v (dettagliata) a ninja:

Su Linux o OSX:

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

Nella shell cmd Windows ^ è un carattere speciale e deve contenere caratteri di escape:

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

L'output tipico del comando autoninja -v è simile al seguente (significativamente tagliato):

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

Questo comando consente di compilare il file di interesse. Per ottenere i pre-elaborati segui questi passaggi:

In Linux o OSX, rimuovi il blocco -o obj/base/base/version.o dalla fine, e aggiungi -E. Questo indica al compilatore di stampare il file pre-elaborato stdout.

Reindirizza l'output a un file, come questo:

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

Su Windows, rimuovi l'opzione /showIncludes dall'inizio (viene stampato una riga di output per ogni #include) quindi aggiungi /P per pre-elaborare il file invece di compilarlo. I risultati verranno salvati nel directory attuale in version.i:

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

Ora puoi esaminare il file pre-elaborato per vedere cosa fanno le macro. o apportare modifiche sperimentali con il compilatore e ricompilarle per vedere cosa succede.

Risorse aggiuntive

  • Build rapide di Chrome: per ulteriori suggerimenti sull'ottimizzazione della build (riguardato su Windows).
  • ETW: scopri come rilevare problemi di prestazioni di Windows su Chrome o nella build, leggendo la documentazione relativa a ETW (nota anche come Xperf).