← Documents Documentation/kbuild/llvm.rst GitHub 원문 ↗

Linux 6.18.37 · Kbuild

Building Linux with Clang/LLVM

LLVM toolchain 선택, cross compile, integrated assembler, ccache와 architecture 지원 상태를 설명합니다.

Source pathDocumentation/kbuild/llvm.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

llvm.rst:1-225

전체 LLVM toolchain은 `LLVM=1`로 선택하며 path 또는 version suffix도 `LLVM=` 값으로 지정합니다. Configuration과 build의 모든 `make` 호출에서 같은 값을 유지해야 합니다.

LLVM backend만 쓰는 cross build는 대개 `CROSS_COMPILE` 없이 `ARCH`만 지정할 수 있습니다. GNU tool을 섞거나 `LLVM_IAS=0`으로 외부 assembler를 쓸 때는 target tool 이름과 prefix가 필요합니다.

지원 표는 architecture별 현재 상태를 나타내며, LLVM이 target을 지원한다는 사실만으로 모든 kernel configuration의 build·runtime 성공이 보장되지는 않습니다.

LLVM kernel build 결정
Host build: `LLVM=1`LLVM-only cross build: `LLVM=1 ARCH=<arch>`GNU utility 혼합: `LD`·`OBJCOPY` 등 직접 지정External assembler: `LLVM_IAS=0 CROSS_COMPILE=<triple>-`반복 build: deterministic timestamp와 `ccache clang`

