에피소드 7: 작성자: 브루스 도슨, 워싱턴주 시애틀 (2019년 10월)
이전 에피소드
때로는 하나의 Chromium 소스 파일을 직접 컴파일하는 것이 도움이 될 수 있습니다. 컴파일러 최적화 옵션을 실험하고 사전 처리하여 단일 파일로 변환하여 일부 미묘한 매크로 세부 사항을 파악하거나 컴파일러 버그입니다.
Chromium 개발자는 몇 가지 유용한 정보를 통해 특정 소스 파일을 컴파일하고 필요에 따라 수정합니다.
먼저 출력 디렉터리로 이동한 다음 autoninja (또는 ninja)를 사용하여
^
접미사를 사용하여 관심 있는 파일과 모든 종속 항목을 컴파일합니다.
이 접미사는 ninja에게 지정된 file—version.o
의 출력을 빌드하도록 지시합니다.
이 경우에는 그런 다음 파일을 터치하고
-v
(상세) 플래그를 ninja로 전송합니다.
Linux 또는 OSX의 경우:
autoninja ../../base/version.cc^
touch ../../base/version.cc
autoninja -v ../../base/version.cc^
Windows cmd 셸에서 ^
는 특수문자이며 이스케이프 처리되어야 합니다.
C:\> autoninja ../../base/version.cc^^
C:\> touch ../../base/version.cc
C:\> autoninja -v ../../base/version.cc^^
autoninja -v
명령어의 일반적인 출력은 다음과 같습니다 (상당히
잘라냄):
..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo /showIncludes -imsvc ...
이 명령어를 사용하면 원하는 파일을 컴파일할 수 있습니다. 전처리된 데이터를 얻기 위해 출력하려면 다음 단계를 따르세요.
Linux 또는 OSX의 경우 끝에서 -o obj/base/base/version.o
블록을 삭제합니다.
그리고 -E
를 추가합니다. 이렇게 하면 컴파일러에 전처리된 파일을
stdout에 추가합니다.
다음과 같이 출력을 파일로 리디렉션합니다.
../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD ... -E >version.i
Windows의 경우 /showIncludes
옵션을 처음부터 삭제합니다. 이렇게 하면
각 #include
에 대한 출력 한 줄) 그리고 /P
를 추가하여 다음을 실행합니다.
파일을 컴파일하는 대신 사전 처리합니다. 결과는
version.i
의 현재 디렉터리:
..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo -imsvc ... /P
이제 전처리된 파일을 검사하여 매크로가 실제로 무엇을 하는지 확인할 수 있습니다. 또는 실험용 컴파일러 스위치를 변경한 후 다시 컴파일하여 어떤 일이 발생하는지 확인합니다.
추가 리소스
- 빠른 Chrome 빌드: 더 많은 빌드 최적화 도움말을 확인하세요. (Windows에 집중됨)
- ETW: Chrome에서 Windows 성능 문제를 찾는 방법을 알아보세요. 또는 빌드에서 ETW (Xperf라고도 함) 문서를 읽으면 됩니다.