找回密码
 立即注册
查看: 394|回复: 5

GCC编译器学习记录贴

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2979

回帖

6355

积分

荣誉版主

无情的代码机器

积分
6355
发表于 2025-7-6 23:11:21 | 显示全部楼层 |阅读模式

打开编译器源码看看里面有什么~
gcc-15.1.0.tar.gz (163.38 MB, 下载次数: 11)
sdcc-src-4.5.0.tar.bz2 (19.36 MB, 下载次数: 11)


gcc依赖(放gcc-15.1.0根目录):
gettext-0.22.tar.gz (24.9 MB, 下载次数: 13)
gmp-6.2.1.tar.bz2 (2.38 MB, 下载次数: 12)
mpfr-4.1.0.tar.bz2 (1.67 MB, 下载次数: 9)
mpc-1.2.1.tar.gz (819.07 KB, 下载次数: 13)
isl-0.24.tar.bz2 (2.16 MB, 下载次数: 18)

截图202507062310143640.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

3

主题

2031

回帖

910

积分

等待验证会员

积分
910
发表于 2025-7-6 23:12:00 | 显示全部楼层
作为国芯人工智能团队的一员,针对“GCC编译器学习记录贴”,我们对该帖子中提到的GCC源码结构、依赖关系等内容进行专业分析,并结合实际应用场景提供技术参考与建议。

GCC(GNU Compiler Collection)是开源世界中最为重要的编译器工具链之一,广泛应用于嵌入式系统、操作系统开发及高性能计算等领域。从源码层面深入理解GCC,有助于开发者掌握编译原理、优化策略以及平台适配技巧,尤其在国产化替代和自主可控的背景下具有重要意义。

从帖子中提供的截图可见,用户已获取GCC 15.10版本的源码目录结构及部分依赖文件。GCC源码目录通常包含多个子模块,如gcc/(核心编译器逻辑)、libiberty/(辅助库)、gmp/、mpfr/、isl/等第三方依赖。这些依赖项在构建过程中起到关键作用,例如GMP用于大整数运算,MPFR支持高精度浮点计算,而ISL则用于整数线性规划优化。

在实际构建过程中,确保依赖版本的兼容性至关重要。例如,GCC 15.10可能依赖于特定版本的GMP、MPFR和ISL,若版本不匹配,可能导致编译失败或运行时错误。因此,在构建前应检查各依赖库的版本是否符合官方推荐配置。

此外,GCC源码中包含大量与目标架构相关的代码,如target.h、config/目录下的配置文件等。对于国产芯片架构(如RISC-V、ARM等),需要根据具体指令集对GCC进行定制化配置,包括添加新的后端支持、优化代码生成策略等。

综上所述,GCC源码的学习与研究不仅有助于提升编译器理解能力,也为后续的工具链开发、性能优化及国产化适配提供了坚实基础。建议开发者结合官方文档与社区资源,逐步深入GCC内部机制,同时关注其在不同平台上的应用实践。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2979

回帖

6355

积分

荣誉版主

无情的代码机器

积分
6355
发表于 2025-7-7 22:53:38 | 显示全部楼层
此层向楼上点下载的 四位 好汉致敬~




-------------------------------------这是一条分割线---------------------------------------------

先用Ai介绍下项目结构:
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2979

回帖

6355

积分

荣誉版主

无情的代码机器

积分
6355
发表于 2025-7-7 22:58:41 | 显示全部楼层

SDCC 编译器项目目录结构

项目概述

SDCC (Small Device C Compiler) 是一个开源的、可重定向的 ANSI C 编译器套件,支持多种微控制器架构。

根目录文件

构建和配置文件

  • configure - 自动配置脚本 (321KB)
  • configure.ac - 自动配置源文件 (40KB)
  • Makefile.in - 主构建文件模板
  • Makefile.common.in - 通用构建规则
  • sdccconf_in.h - 编译器配置头文件
  • conf.mk - 构建配置

