^ Beyond Linux(r) From Scratch (systemd Edition) - Version 12.1 ^^^
^ Chapter 13. Programming ^^^
|[[.:Guile-3.0.9|이전]] | [[.:Chapter 13. Programming|위로]] / [[.:index|처음으로]] | [[.:Lua-5.4.6|다음]]|
|Guile-3.0.9 | Lua-5.4.6|
----
===== LLVM-17.0.6 =====
==== LLVM 소개 ====
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 플랫폼을 사용하여 빌드하고 제대로 작동하는 것으로 알려져 있습니다.
=== 패키지 정보 ===
* 다운로드(HTTP): [[https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/Low Level Virtual Machine|Low Level Virtual Machine]]
* MD5 sum: fd7fc891907e14f8e0ff7e3f87cc89a4
* 다운로드 크기: 57MB
* 필요한 예상 디스크 공간: 4.2GB(964MB 설치, 테스트용 20GB 및 문서용 308MB 추가)
* 예상 빌드 시간: 13 SBU(테스트용 8 SBU 추가, 둘 다 병렬 처리=8 사용)
=== 추가 다운로드 ===
== LLVM용 Cmake 모듈 ==
* 다운로드: [[https://anduin.linuxfromscratch.org/BLFS/llvm/llvm-cmake-17.src.tar.xz|llvm-cmake-17.src.tar.xz]]
* MD5 sum: 2b75b6446bfd5d0dcc288cd412b6a52a
* 다운로드 크기: 12 KB
== LLVM 빌드 시스템을 위한 타사 종속성 ==
* 다운로드: [[https://anduin.linuxfromscratch.org/BLFS/llvm/llvm-third-party-17.src.tar.xz|llvm-third-party-17.src.tar.xz]]
* MD5 sum: 09c9f2259766dd65b75cd728df11b395
* 다운로드 크기: 376 KB
=== 권장 다운로드 ===
== Clang ==
* 다운로드: [[https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/clang-17.0.6.src.tar.xz|clang-17.0.6.src.tar.xz]]
* MD5 합계: 52ff9f49e064860445474aa21e4a7e40
* 다운로드 크기: 21 MB
* Clang에서 기본적으로 SSP를 활성화하는 패치: [[https://www.linuxfromscratch.org/patches/blfs/12.1/clang-17-enable_default_ssp-1.patch|clang-17-enable_default_ssp-1.patch]]
=== 옵션 다운로드 ===
== Compiler RT ==
*다운로드: [[https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/compiler-rt-17.0.6.src.tar.xz|compiler-rt-17.0.6.src.tar.xz]]
*MD5 합계 다운로드: 85d25f04cbc4c1a20e3a1ab2a2c522cd
*다운로드 크기: 2.4 MB
=== LLVM 종속성 ===
== 필수 ==
* [[.:CMake-3.28.3]]
== 옵션 ==
* [[.:Doxygen-1.10.0]]
* [[.:git-2.44.0]]
* [[.:Graphviz-10.0.1]]
* [[.:libxml2-2.12.5]]
* [[.:Pygments-2.17.2]]
* [[.:rsync-3.2.7]] 테스트용
* [[.:recommonmark-0.7.1]] 문서용
* [[.:texlive-20230313]] 또는 [[.:install-tl-unx]]
* [[.:Valgrind-3.22.0]]
* [[.:PyYAML-6.0.1]]
* [[.:Zip-3.0]]
* [[https://ocaml.org/|OCaml]]
* [[https://pypi.org/project/psutil/|psutil]] 테스트용
* [[https://github.com/Z3Prover/z3|Z3]]
==== LLVM 설치 ====
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를 다운로드 받았다면 SSP((Stack Smash Protection))를 기본적으로 활성화 하는 패치를 적용합니다.
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
==== 명령 설명 ====
* //-DLLVM_ENABLE_FFI=ON//: LLVM이 libffi를 사용하도록 허용합니다.
* //-DLLVM_BUILD_LLVM_DYLIB=ON//: 라이브러리를 정적으로 빌드하고 모든 라이브러리를 고유한 공유 라이브러리로 연결합니다. 공유 라이브러리를 빌드하는 데 권장되는 방법입니다.
* //-DCMAKE_BUILD_TYPE=Release//: 코드의 속도를 높이고 크기를 줄이기 위해 컴파일러 최적화를 활성화합니다. 또한 프로덕션 시스템에서 필요하지 않은 일부 컴파일 검사를 비활성화합니다.
* //-DLLVM_TARGETS_TO_BUILD="host;AMDGPU"//: 호스트와 동일한 타겟에 대해 빌드할 수 있으며, Mesa r600 및 라데온시 드라이버에서 사용하는 r600 AMD GPU에 대해서도 빌드할 수 있습니다. 기본값은 모든 타겟입니다. 세미콜론으로 구분된 목록을 사용할 수 있습니다. 유효한 대상은 호스트, X86, Sparc, PowerPC, ARM, AArch64, Mips, Hexagon, Xcore, M68K, MSP430, NVPTX, SystemZ, AMDGPU, BPF, CppBackend 또는 모두입니다.
* //-DLLVM_LINK_LLVM_DYLIB=ON//: //-DLLVM_BUILD_LLVM_DYLIB=ON//과 함께 이 스위치를 사용하면 정적 라이브러리 대신 공유 라이브러리에 대해 툴을 연결할 수 있습니다. 그러면 크기가 약간 줄어들고 llvm-config가 libLLVM-17.so를 올바르게 사용하도록 보장합니다.
* //-DLLVM_ENABLE_RTTI=ON//: 런타임 유형 정보로 LLVM을 빌드하는 데 사용됩니다. [[.:Mesa-24.0.1]] 빌드에 필요합니다.
* //-DLLVM_BINUTILS_INCDIR=/usr/include//: 이 스위치는 빌드 시스템에 LFS에 설치된 binutils 헤더의 위치를 알려주는 데 사용됩니다. 이를 통해 clang 및 링크 시간 최적화(LTO)를 사용하여 프로그램을 빌드하는 데 필요한 ''LLVMgold.so''를 빌드할 수 있습니다.
* //-DLLVM_INCLUDE_BENCHMARKS=OFF//: LLVM 벤치마크에 대한 빌드 타겟 생성을 비활성화하는 데 사용됩니다. 이 옵션을 사용하려면 현재 사용할 수 없는 추가 코드가 필요합니다.
* //-DCLANG_DEFAULT_PIE_ON_LINUX=ON//: 프로그램을 컴파일할 때 -fpie 옵션을 기본값으로 설정합니다. 커널에서 활성화된 ASLR((Address Space Layout Randomization)) 기능과 함께 사용하면 알려진 메모리 레이아웃을 기반으로 하는 일부 공격을 무력화할 수 있습니다.
* //-DBUILD_SHARED_LIBS=ON//: //-DLLVM_BUILD_LLVM_DYLIB=ON// 및 //-DLLVM_LINK_LLVM_DYLIB=ON// 대신 사용하는 경우, 모든 LLVM 라이브러리(약 60개)를 정적 라이브러리가 아닌 공유 라이브러리로 빌드합니다.
* //-DLLVM_ENABLE_DOXYGEN//: Doxygen-1.10.0을 설치한 경우 탐색 가능한 HTML 문서를 생성할 수 있도록 합니다. 이후 make doxygen-html을 실행하고 생성된 문서를 수동으로 설치해야 합니다.
==== 내용 ====
* **설치한 프로그램**: \\ amdgpu-arch, analyze-build, bugpoint, c-index-test, clang, clang++ (symlinks to clang-17), clang-17, clang-check, clang-cl, clang-cpp (last two symlinks to clang), clang-extdef-mapping, clang-format, clang-linker-wrapper, clang-offload-bundler, clang-offload-packager, clang-refactor, clang-rename, clang-repl, clang-scan-deps, diagtool, dsymutil, FileCheck, git-clang-format, hmaptool, intercept-build, llc, lli, llvm-addr2line (symlink to llvm-symbolizer), llvm-ar, llvm-as, llvm-bcanalyzer, llvm-bitcode-strip (symlink to llvm-objcopy), llvm-cat, llvm-cfi-verify, llvm-config, llvm-cov, llvm-c-test, llvm-cvtres, llvm-cxxdump, llvm-cxxfilt, llvm-cxxmap, llvm-debuginfo-analyzer, llvm-debuginfod, llvm-debuginfod-find, llvm-diff, llvm-dis, llvm-dlltool (symlink to llvm-ar), llvm-dwarfdump, llvm-dwarfutil, llvm-dwp, llvm-exegesis, llvm-extract, llvm-gsymutil, llvm-ifs, llvm-install-name-tool (symlink to llvm-objcopy), llvm-jitlink, llvm-lib (symlink to llvm-ar), llvm-libtool-darwin, llvm-link, llvm-lipo, llvm-lto, llvm-lto2, llvm-mc, llvm-mca, llvm-ml, llvm-modextract, llvm-mt, llvm-nm, llvm-objcopy, llvm-objdump, llvm-opt-report, llvm-otool (symlink to llv-objdump), llvm-pdbutil, llvm-profdata, llvm-profgen, llvm-ranlib (symlink to llvm-ar), llvm-rc, llvm-readelf (symlink to llvm-readobj), llvm-readobj, llvm-reduce, llvm-remark-size-diff, llvm-remarkutil, llvm-rtdyld, llvm-sim, llvm-size, llvm-split, llvm-stress, llvm-strings, llvm-strip (symlink to llvm-objcopy), llvm-symbolizer, llvm-tapi-diff, llvm-tblgen, llvm-tli-checker, llvm-undname, llvm-windres (symlink to llvm-rc), llvm-xray, nvptx-arch, opt, sancov, sanstats, scan-build, scan-build-py, scan-view, split-file, 및 verify-uselistorder
* **설치한 라이브러리**: \\ libLLVM.so, libLLVM*.a (라이브러리 100개), libLTO.so, libRemarks.so, libclang.so, libclang-cpp.so, libclang*.a (라이브러리 42개), 및 LLVMgold.so
* **설치한 디렉토리**: \\ /usr/include/{clang,clang-c,llvm,llvm-c}, /usr/lib/{clang,cmake/{clang,llvm},libear,libscanbuild}, /usr/share/{clang,opt-viewer,scan-build,scan-view}, 및 /usr/share/doc/llvm-17.0.6
=== 간략한 설명 ===
* **amdgpu-arch** \\ 설치된 AMD GPU를 나열하며, 런타임에는 BLFS의 일부가 아닌 ''libhsa-runtime64.so''가 필요합니다.
* **analyze-build** \\ 정적 분석 도구
* **bugpoint** \\ 자동 테스트 케이스 감소 도구
* **c-index-test** \\ libclang API를 테스트하고 그 사용법을 보여주는 데 사용됩니다.
* **clang** \\ Clang C, C++ 및 Objective-C 컴파일러입니다.
* **clang-check** \\ 정적 코드 분석을 수행하고 추상 구문 트리(AST: Abstract Syntax Trees)를 표시하는 도구입니다.
* **clang-extdef-mapping** \\ 소스 파일에서 외부 정의의 USR((Unified Symbol Resolution)) 이름과 위치를 수집하는 도구입니다.
* **clang-format** \\ C/C++/자바/자바스크립트/오브젝티브-C/프로토부프 코드의 형식을 지정하는 도구입니다.
* **clang-linker-wrapper** \\ 호스트 링커에 대한 래퍼 유틸리티입니다.
* **clang-offload-bundler** \\ 공통 소스 파일과 관련된 OpenMP 오프로드 파일을 번들링/언번들링하는 도구입니다.
* **clang-offload-packager** \\ 여러 객체 파일을 단일 바이너리로 번들링하는 도구로, 오프로드 코드를 포함하는 팻 바이너리를 만드는 데 사용할 수 있습니다.
* **clang-refactor** \\ C, C++ 및 Objective-C를 위한 Clang 기반 리팩터링 도구입니다.
* **clang-rename** \\ C/C++ 프로그램에서 심볼 이름을 바꾸는 도구입니다.
* **clang-scan-deps** \\ 소스 파일에서 종속성을 검사하는 도구입니다.
* **diagtool** \\ clang에서 진단을 처리하는 도구의 조합입니다.
* **FileCheck** \\ 두 개의 파일(하나는 표준 입력에서, 다른 하나는 명령줄에 지정된 파일)을 읽고 하나를 사용하여 다른 파일을 확인하는 도구입니다.
* **dsymutil** \\ 보관된 DWARF 디버그 심볼 파일을 조작하는 데 사용되는 도구로, Darwin 명령인 ''dsymutil''과 호환됩니다.
* **git-clang-format** \\ git으로 생성된 패치에 대해 clang-format을 실행합니다([[.:git-2.44.0]] 필요).
* **hmaptool** \\ 헤더 맵을 덤프하고 구성하는 파이썬 도구이다.
* **intercept-build** \\ 프로젝트의 빌드 명령어 데이터베이스를 생성한다.
* **llc** \\ LLVM 정적 컴파일러
* **lli** \\ LLVM 비트코드에서 프로그램을 직접 실행하는 데 사용됩니다.
* **llvm-addr2line** \\ 주소를 파일 이름과 줄 번호로 변환하는 데 사용되는 도구입니다.
* **llvm-ar** \\ LLVM 아카이버
* **llvm-as** \\ LLVM 어셈블러
* **llvm-bcanalyzer** \\ LLVM 비트코드 분석기
* **llvm-bitcode-strip** \\ 객체에서 LLVM 비트코드를 스트립합니다.
* **llvm-cat** \\ LLVM 모듈을 연결하는 도구입니다.
* **llvm-cfi-verify** \\ 제어 흐름 무결성이 제공된 오브젝트 파일, DSO 또는 바이너리에서 모든 간접 제어 흐름 명령어를 보호하는지 확인합니다.
* **llvm-config** \\ LLVM 컴파일 옵션을 출력합니다
* **llvm-cov** \\ 커버리지 정보를 출력하는 데 사용됩니다.
* **llvm-c-test** \\ 바이트코드 디스어셈블러입니다.
* **llvm-cvtres** \\ Microsoft 리소스 파일을 COFF로 변환하는 도구입니다.
* **llvm-cxxdump** \\ C++ ABI 데이터 덤퍼로 사용됩니다.
* **llvm-cxxfilt** \\ llvm 코드에서 C++ 심볼을 분리하는 데 사용됩니다.
* **llvm-cxxmap** \\ C++ 엉클어진 심볼을 다시 매핑하는 데 사용됩니다.
* **llvm-debuginfo-analyzer** \\ 저수준 디버그 정보의 논리적 표현을 출력합니다.
* **llvm-debuginfod** \\ 제거된 바이너리를 분석하기 위해 HTTP API를 통해 디버그 정보를 제공하는 서비스입니다.
* **llvm-debuginfod-find** \\ 디버그인포드 아티팩트를 찾기 위한 llvm-debuginfod 데몬에 대한 인터페이스입니다.
* **llvm-diff** \\ LLVM 구조적 'diff'입니다.
* **llvm-dis** \\ LLVM 디스어셈블러
* **llvm-dwarfdump** \\ 오브젝트 파일에 있는 DWARF 섹션의 내용을 출력합니다.
* **llvm-dwarfutil** \\ 디버그 정보를 복사하고 조작하는 도구입니다.
* **llvm-dwp** \\ 분할된 DWARF 파일을 병합합니다
* **llvm-elfabi** \\ ELF 바이너리의 ABI에 대한 정보를 읽는 데 사용됩니다.
* **llvm-exegesis** \\ LLVM에서 사용 가능한 정보를 사용하여 지연 시간이나 포트 분해와 같은 호스트 머신 명령어 특성을 측정하는 벤치마킹 툴입니다.
* **llvm-extract** \\ LLVM 모듈에서 함수를 추출하는 데 사용됩니다.
* **llvm-gsymutil** \\ 메모리 주소를 함수 이름과 소스 파일 줄로 변환하는 GSYM 심볼리케이션 포맷 파일을 처리하는 데 사용됩니다. 이 파일은 DWARF 또는 브레이크패드 파일보다 작습니다.
* **llvm-ifs** \\ 인터페이스 스텁을 오브젝트 파일과 병합하는 데 사용됩니다.
* **llvm-install-name-tool** \\ 로드 명령을 MachO 바이너리 형식으로 다시 작성하는 데 사용됩니다.
* **llvm-jitlink** \\ 재배치 가능한 객체 파일을 구문 분석하여 대상 프로세스에서 해당 내용을 실행 가능하게 만드는 데 사용됩니다.
* **llvm-libtool-darwin** \\ Darwin 기반 시스템에서 기본적인 libtool 기능을 제공합니다. 주로 macOS 시스템용 바이너리를 생성하는 경우에 유용합니다.
* **llvm-link** \\ LLVM 링커
* **llvm-lipo** \\ MachO 파일에서 범용 바이너리를 생성하는 데 사용됩니다.
* **llvm-lto** \\ LLVM LTO(링크 시간 최적화) 링커입니다.
* **llvm-lto2** \\ Resolution 기반 LTO 인터페이스를 위한 테스트 하네스입니다.
* **llvm-mc** \\ 독립형 머신 코드 어셈블러/디스어셈블러입니다.
* **llvm-mca** \\ 머신 코드의 성능을 정적으로 측정하는 성능 분석 툴입니다.
* **llvm-ml** \\ LLVM에서 제공하는 머신 코드를 위한 playground 입니다.
* **llvm-modextract** \\ 멀티모듈 비트코드 파일에서 하나의 모듈을 추출하는 도구입니다.
* **llvm-mt** \\ 나란히 배치된 어셈블리 매니페스트에서 서명된 파일과 카탈로그를 생성하는 도구입니다(Microsoft SDK에 사용됨).
* **llvm-nm** \\ LLVM 비트코드 및 오브젝트 파일의 심볼 테이블을 나열하는 데 사용됩니다.
* **llvm-objcopy** \\ LLVM의 객체 복사 도구 버전입니다.
* **llvm-objdump** \\ LLVM 객체 파일 덤퍼입니다.
* **llvm-opt-report** \\ YAML 최적화 레코드 파일에서 최적화 보고서를 생성하는 도구입니다.
* **llvm-pdbutil** \\ PDB(프로그램 데이터베이스) 덤퍼입니다. PDB는 Microsoft 형식입니다.
* **llvm-profdata** \\ 프로파일 데이터 파일을 조작하고 인쇄하는 작은 도구입니다.
* **llvm-profgen** \\ LLVM SPGO 프로파일링 정보를 생성합니다.
* **llvm-ranlib** \\ LLVM 아카이브의 인덱스를 생성하는 데 사용됩니다.
* **llvm-rc** \\ 리소스 스크립트를 바이너리 리소스 파일로 컴파일하는 플랫폼 독립적인 도구입니다.
* **llvm-readobj** \\ 오브젝트 파일에 대한 저수준 형식별 정보를 표시합니다.
* **llvm-reduce** \\ 테스트 스위트를 실행할 때 테스트 케이스를 자동으로 줄이는 데 사용됩니다.
* **llvm-remark-size-diff** \\ 두 주석 파일 간의 명령어 수와 스택 크기 주석의 차이를 보고합니다.
* **llvm-remarkutil** \\ 주석 파일을 비트스트림과 YAML 간에 변환하거나 주석 파일에 함수 명령어 수 정보를 인쇄합니다.
* **llvm-rtdyld** \\ LLVM MC-JIT 도구
* **llvm-size** \\ LLVM 객체 크기 덤퍼
* **llvm-split** \\ LLVM 모듈 스플리터
* **llvm-stress** \\ 임의의 .ll 파일을 생성하는 데 사용됩니다.
* **llvm-strings** \\ 바이너리(객체 파일, 실행 파일 또는 아카이브 라이브러리)에서 찾은 문자열을 인쇄합니다.
* **llvm-symbolizer** \\ 주소를 소스 코드 위치로 변환합니다.
* **llvm-tblgen** \\ LLVM 대상 설명을 C++ 코드 생성기로 변환합니다.
* **llvm-tli-checker** \\ LLVM 타깃 라이브러리 정보 대 SDK 검사기입니다.
* **llvm-undname** \\ 이름 풀기 도구
* **llvm-xray** \\ Google의 XRay 함수 호출 추적 시스템 구현입니다.
* **nvptx-arch** \\ 설치된 NVIDIA GPU를 나열하며, 런타임에 BLFS의 일부가 아닌 libcuda.so가 필요합니다.
* **opt** \\ LLVM 옵티마이저
* **sancov** \\ 세니타이져 커버리지 처리 도구
* **sanstats** \\ 세니타이져 통계 처리 도구
* **scan-build** \\ Clang 정적 분석기를 호출하는 Perl 스크립트입니다.
* **scan-build-py** \\ Clang 정적 분석기를 호출하는 Python 스크립트입니다.
* **scan-view** \\ Clang 정적 분석기 결과 뷰어입니다.
* **split-file** \\ 입력 파일을 정규식으로 구분된 여러 부분으로 분할합니다.
* **verify-uselistorder** \\ 사용 목록 순서를 확인하는 LLVM 도구입니다.