blob: 0b3ad4d413ee0991a8dd1853c57e70602ee1ca74 [file] [log] [blame]
David L. Jonesf561aba2017-03-08 01:02:16 +00001//===--- ARM.h - ARM-specific (not AArch64) Tool Helpers --------*- C++ -*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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-exception
David L. Jonesf561aba2017-03-08 01:02:16 +00006//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_ARM_H
10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_ARM_H
11
12#include "clang/Driver/ToolChain.h"
13#include "llvm/ADT/StringRef.h"
14#include "llvm/ADT/Triple.h"
15#include "llvm/Option/Option.h"
16#include <string>
17#include <vector>
18
19namespace clang {
20namespace driver {
21namespace tools {
22namespace arm {
23
24std::string getARMTargetCPU(StringRef CPU, llvm::StringRef Arch,
25 const llvm::Triple &Triple);
26const std::string getARMArch(llvm::StringRef Arch, const llvm::Triple &Triple);
27StringRef getARMCPUForMArch(llvm::StringRef Arch, const llvm::Triple &Triple);
28StringRef getLLVMArchSuffixForARM(llvm::StringRef CPU, llvm::StringRef Arch,
29 const llvm::Triple &Triple);
30
Peter Smithe75b6d72018-10-16 09:21:17 +000031void appendBE8LinkFlag(const llvm::opt::ArgList &Args,
David L. Jonesf561aba2017-03-08 01:02:16 +000032 llvm::opt::ArgStringList &CmdArgs,
33 const llvm::Triple &Triple);
Strahinja Petrovic3ac5ab72017-09-12 10:40:58 +000034enum class ReadTPMode {
35 Invalid,
36 Soft,
37 Cp15,
38};
39
David L. Jonesf561aba2017-03-08 01:02:16 +000040enum class FloatABI {
41 Invalid,
42 Soft,
43 SoftFP,
44 Hard,
45};
46
47FloatABI getARMFloatABI(const ToolChain &TC, const llvm::opt::ArgList &Args);
Strahinja Petrovic3ac5ab72017-09-12 10:40:58 +000048ReadTPMode getReadTPMode(const ToolChain &TC, const llvm::opt::ArgList &Args);
David L. Jonesf561aba2017-03-08 01:02:16 +000049
50bool useAAPCSForMachO(const llvm::Triple &T);
51void getARMArchCPUFromArgs(const llvm::opt::ArgList &Args,
52 llvm::StringRef &Arch, llvm::StringRef &CPU,
53 bool FromAs = false);
54void getARMTargetFeatures(const ToolChain &TC, const llvm::Triple &Triple,
55 const llvm::opt::ArgList &Args,
56 llvm::opt::ArgStringList &CmdArgs,
57 std::vector<llvm::StringRef> &Features, bool ForAS);
58int getARMSubArchVersionNumber(const llvm::Triple &Triple);
59bool isARMMProfile(const llvm::Triple &Triple);
60
61} // end namespace arm
David Green4734c6f2017-03-17 15:38:49 +000062} // end namespace tools
David L. Jonesf561aba2017-03-08 01:02:16 +000063} // end namespace driver
64} // end namespace clang
65
66#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_ARM_H