Chromium Chronicle #7: origem do pré-processamento

Episódio 7:por Bruce Dawson em Seattle, WA (outubro de 2019)
Episódios anteriores

Às vezes, é útil compilar manualmente um único arquivo de origem do Chromium, talvez para testar opções de otimização do compilador e pré-processá-lo a um único arquivo para entender alguns detalhes sutis da macro ou para minimizar uma bug do compilador.

Alguns truques permitirão que um desenvolvedor do Chromium encontre e execute o comando que compila um arquivo de origem específico, com modificações conforme necessário.

Comece acessando o diretório de saída e usando autoninja (ou ninja) para compile o arquivo de interesse (e quaisquer dependências) usando o sufixo ^. Esse sufixo instrui o ninja a criar a saída do file—version.o especificado. nesse caso. A seguir, toque no arquivo e compile-o (e somente-o) novamente com a flag -v (detalhado) para ninja:

No Linux ou OSX:

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

No shell cmd do Windows, ^ é um caractere especial e precisa de escape:

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

A saída típica do comando autoninja -v é assim (significativamente cortado):

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

Esse comando permite compilar o arquivo desejado. Para fazer com que o modelo saída, siga estas etapas:

No Linux ou OSX, remova o bloco -o obj/base/base/version.o do final, e adicione -E. Isso diz ao compilador para imprimir o arquivo pré-processado em stdout.

Redirecione a saída para um arquivo da seguinte forma:

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

No Windows, remova a opção /showIncludes do início (ele imprime uma linha de saída para cada #include) e depois adicionar /P para pré-processar e compilar o arquivo. Os resultados serão salvos no diretório atual em version.i:

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

Agora é possível examinar o arquivo pré-processado para ver o que as macros estão realmente fazendo, ou fazer alterações experimentais de switch do compilador e recompilar para ver o que acontece.

Outros recursos

  • Builds rápidos do Chrome: para mais dicas de otimização de versões com foco no Windows.
  • ETW: descubra como encontrar problemas de desempenho do Windows no Chrome ou no build, lendo os documentos do ETW (também conhecido como Xperf).