˵ 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]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}(hhhhhNhNubah}(h]h ]h"]h$]h&]nameClangrefurihttps://clang.llvm.org/uh1hhhubh)}(h
h]h}(h]clangah ]h"]clangah$]h&]refurij uh1h
referencedKhhubh and }(hhhhhNhNubh)}(h`LLVM `_h]hLLVM}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameLLVMj https://llvm.org/uh1hhhubh)}(h h]h}(h]llvmah ]h"]llvmah$]h&]refurij$ uh1hj KhhubhC utilities to be
used as viable substitutes. Distributions such as }(hhhhhNhNubh)}(h%`Android
`_h]hAndroid}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]nameAndroidj https://www.android.com/uh1hhhubh)}(h
h]h}(h]androidah ]h"]androidah$]h&]refurijF uh1hj Khhubh, }(hhhhhNhNubh)}(h2`ChromeOS
`_h]hChromeOS}(hjX hhhNhNubah}(h]h ]h"]h$]h&]nameChromeOSj $https://www.chromium.org/chromium-osuh1hhhubh)}(h'
h]h}(h]chromeosah ]h"]chromeosah$]h&]refurijh uh1hj Khhubh, }hhsbh)}(h/`OpenMandriva
`_h]hOpenMandriva}(hjz hhhNhNubah}(h]h ]h"]h$]h&]nameOpenMandrivaj https://www.openmandriva.org/uh1hhhubh)}(h
h]h}(h]openmandrivaah ]h"]openmandrivaah$]h&]refurij uh1hj Khhubh, and }(hhhhhNhNubh)}(h-`Chimera Linux
`_h]h
Chimera Linux}(hj hhhNhNubah}(h]h ]h"]h$]h&]name
Chimera Linuxj https://chimera-linux.org/uh1hhhubh)}(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](h)}(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.htmluh1hhj 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}hj- 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:}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hj hhubj, )}(hmake LLVM=1 ARCH=arm64h]hmake LLVM=1 ARCH=arm64}hjK sbah}(h]h ]h"]h$]h&]j; j< uh1j+ hhhK%hj hhubeh}(h]building-with-llvmah ]h"]building with llvmah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hThe LLVM= argumenth]hThe LLVM= argument}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja 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:}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hja 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&]j; j< uh1j+ hhhK-hja 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&]uh1hhhhK1hja 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&]uh1hhhhK3hja hhubj, )}(hmake LLVM=/path/to/llvm/h]hmake LLVM=/path/to/llvm/}hj sbah}(h]h ]h"]h$]h&]j; j< uh1j+ hhhK6hja 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&]uh1hhhhK8hja 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&]j; j< uh1j+ hhhK;hja 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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh
variable:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK=hja hhubj, )}(h
make LLVM=-14h]h
make LLVM=-14}hj8 sbah}(h]h ]h"]h$]h&]j; j< uh1j+ hhhKAhja hhubh)}(h0which will use ``clang-14``, ``ld.lld-14``, etc.h](hwhich will use }(hjF hhhNhNubj )}(h``clang-14``h]hclang-14}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjF ubh, }(hjF hhhNhNubj )}(h
``ld.lld-14``h]h ld.lld-14}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjF ubh, etc.}(hjF hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKChja 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:}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhja 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&]j; j< uh1j+ hhhKHhja hhubh)}(h``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.h](j )}(h
``LLVM=0``h]hLLVM=0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh is not the same as omitting }(hj hhhNhNubj )}(h``LLVM``h]hLLVM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh! altogether, it will behave like
}(hj hhhNhNubj )}(h
``LLVM=1``h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubhV. If you only wish to use certain LLVM utilities, use their
respective make variables.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKJhja 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&]uh1hhhhKNhja hhubeh}(h]the-llvm-argumentah ]h"]the llvm= argumentah$]h&]uh1hhhhhhhhK(ubh)}(hhh](h)}(hCross Compilingh]hCross Compiling}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2 hhhhhKTubh)}(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 }(hjC hhhNhNubj )}(h
``LLVM=1``h]hLLVM=1}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjC ubh& is used. If you use only LLVM tools,
}(hjC hhhNhNubj )}(h``CROSS_COMPILE``h]h
CROSS_COMPILE}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjC ubh7 or target-triple-prefixes become unnecessary. Example:}(hjC hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKVhj2 hhubj, )}(hmake LLVM=1 ARCH=arm64h]hmake LLVM=1 ARCH=arm64}hju sbah}(h]h ]h"]h$]h&]j; j< uh1j+ hhhK[hj2 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 }(hj hhhNhNubj )}(h
``ARCH=s390``h]h ARCH=s390}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh
which does not yet have }(hj hhhNhNubj )}(h
``ld.lld``h]hld.lld}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh or }(hj hhhNhNubj )}(h``llvm-objcopy``h]hllvm-objcopy}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh support, you could
invoke }(hj hhhNhNubj )}(h``make``h]hmake}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh via:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK]hj2 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&]j; j< uh1j+ hhhKahj2 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&]uh1hhhhKdhj2 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}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj+ ubh
is not set.}(hj+ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKghj2 hhubeh}(h]cross-compilingah ]h"]cross compilingah$]h&]uh1hhhhhhhhKTubh)}(hhh](h)}(hThe LLVM_IAS= argumenth]hThe LLVM_IAS= argument}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja hhhhhKlubh)}(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 }(hjr hhhNhNubj )}(h``LLVM_IAS=0``h]h
LLVM_IAS=0}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjr ubhl to disable this
behavior and have Clang invoke the corresponding non-integrated assembler
instead. Example:}(hjr hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKnhja hhubj, )}(hmake LLVM=1 LLVM_IAS=0h]hmake LLVM=1 LLVM_IAS=0}hj sbah}(h]h ]h"]h$]h&]j; j< uh1j+ hhhKrhja 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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh' is necessary when cross compiling and }(hj hhhNhNubj )}(h``LLVM_IAS=0``h]h
LLVM_IAS=0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh
is used in order to set }(hj hhhNhNubj )}(h
``--prefix=``h]h --prefix=}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKthja 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&]j; j< uh1j+ hhhKyhja hhubeh}(h]the-llvm-ias-argumentah ]h"]the llvm_ias= argumentah$]h&]uh1hhhhhhhhKlubh)}(hhh](h)}(hCcacheh]hCcache}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhK}ubh)}(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 hhhNhNubh)}(hKBUILD_BUILD_TIMESTAMP_h]hKBUILD_BUILD_TIMESTAMP}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]nameKBUILD_BUILD_TIMESTAMPj "kbuild.html#kbuild-build-timestampuh1hhj resolvedKubh` should be set to a deterministic value between builds
in order to avoid 100% cache misses, see }(hj hhhNhNubh)}(hReproducible_builds_h]hReproducible_builds}(hjE hhhNhNubah}(h]h ]h"]h$]h&]nameReproducible_buildsj #reproducible-builds.html#timestampsuh1hhj j@ Kubh for more info):}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj, )}(h7KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"h]h7KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"}hj` sbah}(h]h ]h"]h$]h&]j; j< 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 jU uh1hhKhj hhhhj Kubeh}(h]ccacheah ]h"]ccacheah$]h&]uh1hhhhhhhhK}ubh)}(hhh](h)}(hSupported Architecturesh]hSupported Architectures}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 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 }(hj hhhNhNubj )}(h``CC=clang``h]hCC=clang}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh or }(hj hhhNhNubj )}(h
``LLVM=1``h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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 }(hj hhhNhNubj )}(h
``defconfig``h]h defconfig}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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!}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj 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}(hj1 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}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjH ubh command}(hjH hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjE 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}(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 hjx 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 hjx 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}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjC ubah}(h]h ]h"]h$]h&]uh1j hj) ubj )}(hhh]h)}(h
``LLVM=1``h]j )}(hj_ h]hLLVM=1}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj] ubah}(h]h ]h"]h$]h&]uh1hhhhKhjZ ubah}(h]h ]h"]h$]h&]uh1j hj) ubeh}(h]h ]h"]h$]h&]uh1j hjx ubj )}(hhh](j )}(hhh]h)}(h loongarchh]h loongarch}(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 hjx 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 hjx ubj )}(hhh](j )}(hhh]h)}(hpowerpch]hpowerpc}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj1 ubah}(h]h ]h"]h$]h&]uh1j hj. ubj )}(hhh]h)}(h
Maintainedh]h
Maintained}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjH ubah}(h]h ]h"]h$]h&]uh1j hj. ubj )}(hhh]h)}(h
``LLVM=1``h]j )}(hjd h]hLLVM=1}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjb ubah}(h]h ]h"]h$]h&]uh1hhhhKhj_ ubah}(h]h ]h"]h$]h&]uh1j hj. ubeh}(h]h ]h"]h$]h&]uh1j hjx ubj )}(hhh](j )}(hhh]h)}(hriscvh]hriscv}(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 hjx 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 hjx ubj )}(hhh](j )}(hhh]h)}(hsparc (sparc64 only)h]hsparc (sparc64 only)}(hjP
hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjM
ubah}(h]h ]h"]h$]h&]uh1j hjJ
ubj )}(hhh]h)}(h
Maintainedh]h
Maintained}(hjg
hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjd
ubah}(h]h ]h"]h$]h&]uh1j hjJ
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}(hj
hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~
ubh
(LLVM >= 20)}(hj~
hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj{
ubah}(h]h ]h"]h$]h&]uh1j hjJ
ubeh}(h]h ]h"]h$]h&]uh1j hjx 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 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 hjx 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 )}(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 hjx ubeh}(h]h ]h"]h$]h&]uh1jv hj ubeh}(h]h ]h"]h$]h&]colsKuh1j hj ubah}(h]h ]colwidths-givenah"]h$]h&]uh1j hj hhhNhNubeh}(h]supported-architecturesah ]h"]supported architecturesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hGetting Helph]hGetting Help}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp hhhhhKubhbullet_list)}(hhh](h list_item)}(h/`Website `_h]h)}(hj h](h)}(hj h]hWebsite}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameWebsitej "https://clangbuiltlinux.github.io/uh1hhj ubh)}(h% h]h}(h]websiteah ]h"]websiteah$]h&]refurij uh1hj Khj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(hG`Mailing List `_: h]h)}(hj h](h)}(h/`Mailing List `_h]hMailing List}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameMailing Listj https://lore.kernel.org/llvm/uh1hhj ubh)}(h h]h}(h]mailing-listah ]h"]mailing listah$]h&]refurij uh1hj Khj ubh: <}(hj hhhNhNubh)}(hllvm@lists.linux.devh]hllvm@lists.linux.dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:llvm@lists.linux.devuh1hhj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(hL`Old Mailing List Archives `_h]h)}(hj h](h)}(hj h]hOld Mailing List Archives}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameOld Mailing List Archivesj -https://groups.google.com/g/clang-built-linuxuh1hhj 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&]uh1j hj hhhhhNubj )}(hB`Issue Tracker `_h]h)}(hj3 h](h)}(hj3 h]h
Issue Tracker}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]name
Issue Trackerj /https://github.com/ClangBuiltLinux/linux/issuesuh1hhj5 ubh)}(h2 h]h}(h]
issue-trackerah ]h"]
issue trackerah$]h&]refurijG uh1hj Khj5 ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj1 ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h(IRC: #clangbuiltlinux on irc.libera.chath]h)}(hjc h]h(IRC: #clangbuiltlinux on irc.libera.chat}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhja ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h<`Telegram `_: @ClangBuiltLinuxh]h)}(hjz h](h)}(h*`Telegram `_h]hTelegram}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameTelegramj https://t.me/ClangBuiltLinuxuh1hhj| ubh)}(h h]h}(h]telegramah ]h"]telegramah$]h&]refurij uh1hj Khj| ubh: @ClangBuiltLinux}(hj| hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjx ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h7`Wiki `_h]h)}(hj h](h)}(hj h]hWiki}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameWikij -https://github.com/ClangBuiltLinux/linux/wikiuh1hhj 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&]uh1j hj hhhhhNubj )}(hy`Beginner Bugs `_
h]h)}(hx`Beginner Bugs `_h](h)}(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%22uh1hhj 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&]uh1j hj hhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1j hhhKhjp hhubh)}(h.. _getting_llvm:h]h}(h]h ]h"]h$]h&]hgetting-llvmuh1hhKhjp 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:
hhhNhNubh)}(h2`kernel.org
`_h]h
kernel.org}(hjB
hhhNhNubah}(h]h ]h"]h$]h&]name
kernel.orgj "https://kernel.org/pub/tools/llvm/uh1hhj:
ubh)}(h%
h]h}(h]
kernel-orgah ]h"]
kernel.orgah$]h&]refurijR
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.}(hjj
hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj)
hhubj )}(hhh](j )}(h'https://releases.llvm.org/download.htmlh]h)}(hj}
h]h)}(hj}
h]h'https://releases.llvm.org/download.html}(hj
hhhNhNubah}(h]h ]h"]h$]h&]refurij}
uh1hhj
ubah}(h]h ]h"]h$]h&]uh1hhhhKhj{
ubah}(h]h ]h"]h$]h&]uh1j hjx
hhhhhNubj )}(h$https://github.com/llvm/llvm-projecth]h)}(hj
h]h)}(hj
h]h$https://github.com/llvm/llvm-project}(hj
hhhNhNubah}(h]h ]h"]h$]h&]refurij
uh1hhj
ubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1j hjx
hhhhhNubj )}(h)https://llvm.org/docs/GettingStarted.htmlh]h)}(hj
h]h)}(hj
h]h)https://llvm.org/docs/GettingStarted.html}(hj
hhhNhNubah}(h]h ]h"]h$]h&]refurij
uh1hhj
ubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1j hjx
hhhhhNubj )}(h https://llvm.org/docs/CMake.htmlh]h)}(hj
h]h)}(hj
h]h https://llvm.org/docs/CMake.html}(hj
hhhNhNubah}(h]h ]h"]h$]h&]refurij
uh1hhj
ubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1j hjx
hhhhhNubj )}(hhttps://apt.llvm.org/h]h)}(hj h]h)}(hj h]hhttps://apt.llvm.org/}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1hhj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj
ubah}(h]h ]h"]h$]h&]uh1j hjx
hhhhhNubj )}(h5https://www.archlinux.org/packages/extra/x86_64/llvm/h]h)}(hj" h]h)}(hj" h]h5https://www.archlinux.org/packages/extra/x86_64/llvm/}(hj' hhhNhNubah}(h]h ]h"]h$]h&]refurij" uh1hhj$ ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hjx
hhhhhNubj )}(h+https://github.com/ClangBuiltLinux/tc-buildh]h)}(hjC h]h)}(hjC h]h+https://github.com/ClangBuiltLinux/tc-build}(hjH hhhNhNubah}(h]h ]h"]h$]h&]refurijC uh1hhjE ubah}(h]h ]h"]h$]h&]uh1hhhhKhjA ubah}(h]h ]h"]h$]h&]uh1j hjx
hhhhhNubj )}(hHhttps://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-sourceh]h)}(hjd h]h)}(hjd h]hHhttps://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source}(hji hhhNhNubah}(h]h ]h"]h$]h&]refurijd uh1hhjf ubah}(h]h ]h"]h$]h&]uh1hhhhKhjb ubah}(h]h ]h"]h$]h&]uh1j hjx
hhhhhNubj )}(hIhttps://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/h]h)}(hj h]h)}(hj h]hIhttps://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1hhj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hjx
hhhhhNubeh}(h]h ]h"]h$]h&]j
j
uh1j 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]jE aurefids}(h]haj
]j
aunameids}(j hj j j j j j j. j+ jP jM jr jo j j j j j j j^ j[ j/ j, j^ j[ j j j j jw jt j j jm jj j&
j#
j j j j j! j jQ jN j j j j j j j j
j j j\
jY
u nametypes}(j j j j j. jP jr j j j j^ j/ j^ j j jw j jm j&
j j j! jQ j j j j j j\
uh}(hhj hj hj j j+ j% jM jG jo ji j j j j j j j[ j j, ja j[ j2 j ja j j jt jn j jz jj j j#
jp j j j j j j jN jH j j j j j j j
j)
j j)
jY
jS
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.}hjS sbah}(h]h ]h"]h$]h&]uh1hhjP ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1jN ubjO )}(hhh]h)}(hhh]h2Hyperlink target "getting-llvm" is not referenced.}hjn sbah}(h]h ]h"]h$]h&]uh1hhjk ubah}(h]h ]h"]h$]h&]levelKtypejh sourcehlineKuh1jN ubetransformerNinclude_log]
decorationNhhub.