LLVM Install
LLVM 다운로드는 다음 링크에서 하거나 "llvm download" 라고 검색하면 동일한 페이지로 진입할 수 있다.
https://releases.llvm.org/download.html
LLVM Download Page
If you'd like access to the "latest and greatest" in LLVM development, please see the instructions for accessing the LLVM Git Repository. The major changes and improvements that the development version contains relative to the previous release are listed i
releases.llvm.org
링크로 진입하면 여러 LLVM 버전들이 게시되어 있다.
다운로드 할 LLVM 버전을 고르고, page를 클릭하면 git에서 LLVM 을 다운로드 할 수 있다.
가장 최신 버전인 18.1.8 버전을 다운로드했다.

일반적으로 LLVM 과 Clang 정도만 다운로드 하면 되지만,
이전에 여러 번 실패하여 그냥 llvm-project-18.1.8.src.tar.xz 를 다운로드하여 사용하도록 했다.
Build 까지 모두 성공한 시점에서 바라볼 때는 괜히 사용하지 않는 파일들을 설치하길 원하지 않는다면
두 개 파일만 다운로드 후 설치해도 좋을 것 같다.

다운로드한 파일은 ubuntu로 옮겨서 압축 해제해주고 디렉토리 이름을 llvm-project 로 변경해주었다.
# 압축 해제 명령어
tar -xvf <파일이름>.tar.xz
# 디렉토리 이름 변경
mv <변경대상이름> llvm-project
LLVM Build
LLVM 빌드 과정은 다음 링크에서 제공하는 설명을 바탕으로 상황에 맞춰서 수정해가며 진행하였다.
https://www.llvm.org/docs/GettingStarted.html#getting-started-with-llvm
Getting Started with the LLVM System — LLVM 21.0.0git documentation
lli is the LLVM interpreter, which can directly execute LLVM bitcode (although very slowly…). For architectures that support it (currently x86, Sparc, and PowerPC), by default, lli will function as a Just-In-Time compiler (if the functionality was compil
www.llvm.org
먼저 빌드 과정에 대해 설명하기 전에, build directory를 직접 생성하고 build 디렉토리에서 작업하는 방법이 있으나,
본인은 이 과정으로 진행하다 수십차례의 실패에 뭐가 옳고 그른지도 모르겠고 찾아보기만 하다가 최신 버전에서는 더 간단한 명령어로 가능하다는 것을 알아내어 버전업된 방법으로 빌드하였다.
이제 build를 하기위해서는 다음 명령어를 사용하면 된다.
-DCMAKE_BUILD_TYPE은 Debug로 설정해도 되지만 본인은 Debug로 설정했다가 컴퓨터 사양이 맞춰지지 못하여 Release로 바꿔서 다시 빌드했다.
명령어 실행 위치는 llvm-project에서 하면 된다.
cmake -S llvm -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
참고로 Ubuntu에서 할당된 Memory는 4GB, 컴퓨터 CPU core 4, Memory 8GB로 그닥 무거운 프로그램을 돌리기에 좋진 않다.
cmake 실행 시에 다음과 같은 오류가 뜰 수 있는데 apt 버전이 안전하고 좋다고 하니 apt 명령어를 사용하는 버전으로 하여 cmake 설치를 하고 다시 진행하도록 했다.
(다음 그림은 기존 build 과정에서 찍은 것으로 명령어의 차이가 있으나, cmake가 설치되어 있지 않다면 다음과 같은 오류가 뜬다.)

sudo apt install cmake
또 위의 build 명령어에서 Ninja를 사용하여 build를 하고 있기 때문에 Ninja 설치도 해줬다.
해서 build를 원활히 끝내면 다음과 같은 화면을 만날 수 있다.

Build Test
이번에 진행된 모든 과정 중에 가장 오래걸리는 과정으로 만약 실행 환경의 사양이 좋지 못하다면 본인과 같은 어려움을 몇 차례 겪어야 할 지도 모른다.
기본 명령어는 다음과 같다.
ninja -C build check-llvm
그러면 다음과 같은 화면과 함께 test가 진행된다.

위 과정에서 test 중에 Memory가 부족해서 fatal error가 나면서 강제 종료 당했다.

강제 종료 당했을 시에는 해결 방법이 몇가지 있는데, 사양이 좋지 않다면 모두 적용하고 실행하는 것을 추천한다.
1. Debug -> Release : 앞서 말한 option에 대해 release 옵션으로 바꿔서 build 후 build test를 하면 훨씬 수월하게 test를 할 수 있다.
2. swap 늘리기
3. core 제한 옵션 달아서 실행하기
위의 방법 중에는 1번 3번 2번 순으로 효과적이라고 생각된다.
2번부터 자세히 설명하겠다.
먼저 memory와 swap 상태를 확인하기 위해 다음 명령어를 실행한다.
free -h

메모리 3.7 기가 Swap은 1GB로 메모리도 swap도 턱없이 부족한 상태.
급한대로 swap이라도 늘리고자 하여 다음 명령어를 사용하여 4GB로 늘렸다.
sudo swapoff -a
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

잘 늘어난 것을 확인할 수 있다.

3번은 옵션 다는 것이라 기존 명령어에서 -j 옵션을 추가해주면 된다.
각자 사양에 맞춰서 하면 되는 것 같고, 본인은 -j2로 돌리다가 안되서 -j1으로 test 하였다.
# 기존 명령어
ninja -C build check-llvm
# 2개 프로세스 병렬 실행 제한
ninja -C build -j2 check-llvm
# 3개 프로세스 병렬 실행 제한
ninja -C build -j3 check-llvm
다행히 build test는 중간에 끊기면 끊겼던 부분에서 다시 시작하는 듯 하다.

모든 test가 완료되면 다음과 같은 화면을 만날 수 있다.

환경 변수 설정하기
llvm-project : base directory
llvm : llvm 소스
clang : clang 소스
build : cmake ../llvm (빌드) 실행 directory, 실행 가능한 도구들이 생성된 directory
# setting for environment variables
export LLVM_BASE_DIR=/root/LLVM/llvm-project
export LLVM_SRC=$LLVM_BASE_DIR/llvm
export LLVM_SRC_ROOT=$LLVM_BASE_DIR/llvm
export LLVM_ROOT=$LLVM_BASE_DIR/llvm
export LLVM_OBJ=$LLVM_BASE_DIR/build
export LLVM_OBJ_DIR=$LLVM_BASE_DIR/build
export LLVM_OBJ_ROOT=$LLVM_BASE_DIR/build
export LLVM_INSTALL_DIR=$LLVM_BASE_DIR/llvm-install
export LLVM_DIR=$LLVM_BASE_DIR/build
export PATH=$LLVM_INSTALL_DIR/bin:$PATH