1341825Sdim//===------- Targets.h - Declare target feature support ---------*- C++ -*-===//
2326941Sdim//
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
6326941Sdim//
7326941Sdim//===----------------------------------------------------------------------===//
8326941Sdim//
9326941Sdim// This file declares things required for construction of a TargetInfo object
10326941Sdim// from a target triple. Typically individual targets will need to include from
11326941Sdim// here in order to get these functions if required.
12326941Sdim//
13326941Sdim//===----------------------------------------------------------------------===//
14326941Sdim
15326941Sdim#ifndef LLVM_CLANG_LIB_BASIC_TARGETS_H
16326941Sdim#define LLVM_CLANG_LIB_BASIC_TARGETS_H
17326941Sdim
18326941Sdim#include "clang/Basic/LangOptions.h"
19326941Sdim#include "clang/Basic/MacroBuilder.h"
20326941Sdim#include "clang/Basic/TargetInfo.h"
21326941Sdim#include "llvm/ADT/StringRef.h"
22326941Sdim
23326941Sdimnamespace clang {
24326941Sdimnamespace targets {
25326941Sdim
26326941SdimLLVM_LIBRARY_VISIBILITY
27326941Sdimclang::TargetInfo *AllocateTarget(const llvm::Triple &Triple,
28326941Sdim                                  const clang::TargetOptions &Opts);
29326941Sdim
30326941Sdim/// DefineStd - Define a macro name and standard variants.  For example if
31326941Sdim/// MacroName is "unix", then this will define "__unix", "__unix__", and "unix"
32326941Sdim/// when in GNU mode.
33326941SdimLLVM_LIBRARY_VISIBILITY
34326941Sdimvoid DefineStd(clang::MacroBuilder &Builder, llvm::StringRef MacroName,
35326941Sdim               const clang::LangOptions &Opts);
36326941Sdim
37326941SdimLLVM_LIBRARY_VISIBILITY
38326941Sdimvoid defineCPUMacros(clang::MacroBuilder &Builder, llvm::StringRef CPUName,
39326941Sdim                     bool Tuning = true);
40326941Sdim
41326941SdimLLVM_LIBRARY_VISIBILITY
42326941Sdimvoid addCygMingDefines(const clang::LangOptions &Opts,
43326941Sdim                       clang::MacroBuilder &Builder);
44326941Sdim} // namespace targets
45326941Sdim} // namespace clang
46326941Sdim#endif // LLVM_CLANG_LIB_BASIC_TARGETS_H
47