Chromium Chronicle #7: Sumber Pra-pemrosesan

Episode 7: oleh Bruce Dawson di Seattle, WA (Oktober 2019)
Episode sebelumnya

Terkadang, sebaiknya kompilasi satu file sumber Chromium secara manual, mungkin untuk bereksperimen dengan opsi pengoptimalan compiler, untuk melakukan prapemrosesannya ke satu file guna memahami beberapa detail makro yang samar, atau untuk meminimalkan bug compiler.

Dengan beberapa trik, developer Chromium dapat menemukan dan menjalankan perintah yang mengompilasi file sumber tertentu, dengan modifikasi sesuai kebutuhan.

Mulailah dengan membuka direktori output Anda dan menggunakan autoninja (atau ninja) untuk mengompilasi file minat (dan dependensi apa pun) menggunakan akhiran ^. Akhiran ini memberi tahu ninja untuk mem-build output file—version.o yang ditentukan dalam hal ini. Kemudian, sentuh file, dan kompilasi (dan satu-satunya) file lagi dengan flag -v (panjang) ke ninja:

Di Linux atau OSX:

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

Di Windows cmd shell, ^ adalah karakter khusus dan harus di-escape:

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

Output standar dari perintah autoninja -v terlihat seperti ini (dipangkas secara signifikan):

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

Perintah ini memungkinkan Anda mengompilasi file yang diinginkan. Untuk mendapatkan output yang telah diproses sebelumnya, gunakan langkah-langkah berikut:

Di Linux atau OSX, hapus blok -o obj/base/base/version.o dari bagian akhir, lalu tambahkan -E. Tindakan ini akan memberi tahu compiler untuk mencetak file yang telah diproses sebelumnya ke stdout.

Alihkan output ke file, seperti ini:

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

Di Windows, hapus opsi /showIncludes dari awal (opsi ini akan mencetak baris output untuk setiap #include), lalu tambahkan /P untuk melakukan prapemrosesan file, bukan mengompilasinya. Hasilnya akan disimpan dalam direktori saat ini di version.i:

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

Sekarang Anda dapat memeriksa file yang telah diproses sebelumnya untuk melihat apa yang sebenarnya dilakukan makro, atau membuat perubahan tombol compiler eksperimental dan mengompilasi ulang untuk melihat apa yang terjadi.

Referensi Tambahan

  • Fast Chrome Builds: Untuk tips pengoptimalan build lainnya (berfokus pada Windows).
  • ETW: Cari tahu cara menemukan masalah performa Windows—di Chrome atau dalam build—dengan membaca dokumen ETW (juga dikenal sebagai Xperf).