TOOLCHAIN-FUNCS.ECLASS

节:eclass-manpages (5)
更新时间:2024 年 11 月
索引 返回主内容

名称

toolchain-funcs.eclass - 查询工具链的常见信息的函数

描述

toolchain-funcs 旨在提供一套完整的函数,用于获取有关工具链的有用信息,并简化交叉编译和多库等复杂操作。所有这些操作都以一种方式完成,即你可以依赖该函数始终返回合理的值。

支持的 EAPIS

7 8

函数

tc-getAR [工具链前缀]
返回值:存档器的名称
tc-getAS [工具链前缀]
返回值:汇编器的名称
tc-getCC [工具链前缀]
返回值:C 编译器的名称
tc-getCPP [工具链前缀]
返回值:C 预处理器的名称
tc-getCXX [工具链前缀]
返回值:C++ 编译器的名称
tc-getLD [工具链前缀]
返回值:链接器的名称
tc-getSTRINGS [工具链前缀]
返回值:strings 程序的名称
tc-getSTRIP [工具链前缀]
返回值:strip 程序的名称
tc-getNM [工具链前缀]
返回值:符号/对象程序的名称
tc-getRANLIB [工具链前缀]
返回值:存档索引器的名称
tc-getREADELF [工具链前缀]
返回值:ELF 阅读器的名称
tc-getOBJCOPY [工具链前缀]
返回值:对象复制器的名称
tc-getOBJDUMP [工具链前缀]
返回值:对象转储器的名称
tc-getF77 [工具链前缀]
返回值:Fortran 77 编译器的名称
tc-getFC [工具链前缀]
返回值:Fortran 90 编译器的名称
tc-getGCJ [工具链前缀]
返回值:Java 编译器的名称
tc-getGO [工具链前缀]
返回值:Go 编译器的名称
tc-getPKG_CONFIG [工具链前缀]
返回值:pkg-config 工具的名称
tc-getRC [工具链前缀]
返回值:Windows 资源编译器的名称
tc-getDLLWRAP [工具链前缀]
返回值:Windows dllwrap 实用程序的名称
tc-getBUILD_AR [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的存档器的名称
tc-getBUILD_AS [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的汇编器的名称
tc-getBUILD_CC [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的 C 编译器的名称
tc-getBUILD_CPP [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的 C 预处理器的名称
tc-getBUILD_CXX [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的 C++ 编译器的名称
tc-getBUILD_LD [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的链接器的名称
tc-getBUILD_STRINGS [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的 strings 程序的名称
tc-getBUILD_STRIP [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的 strip 程序的名称
tc-getBUILD_NM [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的符号/对象程序的名称
tc-getBUILD_RANLIB [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的存档索引器的名称
tc-getBUILD_READELF [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的 ELF 阅读器的名称
tc-getBUILD_OBJCOPY [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的对象复制器的名称
tc-getBUILD_PKG_CONFIG [工具链前缀]
返回值:用于构建在构建机器上运行的二进制文件的 pkg-config 工具的名称
tc-getTARGET_CPP [工具链前缀]
返回值:正在构建(或使用)的工具链的 C 预处理器的名称
tc-export <工具链变量列表>
一种快速方法,用于一次导出多个编译器变量。
tc-is-cross-compiler
返回值:如果我们使用的是交叉编译器,则为 shell true,否则为 shell false
tc-cpp-is-true <条件> [cpp 标记]
使用 CTARGET 的 C 预处理器(如果已定义)或 CHOST 来评估给定的条件。附加参数将传递给 cpp 命令。典型的条件将采用 defined(__FOO__) 的形式。

返回值:如果条件为真,则为 shell true,否则为 shell false。

tc-detect-is-softfloat
通过检查工具链的输出(如果可能)来检测 CTARGET(或 CHOST)工具链是否基于软浮点。如果检测到,则输出与 tc-is-softfloat 相似的值。

返回值:如果检测到,则为 shell true,否则为 shell false

tc-tuple-is-softfloat
仅根据元组来确定 CTARGET(或 CHOST)工具链是否基于软浮点。

返回值:有关可能的值,请参见 tc-is-softfloat。

tc-is-softfloat
查看此工具链是否基于软浮点。
The possible return values:
 - only:   the target is always softfloat (never had fpu)
 - yes:    the target should support softfloat
 - softfp: (arm specific) the target should use hardfloat insns, but softfloat calling convention
 - no:     the target doesn't support softfloat
这使我们能够在软件包在支持可选的情况下接受软浮点标记时做出不同的反应,但在目标始终缺乏 FPU 的情况下拒绝软浮点标记。
tc-is-static-only
如果目标不支持共享库,则返回 shell true,否则返回 shell false。
tc-stack-grows-down
如果堆栈向下增长,则返回 shell true。这是大多数系统上的默认行为,通常项目不应该关心此类内部细节。
tc-export_build_env [编译器变量]
导出与构建相关的常见编译器设置。
tc-env_build <命令> [命令参数]
将编译环境设置为构建工具,然后执行指定的命令。我们在这里使用 tc-getBUILD_XX,以便我们使用所有半[非]标准环境变量(如 $BUILD_CC),而目标构建系统通常不会检查这些环境变量。
econf_build [econf 标记]
有时我们需要在 CBUILD 上本地构建一些工具,因为该软件包包含在编译时进行编译和执行的辅助实用程序。在交叉编译时,这将不起作用,因为 CHOST 设置为我们无法本地执行的目标。

例如,python 软件包将使用便携式构建系统(configure+make)构建本地 python 二进制文件,但随后使用该二进制文件运行本地 python 脚本以构建 python 的其他组件。我们不能依赖 $PATH 中的 python 二进制文件,因为该二进制文件通常是不同版本的,甚至根本没有安装。相反,我们在 CBUILD 上运行的另一个目录中编译代码,然后在编译在 CHOST 上运行的主软件包时使用该二进制文件。

例如,使用较新的 EAPIS,你可以执行以下操作:

src_configure() {
        ECONF_SOURCE=${S}
        if tc-is-cross-compiler ; then
                mkdir "${WORKDIR}"/${CBUILD} || die
                pushd "${WORKDIR}"/${CBUILD} >/dev/null || die
                econf_build --disable-some-unused-stuff
                popd >/dev/null || die
        fi
        ... normal build paths ...
}
src_compile() {
        if tc-is-cross-compiler ; then
                pushd "${WORKDIR}"/${CBUILD} >/dev/null || die
                emake one-or-two-build-tools
                ln/mv build-tools to normal build paths in ${S}/ || die
                popd >/dev/null || die
        fi
        ... normal build paths ...
}
tc-ld-is-bfd [工具链前缀]
如果当前链接器设置为 GNU bfd,则返回 true。
tc-ld-is-gold [工具链前缀]
如果当前链接器设置为 gold,则返回 true。
tc-ld-is-lld [工具链前缀]
如果当前链接器设置为 lld,则返回 true。
tc-ld-is-mold [工具链前缀]
如果当前链接器设置为 mold,则返回 true。
tc-ld-disable-gold [工具链前缀]
如果当前选择了 gold 链接器,请配置编译设置,以便我们使用旧的 bfd 链接器。
tc-ld-force-bfd [工具链前缀]
如果当前选择了 bfd 以外的链接器,请配置编译设置,以便我们使用 bfd 链接器。此函数不应用于简单的解除链接问题。此函数旨在用于软件包很脆弱或依赖 bfd 内部机制的情况。
tc-check-openmp
测试当前编译器是否支持 OpenMP,并在出现错误时使用清晰的错误消息退出,告诉用户如何纠正 ebuild 请求的缺少的 OpenMP 支持。

你应该在 pkg_pretend 中测试任何必需的 OpenMP 支持,以便警告用户需要更改工具链。你还必须在构建时检查 OpenMP 支持,例如:

pkg_pretend() {
        [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}

pkg_setup() {
        [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
tc-has-tls [-s|-c|-l] [工具链前缀]
查看工具链是否支持线程本地存储 (TLS)。使用 -s 测试编译器,使用 -c 测试汇编器,使用 -l 测试 C 库(默认值)。
tc-arch-kernel [工具链前缀]
返回值:根据编译器目标的内核架构的名称
tc-arch [工具链前缀]
返回值:根据编译器目标的 portage 架构的名称
tc-endian [工具链前缀]
接受 'host' 作为参数,默认值为 CTARGET,如果未指定,则回退到 CHOST。返回 'big' 或 'little',具体取决于 'host' 是大端还是小端。

返回值:对应于传递的(或主机)字节序的 'big' 或 'little'

tc-get-compiler-type
返回值:标识编译器的关键字:gcc、clang、pathcc、unknown
tc-is-gcc
返回值:如果当前编译器是 GCC,则为 shell true,否则为 shell false。
tc-is-clang
返回值:如果当前编译器是 clang,则为 shell true,否则为 shell false。
gcc-fullversion
返回值:编译器版本(major.minor.micro: [3.4.6])
gcc-version
返回值:编译器版本(major.minor: [3.4].6)
gcc-major-version
返回值:主要编译器版本(major: [3].4.6)
gcc-minor-version
返回值:次要编译器版本(minor: 3.[4].6)
gcc-micro-version
返回值:微型编译器版本(micro: 3.4.[6])
clang-fullversion
返回值:编译器版本(major.minor.micro: [3.4.6])
clang-version
返回值:编译器版本(major.minor: [3.4].6)
clang-major-version
返回值:主要编译器版本(major: [3].4.6)
clang-minor-version
返回值:次要编译器版本(minor: 3.[4].6)
clang-micro-version
返回值:微型编译器版本(micro: 3.4.[6])
tc-enables-cxx-assertions
如果当前编译器在 C++ 标准库中启用断言,则返回 true。对于 libstdc++,这是 -D_GLIBCXX_ASSERTIONS,对于 libcxx/libc++,这是 -D_LIBCPP_ENABLE_ASSERTIONS(已弃用)或 -D_LIBCPP_ENABLE_HARDENED_MODE。

返回值:如果当前编译器在 C++ 标准库中启用断言,则返回 true

tc-enables-pie
如果当前编译器生成可链接到可执行文件的与位置无关代码 (PIC),则返回真。

返回值:如果当前编译器生成可链接到可执行文件的与位置无关代码 (PIC),则返回真。

tc-enables-fortify-source
如果当前编译器在任何级别 (-D_FORTIFY_SOURCE) 启用加固 (FORTIFY_SOURCE),则返回真。

返回值:如果当前编译器在任何级别启用 FORTIFY_SOURCE,则返回真。

tc-enables-ssp
如果当前编译器在与以下任何选项对应的级别上启用堆栈粉碎保护 (SSP),则返回真。
 -fstack-protector
 -fstack-protector-strong
 -fstack-protector-all

返回值:如果当前编译器在至少最低级别启用堆栈粉碎保护 (SSP),则返回真。

tc-enables-ssp-strong
如果当前编译器在与以下任何选项对应的级别上启用堆栈粉碎保护 (SSP),则返回真。
 -fstack-protector-strong
 -fstack-protector-all

返回值:如果当前编译器在至少中等级别启用堆栈粉碎保护 (SSP),则返回真。

tc-enables-ssp-all
如果当前编译器在与以下任何选项对应的级别上启用堆栈粉碎保护 (SSP),则返回真。
 -fstack-protector-all

返回值:如果当前编译器在最高级别启用堆栈粉碎保护 (SSP),则返回真。

gen_usr_ldscript [-a] <要为其创建链接器脚本的库列表>
此函数已弃用。请使用 usr-ldscript.eclass 中的版本。
tc-get-cxx-stdlib
尝试识别编译器使用的 C++ 标准库。如果识别出库,则函数返回 0 并打印以下内容之一

- ``libc++`` 用于 ``sys-libs/libcxx`` - ``libstdc++`` 用于 ``sys-devel/gcc`` 的 libstdc++

如果未识别出库,则函数返回 1。

tc-get-c-rtlib
尝试识别 C/C++ 编译器使用的运行时。如果识别出运行时,则函数返回 0 并打印以下内容之一

- ``compiler-rt`` 用于 ``sys-libs/compiler-rt`` - ``libgcc`` 用于 ``sys-devel/gcc`` 的 libgcc

如果未识别出运行时,则函数返回 1。

tc-get-ptr-size
返回值:CHOST 的指针大小(以字节为单位)(例如 4 或 8)。
tc-get-build-ptr-size
返回值:CBUILD 的指针大小(以字节为单位)(例如 4 或 8)。
tc-is-lto
返回值:如果我们使用 LTO,则为 shell true,否则为 shell false。
tc-has-64bit-time_t
返回值:如果 time_t 至少为 64 位长,则为 shell true,否则为 false。

维护者

工具链忍者 <[email protected]>

报告错误

请通过 https://bugs.gentoo.org/ 报告错误。

文件

toolchain-funcs.eclass

另请参见

ebuild(5)
https://gitweb.gentoo.org/repo/gentoo.git/log/eclass/toolchain-funcs.eclass


索引

名称
描述
支持的 EAPIS
函数
维护者
报告错误
文件
另请参见

本文档由 man2html 使用手册页创建。
时间:2024 年 11 月 12 日,格林威治标准时间 03:27:02