Chromium Chronicle #7: Preprocessing Source

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

Czasami warto ręcznie skompilować pojedynczy plik źródłowy Chromium, np. poeksperymentować z opcjami optymalizacji kompilatora, przetworzyć go w jeden plik, aby poznać drobne szczegóły makr lub zminimalizować błąd kompilatora.

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

Najpierw przejdź do katalogu wyjściowego i użyj autoninja (lub ninja) skompilowanego pliku (i wszelkich zależności) przy użyciu sufiksu ^. Ten sufiks informuje ninja, aby utworzyć dane wyjściowe określonego elementu file—version.o w tym przypadku. Następnie kliknij plik i skompiluj go (i tylko go) ponownie, używając flagi -v (wyczerpującej) 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 zostać zmieniony:

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 pliku, który Cię interesuje. Aby uzyskać wstępnie przetworzone dane wyjściowe, wykonaj te czynności:

W systemie Linux lub OS X usuń blok -o obj/base/base/version.o na końcu i dodaj -E. Dzięki temu kompilator może wyświetlić wstępnie przetworzony plik na 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ń opcję /showIncludes z początku (drukuje wiersz wyjścia dla każdego elementu #include), a następnie dodaj /P, aby wstępnie przetworzyć plik zamiast go kompilować. Wyniki zostaną zapisane w bieżącym katalogu w version.i:

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

Teraz możesz przyjrzeć się wstępnie przetworzonemu plikowi, aby zobaczyć, co faktycznie robią makra, albo wprowadzić eksperymentalne zmiany z przełącznikiem kompilatora i ponownie skompilować plik, aby sprawdzić, co się stanie.

Dodatkowe materiały

  • Szybkie kompilacje Chrome: więcej wskazówek dotyczących optymalizacji kompilacji (nacisk na Windows).
  • ETW: dowiedz się, jak znaleźć problemy z wydajnością w systemie Windows (w Chrome lub w kompilacji), korzystając z dokumentów ETW (nazywanych też Xperf).