Build 환경에 맞는 최소 인자를 선택합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. _kbuild_llvm:
2
3 ==============================
4 Building Linux with Clang/LLVM
5 ==============================
6
7 This document covers how to build the Linux kernel with Clang and LLVM
8 utilities.
9
10 About
11 -----
12
13 The Linux kernel has always traditionally been compiled with GNU toolchains
14 such as GCC and binutils. Ongoing work has allowed for `Clang
15 <https://clang.llvm.org/>`_ and `LLVM <https://llvm.org/>`_ utilities to be
16 used as viable substitutes. Distributions such as `Android
17 <https://www.android.com/>`_, `ChromeOS
18 <https://www.chromium.org/chromium-os>`_, `OpenMandriva
19 <https://www.openmandriva.org/>`_, and `Chimera Linux
20 <https://chimera-linux.org/>`_ use Clang built kernels. Google's and Meta's
21 datacenter fleets also run kernels built with Clang.
22
23 `LLVM is a collection of toolchain components implemented in terms of C++
24 objects <https://www.aosabook.org/en/llvm.html>`_. Clang is a front-end to LLVM
25 that supports C and the GNU C extensions required by the kernel, and is
26 pronounced "klang," not "see-lang."
27
28 Building with LLVM
29 ------------------
30
31 Invoke ``make`` via::
32
33 make LLVM=1
34
35 to compile for the host target. For cross compiling::
36
37 make LLVM=1 ARCH=arm64
38
39 The LLVM= argument
40 ------------------
41
42 LLVM has substitutes for GNU binutils utilities. They can be enabled
43 individually. The full list of supported make variables::
44
45 make CC=clang LD=ld.lld AR=llvm-ar NM=llvm-nm STRIP=llvm-strip \
46 OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump READELF=llvm-readelf \
47 HOSTCC=clang HOSTCXX=clang++ HOSTAR=llvm-ar HOSTLD=ld.lld
48
49 ``LLVM=1`` expands to the above.
50
51 If your LLVM tools are not available in your PATH, you can supply their
52 location using the LLVM variable with a trailing slash::
53
54 make LLVM=/path/to/llvm/
55
56 which will use ``/path/to/llvm/clang``, ``/path/to/llvm/ld.lld``, etc. The
57 following may also be used::
58
59 PATH=/path/to/llvm:$PATH make LLVM=1
60
61 If your LLVM tools have a version suffix and you want to test with that
62 explicit version rather than the unsuffixed executables like ``LLVM=1``, you
63 can pass the suffix using the ``LLVM`` variable::
64
65 make LLVM=-14
66
67 which will use ``clang-14``, ``ld.lld-14``, etc.
68
69 To support combinations of out of tree paths with version suffixes, we
70 recommend::
71
72 PATH=/path/to/llvm/:$PATH make LLVM=-14
73
74 ``LLVM=0`` is not the same as omitting ``LLVM`` altogether, it will behave like
75 ``LLVM=1``. If you only wish to use certain LLVM utilities, use their
76 respective make variables.
77
78 The same value used for ``LLVM=`` should be set for each invocation of ``make``
79 if configuring and building via distinct commands. ``LLVM=`` should also be set
80 as an environment variable when running scripts that will eventually run
81 ``make``.
82
83 Cross Compiling
84 ---------------
85
86 A single Clang compiler binary (and corresponding LLVM utilities) will
87 typically contain all supported back ends, which can help simplify cross
88 compiling especially when ``LLVM=1`` is used. If you use only LLVM tools,
89 ``CROSS_COMPILE`` or target-triple-prefixes become unnecessary. Example::
90
91 make LLVM=1 ARCH=arm64
92
93 As an example of mixing LLVM and GNU utilities, for a target like ``ARCH=s390``
94 which does not yet have ``ld.lld`` or ``llvm-objcopy`` support, you could
95 invoke ``make`` via::
96
97 make LLVM=1 ARCH=s390 LD=s390x-linux-gnu-ld.bfd \
98 OBJCOPY=s390x-linux-gnu-objcopy
99
100 This example will invoke ``s390x-linux-gnu-ld.bfd`` as the linker and
101 ``s390x-linux-gnu-objcopy``, so ensure those are reachable in your ``$PATH``.
102
103 ``CROSS_COMPILE`` is not used to prefix the Clang compiler binary (or
104 corresponding LLVM utilities) as is the case for GNU utilities when ``LLVM=1``
105 is not set.
106
107 The LLVM_IAS= argument
108 ----------------------
109
110 Clang can assemble assembler code. You can pass ``LLVM_IAS=0`` to disable this
111 behavior and have Clang invoke the corresponding non-integrated assembler
112 instead. Example::
113
114 make LLVM=1 LLVM_IAS=0
115
116 ``CROSS_COMPILE`` is necessary when cross compiling and ``LLVM_IAS=0``
117 is used in order to set ``--prefix=`` for the compiler to find the
118 corresponding non-integrated assembler (typically, you don't want to use the
119 system assembler when targeting another architecture). Example::
120
121 make LLVM=1 ARCH=arm LLVM_IAS=0 CROSS_COMPILE=arm-linux-gnueabi-
122
123
124 Ccache
125 ------
126
127 ``ccache`` can be used with ``clang`` to improve subsequent builds, (though
128 KBUILD_BUILD_TIMESTAMP_ should be set to a deterministic value between builds
129 in order to avoid 100% cache misses, see Reproducible_builds_ for more info)::
130
131 KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"
132
133 .. _KBUILD_BUILD_TIMESTAMP: kbuild.html#kbuild-build-timestamp
134 .. _Reproducible_builds: reproducible-builds.html#timestamps
135
136 Supported Architectures
137 -----------------------
138
139 LLVM does not target all of the architectures that Linux supports and
140 just because a target is supported in LLVM does not mean that the kernel
141 will build or work without any issues. Below is a general summary of
142 architectures that currently work with ``CC=clang`` or ``LLVM=1``. Level
143 of support corresponds to "S" values in the MAINTAINERS files. If an
144 architecture is not present, it either means that LLVM does not target
145 it or there are known issues. Using the latest stable version of LLVM or
146 even the development tree will generally yield the best results.
147 An architecture's ``defconfig`` is generally expected to work well,
148 certain configurations may have problems that have not been uncovered
149 yet. Bug reports are always welcome at the issue tracker below!
150
151 .. list-table::
152 :widths: 10 10 10
153 :header-rows: 1
154
155 * - Architecture
156 - Level of support
157 - ``make`` command
158 * - arm
159 - Supported
160 - ``LLVM=1``
161 * - arm64
162 - Supported
163 - ``LLVM=1``
164 * - hexagon
165 - Maintained
166 - ``LLVM=1``
167 * - loongarch
168 - Maintained
169 - ``LLVM=1``
170 * - mips
171 - Maintained
172 - ``LLVM=1``
173 * - powerpc
174 - Maintained
175 - ``LLVM=1``
176 * - riscv
177 - Supported
178 - ``LLVM=1``
179 * - s390
180 - Maintained
181 - ``LLVM=1`` (LLVM >= 18.1.0), ``CC=clang`` (LLVM < 18.1.0)
182 * - sparc (sparc64 only)
183 - Maintained
184 - ``CC=clang LLVM_IAS=0`` (LLVM >= 20)
185 * - um (User Mode)
186 - Maintained
187 - ``LLVM=1``
188 * - x86
189 - Supported
190 - ``LLVM=1``
191
192 Getting Help
193 ------------
194
195 - `Website <https://clangbuiltlinux.github.io/>`_
196 - `Mailing List <https://lore.kernel.org/llvm/>`_: <llvm@lists.linux.dev>
197 - `Old Mailing List Archives <https://groups.google.com/g/clang-built-linux>`_
198 - `Issue Tracker <https://github.com/ClangBuiltLinux/linux/issues>`_
199 - IRC: #clangbuiltlinux on irc.libera.chat
200 - `Telegram <https://t.me/ClangBuiltLinux>`_: @ClangBuiltLinux
201 - `Wiki <https://github.com/ClangBuiltLinux/linux/wiki>`_
202 - `Beginner Bugs <https://github.com/ClangBuiltLinux/linux/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22>`_
203
204 .. _getting_llvm:
205
206 Getting LLVM
207 -------------
208
209 We provide prebuilt stable versions of LLVM on `kernel.org
210 <https://kernel.org/pub/tools/llvm/>`_. These have been optimized with profile
211 data for building Linux kernels, which should improve kernel build times
212 relative to other distributions of LLVM.
213
214 Below are links that may be useful for building LLVM from source or procuring
215 it through a distribution's package manager.
216
217 - https://releases.llvm.org/download.html
218 - https://github.com/llvm/llvm-project
219 - https://llvm.org/docs/GettingStarted.html
220 - https://llvm.org/docs/CMake.html
221 - https://apt.llvm.org/
222 - https://www.archlinux.org/packages/extra/x86_64/llvm/
223 - https://github.com/ClangBuiltLinux/tc-build
224 - https://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source
225 - https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/
226

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Clang/LLVM kernel build 개요

