Guile-3.0.9 | Lua-5.4.6 |
LLVM 패키지에는 재사용 가능한 모듈식 컴파일러 및 툴체인 모음이 포함되어 있습니다. 저수준 가상 머신(LLVM: Low Level Virtual Machine) 코어 라이브러리는 최신 소스 및 대상 독립적 옵티마이저와 함께 많은 인기 CPU(일부 덜 인기 있는 CPU도 포함!)에 대한 코드 생성 지원을 제공합니다. 이러한 라이브러리는 LLVM 중간 표현(“LLVM IR”)으로 알려진 잘 지정된 코드 표현을 중심으로 구축됩니다.
Clang은 LLVM을 위한 새로운 C, C++, Objective C 및 Objective C++ 프론트엔드를 제공하며, 시스템 LLVM을 사용하여 빌드된 경우 Firefox와 같은 일부 데스크톱 패키지와 Rust에 필요합니다.
컴파일러 RT 패키지는 Clang 및 LLVM을 사용하는 개발자를 위한 런타임 Sanitizer 및 프로파일링 라이브러리를 제공합니다.
이 패키지는 LFS 12.1 플랫폼을 사용하여 빌드하고 제대로 작동하는 것으로 알려져 있습니다.
LLVM 빌드 시스템에는 두 개의 추가 타르볼 llvm-cmake-17.src.tar.xz
와 llvm-third-party-17.src.tar.xz
가 필요합니다. 이 두 타르볼을 llvm-17.0.6.src.tar.xz
타르볼과 동일한 디렉토리에 추출하고 디렉터리의 이름을 cmake
및 third-party
로 변경합니다. 이 디렉터리를 추출하고 빌드 시스템을 수정하여 llvm-17.0.6.src 계층 구조 외부에 모호한 이름의 디렉터리가 생성되지 않도록 합니다.
tar -xf ../llvm-cmake-17.src.tar.xz &&
tar -xf ../llvm-third-party-17.src.tar.xz &&
sed '/LLVM_COMMON_CMAKE_UTILS/s@../cmake@llvm-cmake-17.src@' \
-i CMakeLists.txt &&
sed '/LLVM_THIRD_PARTY_DIR/s@../third-party@llvm-third-party-17.src@' \
-i cmake/modules/HandleLLVMOptions.cmake
다음과 같이 clang
을 소스트리에 추가합니다.
tar -xf ../clang-17.0.6.src.tar.xz -C tools &&
mv tools/clang-17.0.6.src tools/clang
compiler-rt
를 다운로드 받았다면, 다음과 같이 소스트리에 추가하고 빌드 시스템을 수정하여 llvm-cmake-17.src
디렉토리를 적절한 위치에서 찾을 수 있도록 합니다.
tar -xf ../compiler-rt-17.0.6.src.tar.xz -C projects &&
mv projects/compiler-rt-17.0.6.src projects/compiler-rt &&
sed '/^set(LLVM_COMMON_CMAKE_UTILS/d' \
-i projects/compiler-rt/CMakeLists.txt
이 패키지에는 LFS의 시스템 파이썬인 Python-3.12.2에 액세스하기 위해 /usr/bin/env python
을 사용하는 많은 파이썬 스크립트가 있습니다. 이러한 스크립트를 다음과 수정합니다.
grep -rl '#!.*python' | xargs sed -i '1s/python$/python3/'
clang를 다운로드 받았다면 SSP1)를 기본적으로 활성화 하는 패치를 적용합니다.
patch -Np2 -d tools/clang <../clang-17-enable_default_ssp-1.patch
compiler-rt를 다운로드한 경우 clang에서 기본 SSP 활성화로 인해 영향받은 테스트를 수정하세요.
sed 's/clang_dfsan/& -fno-stack-protector/' \
-i projects/compiler-rt/test/dfsan/origin_unaligned_memtrans.c
다음과 같이 LLVM을 컴파일 합니다.
mkdir -v build &&
cd build &&
CC=gcc CXX=g++ \
cmake -DCMAKE_INSTALL_PREFIX=/usr \
-DLLVM_ENABLE_FFI=ON \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_BUILD_LLVM_DYLIB=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_TARGETS_TO_BUILD="host;AMDGPU" \
-DLLVM_BINUTILS_INCDIR=/usr/include \
-DLLVM_INCLUDE_BENCHMARKS=OFF \
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
-Wno-dev -G Ninja .. &&
ninja
Recommonmark-0.7.1 및 해당 종속 요소를 설치한 경우 다음과 같이 HTML 문서 및 매뉴얼 페이지를 생성할 수 있습니다.
cmake -DLLVM_BUILD_DOCS=ON \
-DLLVM_ENABLE_SPHINX=ON \
-DSPHINX_WARNINGS_AS_ERRORS=OFF \
-Wno-dev -G Ninja .. &&
ninja docs-llvm-html docs-llvm-man
clang 문서도 생성합니다.
ninja docs-clang-html docs-clang-man
테스트를 수행하려면 일부 시스템에서 종료되지 않는 문제가 발생하는 테스트를 제거합니다.
rm -f ../projects/compiler-rt/test/tsan/getline_nohang.cpp
LLVM 테스트 스위트는 많은 코어 덤프 파일을 생성할 수 있습니다. 이러한 파일은 많은 양의 디스크 공간을 차지하며 코어 덤프 프로세스로 인해 테스트 속도가 상당히 느려질 수 있습니다. 코어 덤프를 비활성화한 상태에서 결과를 테스트하려면 Systemd-255 및 Shadow-4.14.5가 Linux-PAM-1.6.0를 지원하도록 다시 빌드되었는지 확인하고(SSH 또는 그래픽 세션을 통해 상호작용하는 경우 OpenSSH-9.6p1 서버 또는 데스크톱 관리자도 Linux-PAM-1.6.0을 지원하도록 으로 빌드되었는지 확인) 현재 로그인 세션이 /etc/pam.d/system-session
파일을 업데이트하여 pam_systemd.so
를 포함하도록 시작한 후 실행합니다
systemctl --user start dbus &&
systemd-run --user --pty -d -G -p LimitCORE=0 ninja check-all
ninja에 -jN(N이 숫자로 대체됨)을 전달하면 테스트는 N개의 논리 코어로 빌드되지만 사용 가능한 모든 논리 코어를 사용하여 실행됩니다. 테스트 실행을 위한 논리적 코어 수를 제한하려면 cgroup에서 테스트 명령을 실행합니다(systemd-run 명령에 -p AllowedCPUs=… 옵션을 전달하고, 자세한 내용은 "Linux 제어 그룹을 사용하여 리소스 사용량 제한하기" 섹션을 참조하세요). 커널 구성에서 CONFIG_USER_NS
가 활성화되지 않은 경우 Linux/clone_setns.cpp
라는 이름의 테스트가 실패합니다.
이제 root 사용자로
ninja install &&
cp bin/FileCheck /usr/bin
위의 명령으로 llvm 문서를 빌드했다면 이미 설치되었지만 적절한 위치로 이동해야 합니다. root 사용자로
install -v -d -m755 /usr/share/doc/llvm-17.0.6 &&
mv -v /usr/share/doc/LLVM/llvm /usr/share/doc/llvm-17.0.6 &&
rmdir -v --ignore-fail-on-non-empty /usr/share/doc/LLVM
clang 문서를 빌드했다면 설치가 완료되었지만 적절한 위치로 이동해야 합니다. 다시 root 사용자로 실행합니다.
install -v -d -m755 /usr/share/doc/llvm-17.0.6 &&
mv -v /usr/share/doc/LLVM/clang /usr/share/doc/llvm-17.0.6 &&
rmdir -v --ignore-fail-on-non-empty /usr/share/doc/LLVM
LLVMgold.so
를 빌드할 수 있습니다.libhsa-runtime64.so
가 필요합니다.dsymutil
과 호환됩니다.