Chromium Chronicle n.o 7: Fuente de procesamiento previo

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

A veces, resulta útil compilar un solo archivo fuente de Chromium de forma manual, tal vez para experimentar con las opciones de optimización del compilador, realizar un procesamiento previo en un solo archivo a fin de comprender algunos detalles sutiles de la macro o minimizar un error del compilador.

Algunos trucos permitirán que un desarrollador de Chromium encuentre y ejecute el comando que compila un archivo fuente específico, con las modificaciones necesarias.

Para comenzar, ve a tu directorio de salida y usa autoninja (o ninja) para compilar 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 vuelve a compilarlo (y solo a él) con la marca -v (verbose) para Ninja:

En OSX o Linux:

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

En el cmd shell de Windows, ^ es un carácter especial y se debe escapar:

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 (se recortó considerablemente):

..\..\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 resultado preprocesado, 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 preprocesado 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 del principio (imprime una línea de resultado para cada #include) y, luego, agrega /P para procesar el archivo de forma previa en lugar de compilarlo. Los resultados se guardarán en el directorio actual en version.i:

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

Ahora puedes examinar el archivo preprocesado a fin de ver qué están haciendo las macros, o realizar cambios experimentales en el interruptor del compilador y volver a compilarlos para ver qué sucede.

Recursos adicionales

  • Compilaciones rápidas de Chrome: Para obtener más sugerencias de optimización de compilación (se centra en Windows).
  • ETW: Descubre cómo encontrar problemas de rendimiento de Windows (en Chrome o en la compilación) mediante los documentos de ETW (también conocido como Xperf).