sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget /kbuild/llvmmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/zh_TW/kbuild/llvmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/it_IT/kbuild/llvmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ja_JP/kbuild/llvmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ko_KR/kbuild/llvmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/sp_SP/kbuild/llvmmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhL/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/kbuild/llvm.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(hDocumentation/kbuild/llvm.rsth]h)}(hhh]hDocumentation/kbuild/llvm.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h Translatorh]h Translator}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h+慕冬亮 Dongliang Mu h]h)}(h*慕冬亮 Dongliang Mu h](h慕冬亮 Dongliang Mu <}(hjhhhNhNubh reference)}(hdzm91@hust.edu.cnh]hdzm91@hust.edu.cn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:dzm91@hust.edu.cnuh1j'hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h使用 Clang/LLVM 构建 Linuxh]h使用 Clang/LLVM 构建 Linux}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jZhjWhhhhhK ubh)}(hG本文档介绍如何使用 Clang 和 LLVM 工具构建 Linux 内核。h]hG本文档介绍如何使用 Clang 和 LLVM 工具构建 Linux 内核。}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjWhhubjV)}(hhh](j[)}(h关于h]h关于}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jZhjxhhhhhKubh)}(hXLinux 内核传统上一直使用 GNU 工具链(如 GCC 和 binutils)进行编译。持续的工作使得 `Clang `_ 和 `LLVM `_ 工具可 作为可行的替代品。一些发行版,如 `Android `_、 `ChromeOS `_、`OpenMandriva `_ 和 `Chimera Linux `_ 使用 Clang 编译的内核。谷歌和 Meta 的数据中心 集群也运行由 Clang 编译的内核。h](hnLinux 内核传统上一直使用 GNU 工具链(如 GCC 和 binutils)进行编译。持续的工作使得 }(hjhhhNhNubj()}(h"`Clang `_h]hClang}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameClangrefurihttps://clang.llvm.org/uh1j'hjubhtarget)}(h h]h}(h]clangah ]h"]clangah$]h&]refurijuh1j referencedKhjubh 和 }(hjhhhNhNubj()}(h`LLVM `_h]hLLVM}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameLLVMjhttps://llvm.org/uh1j'hjubj)}(h h]h}(h]llvmah ]h"]llvmah$]h&]refurijuh1jjKhjubh< 工具可 作为可行的替代品。一些发行版,如 }(hjhhhNhNubj()}(h%`Android `_h]hAndroid}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameAndroidjhttps://www.android.com/uh1j'hjubj)}(h h]h}(h]androidah ]h"]androidah$]h&]refurijuh1jjKhjubh、 }(hjhhhNhNubj()}(h2`ChromeOS `_h]hChromeOS}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameChromeOSj$https://www.chromium.org/chromium-osuh1j'hjubj)}(h' h]h}(h]chromeosah ]h"]chromeosah$]h&]refurij uh1jjKhjubh、}(hjhhhNhNubj()}(h/`OpenMandriva `_h]h OpenMandriva}(hjhhhNhNubah}(h]h ]h"]h$]h&]name OpenMandrivajhttps://www.openmandriva.org/uh1j'hjubj)}(h h]h}(h] openmandrivaah ]h"] openmandrivaah$]h&]refurij-uh1jjKhjubh 和 }hjsbj()}(h-`Chimera Linux `_h]h Chimera Linux}(hj?hhhNhNubah}(h]h ]h"]h$]h&]name Chimera Linuxjhttps://chimera-linux.org/uh1j'hjubj)}(h h]h}(h] chimera-linuxah ]h"] chimera linuxah$]h&]refurijOuh1jjKhjubhj 使用 Clang 编译的内核。谷歌和 Meta 的数据中心 集群也运行由 Clang 编译的内核。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjxhhubh)}(h`LLVM 是由 C++ 对象实现的工具链组件集合 `_。 Clang 是 LLVM 的前端,支持 C 语言和内核所需的 GNU C 扩展,其发音为 "klang",而非 "see-lang"。h](j()}(h_`LLVM 是由 C++ 对象实现的工具链组件集合 `_h]h4LLVM 是由 C++ 对象实现的工具链组件集合}(hjkhhhNhNubah}(h]h ]h"]h$]h&]name4LLVM 是由 C++ 对象实现的工具链组件集合j%https://www.aosabook.org/en/llvm.htmluh1j'hjgubj)}(h( h]h}(h]llvm-cah ]h"]4llvm 是由 c++ 对象实现的工具链组件集合ah$]h&]refurij{uh1jjKhjgubh。 Clang 是 LLVM 的前端,支持 C 语言和内核所需的 GNU C 扩展,其发音为 “klang”,而非 “see-lang”。}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjxhhubeh}(h]id1ah ]h"]关于ah$]h&]uh1jUhjWhhhhhKubjV)}(hhh](j[)}(h使用 LLVM 构建h]h使用 LLVM 构建}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jZhjhhhhhKubh)}(h#通过以下命令调用 ``make``::h](h通过以下命令调用 }(hjhhhNhNubhliteral)}(h``make``h]hmake}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjhhubh literal_block)}(h make LLVM=1h]h make LLVM=1}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK"hjhhubh)}(h2为主机目标进行编译。对于交叉编译::h]h1为主机目标进行编译。对于交叉编译:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjhhubj)}(hmake LLVM=1 ARCH=arm64h]hmake LLVM=1 ARCH=arm64}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK&hjhhubeh}(h]id2ah ]h"]使用 llvm 构建ah$]h&]uh1jUhjWhhhhhKubjV)}(hhh](j[)}(h LLVM= 参数h]h LLVM= 参数}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jZhjhhhhhK)ubh)}(hyLLVM 有 GNU binutils 工具的替代品。这些工具可以单独启用。以下是支持的 make 变量 完整列表::h]hxLLVM 有 GNU binutils 工具的替代品。这些工具可以单独启用。以下是支持的 make 变量 完整列表:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjhhubj)}(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&]hhuh1jhhhK.hjhhubh)}(h#``LLVM=1`` 扩展为上述命令。h](j)}(h ``LLVM=1``h]hLLVM=1}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh 扩展为上述命令。}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK2hjhhubh)}(hn如果你的 LLVM 工具不在 PATH 中,你可以使用以斜杠结尾的 LLVM 变量提供它们的位置::h]hm如果你的 LLVM 工具不在 PATH 中,你可以使用以斜杠结尾的 LLVM 变量提供它们的位置:}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjhhubj)}(hmake LLVM=/path/to/llvm/h]hmake LLVM=/path/to/llvm/}hjYsbah}(h]h ]h"]h$]h&]hhuh1jhhhK6hjhhubh)}(hj这将使用 ``/path/to/llvm/clang``、``/path/to/llvm/ld.lld`` 等工具。也可以 使用以下命令::h](h 这将使用 }(hjghhhNhNubj)}(h``/path/to/llvm/clang``h]h/path/to/llvm/clang}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh、}(hjghhhNhNubj)}(h``/path/to/llvm/ld.lld``h]h/path/to/llvm/ld.lld}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh* 等工具。也可以 使用以下命令:}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK8hjhhubj)}(h$PATH=/path/to/llvm:$PATH make LLVM=1h]h$PATH=/path/to/llvm:$PATH make LLVM=1}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK;hjhhubh)}(h如果你的 LLVM 工具带有版本后缀,并且你希望测试该特定版本而非无后缀的可执行文件, 类似于 ``LLVM=1``,你可以使用 ``LLVM`` 变量传递该后缀::h](h如果你的 LLVM 工具带有版本后缀,并且你希望测试该特定版本而非无后缀的可执行文件, 类似于 }(hjhhhNhNubj)}(h ``LLVM=1``h]hLLVM=1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh,你可以使用 }(hjhhhNhNubj)}(h``LLVM``h]hLLVM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 变量传递该后缀:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK=hjhhubj)}(h make LLVM=-14h]h make LLVM=-14}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK@hjhhubh)}(h{这将使用 ``clang-14``、``ld.lld-14`` 等工具。为了支持带有版本后缀的树外路径组合, 我们建议::h](h 这将使用 }(hjhhhNhNubj)}(h ``clang-14``h]hclang-14}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh、}(hjhhhNhNubj)}(h ``ld.lld-14``h]h ld.lld-14}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhQ 等工具。为了支持带有版本后缀的树外路径组合, 我们建议:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKBhjhhubj)}(h'PATH=/path/to/llvm/:$PATH make LLVM=-14h]h'PATH=/path/to/llvm/:$PATH make LLVM=-14}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKEhjhhubh)}(h``LLVM=0`` 与省略 ``LLVM`` 完全不同,它将表现得像 ``LLVM=1``。如果你只希望使用 某些 LLVM 工具,请使用它们各自的 make 变量。h](j)}(h ``LLVM=0``h]hLLVM=0}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh 与省略 }(hj'hhhNhNubj)}(h``LLVM``h]hLLVM}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh# 完全不同,它将表现得像 }(hj'hhhNhNubj)}(h ``LLVM=1``h]hLLVM=1}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubhX。如果你只希望使用 某些 LLVM 工具,请使用它们各自的 make 变量。}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKGhjhhubh)}(h在通过不同命令配置和构建时,应为每次调用 ``make`` 设置相同的 ``LLVM=`` 值。如果 运行的脚本最终会调用 ``make``,则还应将 ``LLVM=`` 设置为环境变量。h](h=在通过不同命令配置和构建时,应为每次调用 }(hjghhhNhNubj)}(h``make``h]hmake}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh 设置相同的 }(hjghhhNhNubj)}(h ``LLVM=``h]hLLVM=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh- 值。如果 运行的脚本最终会调用 }(hjghhhNhNubj)}(h``make``h]hmake}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh,则还应将 }(hjghhhNhNubj)}(h ``LLVM=``h]hLLVM=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh 设置为环境变量。}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKJhjhhubeh}(h]id3ah ]h"] llvm= 参数ah$]h&]uh1jUhjWhhhhhK)ubjV)}(hhh](j[)}(h 交叉编译h]h 交叉编译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jZhjhhhhhKNubh)}(hX单个 Clang 编译器二进制文件(及其对应的 LLVM 工具)通常会包含所有支持的后端,这可以 简化交叉编译,尤其是使用 ``LLVM=1`` 时。如果仅使用 LLVM 工具,``CROSS_COMPILE`` 或目标三元组前缀就变得不必要。示例::h](h单个 Clang 编译器二进制文件(及其对应的 LLVM 工具)通常会包含所有支持的后端,这可以 简化交叉编译,尤其是使用 }(hjhhhNhNubj)}(h ``LLVM=1``h]hLLVM=1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% 时。如果仅使用 LLVM 工具,}(hjhhhNhNubj)}(h``CROSS_COMPILE``h]h CROSS_COMPILE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5 或目标三元组前缀就变得不必要。示例:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKPhjhhubj)}(hmake LLVM=1 ARCH=arm64h]hmake LLVM=1 ARCH=arm64}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKThjhhubh)}(h作为混合 LLVM 和 GNU 工具的示例,对于像 ``ARCH=s390`` 这样目前尚不支持 ``ld.lld`` 或 ``llvm-objcopy`` 的目标,你可以通过以下方式调用 ``make``::h](h6作为混合 LLVM 和 GNU 工具的示例,对于像 }(hjhhhNhNubj)}(h ``ARCH=s390``h]h ARCH=s390}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 这样目前尚不支持 }(hjhhhNhNubj)}(h ``ld.lld``h]hld.lld}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 或 }(hjhhhNhNubj)}(h``llvm-objcopy``h]h llvm-objcopy}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/ 的目标,你可以通过以下方式调用 }(hjhhhNhNubj)}(h``make``h]hmake}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKVhjhhubj)}(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}hjlsbah}(h]h ]h"]h$]h&]hhuh1jhhhKYhjhhubh)}(h此示例将调用 ``s390x-linux-gnu-ld.bfd`` 作为链接器和 ``s390x-linux-gnu-objcopy``,因此请确保它们在你的 ``$PATH`` 中。h](h此示例将调用 }(hjzhhhNhNubj)}(h``s390x-linux-gnu-ld.bfd``h]hs390x-linux-gnu-ld.bfd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh 作为链接器和 }(hjzhhhNhNubj)}(h``s390x-linux-gnu-objcopy``h]hs390x-linux-gnu-objcopy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh",因此请确保它们在你的 }(hjzhhhNhNubj)}(h ``$PATH``h]h$PATH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh 中。}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK\hjhhubh)}(h当 ``LLVM=1`` 未设置时,``CROSS_COMPILE`` 不会用于给 Clang 编译器二进制文件 (或相应的 LLVM 工具)添加前缀,而 GNU 工具则需要这样做。h](h当 }(hjhhhNhNubj)}(h ``LLVM=1``h]hLLVM=1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 未设置时,}(hjhhhNhNubj)}(h``CROSS_COMPILE``h]h CROSS_COMPILE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 不会用于给 Clang 编译器二进制文件 (或相应的 LLVM 工具)添加前缀,而 GNU 工具则需要这样做。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK_hjhhubeh}(h]id4ah ]h"] 交叉编译ah$]h&]uh1jUhjWhhhhhKNubjV)}(hhh](j[)}(hLLVM_IAS= 参数h]hLLVM_IAS= 参数}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jZhjhhhhhKcubh)}(hClang 可以编译汇编代码。你可以传递 ``LLVM_IAS=0`` 禁用此行为,使 Clang 调用 相应的非集成汇编器。示例::h](h1Clang 可以编译汇编代码。你可以传递 }(hj hhhNhNubj)}(h``LLVM_IAS=0``h]h LLVM_IAS=0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhI 禁用此行为,使 Clang 调用 相应的非集成汇编器。示例:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKehjhhubj)}(hmake LLVM=1 LLVM_IAS=0h]hmake LLVM=1 LLVM_IAS=0}hj)sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhhjhhubh)}(h在交叉编译时,你需要使用 ``CROSS_COMPILE`` 与 ``LLVM_IAS=0``,从而设置 ``--prefix=`` 使得编译器可以对应的非集成汇编器(通常,在面向另一种架构时, 你不想使用系统汇编器)。例如::h](h%在交叉编译时,你需要使用 }(hj7hhhNhNubj)}(h``CROSS_COMPILE``h]h CROSS_COMPILE}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh 与 }(hj7hhhNhNubj)}(h``LLVM_IAS=0``h]h LLVM_IAS=0}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh,从而设置 }(hj7hhhNhNubj)}(h ``--prefix=``h]h --prefix=}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh 使得编译器可以对应的非集成汇编器(通常,在面向另一种架构时, 你不想使用系统汇编器)。例如:}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKjhjhhubj)}(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&]hhuh1jhhhKnhjhhubeh}(h]llvm-iasah ]h"]llvm_ias= 参数ah$]h&]uh1jUhjWhhhhhKcubjV)}(hhh](j[)}(hCcacheh]hCcache}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jZhjhhhhhKqubh)}(h``ccache`` 可以与 ``clang`` 一起使用,以改善后续构建(尽管在不同构建之间 KBUILD_BUILD_TIMESTAMP_ 应设置为同一确定值,以避免 100% 的缓存未命中, 详见 Reproducible_builds_ 获取更多信息)::h](j)}(h ``ccache``h]hccache}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 可以与 }(hjhhhNhNubj)}(h ``clang``h]hclang}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhD 一起使用,以改善后续构建(尽管在不同构建之间 }(hjhhhNhNubj()}(hKBUILD_BUILD_TIMESTAMP_h]hKBUILD_BUILD_TIMESTAMP}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameKBUILD_BUILD_TIMESTAMPj"kbuild.html#kbuild-build-timestampuh1j'hjresolvedKubhK 应设置为同一确定值,以避免 100% 的缓存未命中, 详见 }(hjhhhNhNubj()}(hReproducible_builds_h]hReproducible_builds}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameReproducible_buildsj#reproducible-builds.html#timestampsuh1j'hjjKubh 获取更多信息):}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKshjhhubj)}(h7KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"h]h7KBUILD_BUILD_TIMESTAMP='' make LLVM=1 CC="ccache clang"}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKwhjhhubj)}(h>.. _KBUILD_BUILD_TIMESTAMP: kbuild.html#kbuild-build-timestamph]h}(h]kbuild-build-timestampah ]h"]kbuild_build_timestampah$]h&]jjuh1jhKhjhhhhjKubj)}(h<.. _Reproducible_builds: reproducible-builds.html#timestampsh]h}(h]reproducible-buildsah ]h"]reproducible_buildsah$]h&]jjuh1jhKhjhhhhjKubeh}(h]ccacheah ]h"]ccacheah$]h&]uh1jUhjWhhhhhKqubjV)}(hhh](j[)}(h支持的架构h]h支持的架构}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jZhj)hhhhhK}ubh)}(hXsLLVM 并不支持 Linux 内核所有可支持的架构,同样,即使 LLVM 支持某一架构,也并不意味着在 该架构下内核可以正常构建或工作。以下是当前 ``CC=clang`` 或 ``LLVM=1`` 支持的架构总结。 支持级别对应于 MAINTAINERS 文件中的 "S" 值。如果某个架构未列出,则表示 LLVM 不支持它 或存在已知问题。使用最新的稳定版 LLVM 或甚至开发版本通常会得到最佳结果。一个架构的 ``defconfig`` 通常预期能够良好工作,但某些配置可能存在尚未发现的问题。欢迎在以下 问题跟踪器中提交错误报告!h](hLLVM 并不支持 Linux 内核所有可支持的架构,同样,即使 LLVM 支持某一架构,也并不意味着在 该架构下内核可以正常构建或工作。以下是当前 }(hj:hhhNhNubj)}(h ``CC=clang``h]hCC=clang}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh 或 }(hj:hhhNhNubj)}(h ``LLVM=1``h]hLLVM=1}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubhX  支持的架构总结。 支持级别对应于 MAINTAINERS 文件中的 “S” 值。如果某个架构未列出,则表示 LLVM 不支持它 或存在已知问题。使用最新的稳定版 LLVM 或甚至开发版本通常会得到最佳结果。一个架构的 }(hj:hhhNhNubj)}(h ``defconfig``h]h defconfig}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh 通常预期能够良好工作,但某些配置可能存在尚未发现的问题。欢迎在以下 问题跟踪器中提交错误报告!}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj)hhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]jK uh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]jK uh1jhjubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(h架构h]h架构}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h 支持级别h]h 支持级别}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h``make`` 命令h](j)}(h``make``h]hmake}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 命令}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubhtbody)}(hhh](j)}(hhh](j)}(hhh]h)}(harmh]harm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h支持h]h支持}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj0ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h ``LLVM=1``h]j)}(hjLh]hLLVM=1}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhhhKhjGubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(harm64h]harm64}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjpubah}(h]h ]h"]h$]h&]uh1jhjmubj)}(hhh]h)}(h支持h]h支持}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjmubj)}(hhh]h)}(h ``LLVM=1``h]j)}(hjh]hLLVM=1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhexagonh]hhexagon}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h维护h]h维护}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h ``LLVM=1``h]j)}(hjh]hLLVM=1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(h loongarchh]h loongarch}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h维护h]h维护}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5 ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h ``LLVM=1``h]j)}(hjQ h]hLLVM=1}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubah}(h]h ]h"]h$]h&]uh1hhhhKhjL ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hmipsh]hmips}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhju ubah}(h]h ]h"]h$]h&]uh1jhjr ubj)}(hhh]h)}(h维护h]h维护}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjr ubj)}(hhh]h)}(h ``LLVM=1``h]j)}(hj h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjr ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hpowerpch]hpowerpc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h维护h]h维护}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h ``LLVM=1``h]j)}(hj h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hriscvh]hriscv}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj# ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h支持h]h支持}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj: ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h ``LLVM=1``h]j)}(hjV h]hLLVM=1}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT ubah}(h]h ]h"]h$]h&]uh1hhhhKhjQ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hs390h]hs390}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjz ubah}(h]h ]h"]h$]h&]uh1jhjw ubj)}(hhh]h)}(h维护h]h维护}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjw ubj)}(hhh]h)}(hB``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&]uh1jhj ubh (LLVM >= 18.1.0),}(hj hhhNhNubj)}(h ``CC=clang``h]hCC=clang}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh (LLVM < 18.1.0)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjw ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hum (用户模式)h]hum (用户模式)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h维护h]h维护}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h ``LLVM=1``h]j)}(hj h]hLLVM=1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hx86h]hx86}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj? ubah}(h]h ]h"]h$]h&]uh1jhj< ubj)}(hhh]h)}(h支持h]h支持}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjV ubah}(h]h ]h"]h$]h&]uh1jhj< ubj)}(hhh]h)}(h ``LLVM=1``h]j)}(hjr h]hLLVM=1}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp ubah}(h]h ]h"]h$]h&]uh1hhhhKhjm ubah}(h]h ]h"]h$]h&]uh1jhj< ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]colwidths-givenah"]h$]h&]uh1j~hj)hhhNhNubeh}(h]id5ah ]h"]支持的架构ah$]h&]uh1jUhjWhhhhhK}ubjV)}(hhh](j[)}(h 获取帮助h]h 获取帮助}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jZhj hhhhhKubh bullet_list)}(hhh](h list_item)}(h.`网站 `_h]h)}(hj h](j()}(hj h]h网站}(hj hhhNhNubah}(h]h ]h"]h$]h&]name网站j"https://clangbuiltlinux.github.io/uh1j'hj ubj)}(h% h]h}(h]id7ah ]h"]网站ah$]h&]refurij uh1jjKhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(hG`邮件列表 `_: h]h)}(hj h](j()}(h/`邮件列表 `_h]h 邮件列表}(hj hhhNhNubah}(h]h ]h"]h$]h&]name 邮件列表jhttps://lore.kernel.org/llvm/uh1j'hj ubj)}(h h]h}(h]id8ah ]h"] 邮件列表ah$]h&]refurij uh1jjKhj ubh: <}(hj hhhNhNubj()}(hllvm@lists.linux.devh]hllvm@lists.linux.dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:llvm@lists.linux.devuh1j'hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(hH`旧邮件列表档案 `_h]h)}(hjB h](j()}(hjB h]h旧邮件列表档案}(hjG hhhNhNubah}(h]h ]h"]h$]h&]name旧邮件列表档案j-https://groups.google.com/g/clang-built-linuxuh1j'hjD ubj)}(h0 h]h}(h]id9ah ]h"]旧邮件列表档案ah$]h&]refurijV uh1jjKhjD ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj@ ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(hD`问题跟踪器 `_h]h)}(hjr h](j()}(hjr h]h问题跟踪器}(hjw hhhNhNubah}(h]h ]h"]h$]h&]name问题跟踪器j/https://github.com/ClangBuiltLinux/linux/issuesuh1j'hjt ubj)}(h2 h]h}(h]id10ah ]h"]问题跟踪器ah$]h&]refurij uh1jjKhjt ubeh}(h]h ]h"]h$]h&]uh1hhhhKhjp ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h)IRC: #clangbuiltlinux 在 irc.libera.chath]h)}(hj h]h)IRC: #clangbuiltlinux 在 irc.libera.chat}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h<`Telegram `_: @ClangBuiltLinuxh]h)}(hj h](j()}(h*`Telegram `_h]hTelegram}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameTelegramjhttps://t.me/ClangBuiltLinuxuh1j'hj ubj)}(h h]h}(h]telegramah ]h"]telegramah$]h&]refurij uh1jjKhj ubh: @ClangBuiltLinux}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h9`维基 `_h]h)}(hj h](j()}(hj h]h维基}(hj hhhNhNubah}(h]h ]h"]h$]h&]name维基j-https://github.com/ClangBuiltLinux/linux/wikiuh1j'hj ubj)}(h0 h]h}(h]id11ah ]h"]维基ah$]h&]refurij uh1jjKhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h{`初学者问题 `_ h]h)}(hz`初学者问题 `_h](j()}(hj" h]h初学者问题}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]name初学者问题jehttps://github.com/ClangBuiltLinux/linux/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22uh1j'hj ubj)}(hh h]h}(h]id12ah ]h"]初学者问题ah$]h&]refurij3 uh1jjKhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1j hhhKhj hhubj)}(h.. _zh_cn_getting_llvm:h]h}(h]h ]h"]h$]h&]refidzh-cn-getting-llvmuh1jhKhj hhhhubeh}(h]id6ah ]h"] 获取帮助ah$]h&]uh1jUhjWhhhhhKubjV)}(hhh](j[)}(h 获取 LLVMh]h 获取 LLVM}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jZhji hhhhhKubh)}(hX我们在 `kernel.org `_ 提供预编译的稳定版 LLVM。 这些版本已经针对 Linux 内核构建,使用配置文件数据进行优化。相较于其他发行版中的 LLVM,它们应该 能提高内核构建效率。h](h 我们在 }(hjz hhhNhNubj()}(h2`kernel.org `_h]h kernel.org}(hj hhhNhNubah}(h]h ]h"]h$]h&]name kernel.orgj"https://kernel.org/pub/tools/llvm/uh1j'hjz ubj)}(h% h]h}(h] kernel-orgah ]h"] kernel.orgah$]h&]refurij uh1jjKhjz ubh 提供预编译的稳定版 LLVM。 这些版本已经针对 Linux 内核构建,使用配置文件数据进行优化。相较于其他发行版中的 LLVM,它们应该 能提高内核构建效率。}(hjz hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhji hhubh)}(hi以下是一些有助于从源代码构建 LLVM 或通过发行版的包管理器获取 LLVM 的链接。h]hi以下是一些有助于从源代码构建 LLVM 或通过发行版的包管理器获取 LLVM 的链接。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhji hhubj )}(hhh](j )}(h'https://releases.llvm.org/download.htmlh]h)}(hj h]j()}(hj h]h'https://releases.llvm.org/download.html}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1j'hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h$https://github.com/llvm/llvm-projecth]h)}(hj h]j()}(hj h]h$https://github.com/llvm/llvm-project}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1j'hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h)https://llvm.org/docs/GettingStarted.htmlh]h)}(hj h]j()}(hj h]h)https://llvm.org/docs/GettingStarted.html}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurij uh1j'hjubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h https://llvm.org/docs/CMake.htmlh]h)}(hj h]j()}(hj h]h https://llvm.org/docs/CMake.html}(hj%hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1j'hj"ubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(hhttps://apt.llvm.org/h]h)}(hjAh]j()}(hjAh]hhttps://apt.llvm.org/}(hjFhhhNhNubah}(h]h ]h"]h$]h&]refurijAuh1j'hjCubah}(h]h ]h"]h$]h&]uh1hhhhKhj?ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h5https://www.archlinux.org/packages/extra/x86_64/llvm/h]h)}(hjbh]j()}(hjbh]h5https://www.archlinux.org/packages/extra/x86_64/llvm/}(hjghhhNhNubah}(h]h ]h"]h$]h&]refurijbuh1j'hjdubah}(h]h ]h"]h$]h&]uh1hhhhKhj`ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h+https://github.com/ClangBuiltLinux/tc-buildh]h)}(hjh]j()}(hjh]h+https://github.com/ClangBuiltLinux/tc-build}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1j'hjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(hHhttps://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-sourceh]h)}(hjh]j()}(hjh]hHhttps://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1j'hjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(hIhttps://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/h]h)}(hjh]j()}(hjh]hIhttps://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1j'hjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubeh}(h]h ]h"]h$]h&]jS jT uh1j hhhKhji hhubeh}(h](j` id13eh ]h"]( 获取 llvmzh_cn_getting_llvmeh$]h&]uh1jUhjWhhhhhKexpect_referenced_by_name}jjU sexpect_referenced_by_id}j` jU subeh}(h]clang-llvm-linuxah ]h"]使用 clang/llvm 构建 linuxah$]h&]uh1jUhhhhhhhK ubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jZN generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_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_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_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]jareproducible_builds]jaurefids}j` ]jU asnameids}(jjjjjjjjjjjjj7j4jYjVjjjjjjjjjjj&j#jjjjj j jf jc j j j j j` j] j j j j j j j= j: jj` jjj j u nametypes}(jjjjjjj7jYjjjjjj&jjj jf j j j` j j j j= jjj uh}(jjWjjxjjjjjjjj j4j.jVjPjj|jjjjjjjjj#jjj jjj j)jc j j j j j j] jW j j j j j j j: j4 j` ji jji j j u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j/K sRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h8Hyperlink target "zh-cn-getting-llvm" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1juba transformerN include_log]0Documentation/translations/zh_CN/kbuild/llvm.rst(NNNNta decorationNhhub.