1343173Sdim//===--- MSP430.h - MSP430-specific Tool Helpers ----------------*- C++ -*-===//
2343173Sdim//
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
6343173Sdim//
7343173Sdim//===----------------------------------------------------------------------===//
8343173Sdim
9343173Sdim#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MSP430_H
10343173Sdim#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MSP430_H
11343173Sdim
12343173Sdim#include "Gnu.h"
13343173Sdim#include "InputInfo.h"
14343173Sdim#include "clang/Driver/Driver.h"
15343173Sdim#include "clang/Driver/DriverDiagnostic.h"
16343173Sdim#include "clang/Driver/Tool.h"
17343173Sdim#include "clang/Driver/ToolChain.h"
18343173Sdim#include "llvm/ADT/StringRef.h"
19343173Sdim#include "llvm/Option/Option.h"
20343173Sdim
21343173Sdim#include <string>
22343173Sdim#include <vector>
23343173Sdim
24343173Sdimnamespace clang {
25343173Sdimnamespace driver {
26343173Sdimnamespace toolchains {
27343173Sdim
28343173Sdimclass LLVM_LIBRARY_VISIBILITY MSP430ToolChain : public Generic_ELF {
29343173Sdimpublic:
30343173Sdim  MSP430ToolChain(const Driver &D, const llvm::Triple &Triple,
31343173Sdim                  const llvm::opt::ArgList &Args);
32343173Sdim  void
33343173Sdim  AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
34343173Sdim                            llvm::opt::ArgStringList &CC1Args) const override;
35343173Sdim  void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
36343173Sdim                             llvm::opt::ArgStringList &CC1Args,
37343173Sdim                             Action::OffloadKind) const override;
38343173Sdim
39353358Sdim  bool isPICDefault() const override { return false; }
40353358Sdim  bool isPIEDefault() const override { return false; }
41353358Sdim  bool isPICDefaultForced() const override { return true; }
42353358Sdim
43343173Sdimprotected:
44343173Sdim  Tool *buildLinker() const override;
45343173Sdim
46343173Sdimprivate:
47343173Sdim  std::string computeSysRoot() const;
48343173Sdim};
49343173Sdim
50343173Sdim} // end namespace toolchains
51343173Sdim
52343173Sdimnamespace tools {
53343173Sdimnamespace msp430 {
54343173Sdim
55343173Sdimclass LLVM_LIBRARY_VISIBILITY Linker : public GnuTool {
56343173Sdimpublic:
57343173Sdim  Linker(const ToolChain &TC)
58343173Sdim      : GnuTool("MSP430::Linker", "msp430-elf-ld", TC) {}
59343173Sdim  bool hasIntegratedCPP() const override { return false; }
60343173Sdim  bool isLinkJob() const override { return true; }
61343173Sdim  void ConstructJob(Compilation &C, const JobAction &JA,
62343173Sdim                    const InputInfo &Output, const InputInfoList &Inputs,
63343173Sdim                    const llvm::opt::ArgList &TCArgs,
64343173Sdim                    const char *LinkingOutput) const override;
65343173Sdim};
66343173Sdim
67343173Sdimvoid getMSP430TargetFeatures(const Driver &D, const llvm::opt::ArgList &Args,
68343173Sdim                             std::vector<llvm::StringRef> &Features);
69343173Sdim} // end namespace msp430
70343173Sdim} // end namespace tools
71343173Sdim} // end namespace driver
72343173Sdim} // end namespace clang
73343173Sdim
74343173Sdim#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MSP430_H
75