1-27

이 문서는 Clang compiler와 LLVM utility로 Linux kernel을 build하는 방법을 설명합니다.

Linux kernel은 전통적으로 GCC와 binutils 같은 GNU toolchain으로 compile해 왔습니다. 지속적인 개발을 통해 Clang과 LLVM utility도 실용적인 대체재가 되었습니다.

Android, ChromeOS, OpenMandriva, Chimera Linux 배포판은 Clang으로 build한 kernel을 사용합니다. Google과 Meta의 datacenter fleet도 Clang build kernel을 실행합니다.

Clang build kernel 사용 사례
구분사용 사례
DistributionAndroid
DistributionChromeOS
DistributionOpenMandriva
DistributionChimera Linux
DatacenterGoogle
DatacenterMeta

원문에 명시된 distribution과 fleet입니다.

LLVM은 C++ object를 기반으로 구현된 toolchain component 모음입니다. Clang은 LLVM의 front-end이며 C와 kernel에 필요한 GNU C extension을 지원합니다. 발음은 "see-lang"이 아니라 "klang"입니다.

.. _kbuild_llvm:

==============================
Building Linux with Clang/LLVM
==============================

This document covers how to build the Linux kernel with Clang and LLVM
utilities.

About
-----

The Linux kernel has always traditionally been compiled with GNU toolchains
such as GCC and binutils. Ongoing work has allowed for `Clang
<https://clang.llvm.org/>`_ and `LLVM <https://llvm.org/>`_ utilities to be
used as viable substitutes. Distributions such as `Android
<https://www.android.com/>`_, `ChromeOS
<https://www.chromium.org/chromium-os>`_, `OpenMandriva
<https://www.openmandriva.org/>`_, and `Chimera Linux
<https://chimera-linux.org/>`_ use Clang built kernels. Google's and Meta's
datacenter fleets also run kernels built with Clang.

