1210284Sjmallett//===--- XCore.h - XCore ToolChain Implementations --------------*- C++ -*-===// 2215990Sjmallett// 3215990Sjmallett// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4210284Sjmallett// See https://llvm.org/LICENSE.txt for license information. 5210284Sjmallett// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6215990Sjmallett// 7215990Sjmallett//===----------------------------------------------------------------------===// 8215990Sjmallett 9210284Sjmallett#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_XCORE_H 10215990Sjmallett#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_XCORE_H 11215990Sjmallett 12210284Sjmallett#include "clang/Driver/Tool.h" 13215990Sjmallett#include "clang/Driver/ToolChain.h" 14215990Sjmallett 15215990Sjmallettnamespace clang { 16215990Sjmallettnamespace driver { 17215990Sjmallettnamespace tools { 18215990Sjmallett 19215990Sjmallettnamespace XCore { 20215990Sjmallett// For XCore, we do not need to instantiate tools for PreProcess, PreCompile and 21215990Sjmallett// Compile. 22215990Sjmallett// We simply use "clang -cc1" for those actions. 23215990Sjmallettclass LLVM_LIBRARY_VISIBILITY Assembler final : public Tool { 24215990Sjmallettpublic: 25215990Sjmallett Assembler(const ToolChain &TC) : Tool("XCore::Assembler", "XCore-as", TC) {} 26215990Sjmallett 27215990Sjmallett bool hasIntegratedCPP() const override { return false; } 28215990Sjmallett void ConstructJob(Compilation &C, const JobAction &JA, 29215990Sjmallett const InputInfo &Output, const InputInfoList &Inputs, 30215990Sjmallett const llvm::opt::ArgList &TCArgs, 31215990Sjmallett const char *LinkingOutput) const override; 32215990Sjmallett}; 33215990Sjmallett 34215990Sjmallettclass LLVM_LIBRARY_VISIBILITY Linker final : public Tool { 35215990Sjmallettpublic: 36215990Sjmallett Linker(const ToolChain &TC) : Tool("XCore::Linker", "XCore-ld", TC) {} 37215990Sjmallett 38210284Sjmallett bool hasIntegratedCPP() const override { return false; } 39210284Sjmallett bool isLinkJob() const override { return true; } 40210284Sjmallett void ConstructJob(Compilation &C, const JobAction &JA, 41210284Sjmallett const InputInfo &Output, const InputInfoList &Inputs, 42210284Sjmallett const llvm::opt::ArgList &TCArgs, 43210284Sjmallett const char *LinkingOutput) const override; 44210284Sjmallett}; 45215990Sjmallett} // end namespace XCore. 46210284Sjmallett} // end namespace tools 47210284Sjmallett 48210284Sjmallettnamespace toolchains { 49210284Sjmallett 50210284Sjmallettclass LLVM_LIBRARY_VISIBILITY XCoreToolChain : public ToolChain { 51210284Sjmallettpublic: 52215990Sjmallett XCoreToolChain(const Driver &D, const llvm::Triple &Triple, 53210284Sjmallett const llvm::opt::ArgList &Args); 54210284Sjmallett 55210284Sjmallettprotected: 56210284Sjmallett Tool *buildAssembler() const override; 57210284Sjmallett Tool *buildLinker() const override; 58210284Sjmallett 59210284Sjmallettpublic: 60210284Sjmallett bool IsIntegratedAssemblerDefault() const override { return false; } 61210284Sjmallett bool isPICDefault() const override; 62210284Sjmallett bool isPIEDefault(const llvm::opt::ArgList &Args) const override; 63210284Sjmallett bool isPICDefaultForced() const override; 64210284Sjmallett bool SupportsProfiling() const override; 65210284Sjmallett bool hasBlocksRuntime() const override; 66210284Sjmallett void 67210284Sjmallett AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, 68210284Sjmallett llvm::opt::ArgStringList &CC1Args) const override; 69210284Sjmallett void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, 70210284Sjmallett llvm::opt::ArgStringList &CC1Args, 71210284Sjmallett Action::OffloadKind DeviceOffloadKind) const override; 72210284Sjmallett void AddClangCXXStdlibIncludeArgs( 73210284Sjmallett const llvm::opt::ArgList &DriverArgs, 74210284Sjmallett llvm::opt::ArgStringList &CC1Args) const override; 75210284Sjmallett void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, 76210284Sjmallett llvm::opt::ArgStringList &CmdArgs) const override; 77210284Sjmallett}; 78210284Sjmallett 79210284Sjmallett} // end namespace toolchains 80210284Sjmallett} // end namespace driver 81210284Sjmallett} // end namespace clang 82210284Sjmallett 83210284Sjmallett#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_XCORE_H 84210284Sjmallett