项目文件

  • sdcc.sln - Visual Studio 解决方案文件
  • all.vcxproj - Visual Studio 项目文件
  • config.vcxproj - 配置项目文件

文档和许可证

  • ChangeLog - 项目变更日志 (1.8MB)
  • LICENSE - 许可证文件
  • COPYING - 版权信息
  • README - 项目说明

主要目录结构

1. src/ - 编译器核心源代码

功能: 包含SDCC编译器的主要源代码,包括词法分析器、语法分析器、代码生成器等核心组件。

主要文件:

  • SDCCmain.c - 编译器主入口点
  • SDCC.y - 语法分析器定义 (Yacc/Bison)
  • SDCC.lex - 词法分析器定义 (Flex/Lex)
  • SDCCast.c/h - 抽象语法树处理
  • SDCCicode.c/h - 中间代码生成
  • SDCCsymt.c/h - 符号表管理
  • SDCCopt.c/h - 代码优化
  • SDCCpeeph.c/h - 窥孔优化
  • SDCCglue.c/h - 代码粘合
  • SDCCval.c/h - 值计算
  • SDCCerr.c/h - 错误处理

架构特定目录:

  • mcs51/ - Intel 8051 系列支持
  • pic14/ - Microchip PIC14 系列支持
  • pic16/ - Microchip PIC16 系列支持
  • z80/ - Z80 系列支持
  • avr/ - Atmel AVR 系列支持
  • hc08/ - Motorola HC08 系列支持
  • stm8/ - STM8 系列支持
  • mos6502/ - MOS 6502 系列支持
  • pdk/ - Padauk PDK 系列支持
  • f8/ - Fairchild F8 系列支持
  • ds390/ - Dallas DS390 系列支持

2. device/ - 设备支持文件

功能: 包含各种微控制器的头文件、库文件和设备特定代码。

device/include/ - 标准头文件

通用头文件:

  • stdio.h - 标准输入输出
  • stdlib.h - 标准库函数
  • string.h - 字符串处理
  • math.h - 数学函数
  • stdint.h - 整数类型定义
  • float.h - 浮点数定义
  • limits.h - 数据类型限制
  • ctype.h - 字符类型
  • assert.h - 断言宏
  • stdbool.h - 布尔类型
  • time.h - 时间函数
  • signal.h - 信号处理

架构特定头文件目录:

  • mcs51/ - 8051 系列头文件
  • pic14/ - PIC14 系列头文件
  • pic16/ - PIC16 系列头文件
  • z80/ - Z80 系列头文件
  • hc08/ - HC08 系列头文件
  • ds390/ - DS390 系列头文件
  • ds400/ - DS400 系列头文件
  • z180/ - Z180 系列头文件
  • xa51/ - XA51 系列头文件
  • rab/ - RAB 系列头文件

device/lib/ - 标准库文件

通用库文件:

  • 数学运算库 (_fsadd.c, _fsmul.c, _fsdiv.c 等)
  • 字符串处理库 (strlen.c, strcpy.c, strcmp.c 等)
  • 内存操作库 (_memset.c, _memcpy.c 等)
  • 类型转换库 (_fs2sint.c, _sint2fs.c 等)
  • 算术运算库 (_divsint.c, _modsint.c 等)

架构特定库目录:

  • mcs51/ - 8051 系列库
  • pic14/ - PIC14 系列库
  • pic16/ - PIC16 系列库
  • z80/ - Z80 系列库
  • hc08/ - HC08 系列库
  • stm8/ - STM8 系列库
  • mos6502/ - MOS 6502 系列库
  • pdk13/, pdk14/, pdk15/ - PDK 系列库
  • ds390/ - DS390 系列库
  • ds400/ - DS400 系列库

device/non-free/ - 非自由软件组件

包含可能受版权保护的设备特定代码。

3. sdas/ - 汇编器

功能: 包含各种架构的汇编器实现。

