欢迎光临!
若无相欠,怎会相见

构建 GCC-1.27

转载声明

转载链接:http://kristerw.blogspot.com/2019/01/building-gcc-127.html

转载日期:2024-04-27  22:21:55

正文

GCC 1.27 于 1988 年发布,是支持 x86 CPU 的 GCC 的第一个版本。我认为让它在我的台式电脑上工作会很有趣。

米哈伊尔·马尔采夫(Mikhail Maltsev)不久前写了一篇关于这个问题的精彩博客文章“在现代系统上构建和使用一个29岁的编译器”。我以 Mikhail 的工作为起点,但我是在 64 位 Ubuntu 系统上构建的,所以我需要更新在 64 位操作系统上运行的路径和 as / ld 选项,而且我遇到了更大的问题,因为古老的 GCC 不理解系统标头。我还启用了 DBX 调试格式,而不是 GDB 无法理解的 UNIX/32V SDB 格式。但我不需要对米哈伊尔的补丁进行那么大的改动。

令人惊讶的是,现代汇编程序、链接器和调试器可以毫无问题地处理 GCC 1.27 生成的代码。以及命令选项,如 -O 、 -E 、 -S 、 -c 、 -g -W -pedantic -fomit-frame-pointer 、 和 执行您对使用新式 GCC 的期望。所有选项都记录在手册页中 – 您可以通过将 gcc.1 文件传递给 man

man -l gcc.1

如何在 Ubuntu 上构建 GCC 1.27

我在 64 位 Ubuntu Desktop 16.04 上构建了编译器,如下所述。

先决条件

GCC 1.27 是一个 32 位程序,因此我们需要安装 32 位编译器和运行时支持

sudo apt install gcc-multilib

下载和准备源代码

下载源代码和补丁,并将补丁应用为

wget https://gcc.gnu.org/pub/gcc/old-releases/gcc-1/gcc-1.27.tar.bz2
wget https://gist.github.com/kristerw/b854b6d285e678452a44a6bcbf7ef86f/raw/gcc-1.27.patch
tar xf gcc-1.27.tar.bz2 
cd gcc-1.27
patch -p1 < ../gcc-1.27.patch

配置源代

编译器是通过设置指向正确配置文件的符号链接来配置的

ln -s config-i386v.h config.h
ln -s tm-i386v.h tm.h
ln -s i386.md md
ln -s output-i386.c aux-output.c

您可能希望通过更新 bindirlibdir Makefile .我将它们设置为

bindir = /home/kristerw/compilers/gcc-1.27/bin
libdir = /home/kristerw/compilers/gcc-1.27/lib

构建和安装

编译器分两个(或三个)阶段构建,我们首先使用系统编译器构建它

make

然后,我们使用新构建的编译器再次构建它

make stage1
make CC=stage1/gcc CFLAGS="-O -Bstage1/ -Iinclude"

作为第三个可选步骤,我们使用第二个编译器再次构建它,并检查生成的二进制文件是否与第二个编译器相同(如果不是,则编译器已错误编译自身)。

make stage2
make CC=stage2/gcc CFLAGS="-O -Bstage2/ -Iinclude"
diff cpp stage2/cpp
diff gcc stage2/gcc
diff cc1 stage2/cc1

我们现在可以安装编译器了

make install
赞(0) 打赏
转载请注明:飘零博客 » 构建 GCC-1.27
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临