Next: , Up: Fragments


19.1 目标机Makefile片段

目标makefile片段能够设置这些Makefile变量。

LIBGCC2_CFLAGS
编译 libgcc2.c 时使用的编译器标记。
LIB2FUNCS_EXTRA
将被编译或汇编,并插入 libgcc.a 的源文件名列表。
Floating Point Emulation
要使GCC在 libgcc.a 中包括软浮点库,则使用下面的一些规则 来定义 FPBITDPBIT
          # We want fine grained libraries, so use the new code
          # to build the floating point emulation libraries.
          FPBIT = fp-bit.c
          DPBIT = dp-bit.c
          
          
          fp-bit.c: $(srcdir)/config/fp-bit.c
                  echo '#define FLOAT' > fp-bit.c
                  cat $(srcdir)/config/fp-bit.c >> fp-bit.c
          
          dp-bit.c: $(srcdir)/config/fp-bit.c
                  cat $(srcdir)/config/fp-bit.c > dp-bit.c

可能需要在 fp-bit.cdp-bit.c 的开始处提供额外的 #define来控制目标机大小端和其它选项。

CRTSTUFF_T_CFLAGS
编译 crtstuff.c 时使用的特定标记。参见Initialization
CRTSTUFF_T_CFLAGS_S
编译共享连接的 crtstuff.c 时使用的特定标记。用于在 EXTRA-PARTS 中使用 crtbeginS.ocrtendS.o 时。参见Initialization
MULTILIB_OPTIONS
对于一些目标机,使用不同方式调用GCC所产生的目标对象不能被一起连接。 例如,对于一些目标机,GCC可产生大端和小端代码。对于这些目标机,必须 安排编译多个版本的 libgcc.a,对应于每个不相兼容的选项集。当 GCC调用连接器时,它会根据使用的命令行选项来安排连接正确版本的 libgcc.a

MULTILIB_OPTIONS 宏列出了必须构建特定版本 libgcc.a 的 选项集。将互不兼容的选项并排写出,并由斜线分隔。将可以一起使用的选项 由空格分开。构建程序将会构建所有兼容选项的组合。

例如,如果将 MULTILIB_OPTIONS 设置为 ‘m68000/m68020 msoft-float’,Makefile 将会使用下列选项集 来构建特定版本的 libgcc.a-m68000, -m68020, -msoft-float, ‘-m68000 -msoft-float’, 和 ‘-m68020 -msoft-float’。

MULTILIB_DIRNAMES
如果使用了 MULTILIB_OPTIONS,该变量指定了用于存放不同库的目录名。 MULTILIB_OPTIONS 中的每个元素,对应于 MULTILIB_DIRNAMES 中 的每个元素。如果没有使用 MULTILIB_DIRNAMES,缺省值将为 MULTILIB_OPTIONS,并使用斜线来替代空格。

例如,如果 MULTILIB_OPTIONS 设置为 ‘m68000/m68020 msoft-float’, 则 MULTILIB_DIRNAMES 的缺省值为 ‘m68000 m68020 msoft-float’。 如果需要不同的目录名时,可以指定不同的值。

MULTILIB_MATCHES
有时,相同的选项可以被写成两种不同的方式。如果一个选项在 MULTILIB_OPTIONS 式列出,GCC需要知道它的任何同义形式。这种情况下, 将 MULTILIB_MATCHES 设置为 ‘option=option’ 形式的列表来描述 所有相关的同义词。例如,‘m68000=mc68000 m68020=mc68020’。
MULTILIB_EXCEPTIONS
有时,当 MULTILIB_OPTIONS 中指定了多个选项集时,会有些组合不能被 构建。这种情况下,将 MULTILIB_EXCEPTIONS 设置为所有不被构建的例外。

例如ARM处理器不能执行同时执行硬件浮点指令和缩减大小的THUMB指令,这样就没 有必要构建这些选项组合的库。因此将 MULTILIB_EXCEPTIONS 设为:

          *mthumb/*mhard-float*


MULTILIB_EXTRA_OPTS
有时当构建多版本 libgcc.a 时,有些选项需要总是被传给编译器。这种情 况下,将 MULTILIB_EXTRA_OPTS 设置为用于所有构建时的选项列表。如果设 置了该宏,则可能要将 CRTSTUFF_T_CFLAGS 设置为跟在其后的破折号。
NATIVE_SYSTEM_HEADER_DIR
如果系统头文件的缺省位置不是 /usr/include,则必须将该宏设置为包含头 文件的目录。该值应该匹配 SYSTEM_INCLUDE_DIR 宏的值。
SPECS
不幸的是,设置 MULTILIB_EXTRA_OPTS 并不足够,因为它并不影响目标库的 构建,最起码对于缺省multilib的构建是这样的。一种可能的方法是使用 DRIVER_SELF_SPECSspecs 文件中取得选项,就像是它们被传给了 编译器驱动程序的命令行。但是,你不想在安装工具链之后再增加这些选项,所以你 可以在安装原始的内嵌 specs 时,调节在构建工具链时使用的 specs 文件。诀窍是将 SPECS 设置为其它文件名(例如 specs.install), 然后该文件将会由内建 specs 创建出来,并且引出一个 Makefile 规 则来生成 specs 文件,在构建时候使用。
T_CFLAGS
These are extra flags to pass to the C compiler. They are used both when building GCC, and when compiling things with the just-built GCC. This variable is deprecated and should not be used.