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