`LLVM is a collection of toolchain components implemented in terms of C++
objects <https://www.aosabook.org/en/llvm.html>`_. Clang is a front-end to LLVM
that supports C and the GNU C extensions required by the kernel, and is
pronounced "klang," not "see-lang."

`LLVM=` 인자와 tool 선택

28-82

Host target용 kernel은 `make LLVM=1`로 compile합니다. Cross compile은 target architecture를 더해 `make LLVM=1 ARCH=arm64`처럼 실행합니다.

LLVM에는 GNU binutils utility를 대체하는 도구가 있으며 각각 따로 enable할 수도 있습니다. 지원되는 make variable 전체는 다음과 같습니다.

make CC=clang LD=ld.lld AR=llvm-ar NM=llvm-nm STRIP=llvm-strip \
  OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump READELF=llvm-readelf \
  HOSTCC=clang HOSTCXX=clang++ HOSTAR=llvm-ar HOSTLD=ld.lld

`LLVM=1`은 위 variable 지정 전체로 확장됩니다.

`LLVM=1` tool mapping
Make variableExecutable
`CC` / `HOSTCC``clang`
`HOSTCXX``clang++`
`LD` / `HOSTLD``ld.lld`
`AR` / `HOSTAR``llvm-ar`
`NM``llvm-nm`
`STRIP``llvm-strip`
`OBJCOPY``llvm-objcopy`
`OBJDUMP``llvm-objdump`
`READELF``llvm-readelf`

GNU 역할을 담당하는 LLVM executable입니다.

LLVM tool이 `PATH`에 없다면 뒤에 slash를 붙인 위치를 `LLVM` variable에 넘길 수 있습니다. `make LLVM=/path/to/llvm/`는 `/path/to/llvm/clang`, `/path/to/llvm/ld.lld` 등을 사용합니다. `PATH=/path/to/llvm:$PATH make LLVM=1`도 가능합니다.

Tool 이름에 version suffix가 있고 suffix 없는 `LLVM=1` 대신 특정 version을 시험하려면 `make LLVM=-14`를 사용합니다. 그러면 `clang-14`, `ld.lld-14` 등을 선택합니다.

Out-of-tree path와 version suffix를 함께 쓸 때는 `PATH=/path/to/llvm/:$PATH make LLVM=-14` 형태를 권장합니다.

`LLVM=0`은 `LLVM`을 생략하는 것과 다르며 `LLVM=1`처럼 동작합니다. 일부 LLVM utility만 사용하려면 각 make variable을 직접 지정해야 합니다.

Configuration과 build를 별도 command로 실행한다면 모든 `make` 호출에서 같은 `LLVM=` 값을 사용해야 합니다. 나중에 `make`를 실행하는 script를 돌릴 때도 `LLVM=`을 environment variable로 설정해야 합니다.

LLVM 선택 방식
표준 PATH의 전체 LLVM suite: `LLVM=1`별도 directory: `LLVM=/path/to/llvm/`Version suffix: `LLVM=-14`Path와 suffix 결합: PATH 설정 후 `LLVM=-14`일부 tool만 사용: 개별 make variable 지정

설치 형태와 필요한 tool 범위에 따라 한 방식을 고릅니다.

Building with LLVM
------------------

Invoke ``make`` via::

        make LLVM=1

to compile for the host target. For cross compiling::

        make LLVM=1 ARCH=arm64

The LLVM= argument
------------------

LLVM has substitutes for GNU binutils utilities. They can be enabled
individually. The full list of supported make variables::

        make CC=clang LD=ld.lld AR=llvm-ar NM=llvm-nm STRIP=llvm-strip \
          OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump READELF=llvm-readelf \
          HOSTCC=clang HOSTCXX=clang++ HOSTAR=llvm-ar HOSTLD=ld.lld

``LLVM=1`` expands to the above.

If your LLVM tools are not available in your PATH, you can supply their
location using the LLVM variable with a trailing slash::

        make LLVM=/path/to/llvm/

which will use ``/path/to/llvm/clang``, ``/path/to/llvm/ld.lld``, etc. The
following may also be used::

        PATH=/path/to/llvm:$PATH make LLVM=1

If your LLVM tools have a version suffix and you want to test with that
explicit version rather than the unsuffixed executables like ``LLVM=1``, you
can pass the suffix using the ``LLVM`` variable::

        make LLVM=-14

