Chromium Chronicle #7: 사전 처리 소스

에피소드 7: 워싱턴주 시애틀의 Bruce Dawson (2019년 10월)
이전 에피소드

단일 Chromium 소스 파일을 직접 컴파일하는 것이 도움이 될 수 있습니다. 컴파일러 최적화 옵션을 실험하거나, 단일 파일로 사전 처리하여 약간의 매크로 세부정보를 파악하거나 컴파일러 버그를 최소화하는 것이 유용할 수 있습니다.

Chromium 개발자는 몇 가지 유용한 정보를 통해 특정 소스 파일을 컴파일하는 명령어를 찾고 필요에 따라 수정할 수 있습니다.

먼저 출력 디렉터리로 이동하고 autoninja(또는 닌자)를 사용하여 ^ 접미사를 사용하여 관심 있는 파일과 모든 종속 항목을 컴파일합니다. 이 접미사는 닌자에게 지정된 file—version.o의 출력을 빌드하도록 지시합니다. 그런 다음 파일을 터치하고 -v(상세) 플래그를 사용하여 이 파일만 다시 컴파일하여 닌자로 만듭니다.

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: ETW (Xperf라고도 함) 문서를 읽어 Chrome 또는 빌드에서 Windows 성능 문제를 찾는 방법을 알아봅니다.