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