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 um único arquivo de origem do Chromium manualmente, como testar as opções de otimização do compilador, pré-processá-lo em um único arquivo para entender alguns detalhes sutis de macro ou minimizar um bug do compilador.

Alguns truques permitem 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 o autoninja (ou ninja) para compilar o arquivo de interesse (e qualquer dependência) usando o sufixo ^. Esse sufixo diz ao ninja para criar a saída do file—version.o especificado nesse caso. Em seguida, toque no arquivo e compile-o (e somente ele) novamente com a sinalização -v (detalhado) para o ninja:

No Linux ou OSX:

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

No shell de 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 é semelhante a esta (com corte significativo):

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

Esse comando permite compilar o arquivo desejado. Para receber a saída pré-processada, use as seguintes etapas:

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

Redirecione a saída para um arquivo, desta forma:

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

No Windows, remova a opção /showIncludes do início (ela exibe uma linha de saída para cada #include) e, em seguida, adicione /P para pré-processar o arquivo em vez de compilá-lo. 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 você pode 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 das versões (focadas 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).