원문 캡처 · github.com
원문 캡처 · github.com

kcc의 전체 설명서는 약 1,000쪽이다. 이 설명서가 컴파일러의 유일한 원본이기도 하다.

kcc는 C17 코드를 검사하고 최적화해 기계어로 바꾸는 컴파일러다. 프로젝트는 이를 ARM64 어셈블리로 작성하고, 설명서와 코드를 함께 관리하는 방식으로 공개했다. C 컴파일러를 공부하거나 직접 빌드해 보려는 사람은 저장소의 설명서와 빌드 절차를 참고할 수 있다.

kcc는 어떤 컴파일러인가?

설명서와 코드를 함께 쓰는 방식은 조리법과 요리 도구를 한 권에 담는 것에 빗대면 이해하기 쉽다. kcc에서는 사람이 읽는 설명과 컴파일러 코드가 하나의 문서에 있고, weft가 그 문서에서 빌드에 필요한 파일을 생성한다.

kcc는 C 표준에 맞춰 코드를 검사하고, 최적화와 레지스터 할당을 거쳐 네이티브 기계어를 출력한다. 컴파일러 자신도 컴파일해 바이트 단위로 같은 바이너리를 만들 수 있다. 리눅스와 macOS용 x86-64 코드로 교차 컴파일하며, Lua와 SQLite, DOOM을 빌드하고 실행할 수 있고 리눅스 커널도 부팅한다고 프로젝트는 설명한다.

무엇이 원본이고 어떻게 빌드하나?

.weft 파일이 유일한 원본이다. 어셈블리 모듈과 검증 스크립트, Makefile까지 모두 설명서에서 생성한다. 생성된 파일을 직접 고치는 대신 설명서의 내용을 수정한다. 저장소에는 조판된 kcc.pdf도 포함돼 있어 바로 읽을 수 있으며, make pdf로 다시 만들 수 있다.

최초 빌드에는 한 번의 준비 단계가 필요하다. Makefile 자체도 설명서에서 생성되기 때문에 먼저 weft를 실행한 다음 make를 사용한다.

sh
# 1. 소스와 스크립트, Makefile을 gen/과 ./Makefile에 생성한다.
weft -p gen/ --mkdirs kcc.weft

# 2. 컴파일러를 빌드한다(gen/kcc).
make

# 3. C 프로그램을 컴파일하고 실행한다.
./gen/kcc gen/hello.c -o gen/hello && ./gen/hello

-p gen/은 생성되는 모든 파일의 경로 앞에 gen/을 붙이고, --mkdirs는 필요한 디렉터리를 만든다. 생성물은 gen/ 아래와 저장소 루트의 Makefile에 놓인다. make clean으로 생성물을 지운 뒤 위 명령으로 다시 만들 수 있다. 검증 스크립트는 기준 디렉터리를 스스로 찾기 때문에 -p에 다른 경로를 지정해도 작동한다.

어떤 검증과 환경이 필요한가?

저장소에는 다음 작업을 위한 Make 타깃이 있다.

타깃수행 작업
make / make buildgen/kcc를 어셈블하고 링크한다
make difftestkcc와 clang으로 코드 모음을 컴파일해 비교한다
make diagtest / make warntest잘못된 프로그램의 거부 여부와 -Wall 경고를 검사한다
make test-codegen / make e2e / make interop생성된 프로그램을 실행한다
make selfhost-*C 모듈을 kcc로 다시 컴파일하고 재링크한 뒤 검증한다
make meta-c리눅스에서 완전한 자체 호스팅 고정점 검증을 수행한다. Docker와 qemu가 필요하다
make ci전체 검증 모음을 실행한다
make pdf설명서를 조판해 kcc.pdf를 만든다

필수 도구는 weft 2.0.0 이상과 C 도구 모음의 as, ld다. macOS에서는 Xcode 명령줄 도구를 사용할 수 있다. 설명서를 만들려면 LuaLaTeX와 latexmk가 포함된 TeX 배포판이 필요하다. 전체 TeX Live 또는 경량판인 TinyTeX를 사용할 수 있고, 표지 생성에는 선택적으로 rsvg-convert가 필요하다. make meta-c와 커널 부팅 재현에는 Docker와 qemu-user가 필요하다.

make pdf는 .weft 파일을 kcc.tex로 엮은 뒤 LuaLaTeX로 kcc.pdf를 조판한다. rsvg-convert가 있으면 표지를 assets/*.svg에서 다시 만든다. PDF는 저장소에 포함되며, 태그가 붙은 버전은 GitLab의 릴리스 자산으로도 공개된다. 라이선스는 MIT다. 프로젝트 설명은 쿠아우테목 파체코(Cuauhtémoc Pacheco)가 Claude와 공동 작성했다고 밝힌다.

직접 빌드하려면 weft 버전과 어셈블러·링커부터 준비해야 한다. 원문은 월 100달러라는 비용의 산정 방식이나 ‘에이전트 없이’ 만들었다는 제목의 주장에 대한 근거를 밝히지 않는다.