which will use ``clang-14``, ``ld.lld-14``, etc.

To support combinations of out of tree paths with version suffixes, we
recommend::

        PATH=/path/to/llvm/:$PATH make LLVM=-14

``LLVM=0`` is not the same as omitting ``LLVM`` altogether, it will behave like
``LLVM=1``. If you only wish to use certain LLVM utilities, use their
respective make variables.

The same value used for ``LLVM=`` should be set for each invocation of ``make``
if configuring and building via distinct commands. ``LLVM=`` should also be set
as an environment variable when running scripts that will eventually run
``make``.

Cross compile과 integrated assembler

83-123

Clang compiler binary 하나와 대응 LLVM utility에는 보통 지원되는 backend가 모두 들어 있습니다. 특히 `LLVM=1`을 쓰면 cross compile 구성이 단순해집니다. LLVM tool만 사용한다면 `CROSS_COMPILE`이나 target-triple prefix가 필요 없으며 `make LLVM=1 ARCH=arm64`로 충분합니다.

LLVM과 GNU utility를 섞을 수도 있습니다. 아직 `ld.lld`나 `llvm-objcopy` 지원이 없는 `ARCH=s390` 같은 target은 GNU linker와 objcopy를 명시합니다.

make LLVM=1 ARCH=s390 LD=s390x-linux-gnu-ld.bfd \
  OBJCOPY=s390x-linux-gnu-objcopy

이 command는 linker로 `s390x-linux-gnu-ld.bfd`, objcopy로 `s390x-linux-gnu-objcopy`를 실행하므로 두 executable이 `$PATH`에 있어야 합니다.

`LLVM=1`일 때 `CROSS_COMPILE`은 GNU utility에서처럼 Clang compiler binary나 대응 LLVM utility 이름 앞에 붙지 않습니다.

Clang은 assembler code를 직접 assemble할 수 있습니다. `LLVM_IAS=0`을 넘기면 이 integrated assembler 동작을 끄고 Clang이 대응하는 non-integrated assembler를 호출하게 합니다.

make LLVM=1 LLVM_IAS=0

Cross compile에서 `LLVM_IAS=0`을 사용하면 compiler가 `--prefix=`를 통해 target용 non-integrated assembler를 찾도록 `CROSS_COMPILE`이 필요합니다. 다른 architecture를 target으로 할 때 system assembler를 쓰면 안 되는 것이 일반적입니다.

make LLVM=1 ARCH=arm LLVM_IAS=0 CROSS_COMPILE=arm-linux-gnueabi-
Cross compile 조합
구성`CROSS_COMPILE`추가 설정
LLVM tool만 사용불필요`LLVM=1 ARCH=<arch>`
GNU linker/objcopy 혼합Tool 이름 직접 지정`LD=... OBJCOPY=...`
Non-integrated assembler필요`LLVM_IAS=0 CROSS_COMPILE=<triple>-`

LLVM utility 사용 범위에 따른 추가 설정입니다.

Cross Compiling
---------------

A single Clang compiler binary (and corresponding LLVM utilities) will
typically contain all supported back ends, which can help simplify cross
compiling especially when ``LLVM=1`` is used. If you use only LLVM tools,
``CROSS_COMPILE`` or target-triple-prefixes become unnecessary. Example::

        make LLVM=1 ARCH=arm64

As an example of mixing LLVM and GNU utilities, for a target like ``ARCH=s390``
which does not yet have ``ld.lld`` or ``llvm-objcopy`` support, you could
invoke ``make`` via::

        make LLVM=1 ARCH=s390 LD=s390x-linux-gnu-ld.bfd \
          OBJCOPY=s390x-linux-gnu-objcopy

This example will invoke ``s390x-linux-gnu-ld.bfd`` as the linker and
``s390x-linux-gnu-objcopy``, so ensure those are reachable in your ``$PATH``.

``CROSS_COMPILE`` is not used to prefix the Clang compiler binary (or
corresponding LLVM utilities) as is the case for GNU utilities when ``LLVM=1``
is not set.

The LLVM_IAS= argument
----------------------

