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, ad esempio per sperimentare con le opzioni di ottimizzazione del compilatore, pre-elaborarlo in un singolo file per comprendere alcuni dettagli discreti della macro oppure per ridurre al minimo un bug del compilatore.

Alcuni trucchi consentono a uno sviluppatore di Chromium di trovare ed eseguire il comando che compila un determinato file sorgente, con le modifiche necessarie.

Inizia andando alla directory di output e utilizzando autoninja (o ninja) per compilare il file che ti interessa (e le eventuali dipendenze) utilizzando il suffisso ^. In questo caso, questo suffisso indica a ninja di creare l'output dell'elemento file—version.o specificato. Dopodiché tocca il file e compilalo (e solo) con il flag -v (dettagliato) per ninja:

Su Linux o OSX:

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

Nella shell di Cmd di Windows ^ è un carattere speciale e deve essere preceduto da una sequenza 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 ha il seguente aspetto (tagliato in modo significativo):

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

Questo comando ti consente di compilare il file che ti interessa. Per ottenere l'output pre-elaborato, 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 in formato stdout.

Reindirizza l'output a un file, come segue:

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

Su Windows, rimuovi l'opzione /showIncludes dall'inizio (viene stampata una riga di output per ogni #include) e aggiungi /P per pre-elaborare il file invece di compilarlo. I risultati verranno salvati nella directory corrente 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 effettivamente le macro oppure apportare modifiche sperimentali all'opzione di compilazione e ricompilarlo per vedere cosa succede.

Altre risorse

  • Costruzioni di Chrome veloci: per ulteriori suggerimenti per l'ottimizzazione della build (concentrati su Windows).
  • ETW: scopri come individuare i problemi di prestazioni di Windows, in Chrome o nella build, leggendo i documenti ETW (noti anche come Xperf).