ARM.h revision 327952
1317019Sdim//===--- ARM.h - ARM-specific (not AArch64) Tool Helpers --------*- C++ -*-===// 2317019Sdim// 3317019Sdim// The LLVM Compiler Infrastructure 4317019Sdim// 5317019Sdim// This file is distributed under the University of Illinois Open Source 6317019Sdim// License. See LICENSE.TXT for details. 7317019Sdim// 8317019Sdim//===----------------------------------------------------------------------===// 9317019Sdim 10317019Sdim#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_ARM_H 11317019Sdim#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_ARM_H 12317019Sdim 13317019Sdim#include "clang/Driver/ToolChain.h" 14317019Sdim#include "llvm/ADT/StringRef.h" 15317019Sdim#include "llvm/ADT/Triple.h" 16317019Sdim#include "llvm/Option/Option.h" 17317019Sdim#include <string> 18317019Sdim#include <vector> 19317019Sdim 20317019Sdimnamespace clang { 21317019Sdimnamespace driver { 22317019Sdimnamespace tools { 23317019Sdimnamespace arm { 24317019Sdim 25317019Sdimstd::string getARMTargetCPU(StringRef CPU, llvm::StringRef Arch, 26317019Sdim const llvm::Triple &Triple); 27317019Sdimconst std::string getARMArch(llvm::StringRef Arch, const llvm::Triple &Triple); 28317019SdimStringRef getARMCPUForMArch(llvm::StringRef Arch, const llvm::Triple &Triple); 29317019SdimStringRef getLLVMArchSuffixForARM(llvm::StringRef CPU, llvm::StringRef Arch, 30317019Sdim const llvm::Triple &Triple); 31317019Sdim 32317019Sdimvoid appendEBLinkFlags(const llvm::opt::ArgList &Args, 33317019Sdim llvm::opt::ArgStringList &CmdArgs, 34317019Sdim const llvm::Triple &Triple); 35327952Sdimenum class ReadTPMode { 36327952Sdim Invalid, 37327952Sdim Soft, 38327952Sdim Cp15, 39327952Sdim}; 40327952Sdim 41317019Sdimenum class FloatABI { 42317019Sdim Invalid, 43317019Sdim Soft, 44317019Sdim SoftFP, 45317019Sdim Hard, 46317019Sdim}; 47317019Sdim 48317019SdimFloatABI getARMFloatABI(const ToolChain &TC, const llvm::opt::ArgList &Args); 49327952SdimReadTPMode getReadTPMode(const ToolChain &TC, const llvm::opt::ArgList &Args); 50317019Sdim 51317019Sdimbool useAAPCSForMachO(const llvm::Triple &T); 52317019Sdimvoid getARMArchCPUFromArgs(const llvm::opt::ArgList &Args, 53317019Sdim llvm::StringRef &Arch, llvm::StringRef &CPU, 54317019Sdim bool FromAs = false); 55317019Sdimvoid getARMTargetFeatures(const ToolChain &TC, const llvm::Triple &Triple, 56317019Sdim const llvm::opt::ArgList &Args, 57317019Sdim llvm::opt::ArgStringList &CmdArgs, 58317019Sdim std::vector<llvm::StringRef> &Features, bool ForAS); 59317019Sdimint getARMSubArchVersionNumber(const llvm::Triple &Triple); 60317019Sdimbool isARMMProfile(const llvm::Triple &Triple); 61317019Sdim 62317019Sdim} // end namespace arm 63317019Sdim} // end namespace tools 64317019Sdim} // end namespace driver 65317019Sdim} // end namespace clang 66317019Sdim 67317019Sdim#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_ARM_H 68