89 lines · c
1//===--- MSP430.h - MSP430-specific Tool Helpers ----------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MSP430_H10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MSP430_H11 12#include "Gnu.h"13#include "clang/Driver/Driver.h"14#include "clang/Driver/DriverDiagnostic.h"15#include "clang/Driver/InputInfo.h"16#include "clang/Driver/Tool.h"17#include "clang/Driver/ToolChain.h"18#include "llvm/ADT/StringRef.h"19#include "llvm/Option/Option.h"20 21#include <string>22#include <vector>23 24namespace clang {25namespace driver {26namespace toolchains {27 28class LLVM_LIBRARY_VISIBILITY MSP430ToolChain : public Generic_ELF {29public:30 MSP430ToolChain(const Driver &D, const llvm::Triple &Triple,31 const llvm::opt::ArgList &Args);32 void33 AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,34 llvm::opt::ArgStringList &CC1Args) const override;35 void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,36 llvm::opt::ArgStringList &CC1Args,37 Action::OffloadKind) const override;38 39 bool isPICDefault() const override { return false; }40 bool isPIEDefault(const llvm::opt::ArgList &Args) const override {41 return false;42 }43 bool isPICDefaultForced() const override { return true; }44 45 UnwindLibType46 GetUnwindLibType(const llvm::opt::ArgList &Args) const override {47 return UNW_None;48 }49 50protected:51 Tool *buildLinker() const override;52 53private:54 std::string computeSysRoot() const override;55};56 57} // end namespace toolchains58 59namespace tools {60namespace msp430 {61 62class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {63public:64 Linker(const ToolChain &TC) : Tool("MSP430::Linker", "msp430-elf-ld", TC) {}65 bool hasIntegratedCPP() const override { return false; }66 bool isLinkJob() const override { return true; }67 void ConstructJob(Compilation &C, const JobAction &JA,68 const InputInfo &Output, const InputInfoList &Inputs,69 const llvm::opt::ArgList &TCArgs,70 const char *LinkingOutput) const override;71 72private:73 void AddStartFiles(bool UseExceptions, const llvm::opt::ArgList &Args,74 llvm::opt::ArgStringList &CmdArgs) const;75 void AddDefaultLibs(const llvm::opt::ArgList &Args,76 llvm::opt::ArgStringList &CmdArgs) const;77 void AddEndFiles(bool UseExceptions, const llvm::opt::ArgList &Args,78 llvm::opt::ArgStringList &CmdArgs) const;79};80 81void getMSP430TargetFeatures(const Driver &D, const llvm::opt::ArgList &Args,82 std::vector<llvm::StringRef> &Features);83} // end namespace msp43084} // end namespace tools85} // end namespace driver86} // end namespace clang87 88#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_MSP430_H89