GCC RISCV 后端 -- GCC 构建系统简介

前文提过,GNU 的项目一般都是使用 GNU Autotools 来实现它们的构建系统,其主要目的是通过 GNU Autotools 对不同平台(Target Triple: <CPU ARCH>-<Vendor>-<OS>-<ABI>)进行抽象,使得GNU Autotools实现的构建系统可以适配不同的平台,减少由于平台差异导致维护工作量。

由此,GCC (GNU Compiler Collection) 项目也不例外。其实,GCC 原名为 GNU C Compiler,因此,该项目从设计之初主要支持C语言及其派生语言(C++\ObjC等)。这样使得其GCC的设计是针对C语言的,即 前端中间语言 GENERIC - Tree。把握这个核心,就容易分解GCC代码的设计了。

回到,GCC构建系统,分两部分,一是配置( configure),二是构建(make)。其配置脚本的源代码是在gcc目录下的 configure.ac。使用 autoconf 或 autoreconf 命令,将 configure.ac 转换成 configure (shell 脚本)。其主要作用是1. 检测系统是否满足构建的需要;2. 配置构建参数。

其中,会调用 config.build, config.host, 和 config.gcc 脚本 分别对 构建机器(build machine),运行机器(host machine)以及 目标机器(Target machine)进行配置。

其中,目标变量( $target ) 由 AC_CANONICAL_TARGET 定义,其值为 <target_cpu>-<target_vendor>-<target_os>。

在通过 configure 脚本配置完毕后,对应的 makefile.in 会被转换成 makefile,同时 makefile 会包含在 configure 脚本配置的 makefile 片段 (fragment),如下:

此时就可以了解大概的构建系统结构了。感兴趣的读者可以顺着上述的轮廓,查看对应的源代码,即 configure.acmakefile.in

相关推荐
樱木Plus1 天前
深拷贝(Deep Copy)和浅拷贝(Shallow Copy)
c++
RuoZoe3 天前
重塑WPF辉煌?基于DirectX 12的现代.NET UI框架Jalium
c语言
blasit3 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
肆忆_4 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星4 天前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛6 天前
delete又未完全delete
c++
祈安_6 天前
C语言内存函数
c语言·后端
端平入洛7 天前
auto有时不auto
c++
norlan_jame8 天前
C-PHY与D-PHY差异
c语言·开发语言
哇哈哈20218 天前
信号量和信号
linux·c++