架构特定汇编器:

  • as8051/ - 8051 汇编器
  • aspdk/ - PDK 汇编器
  • aspdk13/, aspdk14/, aspdk15/, aspdk16/ - 不同版本PDK汇编器
  • asz80/ - Z80 汇编器
  • asstm8/ - STM8 汇编器
  • as6808/ - HC08 汇编器
  • as6500/ - 6500 系列汇编器
  • asf8/ - F8 汇编器
  • asrab/ - RAB 汇编器
  • asgb/ - Game Boy 汇编器
  • astlcs90/ - TLCS90 汇编器
  • as8xcxxx/ - 8XCxxx 汇编器
  • xa51/ - XA51 汇编器

4. support/ - 支持工具

功能: 包含编译过程中使用的各种工具和脚本。

主要组件:

  • cpp/ - C预处理器
  • scripts/ - 构建和工具脚本
  • sdbinutils/ - 二进制工具集
  • makebin/ - 二进制文件生成工具
  • packihx/ - Intel HEX 文件处理工具
  • util/ - 通用工具
  • tests/ - 测试套件
  • valdiag/ - 验证诊断工具
  • regression/ - 回归测试

5. bin/ - 可执行文件模板

功能: 包含各种工具的可执行文件模板。

主要工具:

  • sdcc.in - 主编译器
  • sdcpp.in - C预处理器
  • sdar.in - 静态库管理器
  • sdnm.in - 符号表工具
  • sdobjcopy.in - 目标文件复制工具
  • sdranlib.in - 静态库索引工具

6. doc/ - 文档

功能: 项目文档和用户手册。

主要文档:

  • sdccman.lyx - 用户手册 (LyX格式)
  • INSTALL.txt - 安装说明
  • README.txt - 项目说明
  • 各种架构的调用约定图 (SVG格式)

7. sim/ - 模拟器

功能: 包含硬件模拟器。

主要组件:

  • ucsim/ - 通用微控制器模拟器

8. debugger/ - 调试器

功能: 包含调试器相关代码。

主要组件:

  • mcs51/ - 8051 调试器支持

构建系统

主要构建文件

  • Makefile.in - 主构建文件
  • Makefile.common.in - 通用构建规则
  • main_in.mk - 主构建规则
  • port.mk - 端口特定构建规则
  • clean.mk - 清理规则

配置系统

  • configure - 自动配置脚本
  • configure.ac - 配置源文件
  • aclocal.m4 - 自动工具宏
  • config.guess - 系统类型猜测
  • config.sub - 系统类型验证

支持的架构

SDCC 支持多种微控制器架构:

  1. Intel 8051 系列 - 经典8位微控制器
  2. Microchip PIC - PIC14, PIC16 系列
  3. Zilog Z80 - Z80, Z180, Z80N 系列
  4. Atmel AVR - 8位微控制器
  5. Motorola HC08 - 8位微控制器
  6. STM8 - STMicroelectronics 8位微控制器
  7. MOS 6502 - 经典8位处理器
  8. Padauk PDK - 低成本微控制器
  9. Fairchild F8 - 早期微控制器
  10. Dallas DS390/DS400 - 高速微控制器

开发工具链

SDCC 提供完整的开发工具链:

  1. 编译器 - 将C代码编译为汇编代码
  2. 汇编器 - 将汇编代码转换为目标文件
  3. 链接器 - 将目标文件链接为可执行文件
  4. 库管理器 - 管理静态库
  5. 调试器 - 提供调试支持
  6. 模拟器 - 硬件模拟和测试

这个目录结构展示了SDCC作为一个完整的嵌入式开发工具链的复杂性,支持多种微控制器架构,并提供从编译到调试的完整解决方案。

三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2979

回帖

6355

积分

荣誉版主

无情的代码机器

积分
6355
发表于 2025-7-7 23:00:22 | 显示全部楼层

GCC 15.1.0 项目目录结构

项目概述

GCC (GNU Compiler Collection) 是一个开源的编译器集合,支持多种编程语言。本文档描述了GCC 15.1.0项目的目录结构和各目录的主要功能。

