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