xref: /openbsd-src/gnu/llvm/clang/lib/Driver/ToolChains/Myriad.h (revision ec727ea710c91afd8ce4f788c5aaa8482b7b69b2)
1e5dd7070Spatrick //===--- Myriad.h - Myriad ToolChain Implementations ------------*- C++ -*-===//
2e5dd7070Spatrick //
3e5dd7070Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e5dd7070Spatrick // See https://llvm.org/LICENSE.txt for license information.
5e5dd7070Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e5dd7070Spatrick //
7e5dd7070Spatrick //===----------------------------------------------------------------------===//
8e5dd7070Spatrick 
9e5dd7070Spatrick #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MYRIAD_H
10e5dd7070Spatrick #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MYRIAD_H
11e5dd7070Spatrick 
12e5dd7070Spatrick #include "Gnu.h"
13e5dd7070Spatrick #include "clang/Driver/Tool.h"
14e5dd7070Spatrick #include "clang/Driver/ToolChain.h"
15e5dd7070Spatrick 
16e5dd7070Spatrick namespace clang {
17e5dd7070Spatrick namespace driver {
18e5dd7070Spatrick namespace tools {
19e5dd7070Spatrick 
20e5dd7070Spatrick /// SHAVE tools -- Directly call moviCompile and moviAsm
21e5dd7070Spatrick namespace SHAVE {
22e5dd7070Spatrick class LLVM_LIBRARY_VISIBILITY Compiler : public Tool {
23e5dd7070Spatrick public:
Compiler(const ToolChain & TC)24e5dd7070Spatrick   Compiler(const ToolChain &TC) : Tool("moviCompile", "movicompile", TC) {}
25e5dd7070Spatrick 
hasIntegratedCPP()26e5dd7070Spatrick   bool hasIntegratedCPP() const override { return true; }
27e5dd7070Spatrick 
28e5dd7070Spatrick   void ConstructJob(Compilation &C, const JobAction &JA,
29e5dd7070Spatrick                     const InputInfo &Output, const InputInfoList &Inputs,
30e5dd7070Spatrick                     const llvm::opt::ArgList &TCArgs,
31e5dd7070Spatrick                     const char *LinkingOutput) const override;
32e5dd7070Spatrick };
33e5dd7070Spatrick 
34e5dd7070Spatrick class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
35e5dd7070Spatrick public:
Assembler(const ToolChain & TC)36e5dd7070Spatrick   Assembler(const ToolChain &TC) : Tool("moviAsm", "moviAsm", TC) {}
37e5dd7070Spatrick 
hasIntegratedCPP()38e5dd7070Spatrick   bool hasIntegratedCPP() const override { return false; } // not sure.
39e5dd7070Spatrick 
40e5dd7070Spatrick   void ConstructJob(Compilation &C, const JobAction &JA,
41e5dd7070Spatrick                     const InputInfo &Output, const InputInfoList &Inputs,
42e5dd7070Spatrick                     const llvm::opt::ArgList &TCArgs,
43e5dd7070Spatrick                     const char *LinkingOutput) const override;
44e5dd7070Spatrick };
45e5dd7070Spatrick } // end namespace SHAVE
46e5dd7070Spatrick 
47e5dd7070Spatrick /// The Myriad toolchain uses tools that are in two different namespaces.
48e5dd7070Spatrick /// The Compiler and Assembler as defined above are in the SHAVE namespace,
49e5dd7070Spatrick /// whereas the linker, which accepts code for a mixture of Sparc and SHAVE,
50e5dd7070Spatrick /// is in the Myriad namespace.
51e5dd7070Spatrick namespace Myriad {
52*ec727ea7Spatrick class LLVM_LIBRARY_VISIBILITY Linker : public Tool {
53e5dd7070Spatrick public:
Linker(const ToolChain & TC)54*ec727ea7Spatrick   Linker(const ToolChain &TC) : Tool("shave::Linker", "ld", TC) {}
hasIntegratedCPP()55e5dd7070Spatrick   bool hasIntegratedCPP() const override { return false; }
isLinkJob()56e5dd7070Spatrick   bool isLinkJob() const override { return true; }
57e5dd7070Spatrick   void ConstructJob(Compilation &C, const JobAction &JA,
58e5dd7070Spatrick                     const InputInfo &Output, const InputInfoList &Inputs,
59e5dd7070Spatrick                     const llvm::opt::ArgList &TCArgs,
60e5dd7070Spatrick                     const char *LinkingOutput) const override;
61e5dd7070Spatrick };
62e5dd7070Spatrick } // end namespace Myriad
63e5dd7070Spatrick } // end namespace tools
64e5dd7070Spatrick 
65e5dd7070Spatrick namespace toolchains {
66e5dd7070Spatrick 
67e5dd7070Spatrick /// MyriadToolChain - A tool chain using either clang or the external compiler
68e5dd7070Spatrick /// installed by the Movidius SDK to perform all subcommands.
69e5dd7070Spatrick class LLVM_LIBRARY_VISIBILITY MyriadToolChain : public Generic_ELF {
70e5dd7070Spatrick public:
71e5dd7070Spatrick   MyriadToolChain(const Driver &D, const llvm::Triple &Triple,
72e5dd7070Spatrick                   const llvm::opt::ArgList &Args);
73e5dd7070Spatrick   ~MyriadToolChain() override;
74e5dd7070Spatrick 
75e5dd7070Spatrick   void
76e5dd7070Spatrick   AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
77e5dd7070Spatrick                             llvm::opt::ArgStringList &CC1Args) const override;
78e5dd7070Spatrick   void addLibCxxIncludePaths(
79e5dd7070Spatrick       const llvm::opt::ArgList &DriverArgs,
80e5dd7070Spatrick       llvm::opt::ArgStringList &CC1Args) const override;
81e5dd7070Spatrick   void addLibStdCxxIncludePaths(
82e5dd7070Spatrick       const llvm::opt::ArgList &DriverArgs,
83e5dd7070Spatrick       llvm::opt::ArgStringList &CC1Args) const override;
84e5dd7070Spatrick   Tool *SelectTool(const JobAction &JA) const override;
GetDefaultDwarfVersion()85e5dd7070Spatrick   unsigned GetDefaultDwarfVersion() const override { return 2; }
86e5dd7070Spatrick   SanitizerMask getSupportedSanitizers() const override;
87e5dd7070Spatrick 
88e5dd7070Spatrick protected:
89e5dd7070Spatrick   Tool *buildLinker() const override;
isShaveCompilation(const llvm::Triple & T)90e5dd7070Spatrick   bool isShaveCompilation(const llvm::Triple &T) const {
91e5dd7070Spatrick     return T.getArch() == llvm::Triple::shave;
92e5dd7070Spatrick   }
93e5dd7070Spatrick 
94e5dd7070Spatrick private:
95e5dd7070Spatrick   mutable std::unique_ptr<Tool> Compiler;
96e5dd7070Spatrick   mutable std::unique_ptr<Tool> Assembler;
97e5dd7070Spatrick };
98e5dd7070Spatrick 
99e5dd7070Spatrick } // end namespace toolchains
100e5dd7070Spatrick } // end namespace driver
101e5dd7070Spatrick } // end namespace clang
102e5dd7070Spatrick 
103e5dd7070Spatrick #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MYRIAD_H
104