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

相关推荐
慕容晓开1 小时前
c++,优先队列
数据结构·c++·算法
屁股割了还要学2 小时前
【计算机网络入门】初学计算机网络(十)(重要)
c语言·学习·计算机网络·考研·网络安全
最后一个bug2 小时前
一种事件驱动的设计模式-Reactor 模型
linux·c语言·arm开发·算法·设计模式
Neil__Hu2 小时前
Go的基本语法学习与练习
java·c语言·c++·python·qt·学习·golang
彬sir哥2 小时前
水仙花数(华为OD)
java·c语言·javascript·c++·python·算法
别NULL2 小时前
机试题——通讯录合并
c++·算法
鱼不如渔2 小时前
《C++ primer》第二章
开发语言·c++
_GR3 小时前
Qt开发⑪Qt网络+Qt音视频_使用实操
开发语言·c++·qt
小韩学长yyds3 小时前
解锁STM32外设:开启嵌入式开发新世界
c++·stm32