CrossWindows.h revision 322740
1317019Sdim//===--- CrossWindows.h - CrossWindows ToolChain Implementation -*- C++ -*-===//
2317019Sdim//
3317019Sdim//                     The LLVM Compiler Infrastructure
4317019Sdim//
5317019Sdim// This file is distributed under the University of Illinois Open Source
6317019Sdim// License. See LICENSE.TXT for details.
7317019Sdim//
8317019Sdim//===----------------------------------------------------------------------===//
9317019Sdim
10317019Sdim#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CROSSWINDOWS_H
11317019Sdim#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CROSSWINDOWS_H
12317019Sdim
13317019Sdim#include "Cuda.h"
14317019Sdim#include "Gnu.h"
15317019Sdim#include "clang/Driver/Tool.h"
16317019Sdim#include "clang/Driver/ToolChain.h"
17317019Sdim
18317019Sdimnamespace clang {
19317019Sdimnamespace driver {
20317019Sdimnamespace tools {
21317019Sdim
22317019Sdimnamespace CrossWindows {
23317019Sdimclass LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
24317019Sdimpublic:
25317019Sdim  Assembler(const ToolChain &TC) : Tool("CrossWindows::Assembler", "as", TC) {}
26317019Sdim
27317019Sdim  bool hasIntegratedCPP() const override { return false; }
28317019Sdim
29317019Sdim  void ConstructJob(Compilation &C, const JobAction &JA,
30317019Sdim                    const InputInfo &Output, const InputInfoList &Inputs,
31317019Sdim                    const llvm::opt::ArgList &TCArgs,
32317019Sdim                    const char *LinkingOutput) const override;
33317019Sdim};
34317019Sdim
35317019Sdimclass LLVM_LIBRARY_VISIBILITY Linker : public Tool {
36317019Sdimpublic:
37317019Sdim  Linker(const ToolChain &TC)
38317019Sdim      : Tool("CrossWindows::Linker", "ld", TC, RF_Full) {}
39317019Sdim
40317019Sdim  bool hasIntegratedCPP() const override { return false; }
41317019Sdim  bool isLinkJob() const override { return true; }
42317019Sdim
43317019Sdim  void ConstructJob(Compilation &C, const JobAction &JA,
44317019Sdim                    const InputInfo &Output, const InputInfoList &Inputs,
45317019Sdim                    const llvm::opt::ArgList &TCArgs,
46317019Sdim                    const char *LinkingOutput) const override;
47317019Sdim};
48317019Sdim} // end namespace CrossWindows
49317019Sdim} // end namespace tools
50317019Sdim
51317019Sdimnamespace toolchains {
52317019Sdim
53317019Sdimclass LLVM_LIBRARY_VISIBILITY CrossWindowsToolChain : public Generic_GCC {
54317019Sdimpublic:
55317019Sdim  CrossWindowsToolChain(const Driver &D, const llvm::Triple &T,
56317019Sdim                        const llvm::opt::ArgList &Args);
57317019Sdim
58317019Sdim  bool IsIntegratedAssemblerDefault() const override { return true; }
59322740Sdim  bool IsUnwindTablesDefault(const llvm::opt::ArgList &Args) const override;
60317019Sdim  bool isPICDefault() const override;
61317019Sdim  bool isPIEDefault() const override;
62317019Sdim  bool isPICDefaultForced() const override;
63317019Sdim
64317019Sdim  unsigned int GetDefaultStackProtectorLevel(bool KernelOrKext) const override {
65317019Sdim    return 0;
66317019Sdim  }
67317019Sdim
68317019Sdim  void
69317019Sdim  AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
70317019Sdim                            llvm::opt::ArgStringList &CC1Args) const override;
71317019Sdim  void AddClangCXXStdlibIncludeArgs(
72317019Sdim      const llvm::opt::ArgList &DriverArgs,
73317019Sdim      llvm::opt::ArgStringList &CC1Args) const override;
74317019Sdim  void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
75317019Sdim                           llvm::opt::ArgStringList &CmdArgs) const override;
76317019Sdim
77317019Sdim  SanitizerMask getSupportedSanitizers() const override;
78317019Sdim
79317019Sdimprotected:
80317019Sdim  Tool *buildLinker() const override;
81317019Sdim  Tool *buildAssembler() const override;
82317019Sdim};
83317019Sdim
84317019Sdim} // end namespace toolchains
85317019Sdim} // end namespace driver
86317019Sdim} // end namespace clang
87317019Sdim
88317019Sdim#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CROSSWINDOWS_H
89