JDK 직접 빌드하기

이세민·2025년 4월 20일

배경

그냥 호기심으로 GC를 직접 만들어보고 싶었다.

물론 굉장히 어렵겠지만 EpsilonGC 처럼 실제로 GC를 수행하지 않더라도, JVM에서 내 GC가 돌아가는걸 보고 싶었다.

OpenJDK 다운로드

https://github.com/openjdk/jdk
이곳에서 JDK의 소스를 다운로드 받았다.

Boot JDK

그리고 JDK가 하나 더 필요하다. JDK를 빌드하기 위해선 BootJDK라는 또다른 Java 환경이 설치되어 있어야 한다.

JDK의 소스코드에는 C++ 뿐만 아니라 Java 코드도 섞여있어 빌드할때 Java 코드를 컴파일하기 위해 BootJDK가 필요하다.
일반적으로는 빌드할 JDK의 이전버전의 JDK를 사용한다.

나는 기존에 깔려있던 JDK21을 사용했고 이에 따라 빌드할 JDK로 22버전을 선택했다.

Msys2 설치

Windows는 JDK가 지원하는 OS 들중 POSIX를 지원하지 않는 유일한 OS이다.

POSIX란?
UNIX OS의 공통적인 API를 정리한 이식성 높은 인퍼테이스 규격이다

따라서 Windows에서 POSIX를 사용할 수 있도록 하는 프로그램을 설치해야한다. 가능한 선택지로는 Cygwin, Msys2, WSL이 있다.

https://www.msys2.org/
일반적으로 공식 사이트에서 설치하지만, 나는 chocolatey를 사용중이기 때문에 choco install msys2 명령어를 사용하여 간단하게 설치했다.

Msys2 패키지 설치

Msys2 환경이 설치가 되었다면, JDK 빌드를 위한 패키지를 추가로 설치해야한다.
pacman -S autoconf tar make zip unzip
위 명령어를 통해 필요한 패키지들을 설치할 수 있다.

Visual Studio 설치

Windows용 JDK빌드를 위해 C/C++ 컴파일러로 MSVC를 사용하기 때문에 Visual Studio 설치와 함께 MSVC를 installer에서 선택하여 설치한다.

주의사항

무조건 Visual Studio를 영어 언어팩을 선택하여 설치해야 한다.
openJDK에서 나중에 빌드 과정에서 MSVC의 cl.exe의 버전이름으로 targetCPU를 검증한다.

targetCPU를 파싱할때, 띄어쓰기된 가장 뒤의 문자열을 가져오는것에서 문제가 발생한다.

영어판:Microsoft (R) C/C++ Optimizing Compiler Version 19.43.34810 for x64
한글판:Microsoft (R) C/C++ 최적화 컴파일러 버전 19.39.33521(x64)

위 규칙대로 파싱하면 영어판의 경우 x64로 파싱되지만 한글판의 경우19.39.33521(x64)으로 파싱되어 빌드에러가 발생한다.

한글말고도 다른 언어팩에서도 유사한 문제가 발생할 수 있기 때문에 영어팩 설치는 선택이 아닌 필수다.
나도 이것 때문에 일주일을 해맸다..

드디어 빌드하기

먼저 Msys2를 실행하고, JDK 소스가 있는곳으로cd를 통해 이동한다.

빌드 설정

JDK가 있는곳으로 이동했다면

bash configure

이 명령어를 실행한다.

몇가지 확인작업이 끝나고

이렇게 A new configuration has been successfully created가 출력됐다면 성공이다.

만약 BootJDK를 찾지 못했다고 한다면
bash configure --with-book-jdk=<JDK위치>
위 명령어로 BootJDK의 위치를 명시할 수 있다.

빌드

make images

위 명령어를 실행하면 JDK의 빌드가 진행된다!

여담

자료를 찾기위해 JDK 개발환경 구축이라고 검색 했지만 모두 Java 개발환경 구축을 위한 JDK 설치밖에 알려주지 않았다.

그래서 블로그 제목도 원래 JDK 개발환경 구축하기였지만 JDK 직접 빌드하기로 바꾸었다.

profile
gsm 8기 고등학생

0개의 댓글