€• ´Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ/translations/zh_CN/kbuild/llvm”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/zh_TW/kbuild/llvm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/it_IT/kbuild/llvm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ja_JP/kbuild/llvm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ko_KR/kbuild/llvm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/pt_BR/kbuild/llvm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/sp_SP/kbuild/llvm”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒtarget”“”)�”}”(hŒ.. _kbuild_llvm:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œ kbuild-llvm”uh1hµh´Khhh²hh³Œ9/var/lib/git/docbuild/linux/Documentation/kbuild/llvm.rst”ubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒBuilding Linux with Clang/LLVM”h]”hŒBuilding Linux with Clang/LLVM”…”�”}”(hhËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhhÆh²hh³hÃh´KubhŒ paragraph”“”)�”}”(hŒQThis document covers how to build the Linux kernel with Clang and LLVM utilities.”h]”hŒQThis document covers how to build the Linux kernel with Clang and LLVM utilities.”…”�”}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KhhÆh²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒAbout”h]”hŒAbout”…”�”}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhhéh²hh³hÃh´K ubhÚ)�”}”(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]”(hŒƒThe Linux kernel has always traditionally been compiled with GNU toolchains such as GCC and binutils. Ongoing work has allowed for ”…”�”}”(hhúh²hh³Nh´NubhŒ reference”“”)�”}”(hŒ"`Clang `_”h]”hŒClang”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒClang”Œrefuri”Œhttps://clang.llvm.org/”uh1jhhúubh¶)�”}”(hŒ ”h]”h}”(h]”Œclang”ah ]”h"]”Œclang”ah$]”h&]”Œrefuri”juh1hµŒ referenced”KhhúubhŒ and ”…”�”}”(hhúh²hh³Nh´Nubj)�”}”(hŒ`LLVM `_”h]”hŒLLVM”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒLLVM”jŒhttps://llvm.org/”uh1jhhúubh¶)�”}”(hŒ ”h]”h}”(h]”Œllvm”ah ]”h"]”Œllvm”ah$]”h&]”Œrefuri”j8uh1hµj#KhhúubhŒC utilities to be used as viable substitutes. Distributions such as ”…”�”}”(hhúh²hh³Nh´Nubj)�”}”(hŒ%`Android `_”h]”hŒAndroid”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒAndroid”jŒhttps://www.android.com/”uh1jhhúubh¶)�”}”(hŒ ”h]”h}”(h]”Œandroid”ah ]”h"]”Œandroid”ah$]”h&]”Œrefuri”jZuh1hµj#KhhúubhŒ, ”…”�”}”(hhúh²hh³Nh´Nubj)�”}”(hŒ2`ChromeOS `_”h]”hŒChromeOS”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒChromeOS”jŒ$https://www.chromium.org/chromium-os”uh1jhhúubh¶)�”}”(hŒ' ”h]”h}”(h]”Œchromeos”ah ]”h"]”Œchromeos”ah$]”h&]”Œrefuri”j|uh1hµj#KhhúubhŒ, ”…”�”}”hhúsbj)�”}”(hŒ/`OpenMandriva `_”h]”hŒ OpenMandriva”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ OpenMandriva”jŒhttps://www.openmandriva.org/”uh1jhhúubh¶)�”}”(hŒ ”h]”h}”(h]”Œ openmandriva”ah ]”h"]”Œ openmandriva”ah$]”h&]”Œrefuri”jžuh1hµj#KhhúubhŒ, and ”…”�”}”(hhúh²hh³Nh´Nubj)�”}”(hŒ-`Chimera Linux `_”h]”hŒ Chimera Linux”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Chimera Linux”jŒhttps://chimera-linux.org/”uh1jhhúubh¶)�”}”(hŒ ”h]”h}”(h]”Œ chimera-linux”ah ]”h"]”Œ chimera linux”ah$]”h&]”Œrefuri”jÀuh1hµj#KhhúubhŒf use Clang built kernels. Google’s and Meta’s datacenter fleets also run kernels built with Clang.”…”�”}”(hhúh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K hhéh²hubhÚ)�”}”(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]”hŒPLLVM is a collection of toolchain components implemented in terms of C++ objects”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒPLLVM is a collection of toolchain components implemented in terms of C++ objects”jŒ%https://www.aosabook.org/en/llvm.html”uh1jhjØubh¶)�”}”(hŒ( ”h]”h}”(h]”ŒNllvm-is-a-collection-of-toolchain-components-implemented-in-terms-of-c-objects”ah ]”h"]”ŒPllvm is a collection of toolchain components implemented in terms of c++ objects”ah$]”h&]”Œrefuri”jìuh1hµj#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Øh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Khhéh²hubeh}”(h]”Œabout”ah ]”h"]”Œabout”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´K ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒBuilding with LLVM”h]”hŒBuilding with LLVM”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj h²hh³hÃh´KubhÚ)�”}”(hŒInvoke ``make`` via::”h]”(hŒInvoke ”…”�”}”(hjh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``make``”h]”hŒmake”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjubhŒ via:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Khj h²hubhŒ literal_block”“”)�”}”(hŒ make LLVM=1”h]”hŒ make LLVM=1”…”�”}”hjAsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j?h³hÃh´K!hj h²hubhÚ)�”}”(hŒ5to compile for the host target. For cross compiling::”h]”hŒ4to compile for the host target. For cross compiling:”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K#hj h²hubj@)�”}”(hŒmake LLVM=1 ARCH=arm64”h]”hŒmake LLVM=1 ARCH=arm64”…”�”}”hj_sbah}”(h]”h ]”h"]”h$]”h&]”jOjPuh1j?h³hÃh´K%hj h²hubeh}”(h]”Œbuilding-with-llvm”ah ]”h"]”Œbuilding with llvm”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒThe LLVM= argument”h]”hŒThe LLVM= argument”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjuh²hh³hÃh´K(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†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K*hjuh²hubj@)�”}”(hŒ¿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”h]”hŒ¿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”…”�”}”hj”sbah}”(h]”h ]”h"]”h$]”h&]”jOjPuh1j?h³hÃh´K-hjuh²hubhÚ)�”}”(hŒ ``LLVM=1`` expands to the above.”h]”(j&)�”}”(hŒ ``LLVM=1``”h]”hŒLLVM=1”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj¢ubhŒ expands to the above.”…”�”}”(hj¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K1hjuh²hubhÚ)�”}”(hŒ€If your LLVM tools are not available in your PATH, you can supply their location using the LLVM variable with a trailing slash::”h]”hŒIf your LLVM tools are not available in your PATH, you can supply their location using the LLVM variable with a trailing slash:”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K3hjuh²hubj@)�”}”(hŒmake LLVM=/path/to/llvm/”h]”hŒmake LLVM=/path/to/llvm/”…”�”}”hjÌsbah}”(h]”h ]”h"]”h$]”h&]”jOjPuh1j?h³hÃh´K6hjuh²hubhÚ)�”}”(hŒgwhich will use ``/path/to/llvm/clang``, ``/path/to/llvm/ld.lld``, etc. The following may also be used::”h]”(hŒwhich will use ”…”�”}”(hjÚh²hh³Nh´Nubj&)�”}”(hŒ``/path/to/llvm/clang``”h]”hŒ/path/to/llvm/clang”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjÚubhŒ, ”…”�”}”(hjÚh²hh³Nh´Nubj&)�”}”(hŒ``/path/to/llvm/ld.lld``”h]”hŒ/path/to/llvm/ld.lld”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjÚubhŒ&, etc. The following may also be used:”…”�”}”(hjÚh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K8hjuh²hubj@)�”}”(hŒ$PATH=/path/to/llvm:$PATH make LLVM=1”h]”hŒ$PATH=/path/to/llvm:$PATH make LLVM=1”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”jOjPuh1j?h³hÃh´K;hjuh²hubhÚ)�”}”(hŒÆ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::”h]”(hŒ…If your LLVM tools have a version suffix and you want to test with that explicit version rather than the unsuffixed executables like ”…”�”}”(hjh²hh³Nh´Nubj&)�”}”(hŒ ``LLVM=1``”h]”hŒLLVM=1”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjubhŒ$, you can pass the suffix using the ”…”�”}”(hjh²hh³Nh´Nubj&)�”}”(hŒ``LLVM``”h]”hŒLLVM”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjubhŒ variable:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K=hjuh²hubj@)�”}”(hŒ make LLVM=-14”h]”hŒ make LLVM=-14”…”�”}”hjLsbah}”(h]”h ]”h"]”h$]”h&]”jOjPuh1j?h³hÃh´KAhjuh²hubhÚ)�”}”(hŒ0which will use ``clang-14``, ``ld.lld-14``, etc.”h]”(hŒwhich will use ”…”�”}”(hjZh²hh³Nh´Nubj&)�”}”(hŒ ``clang-14``”h]”hŒclang-14”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjZubhŒ, ”…”�”}”(hjZh²hh³Nh´Nubj&)�”}”(hŒ ``ld.lld-14``”h]”hŒ ld.lld-14”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjZubhŒ, etc.”…”�”}”(hjZh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KChjuh²hubhÚ)�”}”(hŒRTo support combinations of out of tree paths with version suffixes, we recommend::”h]”hŒQTo support combinations of out of tree paths with version suffixes, we recommend:”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KEhjuh²hubj@)�”}”(hŒ'PATH=/path/to/llvm/:$PATH make LLVM=-14”h]”hŒ'PATH=/path/to/llvm/:$PATH make LLVM=-14”…”�”}”hjšsbah}”(h]”h ]”h"]”h$]”h&]”jOjPuh1j?h³hÃh´KHhjuh²hubhÚ)�”}”(hŒò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``.”h]”(hŒThe same value used for ”…”�”}”(hj¨h²hh³Nh´Nubj&)�”}”(hŒ ``LLVM=``”h]”hŒLLVM=”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj¨ubhŒ& should be set for each invocation of ”…”�”}”(hj¨h²hh³Nh´Nubj&)�”}”(hŒ``make``”h]”hŒmake”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj¨ubhŒ4 if configuring and building via distinct commands. ”…”�”}”(hj¨h²hh³Nh´Nubj&)�”}”(hŒ ``LLVM=``”h]”hŒLLVM=”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj¨ubhŒ] should also be set as an environment variable when running scripts that will eventually run ”…”�”}”(hj¨h²hh³Nh´Nubj&)�”}”(hŒ``make``”h]”hŒmake”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj¨ubhŒ.”…”�”}”(hj¨h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KJhjuh²hubeh}”(h]”Œthe-llvm-argument”ah ]”h"]”Œthe llvm= argument”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´K(ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒCross Compiling”h]”hŒCross Compiling”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjh²hh³hÃh´KPubhÚ)�”}”(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]”(hŒªA single Clang compiler binary (and corresponding LLVM utilities) will typically contain all supported back ends, which can help simplify cross compiling especially when ”…”�”}”(hjh²hh³Nh´Nubj&)�”}”(hŒ ``LLVM=1``”h]”hŒLLVM=1”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjubhŒ& is used. If you use only LLVM tools, ”…”�”}”(hjh²hh³Nh´Nubj&)�”}”(hŒ``CROSS_COMPILE``”h]”hŒ CROSS_COMPILE”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjubhŒ7 or target-triple-prefixes become unnecessary. Example:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KRhjh²hubj@)�”}”(hŒmake LLVM=1 ARCH=arm64”h]”hŒmake LLVM=1 ARCH=arm64”…”�”}”hjIsbah}”(h]”h ]”h"]”h$]”h&]”jOjPuh1j?h³hÃh´KWhjh²hubhÚ)�”}”(hŒ¯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::”h]”(hŒBAs an example of mixing LLVM and GNU utilities, for a target like ”…”�”}”(hjWh²hh³Nh´Nubj&)�”}”(hŒ ``ARCH=s390``”h]”hŒ ARCH=s390”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjWubhŒ which does not yet have ”…”�”}”(hjWh²hh³Nh´Nubj&)�”}”(hŒ ``ld.lld``”h]”hŒld.lld”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjWubhŒ or ”…”�”}”(hjWh²hh³Nh´Nubj&)�”}”(hŒ``llvm-objcopy``”h]”hŒ llvm-objcopy”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjWubhŒ support, you could invoke ”…”�”}”(hjWh²hh³Nh´Nubj&)�”}”(hŒ``make``”h]”hŒmake”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjWubhŒ via:”…”�”}”(hjWh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KYhjh²hubj@)�”}”(hŒSmake LLVM=1 ARCH=s390 LD=s390x-linux-gnu-ld.bfd \ OBJCOPY=s390x-linux-gnu-objcopy”h]”hŒSmake LLVM=1 ARCH=s390 LD=s390x-linux-gnu-ld.bfd \ OBJCOPY=s390x-linux-gnu-objcopy”…”�”}”hj­sbah}”(h]”h ]”h"]”h$]”h&]”jOjPuh1j?h³hÃh´K]hjh²hubhÚ)�”}”(hŒ“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``.”h]”(hŒThis example will invoke ”…”�”}”(hj»h²hh³Nh´Nubj&)�”}”(hŒ``s390x-linux-gnu-ld.bfd``”h]”hŒs390x-linux-gnu-ld.bfd”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj»ubhŒ as the linker and ”…”�”}”(hj»h²hh³Nh´Nubj&)�”}”(hŒ``s390x-linux-gnu-objcopy``”h]”hŒs390x-linux-gnu-objcopy”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj»ubhŒ(, so ensure those are reachable in your ”…”�”}”(hj»h²hh³Nh´Nubj&)�”}”(hŒ ``$PATH``”h]”hŒ$PATH”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj»ubhŒ.”…”�”}”(hj»h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K`hjh²hubhÚ)�”}”(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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjÿubhŒy is not used to prefix the Clang compiler binary (or corresponding LLVM utilities) as is the case for GNU utilities when ”…”�”}”(hjÿh²hh³Nh´Nubj&)�”}”(hŒ ``LLVM=1``”h]”hŒLLVM=1”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjÿubhŒ is not set.”…”�”}”(hjÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kchjh²hubeh}”(h]”Œcross-compiling”ah ]”h"]”Œcross compiling”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KPubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒThe LLVM_IAS= argument”h]”hŒThe LLVM_IAS= argument”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj5h²hh³hÃh´KhubhÚ)�”}”(hŒ«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::”h]”(hŒ0Clang can assemble assembler code. You can pass ”…”�”}”(hjFh²hh³Nh´Nubj&)�”}”(hŒ``LLVM_IAS=0``”h]”hŒ LLVM_IAS=0”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjFubhŒl to disable this behavior and have Clang invoke the corresponding non-integrated assembler instead. Example:”…”�”}”(hjFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kjhj5h²hubj@)�”}”(hŒmake LLVM=1 LLVM_IAS=0”h]”hŒmake LLVM=1 LLVM_IAS=0”…”�”}”hjfsbah}”(h]”h ]”h"]”h$]”h&]”jOjPuh1j?h³hÃh´Knhj5h²hubhÚ)�”}”(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”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjtubhŒ' is necessary when cross compiling and ”…”�”}”(hjth²hh³Nh´Nubj&)�”}”(hŒ``LLVM_IAS=0``”h]”hŒ LLVM_IAS=0”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjtubhŒ is used in order to set ”…”�”}”(hjth²hh³Nh´Nubj&)�”}”(hŒ ``--prefix=``”h]”hŒ --prefix=”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjtubhŒ¬ 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:”…”�”}”(hjth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kphj5h²hubj@)�”}”(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&]”jOjPuh1j?h³hÃh´Kuhj5h²hubeh}”(h]”Œthe-llvm-ias-argument”ah ]”h"]”Œthe llvm_ias= argument”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KhubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒCcache”h]”hŒCcache”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjÊh²hh³hÃh´KyubhÚ)�”}”(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]”hŒccache”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjÛubhŒ can be used with ”…”�”}”(hjÛh²hh³Nh´Nubj&)�”}”(hŒ ``clang``”h]”hŒclang”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjÛubhŒ' to improve subsequent builds, (though ”…”�”}”(hjÛh²hh³Nh´Nubj)�”}”(hŒKBUILD_BUILD_TIMESTAMP_”h]”hŒKBUILD_BUILD_TIMESTAMP”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒKBUILD_BUILD_TIMESTAMP”jŒ"kbuild.html#kbuild-build-timestamp”uh1jhjÛŒresolved”KubhŒ` should be set to a deterministic value between builds in order to avoid 100% cache misses, see ”…”�”}”(hjÛh²hh³Nh´Nubj)�”}”(hŒReproducible_builds_”h]”hŒReproducible_builds”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒReproducible_builds”jŒ#reproducible-builds.html#timestamps”uh1jhjÛjKubhŒ for more info):”…”�”}”(hjÛh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K{hjÊh²hubj@)�”}”(hŒ7KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"”h]”hŒ7KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"”…”�”}”hj4sbah}”(h]”h ]”h"]”h$]”h&]”jOjPuh1j?h³hÃh´KhjÊh²hubh¶)�”}”(hŒ>.. _KBUILD_BUILD_TIMESTAMP: kbuild.html#kbuild-build-timestamp”h]”h}”(h]”Œkbuild-build-timestamp”ah ]”h"]”Œkbuild_build_timestamp”ah$]”h&]”jjuh1hµh´K�hjÊh²hh³hÃj#Kubh¶)�”}”(hŒ<.. _Reproducible_builds: reproducible-builds.html#timestamps”h]”h}”(h]”Œreproducible-builds”ah ]”h"]”Œreproducible_builds”ah$]”h&]”jj)uh1hµh´K‚hjÊh²hh³hÃj#Kubeh}”(h]”Œccache”ah ]”h"]”Œccache”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KyubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒSupported Architectures”h]”hŒSupported Architectures”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjbh²hh³hÃh´K…ubhÚ)�”}”(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]”(hŒû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 ”…”�”}”(hjsh²hh³Nh´Nubj&)�”}”(hŒ ``CC=clang``”h]”hŒCC=clang”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjsubhŒ or ”…”�”}”(hjsh²hh³Nh´Nubj&)�”}”(hŒ ``LLVM=1``”h]”hŒLLVM=1”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjsubhX6. 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 ”…”�”}”(hjsh²hh³Nh´Nubj&)�”}”(hŒ ``defconfig``”h]”hŒ defconfig”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjsubhŒª 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!”…”�”}”(hjsh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K‡hjbh²hubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K 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¾ubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÚ)�”}”(hŒ Architecture”h]”hŒ Architecture”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K—hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjæubjê)�”}”(hhh]”hÚ)�”}”(hŒLevel of support”h]”hŒLevel of support”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K˜hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjæubjê)�”}”(hhh]”hÚ)�”}”(hŒ``make`` command”h]”(j&)�”}”(hŒ``make``”h]”hŒmake”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjubhŒ command”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K™hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjáubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¾ubhŒtbody”“”)�”}”(hhh]”(jå)�”}”(hhh]”(jê)�”}”(hhh]”hÚ)�”}”(hŒarm”h]”hŒarm”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KšhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjOubjê)�”}”(hhh]”hÚ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K›hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjOubjê)�”}”(hhh]”hÚ)�”}”(hŒ ``LLVM=1``”h]”j&)�”}”(hj…h]”hŒLLVM=1”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kœhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjLubjå)�”}”(hhh]”(jê)�”}”(hhh]”hÚ)�”}”(hŒarm64”h]”hŒarm64”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K�hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj¦ubjê)�”}”(hhh]”hÚ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KžhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj¦ubjê)�”}”(hhh]”hÚ)�”}”(hŒ ``LLVM=1``”h]”j&)�”}”(hjÜh]”hŒLLVM=1”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KŸhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjLubjå)�”}”(hhh]”(jê)�”}”(hhh]”hÚ)�”}”(hŒhexagon”h]”hŒhexagon”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjýubjê)�”}”(hhh]”hÚ)�”}”(hŒ Maintained”h]”hŒ Maintained”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¡hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjýubjê)�”}”(hhh]”hÚ)�”}”(hŒ ``LLVM=1``”h]”j&)�”}”(hj3h]”hŒLLVM=1”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¢hj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjLubjå)�”}”(hhh]”(jê)�”}”(hhh]”hÚ)�”}”(hŒ loongarch”h]”hŒ loongarch”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K£hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjTubjê)�”}”(hhh]”hÚ)�”}”(hŒ Maintained”h]”hŒ Maintained”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¤hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjTubjê)�”}”(hhh]”hÚ)�”}”(hŒ ``LLVM=1``”h]”j&)�”}”(hjŠh]”hŒLLVM=1”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¥hj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjLubjå)�”}”(hhh]”(jê)�”}”(hhh]”hÚ)�”}”(hŒmips”h]”hŒmips”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¦hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj«ubjê)�”}”(hhh]”hÚ)�”}”(hŒ Maintained”h]”hŒ Maintained”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K§hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj«ubjê)�”}”(hhh]”hÚ)�”}”(hŒ ``LLVM=1``”h]”j&)�”}”(hjáh]”hŒLLVM=1”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¨hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjLubjå)�”}”(hhh]”(jê)�”}”(hhh]”hÚ)�”}”(hŒpowerpc”h]”hŒpowerpc”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K©hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj ubjê)�”}”(hhh]”hÚ)�”}”(hŒ Maintained”h]”hŒ Maintained”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kªhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj ubjê)�”}”(hhh]”hÚ)�”}”(hŒ ``LLVM=1``”h]”j&)�”}”(hj8 h]”hŒLLVM=1”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj6 ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K«hj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjLubjå)�”}”(hhh]”(jê)�”}”(hhh]”hÚ)�”}”(hŒriscv”h]”hŒriscv”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¬hj\ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjY ubjê)�”}”(hhh]”hÚ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K­hjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjY ubjê)�”}”(hhh]”hÚ)�”}”(hŒ ``LLVM=1``”h]”j&)�”}”(hj� h]”hŒLLVM=1”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K®hjŠ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjY ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjLubjå)�”}”(hhh]”(jê)�”}”(hhh]”hÚ)�”}”(hŒs390”h]”hŒs390”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¯hj³ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj° ubjê)�”}”(hhh]”hÚ)�”}”(hŒ Maintained”h]”hŒ Maintained”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K°hjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj° ubjê)�”}”(hhh]”hÚ)�”}”(hŒ9``LLVM=1`` (LLVM >= 18.1.0), ``CC=clang`` (LLVM < 18.1.0)”h]”(j&)�”}”(hŒ ``LLVM=1``”h]”hŒLLVM=1”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjä ubhŒ (LLVM >= 18.1.0), ”…”�”}”(hjä h²hh³Nh´Nubj&)�”}”(hŒ ``CC=clang``”h]”hŒCC=clang”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjä ubhŒ (LLVM < 18.1.0)”…”�”}”(hjä h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K±hjá ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj° ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjLubjå)�”}”(hhh]”(jê)�”}”(hhh]”hÚ)�”}”(hŒsparc (sparc64 only)”h]”hŒsparc (sparc64 only)”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K²hj! ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj ubjê)�”}”(hhh]”hÚ)�”}”(hŒ Maintained”h]”hŒ Maintained”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K³hj8 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]”hŒCC=clang LLVM_IAS=0”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hjR ubhŒ (LLVM >= 20)”…”�”}”(hjR h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K´hjO ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjLubjå)�”}”(hhh]”(jê)�”}”(hhh]”hÚ)�”}”(hŒum (User Mode)”h]”hŒum (User Mode)”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kµhj} ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjz ubjê)�”}”(hhh]”hÚ)�”}”(hŒ Maintained”h]”hŒ Maintained”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¶hj” ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjz ubjê)�”}”(hhh]”hÚ)�”}”(hŒ ``LLVM=1``”h]”j&)�”}”(hj° h]”hŒLLVM=1”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj® ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K·hj« ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjz ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjLubjå)�”}”(hhh]”(jê)�”}”(hhh]”hÚ)�”}”(hŒx86”h]”hŒx86”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¸hjÔ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjÑ ubjê)�”}”(hhh]”hÚ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¹hjë ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjÑ ubjê)�”}”(hhh]”hÚ)�”}”(hŒ ``LLVM=1``”h]”j&)�”}”(hj h]”hŒLLVM=1”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j%hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kºhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jéhjÑ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jähjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJhj¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼hj¹ubah}”(h]”h ]”Œcolwidths-given”ah"]”h$]”h&]”uh1j·hjbh²hh³Nh´Nubeh}”(h]”Œsupported-architectures”ah ]”h"]”Œsupported architectures”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´K…ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ Getting Help”h]”hŒ Getting Help”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjD h²hh³hÃh´K½ubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ/`Website `_”h]”hÚ)�”}”(hj^ h]”(j)�”}”(hj^ h]”hŒWebsite”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒWebsite”jŒ"https://clangbuiltlinux.github.io/”uh1jhj` ubh¶)�”}”(hŒ% ”h]”h}”(h]”Œwebsite”ah ]”h"]”Œwebsite”ah$]”h&]”Œrefuri”jr uh1hµj#Khj` ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¿hj\ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjW h²hh³hÃh´Nubj[ )�”}”(hŒG`Mailing List `_: ”h]”hÚ)�”}”(hjŽ h]”(j)�”}”(hŒ/`Mailing List `_”h]”hŒ Mailing List”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Mailing List”jŒhttps://lore.kernel.org/llvm/”uh1jhj� ubh¶)�”}”(hŒ ”h]”h}”(h]”Œ mailing-list”ah ]”h"]”Œ mailing list”ah$]”h&]”Œrefuri”j£ uh1hµj#Khj� ubhŒ: <”…”�”}”(hj� h²hh³Nh´Nubj)�”}”(hŒllvm@lists.linux.dev”h]”hŒllvm@lists.linux.dev”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:llvm@lists.linux.dev”uh1jhj� ubhŒ>”…”�”}”(hj� h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÀhjŒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjW h²hh³hÃh´Nubj[ )�”}”(hŒL`Old Mailing List Archives `_”h]”hÚ)�”}”(hj× h]”(j)�”}”(hj× h]”hŒOld Mailing List Archives”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒOld Mailing List Archives”jŒ-https://groups.google.com/g/clang-built-linux”uh1jhjÙ ubh¶)�”}”(hŒ0 ”h]”h}”(h]”Œold-mailing-list-archives”ah ]”h"]”Œold mailing list archives”ah$]”h&]”Œrefuri”jë uh1hµj#KhjÙ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÁhjÕ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjW h²hh³hÃh´Nubj[ )�”}”(hŒB`Issue Tracker `_”h]”hÚ)�”}”(hj h]”(j)�”}”(hj h]”hŒ Issue Tracker”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Issue Tracker”jŒ/https://github.com/ClangBuiltLinux/linux/issues”uh1jhj ubh¶)�”}”(hŒ2 ”h]”h}”(h]”Œ issue-tracker”ah ]”h"]”Œ issue tracker”ah$]”h&]”Œrefuri”j uh1hµj#Khj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÂhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjW h²hh³hÃh´Nubj[ )�”}”(hŒ(IRC: #clangbuiltlinux on irc.libera.chat”h]”hÚ)�”}”(hj7 h]”hŒ(IRC: #clangbuiltlinux on irc.libera.chat”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÃhj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjW h²hh³hÃh´Nubj[ )�”}”(hŒ<`Telegram `_: @ClangBuiltLinux”h]”hÚ)�”}”(hjN h]”(j)�”}”(hŒ*`Telegram `_”h]”hŒTelegram”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒTelegram”jŒhttps://t.me/ClangBuiltLinux”uh1jhjP ubh¶)�”}”(hŒ ”h]”h}”(h]”Œtelegram”ah ]”h"]”Œtelegram”ah$]”h&]”Œrefuri”jc uh1hµj#KhjP ubhŒ: @ClangBuiltLinux”…”�”}”(hjP h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÄhjL ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjW h²hh³hÃh´Nubj[ )�”}”(hŒ7`Wiki `_”h]”hÚ)�”}”(hjƒ h]”(j)�”}”(hjƒ h]”hŒWiki”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒWiki”jŒ-https://github.com/ClangBuiltLinux/linux/wiki”uh1jhj… ubh¶)�”}”(hŒ0 ”h]”h}”(h]”Œwiki”ah ]”h"]”Œwiki”ah$]”h&]”Œrefuri”j— uh1hµj#Khj… ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÅhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjW h²hh³hÃh´Nubj[ )�”}”(hŒy`Beginner Bugs `_ ”h]”hÚ)�”}”(hŒx`Beginner Bugs `_”h]”(j)�”}”(hj· h]”hŒ Beginner Bugs”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Beginner Bugs”jŒehttps://github.com/ClangBuiltLinux/linux/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22”uh1jhjµ ubh¶)�”}”(hŒh ”h]”h}”(h]”Œ beginner-bugs”ah ]”h"]”Œ beginner bugs”ah$]”h&]”Œrefuri”jÈ uh1hµj#Khjµ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÆhj± ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjW h²hh³hÃh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jU h³hÃh´K¿hjD h²hubh¶)�”}”(hŒ.. _getting_llvm:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒ getting-llvm”uh1hµh´KÈhjD h²hh³hÃubeh}”(h]”Œ getting-help”ah ]”h"]”Œ getting help”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´K½ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ Getting LLVM”h]”hŒ Getting LLVM”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjý h²hh³hÃh´KËubhÚ)�”}”(hŒûWe 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 h²hh³Nh´Nubj)�”}”(hŒ2`kernel.org `_”h]”hŒ kernel.org”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ kernel.org”jŒ"https://kernel.org/pub/tools/llvm/”uh1jhj ubh¶)�”}”(hŒ% ”h]”h}”(h]”Œ kernel-org”ah ]”h"]”Œ kernel.org”ah$]”h&]”Œrefuri”j& uh1hµj#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 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÍhjý h²hubhÚ)�”}”(hŒzBelow 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> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÒhjý h²hubjV )�”}”(hhh]”(j[ )�”}”(hŒ'https://releases.llvm.org/download.html”h]”hÚ)�”}”(hjQ h]”j)�”}”(hjQ h]”hŒ'https://releases.llvm.org/download.html”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jQ uh1jhjS ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÕhjO ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjL h²hh³hÃh´Nubj[ )�”}”(hŒ$https://github.com/llvm/llvm-project”h]”hÚ)�”}”(hjr h]”j)�”}”(hjr h]”hŒ$https://github.com/llvm/llvm-project”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jr uh1jhjt ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÖhjp ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjL h²hh³hÃh´Nubj[ )�”}”(hŒ)https://llvm.org/docs/GettingStarted.html”h]”hÚ)�”}”(hj“ h]”j)�”}”(hj“ h]”hŒ)https://llvm.org/docs/GettingStarted.html”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j“ uh1jhj• ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K×hj‘ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjL h²hh³hÃh´Nubj[ )�”}”(hŒ https://llvm.org/docs/CMake.html”h]”hÚ)�”}”(hj´ h]”j)�”}”(hj´ h]”hŒ https://llvm.org/docs/CMake.html”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j´ uh1jhj¶ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KØhj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjL h²hh³hÃh´Nubj[ )�”}”(hŒhttps://apt.llvm.org/”h]”hÚ)�”}”(hjÕ h]”j)�”}”(hjÕ h]”hŒhttps://apt.llvm.org/”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jÕ uh1jhj× ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÙhjÓ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjL h²hh³hÃh´Nubj[ )�”}”(hŒ5https://www.archlinux.org/packages/extra/x86_64/llvm/”h]”hÚ)�”}”(hjö h]”j)�”}”(hjö h]”hŒ5https://www.archlinux.org/packages/extra/x86_64/llvm/”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jö uh1jhjø ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÚhjô ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjL h²hh³hÃh´Nubj[ )�”}”(hŒ+https://github.com/ClangBuiltLinux/tc-build”h]”hÚ)�”}”(hjh]”j)�”}”(hjh]”hŒ+https://github.com/ClangBuiltLinux/tc-build”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”juh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÛhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjL h²hh³hÃh´Nubj[ )�”}”(hŒHhttps://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source”h]”hÚ)�”}”(hj8h]”j)�”}”(hj8h]”hŒHhttps://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j8uh1jhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÜhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjL h²hh³hÃh´Nubj[ )�”}”(hŒIhttps://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/”h]”hÚ)�”}”(hjYh]”j)�”}”(hjYh]”hŒIhttps://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jYuh1jhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÝhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jZ hjL h²hh³hÃh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jè jé uh1jU h³hÃh´KÕhjý h²hubeh}”(h]”(jô Œid1”eh ]”h"]”(Œ getting llvm”Œ getting_llvm”eh$]”h&]”uh1hÄhhÆh²hh³hÃh´KËŒexpect_referenced_by_name”}”j„jê sŒexpect_referenced_by_id”}”jô jê subeh}”(h]”(Œbuilding-linux-with-clang-llvm”hÂeh ]”h"]”(Œbuilding linux with clang/llvm”Œ kbuild_llvm”eh$]”h&]”uh1hÄhhh²hh³hÃh´Kj‡}”j‘h·sj‰}”hÂh·subeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÃuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÉNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”jéŒfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j¸Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÃŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”(Œkbuild_build_timestamp”]”jaŒreproducible_builds”]”jauŒrefids”}”(hÂ]”h·ajô ]”jê auŒnameids”}”(j‘hÂj�j�j jjjjBj?jdjaj†jƒj¨j¥jÊjÇjöjójrjojjj2j/jÇjÄj_j\jKjHjWjTjA 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‰jljj_‰jKˆjWˆjA ‰jú ‰j| ˆj­ ˆjõ ˆj% ˆjm ˆj¡ ˆjÒ ˆj„ˆjƒ‰j0 ˆuh}”(hÂhÆj�hÆjhéjjj?j9jaj[jƒj}j¥jŸjÇjÁjójíjoj jjuj/jjÄj5j\jÊjHjBjTjNj> jbj÷ 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_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jÆKs…”R”Œparse_messages”]”Œtransform_messages”]”(hŒsystem_message”“”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ1Hyperlink target "kbuild-llvm" is not referenced.”…”�”}”hj'sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj$ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÃŒline”Kuh1j"ubj#)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ2Hyperlink target "getting-llvm" is not referenced.”…”�”}”hjBsbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj?ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j<Œsource”hÃŒline”KÈuh1j"ubeŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.