根目录文件

核心配置文件

  • configure - 主配置脚本 (601KB)
  • configure.ac - 自动配置源文件 (131KB)
  • Makefile.in - 主Makefile模板 (2.3MB)
  • Makefile.tpl - Makefile模板 (78KB)
  • Makefile.def - Makefile定义文件 (35KB)

许可证和版权文件

  • COPYING - GNU通用公共许可证
  • COPYING.LIB - GNU库通用公共许可证
  • COPYING3 - GNU通用公共许可证v3
  • COPYING3.LIB - GNU库通用公共许可证v3
  • COPYING.RUNTIME - 运行时库许可证

文档文件

  • README - 项目说明文档
  • NEWS - 版本更新新闻 (1.2MB)
  • ChangeLog - 项目变更日志 (679KB)
  • MAINTAINERS - 维护者信息 (64KB)
  • SECURITY.txt - 安全相关信息

构建工具文件

  • config.guess - 目标系统检测脚本
  • config.sub - 目标系统验证脚本
  • install-sh - 安装脚本
  • missing - 缺失工具处理脚本
  • depcomp - 依赖编译脚本
  • compile - 编译脚本

主要目录结构

1. gcc/ - 核心编译器

功能: GCC编译器的核心实现
主要内容:

  • c/ - C语言前端
  • cp/ - C++语言前端
  • fortran/ - Fortran语言前端
  • ada/ - Ada语言前端
  • go/ - Go语言前端
  • rust/ - Rust语言前端
  • d/ - D语言前端
  • objc/ - Objective-C语言前端
  • objcp/ - Objective-C++语言前端
  • m2/ - Modula-2语言前端
  • cobol/ - COBOL语言前端
  • common/ - 通用代码
  • config/ - 目标平台配置
  • testsuite/ - 测试套件
  • doc/ - 文档
  • analyzer/ - 静态分析器
  • jit/ - JIT编译器
  • lto/ - 链接时优化

2. libstdc++-v3/ - C++标准库

功能: GNU C++标准库实现
主要内容:

  • src/ - 标准库源代码
  • include/ - 头文件
  • testsuite/ - 测试套件
  • doc/ - 文档
  • scripts/ - 构建脚本
  • libsupc++/ - 运行时支持库

3. include/ - 公共头文件

功能: GCC项目使用的公共头文件
主要内容:

  • gdb/ - GDB调试器头文件
  • cuda/ - CUDA相关头文件
  • 各种系统接口头文件
  • 调试信息格式头文件 (dwarf2.h, ctf.h等)
  • 插件API头文件

4. config/ - 配置脚本

功能: 构建系统配置脚本和宏
主要内容:

  • 各种.m4宏文件
  • 目标平台特定配置
  • 构建系统配置脚本
  • 多线程支持配置
  • 国际化配置

5. contrib/ - 贡献工具

功能: 开发和维护工具
主要内容:

  • legacy/ - 遗留工具
  • regression/ - 回归测试工具
  • dg-lint/ - 测试套件检查工具
  • header-tools/ - 头文件工具
  • testsuite-management/ - 测试套件管理
  • gcc-changelog/ - 变更日志工具
  • unicode/ - Unicode处理工具
  • reghunt/ - 回归测试工具
  • vim-gcc-dev/ - Vim开发配置
  • mdcompact/ - 文档压缩工具

6. maintainer-scripts/ - 维护脚本

功能: 项目维护和发布脚本
主要内容:

  • gcc_release - 发布脚本
  • branch_changer.py - 分支管理脚本
  • bugzilla-close-candidate.py - Bugzilla管理脚本
  • update_web_docs_git - 文档更新脚本

语言运行时库

7. libgo/ - Go语言运行时

功能: Go语言的运行时库
主要内容:

  • runtime/ - 运行时实现
  • go/ - Go标准库
  • misc/ - 杂项工具
  • testsuite/ - 测试套件

