AI 요약
파이어폭스 개발 과정에서 WebIDL 바인딩 코드를 생성하는 단계는 수백 개의 .webidl 파일로부터 수천 개의 C++ 헤더, 소스 파일 등을 생성하는 필수적이나 반복적인 작업입니다. 기존의 ccache나 sccache는 전통적인 컴파일러 호출만 처리할 수 있어 Python 기반의 이 코드 생성 단계는 매 빌드마다 새로 실행되어야 했습니다. 최근 Bug 2027655 수정 사항이 병합됨에 따라, Lua 플러그인 시스템을 갖춘 buildcache를 활용하여 이 과정을 캐싱할 수 있게 되었습니다. 이를 통해 동일한 입력값에 대해 생성된 결과를 즉시 재사용함으로써 전체 빌드 효율을 크게 개선했습니다.
핵심 인사이트
- 성능 개선: WebIDL 바인딩 코드 생성 단계에 캐싱을 적용하여 파이어폭스 빌드 속도를 약 17% 높였습니다.
- 기술적 차별점:
ccache나sccache와 달리buildcache는 Lua 플러그인 시스템을 통해 컴파일러가 아닌 임의의 명령어(Python codegen 등)를 래핑할 수 있습니다. - 버그 패치: Bug 2027655를 통해
py_action매크로에 네 번째 인자로 커맨드 래퍼를 전달할 수 있는 기능이 추가되었습니다.
주요 디테일
- 대상 프로세스:
python3 -m mozbuild.action.webidl명령을 통해 실행되는 WebIDL 바인딩 생성 과정을buildcache가 가로채어 처리합니다. - 의존성 관리:
mach가 생성하는file-lists.json과 Python 의존성을 추적하는codegen.json을 사용하여 입력 파일과 출력 파일 목록을 정의합니다. - 구현 방식:
dom/bindings/Makefile.in파일에MOZ_USING_BUILDCACHE조건문을 추가하여buildcache사용 시에만 전용 래퍼가 작동하도록 설정했습니다. - 최적화 기법:
buildcache의direct_mode기능을 사용하여 전처리 과정 없이 입력 파일을 직접 해싱함으로써 처리 속도를 최적화했습니다. - 출력 규모: 수백 개의 소스 파일로부터 헤더, cpp 파일, 이벤트 구현 등 수천 개의 결과 파일이 생성되며, 이는 결정론적(deterministic)인 특성을 가집니다.
향후 전망
- 복잡한 코드 생성 단계를 포함하는 대규모 소프트웨어 프로젝트에서
buildcache와 Lua 커스텀 래퍼를 활용한 빌드 최적화 사례가 늘어날 것으로 보입니다.
출처:hackernews
