Chromium Chronicle n.o 7: Fuente de procesamiento previo

Episodio 7: de Bruce Dawson en Seattle, WA (octubre de 2019)
Episodios anteriores

A veces, es útil compilar un solo archivo fuente de Chromium de forma manual, para experimentar con las opciones de optimización del compilador y procesarlo previamente en un solo archivo para comprender algunos detalles de macro sutiles o para minimizar error del compilador.

Algunos trucos permitirán que un desarrollador de Chromium encuentre y ejecute el comando que compila un archivo fuente particular, con modificaciones según sea necesario.

Primero, ve al directorio de salida y usa Autoninja (o Ninja) para Compila el archivo de interés (y cualquier dependencia) con el sufijo ^. Este sufijo le indica a Ninja que compile el resultado del file—version.o especificado. en este caso. Luego, toca el archivo y compílalo (y solo a él) con la marca -v (verbose) a Ninja:

En OSX o Linux:

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

En la shell de cmd de Windows, ^ es un carácter especial y debe escaparse:

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

El resultado típico del comando autoninja -v se ve de la siguiente manera (significativamente cortada):

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

Este comando te permite compilar el archivo que te interesa. Para obtener el flujo de trabajo de salida, sigue estos pasos:

En OSX o Linux, quita el bloque -o obj/base/base/version.o del final. y agrega -E. Esto le indica al compilador que imprima el archivo procesado previamente en stdout.

Redirecciona el resultado a un archivo de la siguiente manera:

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

En Windows, quita la opción /showIncludes desde el principio (se imprime una línea de salida para cada #include) y, luego, agrega /P para procesar previamente el archivo en lugar de compilarlo. Los resultados se guardarán en la directorio actual en version.i:

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

Puede examinar el archivo preprocesado para saber qué están haciendo las macros o realizar cambios experimentales en el interruptor del compilador y volver a compilar para ver qué sucede.

Recursos adicionales

  • Compilaciones rápidas de Chrome: Obtén más sugerencias de optimización de compilación (se enfoca en Windows).
  • ETW: Descubre cómo encontrar problemas de rendimiento de Windows en Chrome o en la compilación; para ello, lee los documentos de ETW (también conocido como Xperf).