Clang can assemble assembler code. You can pass ``LLVM_IAS=0`` to disable this
behavior and have Clang invoke the corresponding non-integrated assembler
instead. Example::

        make LLVM=1 LLVM_IAS=0

``CROSS_COMPILE`` is necessary when cross compiling and ``LLVM_IAS=0``
is used in order to set ``--prefix=`` for the compiler to find the
corresponding non-integrated assembler (typically, you don't want to use the
system assembler when targeting another architecture). Example::

        make LLVM=1 ARCH=arm LLVM_IAS=0 CROSS_COMPILE=arm-linux-gnueabi-

ccache와 지원 architecture

124-191

`ccache`를 `clang`과 함께 사용하면 이후 build를 빠르게 할 수 있습니다. 다만 build 사이 cache miss가 100% 발생하지 않도록 `KBUILD_BUILD_TIMESTAMP`를 deterministic value로 설정해야 합니다. 자세한 내용은 `Reproducible_builds`를 참고합니다.

KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"

관련 anchor는 `kbuild.html#kbuild-build-timestamp`와 `reproducible-builds.html#timestamps`입니다.

LLVM은 Linux가 지원하는 모든 architecture를 target으로 삼지 않습니다. LLVM 자체가 target을 지원하더라도 kernel이 문제없이 build되거나 동작한다는 뜻은 아닙니다. 아래 표의 support level은 MAINTAINERS file의 `S` 값에 대응합니다.

표에 없는 architecture는 LLVM target이 없거나 알려진 문제가 있다는 뜻입니다. 최신 stable LLVM 또는 development tree가 일반적으로 가장 좋은 결과를 냅니다. 각 architecture의 `defconfig`는 대체로 잘 동작할 것으로 기대하지만 아직 발견되지 않은 문제가 특정 구성에 남아 있을 수 있으므로 issue tracker에 bug report를 보내는 것을 환영합니다.

Clang/LLVM 지원 architecture
Architecture지원 수준`make` command
armSupported`LLVM=1`
arm64Supported`LLVM=1`
hexagonMaintained`LLVM=1`
loongarchMaintained`LLVM=1`
mipsMaintained`LLVM=1`
powerpcMaintained`LLVM=1`
riscvSupported`LLVM=1`
s390Maintained`LLVM=1` (LLVM >= 18.1.0), `CC=clang` (LLVM < 18.1.0)
sparc (sparc64 only)Maintained`CC=clang LLVM_IAS=0` (LLVM >= 20)
um (User Mode)Maintained`LLVM=1`
x86Supported`LLVM=1`

원문 표의 support level과 build command입니다.

Ccache
------

``ccache`` can be used with ``clang`` to improve subsequent builds, (though
KBUILD_BUILD_TIMESTAMP_ should be set to a deterministic value between builds
in order to avoid 100% cache misses, see Reproducible_builds_ for more info)::

        KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"

.. _KBUILD_BUILD_TIMESTAMP: kbuild.html#kbuild-build-timestamp
.. _Reproducible_builds: reproducible-builds.html#timestamps

Supported Architectures
-----------------------

LLVM does not target all of the architectures that Linux supports and
just because a target is supported in LLVM does not mean that the kernel
will build or work without any issues. Below is a general summary of
architectures that currently work with ``CC=clang`` or ``LLVM=1``. Level
of support corresponds to "S" values in the MAINTAINERS files. If an
architecture is not present, it either means that LLVM does not target
it or there are known issues. Using the latest stable version of LLVM or
even the development tree will generally yield the best results.
An architecture's ``defconfig`` is generally expected to work well,
certain configurations may have problems that have not been uncovered
yet. Bug reports are always welcome at the issue tracker below!

.. list-table::
   :widths: 10 10 10
   :header-rows: 1

   * - Architecture
     - Level of support
     - ``make`` command
   * - arm
     - Supported
     - ``LLVM=1``
   * - arm64
     - Supported
     - ``LLVM=1``
   * - hexagon
     - Maintained
     - ``LLVM=1``
   * - loongarch
     - Maintained
     - ``LLVM=1``
   * - mips
     - Maintained
     - ``LLVM=1``
   * - powerpc
     - Maintained
     - ``LLVM=1``
   * - riscv
     - Supported
     - ``LLVM=1``
   * - s390
     - Maintained
     - ``LLVM=1`` (LLVM >= 18.1.0), ``CC=clang`` (LLVM < 18.1.0)
   * - sparc (sparc64 only)
     - Maintained
     - ``CC=clang LLVM_IAS=0`` (LLVM >= 20)
   * - um (User Mode)
     - Maintained
     - ``LLVM=1``
   * - x86
     - Supported
     - ``LLVM=1``

