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).