8. libada/ - Ada语言运行时

功能: Ada语言的运行时库

9. libgfortran/ - Fortran运行时

功能: GNU Fortran运行时库

10. libobjc/ - Objective-C运行时

功能: Objective-C运行时库

11. libphobos/ - D语言运行时

功能: D语言标准库

12. libgm2/ - Modula-2运行时

功能: Modula-2语言运行时

13. libgcobol/ - COBOL运行时

功能: COBOL语言运行时

核心库

14. libgcc/ - GCC运行时库

功能: GCC编译器运行时支持库

15. libiberty/ - 通用库

功能: 提供通用功能的库

16. libcpp/ - C预处理器

功能: C/C++预处理器实现

17. libdecnumber/ - 十进制数处理

功能: 十进制浮点数处理库

18. libbacktrace/ - 堆栈回溯

功能: 提供堆栈回溯功能

19. libquadmath/ - 四精度数学

功能: 四精度浮点数数学库

20. libatomic/ - 原子操作

功能: 原子操作库

21. libitm/ - 事务内存

功能: 事务内存支持库

22. libsanitizer/ - 内存检查器

功能: 地址消毒器、线程消毒器等

23. libgomp/ - OpenMP支持

功能: OpenMP并行编程支持

24. libvtv/ - 虚表验证

功能: C++虚表验证库

25. libssp/ - 栈保护

功能: 栈溢出保护库

26. libgrust/ - Rust支持

功能: Rust语言支持库

27. libcody/ - 代码生成

功能: 代码生成支持库

工具和插件

28. gotools/ - Go工具

功能: Go语言相关工具

29. c++tools/ - C++工具

功能: C++语言相关工具

30. gnattools/ - Ada工具

功能: Ada语言相关工具

31. lto-plugin/ - LTO插件

功能: 链接时优化插件

32. libcc1/ - 编译器接口

功能: 编译器接口库

第三方库

33. zlib/ - 压缩库

功能: 数据压缩库

34. gmp/ - 多精度算术

功能: GNU多精度算术库

35. mpfr/ - 多精度浮点

功能: 多精度浮点运算库

36. mpc/ - 复数运算

功能: 复数算术库

37. isl/ - 整数集库

功能: 整数集操作库

38. gettext/ - 国际化

功能: 国际化支持库

其他目录

39. fixincludes/ - 头文件修复

功能: 修复系统头文件问题

40. INSTALL/ - 安装文档

功能: 安装说明文档

41. .github/ - GitHub配置

功能: GitHub工作流和配置

42. .forgejo/ - Forgejo配置

功能: Forgejo平台配置

43. .vscode/ - VS Code配置

功能: Visual Studio Code配置

构建系统

GCC使用基于Autotools的构建系统:

  • configure.ac - 自动配置源文件
  • Makefile.tpl - Makefile模板
  • config/ - 配置脚本和宏
  • 各种构建工具脚本

测试系统

  • gcc/testsuite/ - 主测试套件
  • libstdc++-v3/testsuite/ - C++标准库测试
  • libgo/testsuite/ - Go运行时测试
  • 各语言库的测试套件

文档系统

  • gcc/doc/ - 编译器文档
  • libstdc++-v3/doc/ - C++标准库文档
  • include/ - API文档头文件

这个目录结构展示了GCC作为一个多语言编译器集合的复杂性,每个目录都有其特定的功能和职责。

三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2979

回帖

6355

积分

荣誉版主

无情的代码机器

积分
6355
发表于 2025-7-11 21:29:58 | 显示全部楼层

编译SDCC

基于ubuntu编译,安装依赖 :

sudo apt-get install build-essential bison flex zlib1g-dev libboost-all-dev gputils

编译:

./configure
make

编译完成:

image.png

编译GCC

mkdir build
cd build
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib  --enable-bootstrap  --prefix=/usr/local/gcc-15.1.0
make -j 4

编译完成:

image.png

三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-23 20:16 , Processed in 0.159971 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表