지원 채널과 LLVM 설치

192-225

도움은 ClangBuiltLinux website, 현재 mailing list `<llvm@lists.linux.dev>`, 이전 mailing list archive, GitHub issue tracker, Libera Chat의 `#clangbuiltlinux`, Telegram `@ClangBuiltLinux`, wiki와 `good first issue` 목록에서 받을 수 있습니다.

ClangBuiltLinux 지원 채널
채널주소
Websitehttps://clangbuiltlinux.github.io/
Mailing Listhttps://lore.kernel.org/llvm/
Old Mailing Listhttps://groups.google.com/g/clang-built-linux
Issue Trackerhttps://github.com/ClangBuiltLinux/linux/issues
IRC#clangbuiltlinux on irc.libera.chat
Telegramhttps://t.me/ClangBuiltLinux
Wikihttps://github.com/ClangBuiltLinux/linux/wiki
Beginner Bugshttps://github.com/ClangBuiltLinux/linux/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22

원문에 제공된 project communication 경로입니다.

Kernel.org는 LLVM의 prebuilt stable version을 `https://kernel.org/pub/tools/llvm/`에서 제공합니다. 이 build는 Linux kernel compile용 profile data로 optimize되어 다른 LLVM distribution보다 kernel build time을 줄일 수 있습니다.

LLVM을 source에서 build하거나 distribution package manager로 설치할 때는 공식 release download, llvm-project GitHub, Getting Started, CMake 문서, apt.llvm.org, Arch Linux package, ClangBuiltLinux `tc-build`, source build wiki와 Android prebuilt 저장소 link를 참고합니다.

LLVM 획득·build 참고 link
자료URL
Prebuilt stablehttps://kernel.org/pub/tools/llvm/
LLVM releaseshttps://releases.llvm.org/download.html
llvm-projecthttps://github.com/llvm/llvm-project
Getting Startedhttps://llvm.org/docs/GettingStarted.html
CMakehttps://llvm.org/docs/CMake.html
APT packageshttps://apt.llvm.org/
Arch packagehttps://www.archlinux.org/packages/extra/x86_64/llvm/
tc-buildhttps://github.com/ClangBuiltLinux/tc-build
Building Clanghttps://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source
Android prebuilthttps://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/

원문 마지막의 설치 및 source build 자료입니다.

Getting Help
------------

- `Website <https://clangbuiltlinux.github.io/>`_
- `Mailing List <https://lore.kernel.org/llvm/>`_: <llvm@lists.linux.dev>
- `Old Mailing List Archives <https://groups.google.com/g/clang-built-linux>`_
- `Issue Tracker <https://github.com/ClangBuiltLinux/linux/issues>`_
- IRC: #clangbuiltlinux on irc.libera.chat
- `Telegram <https://t.me/ClangBuiltLinux>`_: @ClangBuiltLinux
- `Wiki <https://github.com/ClangBuiltLinux/linux/wiki>`_
- `Beginner Bugs <https://github.com/ClangBuiltLinux/linux/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22>`_

.. _getting_llvm:

Getting LLVM
-------------

We provide prebuilt stable versions of LLVM on `kernel.org
<https://kernel.org/pub/tools/llvm/>`_. These have been optimized with profile
data for building Linux kernels, which should improve kernel build times
relative to other distributions of LLVM.

Below are links that may be useful for building LLVM from source or procuring
it through a distribution's package manager.

- https://releases.llvm.org/download.html
- https://github.com/llvm/llvm-project
- https://llvm.org/docs/GettingStarted.html
- https://llvm.org/docs/CMake.html
- https://apt.llvm.org/
- https://www.archlinux.org/packages/extra/x86_64/llvm/
- https://github.com/ClangBuiltLinux/tc-build
- https://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source
- https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/