编译并测试Native GCC

本文简单介绍如何在Ubuntu x86下编译并测试native GCC。

在编译GCC之前,先介绍一个概念——bootstrap。

bootstrap就是自己编译自己,或者说用GCC编译GCC本身。GCC的bootstrap分三个阶段,具体如下:

  1. 用系统提供的编译器编译GCC源代码,得到GCC编译器;
  2. 用步骤1得到的GCC编译同一份GCC源代码,又得到一套GCC编译器
  3. 用步骤2得到的GCC编译同一份GCC源代码,第三次得到一套GCC编译器

最后比较步骤2和步骤3得到的两套编译器是否相同,如果相同,则bootstrap成功;否则失败。

编译GCC,首先需要在系统里安装可用的编译器和相关的开发包,在本文中,我们使用Ubuntu预装的GCC作为编译器,来编译我们手上的GCC源代码。

sudo apt-get install build-essential bison flex libncurses5-dev \
  texinfo gawk gettext libtool libgmp3-dev libmpfr-dev libmpc-dev

然后就是configure和make。由于默认情况下,编译出来的GCC支持多种语言,除了常见的C/C++之外,还有fortran、java和objc等等,因此整个编译过程耗时很长,通常可以只选择我们关心的语言,如C/C++。注:LTO(Link Time Optimization)并非是一种语言,而是编译C/C++程序的一种方式。

cd build
../gcc-src/configure --prefix=/home/liang/bin/gcc --enable-languages=c,c++,lto
make -j 4 # 并行编译,参数根据具体环境选择

bootstrap对于开发GCC来说并不是必需的,使用如下命令,可以编译一份可调试的GCC,且只编译一次。

make STAGE1_CFLAGS='-g3 -O0' all-stage1

如果需要调试g++(更准确地说,调试cc1plus),那么使用如下configure命令,make命令同上。

../gcc-src/configure --prefix=/home/liang/bin/gcc --enable-stage1-languages=c,c++ \
  --enable-languages=c,c++

bootstrap本身就是一个非常好的测试,因为GCC本身就是一个非常复杂的应用程序。另外,GCC源代码中还包含测试集,使用方法如下:

sudo apt-get install autogen
cd build
make check

或者

cd build/gcc
make check-gcc # 测试C和C++
make check-g++ # 只测试C++

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据