€•´ Œ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”hhhubh)�”}”(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”ˆuh1hhhubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/it_IT/kbuild/llvm”Œmodname”NŒ classname”NŒrefexplicit”ˆuh1hhhubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ja_JP/kbuild/llvm”Œmodname”NŒ classname”NŒrefexplicit”ˆuh1hhhubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ko_KR/kbuild/llvm”Œmodname”NŒ classname”NŒrefexplicit”ˆuh1hhhubh)�”}”(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”ˆuh1hhhubh)�”}”(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”ˆuh1hhhubeh}”(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´KubhÚ)�”}”(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”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒClang”Œrefuri”Œhttps://clang.llvm.org/”uh1j hhúubh¶)�”}”(hŒ
”h]”h}”(h]”Œclang”ah ]”h"]”Œclang”ah$]”h&]”Œrefuri”j uh1hµŒ
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/”uh1j hhúubh¶)�”}”(hŒ ”h]”h}”(h]”Œllvm”ah ]”h"]”Œllvm”ah$]”h&]”Œrefuri”j8 uh1hµj# KhhúubhŒC utilities to be
used as viable substitutes. Distributions such as ”…”�”}”(hhúh²hh³Nh´Nubj )�”}”(hŒ%`Android
`_”h]”hŒAndroid”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒAndroid”j Œhttps://www.android.com/”uh1j hhúubh¶)�”}”(hŒ
”h]”h}”(h]”Œandroid”ah ]”h"]”Œandroid”ah$]”h&]”Œrefuri”jZ uh1hµj# KhhúubhŒ, ”…”�”}”(hhúh²hh³Nh´Nubj )�”}”(hŒ2`ChromeOS
`_”h]”hŒChromeOS”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒChromeOS”j Œ$https://www.chromium.org/chromium-os”uh1j hhú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/”uh1j hhú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/”uh1j hhú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”uh1j hjØ 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´KubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒBuilding with LLVM”h]”hŒBuilding with LLVM”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj h²hh³hÃh´KubhÚ)�”}”(hŒInvoke ``make`` via::”h]”(hŒInvoke ”…”�”}”(hj h²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``make``”h]”hŒmake”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hj ubhŒ via:”…”�”}”(hj h²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”…”�”}”hjA sbah}”(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:”…”�”}”(hjQ h²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&]”jO jP uh1j? 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”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhju h²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*hju h²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&]”jO jP uh1j? h³hÃh´K-hju h²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´K1hju h²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´K3hju h²hubj@ )�”}”(hŒmake LLVM=/path/to/llvm/”h]”hŒmake LLVM=/path/to/llvm/”…”�”}”hjÌ sbah}”(h]”h ]”h"]”h$]”h&]”jO jP uh1j? h³hÃh´K6hju h²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´K8hju h²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&]”jO jP uh1j? h³hÃh´K;hju h²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 ”…”�”}”(hj h²hh³Nh´Nubj& )�”}”(hŒ
``LLVM=1``”h]”hŒLLVM=1”…”�”}”(hj" h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hj ubhŒ$, you
can pass the suffix using the ”…”�”}”(hj h²hh³Nh´Nubj& )�”}”(hŒ``LLVM``”h]”hŒLLVM”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hj ubhŒ
variable:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K=hju h²hubj@ )�”}”(hŒ
make LLVM=-14”h]”hŒ
make LLVM=-14”…”�”}”hjL sbah}”(h]”h ]”h"]”h$]”h&]”jO jP uh1j? h³hÃh´KAhju h²hubhÚ)�”}”(hŒ0which will use ``clang-14``, ``ld.lld-14``, etc.”h]”(hŒwhich will use ”…”�”}”(hjZ h²hh³Nh´Nubj& )�”}”(hŒ``clang-14``”h]”hŒclang-14”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hjZ ubhŒ, ”…”�”}”(hjZ h²hh³Nh´Nubj& )�”}”(hŒ
``ld.lld-14``”h]”hŒ ld.lld-14”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hjZ ubhŒ, etc.”…”�”}”(hjZ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KChju h²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´KEhju h²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&]”jO jP uh1j? h³hÃh´KHhju h²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´KJhju h²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Éhj h²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 ”…”�”}”(hj h²hh³Nh´Nubj& )�”}”(hŒ
``LLVM=1``”h]”hŒLLVM=1”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hj ubhŒ& is used. If you use only LLVM tools,
”…”�”}”(hj h²hh³Nh´Nubj& )�”}”(hŒ``CROSS_COMPILE``”h]”hŒ
CROSS_COMPILE”…”�”}”(hj1 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hj ubhŒ7 or target-triple-prefixes become unnecessary. Example:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KRhj h²hubj@ )�”}”(hŒmake LLVM=1 ARCH=arm64”h]”hŒmake LLVM=1 ARCH=arm64”…”�”}”hjI sbah}”(h]”h ]”h"]”h$]”h&]”jO jP uh1j? h³hÃh´KWhj h²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 ”…”�”}”(hjW h²hh³Nh´Nubj& )�”}”(hŒ
``ARCH=s390``”h]”hŒ ARCH=s390”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hjW ubhŒ
which does not yet have ”…”�”}”(hjW h²hh³Nh´Nubj& )�”}”(hŒ
``ld.lld``”h]”hŒld.lld”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hjW ubhŒ or ”…”�”}”(hjW h²hh³Nh´Nubj& )�”}”(hŒ``llvm-objcopy``”h]”hŒllvm-objcopy”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hjW ubhŒ support, you could
invoke ”…”�”}”(hjW h²hh³Nh´Nubj& )�”}”(hŒ``make``”h]”hŒmake”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hjW ubhŒ via:”…”�”}”(hjW h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KYhj h²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&]”jO jP uh1j? h³hÃh´K]hj h²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`hj h²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”…”�”}”(hj h²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”…”�”}”(hj h²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´Kchj h²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”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj5 h²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 ”…”�”}”(hjF h²hh³Nh´Nubj& )�”}”(hŒ``LLVM_IAS=0``”h]”hŒ
LLVM_IAS=0”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hjF ubhŒl to disable this
behavior and have Clang invoke the corresponding non-integrated assembler
instead. Example:”…”�”}”(hjF h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kjhj5 h²hubj@ )�”}”(hŒmake LLVM=1 LLVM_IAS=0”h]”hŒmake LLVM=1 LLVM_IAS=0”…”�”}”hjf sbah}”(h]”h ]”h"]”h$]”h&]”jO jP uh1j? h³hÃh´Knhj5 h²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”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hjt ubhŒ' is necessary when cross compiling and ”…”�”}”(hjt h²hh³Nh´Nubj& )�”}”(hŒ``LLVM_IAS=0``”h]”hŒ
LLVM_IAS=0”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hjt ubhŒ
is used in order to set ”…”�”}”(hjt h²hh³Nh´Nubj& )�”}”(hŒ
``--prefix=``”h]”hŒ --prefix=”…”�”}”(hjœ h²hh³Nh´Nubah}”(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 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kphj5 h²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&]”jO jP uh1j? h³hÃh´Kuhj5 h²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”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒKBUILD_BUILD_TIMESTAMP”j Œ"kbuild.html#kbuild-build-timestamp”uh1j hjÛ Œ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”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒReproducible_builds”j Œ#reproducible-builds.html#timestamps”uh1j hjÛ j KubhŒ 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"”…”�”}”hj4 sbah}”(h]”h ]”h"]”h$]”h&]”jO jP uh1j? 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&]”j j uh1hµ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&]”j j) 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”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjb h²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 ”…”�”}”(hjs h²hh³Nh´Nubj& )�”}”(hŒ``CC=clang``”h]”hŒCC=clang”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hjs ubhŒ or ”…”�”}”(hjs h²hh³Nh´Nubj& )�”}”(hŒ
``LLVM=1``”h]”hŒLLVM=1”…”�”}”(hj� h²hh³Nh´Nubah}”(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 h²hh³Nh´Nubj& )�”}”(hŒ
``defconfig``”h]”hŒ defconfig”…”�”}”(hjŸ h²hh³Nh´Nubah}”(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 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K‡hjb h²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”…”�”}”(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Œ``make`` command”h]”(j& )�”}”(hŒ``make``”h]”hŒmake”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hj ubhŒ command”…”�”}”(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ä hjá ubah}”(h]”h ]”h"]”h$]”h&]”uh1jß hj¾ ubhŒtbody”“”)�”}”(hhh]”(jå )�”}”(hhh]”(jê )�”}”(hhh]”hÚ)�”}”(hŒarm”h]”hŒarm”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KšhjR ubah}”(h]”h ]”h"]”h$]”h&]”uh1jé hjO ubjê )�”}”(hhh]”hÚ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K›hji ubah}”(h]”h ]”h"]”h$]”h&]”uh1jé hjO 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é hjO ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jä hjL ubjå )�”}”(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ä hjL ubjå )�”}”(hhh]”(jê )�”}”(hhh]”hÚ)�”}”(hŒhexagon”h]”hŒhexagon”…”�”}”(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& )�”}”(hj3 h]”hŒLLVM=1”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j% hj1 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ä hjL ubjå )�”}”(hhh]”(jê )�”}”(hhh]”hÚ)�”}”(hŒ loongarch”h]”hŒ loongarch”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K£hjW ubah}”(h]”h ]”h"]”h$]”h&]”uh1jé hjT ubjê )�”}”(hhh]”hÚ)�”}”(hŒ
Maintained”h]”hŒ
Maintained”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¤hjn ubah}”(h]”h ]”h"]”h$]”h&]”uh1jé hjT 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é hjT ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jä hjL ubjå )�”}”(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ä hjL ubjå )�”}”(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ä hjL ubjå )�”}”(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´Khjs 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ä hjL ubjå )�”}”(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ä hjL ubjå )�”}”(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ä hjL ubjå )�”}”(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ä hjL ubjå )�”}”(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ä hjL ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJ hj¾ ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼ hj¹ ubah}”(h]”h ]”Œcolwidths-given”ah"]”h$]”h&]”uh1j· hjb h²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/”uh1j hj` 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/”uh1j hj� 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”uh1j hj� 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”uh1j hjÙ 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”uh1j hj 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”uh1j hjP 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”uh1j hj… 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”uh1j hjµ 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/”uh1j hj
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
uh1j hjS
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
uh1j hjt
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“
uh1j hj•
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´
uh1j hj¶
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Õ
uh1j hj×
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ö
uh1j hjø
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Ú)�”}”(hj h]”j )�”}”(hj h]”hŒ+https://github.com/ClangBuiltLinux/tc-build”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j uh1j hj 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ŒHhttps://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source”h]”hÚ)�”}”(hj8 h]”j )�”}”(hj8 h]”hŒHhttps://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j8 uh1j hj: ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÜhj6 ubah}”(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Ú)�”}”(hjY h]”j )�”}”(hjY h]”hŒIhttps://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jY uh1j hj[ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÝhjW ubah}”(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”]”j aŒreproducible_builds”]”j auŒrefids”}”(hÂ]”h·ajô ]”jê auŒnameids”}”(j‘ hÂj� 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}”(hÂhÆj� hÆj héj 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_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.”…”�”}”hjB sbah}”(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.