Chromium Chronicle #7: Preprocessing Source

Odcinek 7: Bruce Dawson, Seattle, Waszyngton (październik 2019 r.)
Poprzednie odcinki

Czasami warto ręcznie skompilować jeden plik źródłowy Chromium, np. eksperymentować z opcjami optymalizacji kompilatora, aby wstępnie go przetworzyć do pojedynczego pliku, aby zrozumieć pewne subtelne szczegóły makro lub zminimalizować kompilatora.

Kilka sztuczek pozwoli programiście Chromium znaleźć i wykonać polecenie, które kompiluje określony plik źródłowy z wprowadzanymi w razie potrzeby zmianami.

W tym celu przejdź do katalogu wyjściowego i użyj nazwy autoninja (lub ninja), skompilować plik, który Cię interesuje (i wszelkie zależności), używając sufiksu ^. Ten sufiks informuje ninja, aby zbudować dane wyjściowe określonego typu file—version.o w tej sprawie. Następnie dotknij pliku i skompiluj go (i tylko on) ponownie za pomocą flagę -v (wyczerpująco) do ninja:

W systemie Linux lub OSX:

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

W powłoce cmd systemu Windows ^ jest znakiem specjalnym, który musi zawierać znak zmiany znaczenia:

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

Typowe dane wyjściowe polecenia autoninja -v wyglądają tak (znacznie usunięte):

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

To polecenie umożliwia skompilowanie interesującego pliku. Aby uzyskać , wykonaj te czynności:

W systemach Linux lub OS X usuń blok -o obj/base/base/version.o z końca, i dodaj -E. Dzięki temu kompilator będzie mógł wydrukować wstępnie przetworzony plik stdout.

Przekieruj dane wyjściowe do pliku w ten sposób:

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

W systemie Windows usuń z początku opcję /showIncludes (pojawi się ona wiersz danych wyjściowych dla każdej wartości #include), a następnie dodaj /P, aby wstępnie przetworzyć plik, zamiast go kompilować. Wyniki zostaną zapisane w bieżący katalog w version.i:

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

Teraz przyjrzyj się wstępnie przetworzonemu plikowi, by zobaczyć, jak działają makra. lub wprowadzić eksperymentalne zmiany w kompilatorze i ponownie kompilować, aby zobaczyć, co się stanie.

Dodatkowe materiały

  • Szybkie kompilacje do Chrome: więcej wskazówek na temat optymalizacji kompilacji. (działa tylko w systemie Windows).
  • ETW: dowiedz się, jak znaleźć problemy z wydajnością w systemie Windows w Chrome. lub w kompilacji, czytając dokumenty ETW (znane też jako Xperf).