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).