@@ -25,50 +25,38 @@ objects <https://www.aosabook.org/en/llvm.html>`_. Clang is a front-end to LLVM
2525that supports C and the GNU C extensions required by the kernel, and is
2626pronounced "klang," not "see-lang."
2727
28- Clang
29- -----
30-
31- The compiler used can be swapped out via ``CC= `` command line argument to ``make ``.
32- ``CC= `` should be set when selecting a config and during a build. ::
33-
34- make CC=clang defconfig
35-
36- make CC=clang
28+ Building with LLVM
29+ ------------------
3730
38- Cross Compiling
39- ---------------
31+ Invoke ``make `` via::
4032
41- A single Clang compiler binary will typically contain all supported backends,
42- which can help simplify cross compiling. ::
43-
44- make ARCH=arm64 CC=clang CROSS_COMPILE=aarch64-linux-gnu-
33+ make LLVM=1
4534
46- ``CROSS_COMPILE `` is not used to prefix the Clang compiler binary, instead
47- ``CROSS_COMPILE `` is used to set a command line flag: ``--target=<triple> ``. For
48- example: ::
35+ to compile for the host target. For cross compiling::
4936
50- clang --target=aarch64-linux-gnu foo.c
37+ make LLVM=1 ARCH=arm64
5138
52- LLVM Utilities
53- --------------
39+ The LLVM= argument
40+ ------------------
5441
55- LLVM has substitutes for GNU binutils utilities. They can be enabled individually.
56- The full list of supported make variables::
42+ LLVM has substitutes for GNU binutils utilities. They can be enabled
43+ individually. The full list of supported make variables::
5744
5845 make CC=clang LD=ld.lld AR=llvm-ar NM=llvm-nm STRIP=llvm-strip \
5946 OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump READELF=llvm-readelf \
6047 HOSTCC=clang HOSTCXX=clang++ HOSTAR=llvm-ar HOSTLD=ld.lld
6148
62- To simplify the above command, Kbuild supports the ``LLVM `` variable::
63-
64- make LLVM=1
49+ ``LLVM=1 `` expands to the above.
6550
6651If your LLVM tools are not available in your PATH, you can supply their
6752location using the LLVM variable with a trailing slash::
6853
6954 make LLVM=/path/to/llvm/
7055
71- which will use ``/path/to/llvm/clang ``, ``/path/to/llvm/ld.lld ``, etc.
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
7260
7361If your LLVM tools have a version suffix and you want to test with that
7462explicit version rather than the unsuffixed executables like ``LLVM=1 ``, you
@@ -78,31 +66,72 @@ can pass the suffix using the ``LLVM`` variable::
7866
7967which will use ``clang-14 ``, ``ld.lld-14 ``, etc.
8068
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+
8174``LLVM=0 `` is not the same as omitting ``LLVM `` altogether, it will behave like
82- ``LLVM=1 ``. If you only wish to use certain LLVM utilities, use their respective
83- make variables.
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 ``.
8482
85- The integrated assembler is enabled by default. You can pass `` LLVM_IAS=0 `` to
86- disable it.
83+ Cross Compiling
84+ ---------------
8785
88- Omitting CROSS_COMPILE
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
89108----------------------
90109
91- As explained above, ``CROSS_COMPILE `` is used to set ``--target=<triple> ``.
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::
92120
93- If ``CROSS_COMPILE `` is not specified, the ``--target=<triple> `` is inferred
94- from ``ARCH ``.
121+ make LLVM=1 ARCH=arm LLVM_IAS=0 CROSS_COMPILE=arm-linux-gnueabi-
95122
96- That means if you use only LLVM tools, ``CROSS_COMPILE `` becomes unnecessary.
97123
98- For example, to cross-compile the arm64 kernel::
124+ Ccache
125+ ------
99126
100- make ARCH=arm64 LLVM=1
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):
101130
102- If ``LLVM_IAS=0 `` is specified, ``CROSS_COMPILE `` is also used to derive
103- ``--prefix=<path> `` to search for the GNU assembler and linker. ::
131+ KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"
104132
105- make ARCH=arm64 LLVM=1 LLVM_IAS=0 CROSS_COMPILE=aarch64-linux-gnu-
133+ .. _KBUILD_BUILD_TIMESTAMP : kbuild.html#kbuild-build-timestamp
134+ .. _Reproducible_builds : reproducible-builds.html#timestamps
106135
107136Supported Architectures
108137-----------------------
@@ -135,14 +164,17 @@ yet. Bug reports are always welcome at the issue tracker below!
135164 * - hexagon
136165 - Maintained
137166 - ``LLVM=1 ``
167+ * - loongarch
168+ - Maintained
169+ - ``LLVM=1 ``
138170 * - mips
139171 - Maintained
140172 - ``LLVM=1 ``
141173 * - powerpc
142174 - Maintained
143- - ``CC=clang ``
175+ - ``LLVM=1 ``
144176 * - riscv
145- - Maintained
177+ - Supported
146178 - ``LLVM=1 ``
147179 * - s390
148180 - Maintained
@@ -171,7 +203,11 @@ Getting Help
171203Getting LLVM
172204-------------
173205
174- We provide prebuilt stable versions of LLVM on `kernel.org <https://kernel.org/pub/tools/llvm/ >`_.
206+ We provide prebuilt stable versions of LLVM on `kernel.org
207+ <https://kernel.org/pub/tools/llvm/> `_. These have been optimized with profile
208+ data for building Linux kernels, which should improve kernel build times
209+ relative to other distributions of LLVM.
210+
175211Below are links that may be useful for building LLVM from source or procuring
176212it through a distribution's package manager.
177213
0 commit comments