Coverage Report

Created: 2023-09-21 18:56

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/lib/Driver/ToolChains/MinGW.h
Line
Count
Source (jump to first uncovered line)
1
//===--- MinGW.h - MinGW ToolChain Implementations --------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MINGW_H
10
#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MINGW_H
11
12
#include "Cuda.h"
13
#include "Gnu.h"
14
#include "ROCm.h"
15
#include "clang/Driver/Tool.h"
16
#include "clang/Driver/ToolChain.h"
17
#include "llvm/Support/ErrorOr.h"
18
19
namespace clang {
20
namespace driver {
21
namespace tools {
22
23
/// MinGW -- Directly call GNU Binutils assembler and linker
24
namespace MinGW {
25
class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
26
public:
27
1
  Assembler(const ToolChain &TC) : Tool("MinGW::Assemble", "assembler", TC) {}
28
29
1
  bool hasIntegratedCPP() const override { return false; }
30
31
  void ConstructJob(Compilation &C, const JobAction &JA,
32
                    const InputInfo &Output, const InputInfoList &Inputs,
33
                    const llvm::opt::ArgList &TCArgs,
34
                    const char *LinkingOutput) const override;
35
};
36
37
class LLVM_LIBRARY_VISIBILITY Linker : public Tool {
38
public:
39
57
  Linker(const ToolChain &TC) : Tool("MinGW::Linker", "linker", TC) {}
40
41
57
  bool hasIntegratedCPP() const override { return false; }
42
0
  bool isLinkJob() const override { return true; }
43
44
  void ConstructJob(Compilation &C, const JobAction &JA,
45
                    const InputInfo &Output, const InputInfoList &Inputs,
46
                    const llvm::opt::ArgList &TCArgs,
47
                    const char *LinkingOutput) const override;
48
49
private:
50
  void AddLibGCC(const llvm::opt::ArgList &Args,
51
                 llvm::opt::ArgStringList &CmdArgs) const;
52
};
53
} // end namespace MinGW
54
} // end namespace tools
55
56
namespace toolchains {
57
58
class LLVM_LIBRARY_VISIBILITY MinGW : public ToolChain {
59
public:
60
  MinGW(const Driver &D, const llvm::Triple &Triple,
61
        const llvm::opt::ArgList &Args);
62
63
  static void fixTripleArch(const Driver &D, llvm::Triple &Triple,
64
                            const llvm::opt::ArgList &Args);
65
66
  bool HasNativeLLVMSupport() const override;
67
68
  UnwindTableLevel
69
  getDefaultUnwindTableLevel(const llvm::opt::ArgList &Args) const override;
70
  bool isPICDefault() const override;
71
  bool isPIEDefault(const llvm::opt::ArgList &Args) const override;
72
  bool isPICDefaultForced() const override;
73
74
  SanitizerMask getSupportedSanitizers() const override;
75
76
  llvm::ExceptionHandling GetExceptionModel(
77
      const llvm::opt::ArgList &Args) const override;
78
79
  void
80
  AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
81
                            llvm::opt::ArgStringList &CC1Args) const override;
82
  void
83
  addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
84
                        llvm::opt::ArgStringList &CC1Args,
85
                        Action::OffloadKind DeviceOffloadKind) const override;
86
  void AddClangCXXStdlibIncludeArgs(
87
      const llvm::opt::ArgList &DriverArgs,
88
      llvm::opt::ArgStringList &CC1Args) const override;
89
90
  void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs,
91
                          llvm::opt::ArgStringList &CC1Args) const override;
92
  void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs,
93
                         llvm::opt::ArgStringList &CC1Args) const override;
94
95
  void printVerboseInfo(raw_ostream &OS) const override;
96
97
2
  unsigned GetDefaultDwarfVersion() const override { return 4; }
98
99
protected:
100
  Tool *getTool(Action::ActionClass AC) const override;
101
  Tool *buildLinker() const override;
102
  Tool *buildAssembler() const override;
103
104
private:
105
  CudaInstallationDetector CudaInstallation;
106
  RocmInstallationDetector RocmInstallation;
107
108
  std::string Base;
109
  std::string GccLibDir;
110
  clang::driver::toolchains::Generic_GCC::GCCVersion GccVer;
111
  std::string Ver;
112
  std::string SubdirName;
113
  std::string TripleDirName;
114
  mutable std::unique_ptr<tools::gcc::Preprocessor> Preprocessor;
115
  mutable std::unique_ptr<tools::gcc::Compiler> Compiler;
116
  void findGccLibDir(const llvm::Triple &LiteralTriple);
117
118
  bool NativeLLVMSupport;
119
};
120
121
} // end namespace toolchains
122
} // end namespace driver
123
} // end namespace clang
124
125
#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MINGW_H