Clang Project

clang_source_code/lib/Driver/ToolChains/Arch/ARM.h
1//===--- ARM.h - ARM-specific (not AArch64) 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-exception
6//
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 CPUllvm::StringRef Arch,
25                            const llvm::Triple &Triple);
26const std::string getARMArch(llvm::StringRef Archconst llvm::Triple &Triple);
27StringRef getARMCPUForMArch(llvm::StringRef Archconst llvm::Triple &Triple);
28StringRef getLLVMArchSuffixForARM(llvm::StringRef CPUllvm::StringRef Arch,
29                                  const llvm::Triple &Triple);
30
31void appendBE8LinkFlag(const llvm::opt::ArgList &Args,
32                       llvm::opt::ArgStringList &CmdArgs,
33                       const llvm::Triple &Triple);
34enum class ReadTPMode {
35  Invalid,
36  Soft,
37  Cp15,
38};
39
40enum class FloatABI {
41  Invalid,
42  Soft,
43  SoftFP,
44  Hard,
45};
46
47FloatABI getARMFloatABI(const ToolChain &TCconst llvm::opt::ArgList &Args);
48ReadTPMode getReadTPMode(const ToolChain &TCconst llvm::opt::ArgList &Args);
49
50bool useAAPCSForMachO(const llvm::Triple &T);
51void getARMArchCPUFromArgs(const llvm::opt::ArgList &Args,
52                           llvm::StringRef &Archllvm::StringRef &CPU,
53                           bool FromAs = false);
54void getARMTargetFeatures(const ToolChain &TCconst llvm::Triple &Triple,
55                          const llvm::opt::ArgList &Args,
56                          llvm::opt::ArgStringList &CmdArgs,
57                          std::vector<llvm::StringRef> &Featuresbool ForAS);
58int getARMSubArchVersionNumber(const llvm::Triple &Triple);
59bool isARMMProfile(const llvm::Triple &Triple);
60
61// end namespace arm
62// end namespace tools
63// end namespace driver
64// end namespace clang
65
66#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_ARM_H
67