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