sphinx.addnodesdocument)}( rawsource children](translations
LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba
attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/translations/zh_CN/kbuild/llvmmodnameN classnameNrefexplicitutagnamehhhubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/zh_TW/kbuild/llvmmodnameN classnameNrefexplicituh1hhhubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/it_IT/kbuild/llvmmodnameN classnameNrefexplicituh1hhhubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ja_JP/kbuild/llvmmodnameN classnameNrefexplicituh1hhhubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ko_KR/kbuild/llvmmodnameN classnameNrefexplicituh1hhhubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/pt_BR/kbuild/llvmmodnameN classnameNrefexplicituh1hhhubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/sp_SP/kbuild/llvmmodnameN classnameNrefexplicituh1hhhubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h
hh _documenthsourceNlineNubhtarget)}(h.. _kbuild_llvm:h]h}(h]h ]h"]h$]h&]refidkbuild-llvmuh1hhKhhhhh9/var/lib/git/docbuild/linux/Documentation/kbuild/llvm.rstubhsection)}(hhh](htitle)}(hBuilding Linux with Clang/LLVMh]hBuilding Linux with Clang/LLVM}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hQThis document covers how to build the Linux kernel with Clang and LLVM
utilities.h]hQThis document covers how to build the Linux kernel with Clang and LLVM
utilities.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hAbouth]hAbout}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hX' The Linux kernel has always traditionally been compiled with GNU toolchains
such as GCC and binutils. Ongoing work has allowed for `Clang
`_ and `LLVM `_ utilities to be
used as viable substitutes. Distributions such as `Android
`_, `ChromeOS
`_, `OpenMandriva
`_, and `Chimera Linux
`_ use Clang built kernels. Google's and Meta's
datacenter fleets also run kernels built with Clang.h](hThe Linux kernel has always traditionally been compiled with GNU toolchains
such as GCC and binutils. Ongoing work has allowed for }(hhhhhNhNubh reference)}(h"`Clang
`_h]hClang}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameClangrefurihttps://clang.llvm.org/uh1j hhubh)}(h
h]h}(h]clangah ]h"]clangah$]h&]refurij uh1h
referencedKhhubh and }(hhhhhNhNubj )}(h`LLVM `_h]hLLVM}(hj( hhhNhNubah}(h]h ]h"]h$]h&]nameLLVMj https://llvm.org/uh1j hhubh)}(h h]h}(h]llvmah ]h"]llvmah$]h&]refurij8 uh1hj# KhhubhC utilities to be
used as viable substitutes. Distributions such as }(hhhhhNhNubj )}(h%`Android
`_h]hAndroid}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]nameAndroidj https://www.android.com/uh1j hhubh)}(h
h]h}(h]androidah ]h"]androidah$]h&]refurijZ uh1hj# Khhubh, }(hhhhhNhNubj )}(h2`ChromeOS
`_h]hChromeOS}(hjl hhhNhNubah}(h]h ]h"]h$]h&]nameChromeOSj $https://www.chromium.org/chromium-osuh1j hhubh)}(h'
h]h}(h]chromeosah ]h"]chromeosah$]h&]refurij| uh1hj# Khhubh, }hhsbj )}(h/`OpenMandriva
`_h]hOpenMandriva}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameOpenMandrivaj https://www.openmandriva.org/uh1j hhubh)}(h
h]h}(h]openmandrivaah ]h"]openmandrivaah$]h&]refurij uh1hj# Khhubh, and }(hhhhhNhNubj )}(h-`Chimera Linux
`_h]h
Chimera Linux}(hj hhhNhNubah}(h]h ]h"]h$]h&]name
Chimera Linuxj https://chimera-linux.org/uh1j hhubh)}(h
h]h}(h]
chimera-linuxah ]h"]
chimera linuxah$]h&]refurij uh1hj# Khhubhf use Clang built kernels. Google’s and Meta’s
datacenter fleets also run kernels built with Clang.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK
hhhhubh)}(hX `LLVM is a collection of toolchain components implemented in terms of C++
objects `_. 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."h](j )}(h{`LLVM is a collection of toolchain components implemented in terms of C++
objects `_h]hPLLVM is a collection of toolchain components implemented in terms of C++
objects}(hj hhhNhNubah}(h]h ]h"]h$]h&]namePLLVM is a collection of toolchain components implemented in terms of C++ objectsj %https://www.aosabook.org/en/llvm.htmluh1j hj ubh)}(h( h]h}(h]Nllvm-is-a-collection-of-toolchain-components-implemented-in-terms-of-c-objectsah ]h"]Pllvm is a collection of toolchain components implemented in terms of c++ objectsah$]h&]refurij uh1hj# Khj ubh. 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.”}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]aboutah ]h"]aboutah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hBuilding with LLVMh]hBuilding with LLVM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hInvoke ``make`` via::h](hInvoke }(hj hhhNhNubhliteral)}(h``make``h]hmake}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh via:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh
literal_block)}(hmake LLVM=1h]hmake LLVM=1}hjA sbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1j? hhhK!hj hhubh)}(h5to compile for the host target. For cross compiling::h]h4to compile for the host target. For cross compiling:}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hj hhubj@ )}(hmake LLVM=1 ARCH=arm64h]hmake LLVM=1 ARCH=arm64}hj_ sbah}(h]h ]h"]h$]h&]jO jP uh1j? hhhK%hj hhubeh}(h]building-with-llvmah ]h"]building with llvmah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hThe LLVM= argumenth]hThe LLVM= argument}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju hhhhhK(ubh)}(h~LLVM has substitutes for GNU binutils utilities. They can be enabled
individually. The full list of supported make variables::h]h}LLVM has substitutes for GNU binutils utilities. They can be enabled
individually. The full list of supported make variables:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hju hhubj@ )}(hmake 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.lldh]hmake 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}hj sbah}(h]h ]h"]h$]h&]jO jP uh1j? hhhK-hju hhubh)}(h ``LLVM=1`` expands to the above.h](j& )}(h
``LLVM=1``h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh expands to the above.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK1hju hhubh)}(hIf your LLVM tools are not available in your PATH, you can supply their
location using the LLVM variable with a trailing slash::h]hIf your LLVM tools are not available in your PATH, you can supply their
location using the LLVM variable with a trailing slash:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hju hhubj@ )}(hmake LLVM=/path/to/llvm/h]hmake LLVM=/path/to/llvm/}hj sbah}(h]h ]h"]h$]h&]jO jP uh1j? hhhK6hju hhubh)}(hgwhich will use ``/path/to/llvm/clang``, ``/path/to/llvm/ld.lld``, etc. The
following may also be used::h](hwhich will use }(hj hhhNhNubj& )}(h``/path/to/llvm/clang``h]h/path/to/llvm/clang}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh, }(hj hhhNhNubj& )}(h``/path/to/llvm/ld.lld``h]h/path/to/llvm/ld.lld}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh&, etc. The
following may also be used:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK8hju hhubj@ )}(h$PATH=/path/to/llvm:$PATH make LLVM=1h]h$PATH=/path/to/llvm:$PATH make LLVM=1}hj sbah}(h]h ]h"]h$]h&]jO jP uh1j? hhhK;hju hhubh)}(hIf 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::h](hIf your LLVM tools have a version suffix and you want to test with that
explicit version rather than the unsuffixed executables like }(hj hhhNhNubj& )}(h
``LLVM=1``h]hLLVM=1}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh$, you
can pass the suffix using the }(hj hhhNhNubj& )}(h``LLVM``h]hLLVM}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh
variable:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK=hju hhubj@ )}(h
make LLVM=-14h]h
make LLVM=-14}hjL sbah}(h]h ]h"]h$]h&]jO jP uh1j? hhhKAhju hhubh)}(h0which will use ``clang-14``, ``ld.lld-14``, etc.h](hwhich will use }(hjZ hhhNhNubj& )}(h``clang-14``h]hclang-14}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjZ ubh, }(hjZ hhhNhNubj& )}(h
``ld.lld-14``h]h ld.lld-14}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjZ ubh, etc.}(hjZ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKChju hhubh)}(hRTo support combinations of out of tree paths with version suffixes, we
recommend::h]hQTo support combinations of out of tree paths with version suffixes, we
recommend:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhju hhubj@ )}(h'PATH=/path/to/llvm/:$PATH make LLVM=-14h]h'PATH=/path/to/llvm/:$PATH make LLVM=-14}hj sbah}(h]h ]h"]h$]h&]jO jP uh1j? hhhKHhju hhubh)}(hThe 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``.h](hThe same value used for }(hj hhhNhNubj& )}(h ``LLVM=``h]hLLVM=}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh& should be set for each invocation of }(hj hhhNhNubj& )}(h``make``h]hmake}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh4
if configuring and building via distinct commands. }(hj hhhNhNubj& )}(h ``LLVM=``h]hLLVM=}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh] should also be set
as an environment variable when running scripts that will eventually run
}(hj hhhNhNubj& )}(h``make``h]hmake}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKJhju hhubeh}(h]the-llvm-argumentah ]h"]the llvm= argumentah$]h&]uh1hhhhhhhhK(ubh)}(hhh](h)}(hCross Compilingh]hCross Compiling}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKPubh)}(hX# 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::h](hA single Clang compiler binary (and corresponding LLVM utilities) will
typically contain all supported back ends, which can help simplify cross
compiling especially when }(hj hhhNhNubj& )}(h
``LLVM=1``h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh& is used. If you use only LLVM tools,
}(hj hhhNhNubj& )}(h``CROSS_COMPILE``h]h
CROSS_COMPILE}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh7 or target-triple-prefixes become unnecessary. Example:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKRhj hhubj@ )}(hmake LLVM=1 ARCH=arm64h]hmake LLVM=1 ARCH=arm64}hjI sbah}(h]h ]h"]h$]h&]jO jP uh1j? hhhKWhj hhubh)}(hAs 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::h](hBAs an example of mixing LLVM and GNU utilities, for a target like }(hjW hhhNhNubj& )}(h
``ARCH=s390``h]h ARCH=s390}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjW ubh
which does not yet have }(hjW hhhNhNubj& )}(h
``ld.lld``h]hld.lld}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjW ubh or }(hjW hhhNhNubj& )}(h``llvm-objcopy``h]hllvm-objcopy}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjW ubh support, you could
invoke }(hjW hhhNhNubj& )}(h``make``h]hmake}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjW ubh via:}(hjW hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKYhj hhubj@ )}(hSmake LLVM=1 ARCH=s390 LD=s390x-linux-gnu-ld.bfd \
OBJCOPY=s390x-linux-gnu-objcopyh]hSmake LLVM=1 ARCH=s390 LD=s390x-linux-gnu-ld.bfd \
OBJCOPY=s390x-linux-gnu-objcopy}hj sbah}(h]h ]h"]h$]h&]jO jP uh1j? hhhK]hj hhubh)}(hThis example will invoke ``s390x-linux-gnu-ld.bfd`` as the linker and
``s390x-linux-gnu-objcopy``, so ensure those are reachable in your ``$PATH``.h](hThis example will invoke }(hj hhhNhNubj& )}(h``s390x-linux-gnu-ld.bfd``h]hs390x-linux-gnu-ld.bfd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh as the linker and
}(hj hhhNhNubj& )}(h``s390x-linux-gnu-objcopy``h]hs390x-linux-gnu-objcopy}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh(, so ensure those are reachable in your }(hj hhhNhNubj& )}(h ``$PATH``h]h$PATH}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK`hj hhubh)}(h``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.h](j& )}(h``CROSS_COMPILE``h]h
CROSS_COMPILE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubhy is not used to prefix the Clang compiler binary (or
corresponding LLVM utilities) as is the case for GNU utilities when }(hj hhhNhNubj& )}(h
``LLVM=1``h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh
is not set.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKchj hhubeh}(h]cross-compilingah ]h"]cross compilingah$]h&]uh1hhhhhhhhKPubh)}(hhh](h)}(hThe LLVM_IAS= argumenth]hThe LLVM_IAS= argument}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5 hhhhhKhubh)}(hClang 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::h](h0Clang can assemble assembler code. You can pass }(hjF hhhNhNubj& )}(h``LLVM_IAS=0``h]h
LLVM_IAS=0}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjF ubhl to disable this
behavior and have Clang invoke the corresponding non-integrated assembler
instead. Example:}(hjF hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKjhj5 hhubj@ )}(hmake LLVM=1 LLVM_IAS=0h]hmake LLVM=1 LLVM_IAS=0}hjf sbah}(h]h ]h"]h$]h&]jO jP uh1j? hhhKnhj5 hhubh)}(hX ``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::h](j& )}(h``CROSS_COMPILE``h]h
CROSS_COMPILE}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjt ubh' is necessary when cross compiling and }(hjt hhhNhNubj& )}(h``LLVM_IAS=0``h]h
LLVM_IAS=0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjt ubh
is used in order to set }(hjt hhhNhNubj& )}(h
``--prefix=``h]h --prefix=}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjt ubh 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:}(hjt hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKphj5 hhubj@ )}(h@make LLVM=1 ARCH=arm LLVM_IAS=0 CROSS_COMPILE=arm-linux-gnueabi-h]h@make LLVM=1 ARCH=arm LLVM_IAS=0 CROSS_COMPILE=arm-linux-gnueabi-}hj sbah}(h]h ]h"]h$]h&]jO jP uh1j? hhhKuhj5 hhubeh}(h]the-llvm-ias-argumentah ]h"]the llvm_ias= argumentah$]h&]uh1hhhhhhhhKhubh)}(hhh](h)}(hCcacheh]hCcache}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKyubh)}(h``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)::h](j& )}(h
``ccache``h]hccache}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh can be used with }(hj hhhNhNubj& )}(h ``clang``h]hclang}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh' to improve subsequent builds, (though
}(hj hhhNhNubj )}(hKBUILD_BUILD_TIMESTAMP_h]hKBUILD_BUILD_TIMESTAMP}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameKBUILD_BUILD_TIMESTAMPj "kbuild.html#kbuild-build-timestampuh1j hj resolvedKubh` should be set to a deterministic value between builds
in order to avoid 100% cache misses, see }(hj hhhNhNubj )}(hReproducible_builds_h]hReproducible_builds}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameReproducible_buildsj #reproducible-builds.html#timestampsuh1j hj j Kubh for more info):}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK{hj hhubj@ )}(h7KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"h]h7KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"}hj4 sbah}(h]h ]h"]h$]h&]jO jP uh1j? hhhKhj hhubh)}(h>.. _KBUILD_BUILD_TIMESTAMP: kbuild.html#kbuild-build-timestamph]h}(h]kbuild-build-timestampah ]h"]kbuild_build_timestampah$]h&]j j uh1hhKhj hhhhj# Kubh)}(h<.. _Reproducible_builds: reproducible-builds.html#timestampsh]h}(h]reproducible-buildsah ]h"]reproducible_buildsah$]h&]j j) uh1hhKhj hhhhj# Kubeh}(h]ccacheah ]h"]ccacheah$]h&]uh1hhhhhhhhKyubh)}(hhh](h)}(hSupported Architecturesh]hSupported Architectures}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb hhhhhKubh)}(hX 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!h](hLLVM 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 }(hjs hhhNhNubj& )}(h``CC=clang``h]hCC=clang}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjs ubh or }(hjs hhhNhNubj& )}(h
``LLVM=1``h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjs ubhX6 . 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 }(hjs hhhNhNubj& )}(h
``defconfig``h]h defconfig}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjs ubh 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!}(hjs hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjb hhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthK
uh1j hj ubj )}(hhh]h}(h]h ]h"]h$]h&]j K
uh1j hj ubj )}(hhh]h}(h]h ]h"]h$]h&]j K
uh1j hj ubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hArchitectureh]hArchitecture}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(hLevel of supporth]hLevel of support}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h``make`` commandh](j& )}(h``make``h]hmake}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh command}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1j hj ubhtbody)}(hhh](j )}(hhh](j )}(hhh]h)}(harmh]harm}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjR ubah}(h]h ]h"]h$]h&]uh1j hjO ubj )}(hhh]h)}(h Supportedh]h Supported}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhji ubah}(h]h ]h"]h$]h&]uh1j hjO ubj )}(hhh]h)}(h
``LLVM=1``h]j& )}(hj h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hjO ubeh}(h]h ]h"]h$]h&]uh1j hjL ubj )}(hhh](j )}(hhh]h)}(harm64h]harm64}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h Supportedh]h Supported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h
``LLVM=1``h]j& )}(hj h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hjL ubj )}(hhh](j )}(hhh]h)}(hhexagonh]hhexagon}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h
Maintainedh]h
Maintained}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h
``LLVM=1``h]j& )}(hj3 h]hLLVM=1}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj1 ubah}(h]h ]h"]h$]h&]uh1hhhhKhj. ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hjL ubj )}(hhh](j )}(hhh]h)}(h loongarchh]h loongarch}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjW ubah}(h]h ]h"]h$]h&]uh1j hjT ubj )}(hhh]h)}(h
Maintainedh]h
Maintained}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjn ubah}(h]h ]h"]h$]h&]uh1j hjT ubj )}(hhh]h)}(h
``LLVM=1``h]j& )}(hj h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hjT ubeh}(h]h ]h"]h$]h&]uh1j hjL ubj )}(hhh](j )}(hhh]h)}(hmipsh]hmips}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h
Maintainedh]h
Maintained}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h
``LLVM=1``h]j& )}(hj h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hjL ubj )}(hhh](j )}(hhh]h)}(hpowerpch]hpowerpc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h
Maintainedh]h
Maintained}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h
``LLVM=1``h]j& )}(hj8 h]hLLVM=1}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj6 ubah}(h]h ]h"]h$]h&]uh1hhhhKhj3 ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hjL ubj )}(hhh](j )}(hhh]h)}(hriscvh]hriscv}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\ ubah}(h]h ]h"]h$]h&]uh1j hjY ubj )}(hhh]h)}(h Supportedh]h Supported}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjs ubah}(h]h ]h"]h$]h&]uh1j hjY ubj )}(hhh]h)}(h
``LLVM=1``h]j& )}(hj h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hjY ubeh}(h]h ]h"]h$]h&]uh1j hjL ubj )}(hhh](j )}(hhh]h)}(hs390h]hs390}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h
Maintainedh]h
Maintained}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]h)}(h9``LLVM=1`` (LLVM >= 18.1.0), ``CC=clang`` (LLVM < 18.1.0)h](j& )}(h
``LLVM=1``h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh (LLVM >= 18.1.0), }(hj hhhNhNubj& )}(h``CC=clang``h]hCC=clang}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubh (LLVM < 18.1.0)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hjL ubj )}(hhh](j )}(hhh]h)}(hsparc (sparc64 only)h]hsparc (sparc64 only)}(hj$
hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj!
ubah}(h]h ]h"]h$]h&]uh1j hj
ubj )}(hhh]h)}(h
Maintainedh]h
Maintained}(hj;
hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj8
ubah}(h]h ]h"]h$]h&]uh1j hj
ubj )}(hhh]h)}(h$``CC=clang LLVM_IAS=0`` (LLVM >= 20)h](j& )}(h``CC=clang LLVM_IAS=0``h]hCC=clang LLVM_IAS=0}(hjV
hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hjR
ubh
(LLVM >= 20)}(hjR
hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjO
ubah}(h]h ]h"]h$]h&]uh1j hj
ubeh}(h]h ]h"]h$]h&]uh1j hjL ubj )}(hhh](j )}(hhh]h)}(hum (User Mode)h]hum (User Mode)}(hj
hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj}
ubah}(h]h ]h"]h$]h&]uh1j hjz
ubj )}(hhh]h)}(h
Maintainedh]h
Maintained}(hj
hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1j hjz
ubj )}(hhh]h)}(h
``LLVM=1``h]j& )}(hj
h]hLLVM=1}(hj
hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj
ubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1j hjz
ubeh}(h]h ]h"]h$]h&]uh1j hjL ubj )}(hhh](j )}(hhh]h)}(hx86h]hx86}(hj
hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1j hj
ubj )}(hhh]h)}(h Supportedh]h Supported}(hj
hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1j hj
ubj )}(hhh]h)}(h
``LLVM=1``h]j& )}(hj h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j% hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj
ubeh}(h]h ]h"]h$]h&]uh1j hjL ubeh}(h]h ]h"]h$]h&]uh1jJ hj ubeh}(h]h ]h"]h$]h&]colsKuh1j hj ubah}(h]h ]colwidths-givenah"]h$]h&]uh1j hjb hhhNhNubeh}(h]supported-architecturesah ]h"]supported architecturesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hGetting Helph]hGetting Help}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD hhhhhKubhbullet_list)}(hhh](h list_item)}(h/`Website `_h]h)}(hj^ h](j )}(hj^ h]hWebsite}(hjc hhhNhNubah}(h]h ]h"]h$]h&]nameWebsitej "https://clangbuiltlinux.github.io/uh1j hj` ubh)}(h% h]h}(h]websiteah ]h"]websiteah$]h&]refurijr uh1hj# Khj` ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj\ ubah}(h]h ]h"]h$]h&]uh1jZ hjW hhhhhNubj[ )}(hG`Mailing List `_: h]h)}(hj h](j )}(h/`Mailing List `_h]hMailing List}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameMailing Listj https://lore.kernel.org/llvm/uh1j hj ubh)}(h h]h}(h]mailing-listah ]h"]mailing listah$]h&]refurij uh1hj# Khj ubh: <}(hj hhhNhNubj )}(hllvm@lists.linux.devh]hllvm@lists.linux.dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:llvm@lists.linux.devuh1j hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jZ hjW hhhhhNubj[ )}(hL`Old Mailing List Archives `_h]h)}(hj h](j )}(hj h]hOld Mailing List Archives}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameOld Mailing List Archivesj -https://groups.google.com/g/clang-built-linuxuh1j hj ubh)}(h0 h]h}(h]old-mailing-list-archivesah ]h"]old mailing list archivesah$]h&]refurij uh1hj# Khj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jZ hjW hhhhhNubj[ )}(hB`Issue Tracker `_h]h)}(hj h](j )}(hj h]h
Issue Tracker}(hj hhhNhNubah}(h]h ]h"]h$]h&]name
Issue Trackerj /https://github.com/ClangBuiltLinux/linux/issuesuh1j hj ubh)}(h2 h]h}(h]
issue-trackerah ]h"]
issue trackerah$]h&]refurij uh1hj# Khj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jZ hjW hhhhhNubj[ )}(h(IRC: #clangbuiltlinux on irc.libera.chath]h)}(hj7 h]h(IRC: #clangbuiltlinux on irc.libera.chat}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5 ubah}(h]h ]h"]h$]h&]uh1jZ hjW hhhhhNubj[ )}(h<`Telegram `_: @ClangBuiltLinuxh]h)}(hjN h](j )}(h*`Telegram `_h]hTelegram}(hjS hhhNhNubah}(h]h ]h"]h$]h&]nameTelegramj https://t.me/ClangBuiltLinuxuh1j hjP ubh)}(h h]h}(h]telegramah ]h"]telegramah$]h&]refurijc uh1hj# KhjP ubh: @ClangBuiltLinux}(hjP hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjL ubah}(h]h ]h"]h$]h&]uh1jZ hjW hhhhhNubj[ )}(h7`Wiki `_h]h)}(hj h](j )}(hj h]hWiki}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameWikij -https://github.com/ClangBuiltLinux/linux/wikiuh1j hj ubh)}(h0 h]h}(h]wikiah ]h"]wikiah$]h&]refurij uh1hj# Khj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jZ hjW hhhhhNubj[ )}(hy`Beginner Bugs `_
h]h)}(hx`Beginner Bugs `_h](j )}(hj h]h
Beginner Bugs}(hj hhhNhNubah}(h]h ]h"]h$]h&]name
Beginner Bugsj ehttps://github.com/ClangBuiltLinux/linux/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22uh1j hj ubh)}(hh h]h}(h]
beginner-bugsah ]h"]
beginner bugsah$]h&]refurij uh1hj# Khj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jZ hjW hhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1jU hhhKhjD hhubh)}(h.. _getting_llvm:h]h}(h]h ]h"]h$]h&]hgetting-llvmuh1hhKhjD hhhhubeh}(h]getting-helpah ]h"]getting helpah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hGetting LLVMh]hGetting LLVM}(hj
hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hWe provide prebuilt stable versions of LLVM on `kernel.org
`_. These have been optimized with profile
data for building Linux kernels, which should improve kernel build times
relative to other distributions of LLVM.h](h/We provide prebuilt stable versions of LLVM on }(hj
hhhNhNubj )}(h2`kernel.org
`_h]h
kernel.org}(hj
hhhNhNubah}(h]h ]h"]h$]h&]name
kernel.orgj "https://kernel.org/pub/tools/llvm/uh1j hj
ubh)}(h%
h]h}(h]
kernel-orgah ]h"]
kernel.orgah$]h&]refurij&
uh1hj# Khj
ubh. These have been optimized with profile
data for building Linux kernels, which should improve kernel build times
relative to other distributions of LLVM.}(hj
hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hzBelow are links that may be useful for building LLVM from source or procuring
it through a distribution's package manager.h]h|Below are links that may be useful for building LLVM from source or procuring
it through a distribution’s package manager.}(hj>
hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubjV )}(hhh](j[ )}(h'https://releases.llvm.org/download.htmlh]h)}(hjQ
h]j )}(hjQ
h]h'https://releases.llvm.org/download.html}(hjV
hhhNhNubah}(h]h ]h"]h$]h&]refurijQ
uh1j hjS
ubah}(h]h ]h"]h$]h&]uh1hhhhKhjO
ubah}(h]h ]h"]h$]h&]uh1jZ hjL
hhhhhNubj[ )}(h$https://github.com/llvm/llvm-projecth]h)}(hjr
h]j )}(hjr
h]h$https://github.com/llvm/llvm-project}(hjw
hhhNhNubah}(h]h ]h"]h$]h&]refurijr
uh1j hjt
ubah}(h]h ]h"]h$]h&]uh1hhhhKhjp
ubah}(h]h ]h"]h$]h&]uh1jZ hjL
hhhhhNubj[ )}(h)https://llvm.org/docs/GettingStarted.htmlh]h)}(hj
h]j )}(hj
h]h)https://llvm.org/docs/GettingStarted.html}(hj
hhhNhNubah}(h]h ]h"]h$]h&]refurij
uh1j hj
ubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1jZ hjL
hhhhhNubj[ )}(h https://llvm.org/docs/CMake.htmlh]h)}(hj
h]j )}(hj
h]h https://llvm.org/docs/CMake.html}(hj
hhhNhNubah}(h]h ]h"]h$]h&]refurij
uh1j hj
ubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1jZ hjL
hhhhhNubj[ )}(hhttps://apt.llvm.org/h]h)}(hj
h]j )}(hj
h]hhttps://apt.llvm.org/}(hj
hhhNhNubah}(h]h ]h"]h$]h&]refurij
uh1j hj
ubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1jZ hjL
hhhhhNubj[ )}(h5https://www.archlinux.org/packages/extra/x86_64/llvm/h]h)}(hj
h]j )}(hj
h]h5https://www.archlinux.org/packages/extra/x86_64/llvm/}(hj
hhhNhNubah}(h]h ]h"]h$]h&]refurij
uh1j hj
ubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1jZ hjL
hhhhhNubj[ )}(h+https://github.com/ClangBuiltLinux/tc-buildh]h)}(hj h]j )}(hj h]h+https://github.com/ClangBuiltLinux/tc-build}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jZ hjL
hhhhhNubj[ )}(hHhttps://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-sourceh]h)}(hj8 h]j )}(hj8 h]hHhttps://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source}(hj= hhhNhNubah}(h]h ]h"]h$]h&]refurij8 uh1j hj: ubah}(h]h ]h"]h$]h&]uh1hhhhKhj6 ubah}(h]h ]h"]h$]h&]uh1jZ hjL
hhhhhNubj[ )}(hIhttps://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/h]h)}(hjY h]j )}(hjY h]hIhttps://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]refurijY uh1j hj[ ubah}(h]h ]h"]h$]h&]uh1hhhhKhjW ubah}(h]h ]h"]h$]h&]uh1jZ hjL
hhhhhNubeh}(h]h ]h"]h$]h&]j j uh1jU hhhKhj hhubeh}(h](j id1eh ]h"](getting llvmgetting_llvmeh$]h&]uh1hhhhhhhhKˌexpect_referenced_by_name}j j sexpect_referenced_by_id}j j subeh}(h](building-linux-with-clang-llvmheh ]h"](building linux with clang/llvmkbuild_llvmeh$]h&]uh1hhhhhhhhKj }j hsj }hhsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceNcurrent_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampNsource_linkN
source_urlN
toc_backlinksj footnote_backlinksK
sectnum_xformKstrip_commentsNstrip_elements_with_classesN
strip_classesNreport_levelK
halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace
language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid
dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehÌ_destinationN
_config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabledraw_enabledKline_length_limitM'pep_referencesNpep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesNrfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlongsmart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform
docinfo_xformKsectsubtitle_xform
image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}(kbuild_build_timestamp]j areproducible_builds]j aurefids}(h]haj ]j aunameids}(j hj j j j j j jB j? jd ja j j j j j j j j jr jo j j j2 j/ j j j_ j\ jK jH jW jT jA j> j j j| jy j j j j j% j" jm jj j j j j j j j j j0
j-
u nametypes}(j j j j jB jd j j j j jr j j2 j j_ jK jW jA j j| j j j% jm j j j j j0
uh}(hhj hj hj j j? j9 ja j[ j j} j j j j j j jo j j ju j/ j j j5 j\ j jH jB jT jN j> jb j jD jy js j j j j j" j jj jd j j j j j j j j j-
j'
u
footnote_refs}
citation_refs}
autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK
id_countercollectionsCounter}j KsRparse_messages]transform_messages](hsystem_message)}(hhh]h)}(hhh]h1Hyperlink target "kbuild-llvm" is not referenced.}hj' sbah}(h]h ]h"]h$]h&]uh1hhj$ ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehÌlineKuh1j" ubj# )}(hhh]h)}(hhh]h2Hyperlink target "getting-llvm" is not referenced.}hjB sbah}(h]h ]h"]h$]h&]uh1hhj? ubah}(h]h ]h"]h$]h&]levelKtypej< sourcehÌlineKuh1j" ubetransformerNinclude_log]
decorationNhhub.