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