新闻  |   论坛  |   博客  |   在线研讨会
Build GCC笔记
xinjinlong | 2016-03-13 18:44:17    阅读:701   发布文章

在恰逢GCC6.0发布的日子里,刚好前两天在折腾GCC Build自己的GCC

GCC的Source Code 是从ARM分支获取的,具体HOST的环境配置,ARM给的手册说毕竟清楚,我主要是使用该ource Code Build 自己的MIPS GCC

当前MIPS这块主要参考的是mips-sde-elf文档

中间修改的主要内容就不做多的叙述,主要说一下t-sde(src/gcc/gcc/config/mips-tsde)文件里面的内容:

MULTILIB_OPTIONS

对于一些目标机,使用不同方式调用GCC所产生的目标对象不能被一起连接。

例如,对于一些目标机,GCC可产生大端(EB)和小端(EL)代码。对于这些目标机,必须安排编译多个版本的libgcc.a,对应于每个不相兼容的选项集。

当GCC调用连接器时,它会根据使用的命令行选项来安排连接正确版本的libgcc.a。


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

例如,如果将MULTILIB_OPTIONS设置为‘ EL/EB msoft-float’,

Makefile将会使用下列选项集来构建特定版本的libgcc.a:-mel, -meb, -msoft-float, ‘-mel -msoft-float’, 和‘-meb -msoft-float’。

也就是说大小端都有软浮点

针对MIPS MULTILIB_OPTIONS = EL/EB mips32/mips32r2/mips64/mips64r2 msoft-float/mfp64

看得比较清晰分的是 大小端 、指令集、浮点


MULTILIB_DIRNAMES

如果使用了MULTILIB_OPTIONS,该变量指定了用于存放不同库的目录名。MULTILIB_OPTIONS中的每个元素,对应于MULTILIB_DIRNAMES中的每个元素。

如果没有使用MULTILIB_DIRNAMES,缺省值将为MULTILIB_OPTIONS,并使用斜线来替代空格。

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

实际上目录的个数是遵顼{-mips2,-mips3} x {-EB,-EL} x {-mhard-float,-msoft-float}

抛开有些不可以组合不说 MULTILIB_DIRNAMES中的目录,左边目录都必须包含右边的目录,也就是右边的都是左边的子集MULTILIB_OPTIONS 实际已经可以决定有多少目录了

针对MIPS MULTILIB_DIRNAMES = el eb mips32 mips32r2 mips64 mips64r2 sof f64


MULTILIB_MATCHES

有时,相同的选项可以被写成两种不同的方式。如果一个选项在MULTILIB_OPTIONS式列出,GCC需要知道它的任何同义形式。

这种情况下,将MULTILIB_MATCHES设置为‘option=option’形式的列表来描述所有相关的同义词。例如,‘EL=mel EB=meb fPIC=fpic’。


MULTILIB_EXCEPTIONS

有时,当MULTILIB_OPTIONS中指定了多个选项集时,会有些组合不能被构建,刚才前面也提到过。这种情况下,将MULTILIB_EXCEPTIONS设置为所有不被构建的例外。

比如MIPS处理器,只有mips32r2支持mfp64,这样就可以写  MULTILIB_EXCLUSIONS = !mips32r2/mfp64

还有,我在Build时候Add的abi & pic模块,我需要这样两个用的时候是一起用的,所以我的组合有:

MULTILIB_EXCEPTIONS = EL/fPIC*

MULTILIB_EXCEPTIONS += fPIC*

这就是大小端都不出现PIC,因为我们说PIC仅仅出现在ABI模块里,当然'*'通配符就不说

当前GCC也是博大精深,对我来说也就是仅仅知道其中的一部分,上面说的也是比较核心的内容

当前要Build自己合适GCC,中间还有好多步骤要注意,不仅仅就那么简单而已,中间包括,Build 脚本的修改,Link一些自己的内容等,还有好多都需要注意的


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
五湖四海皆朋友
最近文章
浅谈MIPS的MMU(二)
2016-08-16 19:33:41
浅谈MIPS的MMU(一)
2016-05-05 10:55:06
推荐文章
最近访客