编译clang源码-clang源码简介(一):clang入门

前言

本系列文章将通过拆解clang源码逐步介绍clang内部的各种逻辑。

我们对 clang 的误解

我们经常说给clang添加一个***参数,这些说法都非常模糊编译clang源码,往往会导致欺骗。

在不同的场景下,clang可能有不同的含义:

clangdriver:编译器驱动,负责根据简单的参数生成越来越复杂的参数编译器后端(在clang库中实现):指编译器生成中间代码(预处理器和编译器)的过程实际编译器(在clang-cc1中实现): clang-cc1通过LLVM库等工具实现编译后端、后端、汇编等工作

以下面的原命令为例:

xcrun --sdk iphoneos clang -arch arm64  main.m -v

复制

clang会先以clangdriver模式运行,然后组装clang-cc1和ld两个命令行,进行下一步

图像

注意:clangdriver本身不负责编译源码

为了方便前面源码的分析,下面介绍一些其他必要的基础知识

确诊

不同的后端阶段有不同类型的诊断信息。

例如clang/include/clang/Basic/DiagnosticDriverKinds.td维护了Driver相关的诊断信息

图像

然而,Clang 根据问题的严重程度对诊断进行分类

clang/lib/Basic/DiagnosticIDs.h 文件维护了五种类型:NOTE、REMARK、WARNING、EXTENSION、ERROR

图像

llvm:三重

llvm:Triple是llvm工具套件中非常基本的概念,而且非常容易理解。

以aarch64-apple-ios11.1为例,通过这个字符串我们可以得到以下信息

图像

不同参数对三元组的影响

许多命令行参数可能会影响 Triple 的生成。 例如-archarm64、-target-targetarm64-apple-ios11.1等。在拼写clang命令时编译clang源码,需要注意不同参数的优先级。 例如,-arch 的架构优先级低于 -target 下面的示例显示最终输出文件不包含 -target 的 x86_64 架构

图像

图像

工具链

ToolChain可以理解为编译工具链; GNU的MinGW和Google的MSVC都属于该工具链。

例如,当我们需要在mac系统上生成一个运行在iPhone中的APP时,我们会依赖/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld来进行链接任务

图像

本文摘要

本文主要介绍以下知识:

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 编译clang源码-clang源码简介(一):clang入门 https://www.wkzy.net/game/153766.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务