深入研究Clang(十七) Clang Driver库的Tool

本文详细探讨了Clang Driver库中的Tool类,包括其在编译过程中的作用、实现细节、继承关系以及与ToolChain的相互作用。Tool作为具体编译工具的载体,具有丰富的子类,如Clang、Assembler等,它们根据软件和硬件需求进行定制。此外,文章还分析了Tool如何构建Job以及与Job的调用关系。
摘要由CSDN通过智能技术生成

Tool也是Clang的Driver库里的一个类,它是具体编译工具的信息,代码注释中的原文是:Tool - Information on a specific compilation tool.(clang/include/clang/Driver/Tool.h)本文将对Tool的实现以及其相关调用关系做一个简单的分析。

一、Tool的实现和继承关系

1、Tool的定义和实现都位于clang/include/clang/Driver/Tool.h和clang/lib/Driver/Tool.cpp之中。

2、Tool的成员变量(Tool.h中)很能说明Tool的相关信息:

  /// The tool name (for debugging).

  const char *Name;

  /// The human readable name for the tool, for use in diagnostics.

  const char *ShortName;

  /// The tool chain this tool is a part of.

  const ToolChain &TheToolChain;

这里可以看到每个tool都有一个名字,还有一个短名字,同时还是构成一个tool chain的一部分。这里也能看到,Tool和ToolChain是双向关联的,Tool中通过TheToolChain关联到它所在的ToolChain,ToolChain通过如下列表和Tool关联:

  mutable std::unique_ptr<Tool> Clang;
  mutable std::unique_ptr<Tool> Flang;
  mutable std::unique_ptr<Tool> Assemble;
  mutable std::unique_ptr<Tool> Link;
  mutable std::unique_ptr<Tool> IfsMerge;
  mutable std::unique_ptr<Tool> OffloadBundler;
  mutable std::unique_ptr<Tool> OffloadWrapper;

3、Tool在clang/lib/Driver/ToolChains目录之下具有一系列的子类,以Clang.h为例。Clang.h 之中定义了:

namespace clang {
class ObjCRuntime;
namespace driver {
namespace tools {

/// Clang compiler tool.
class LLVM_LIBRARY_VISIBILITY Clang : public Tool {

/// Clang integrated assembler tool.
class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {

/// Offload bundler tool.
class LLVM_LIBRARY_VISIBILITY OffloadBundler final : public Tool {

/// Of
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值