mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-24 23:16:05 +00:00

This PR is motivated by the requirements of ClangIR, which includes compilation pipelines that do not always start from the Clang driver. In these cases, accessing some target-specific information, such as obtaining a data layout string for a given target triple or querying other target details, requires foundational infrastructure like `clang::TargetInfo`. Since ClangIR is actively being upstreamed, sharing this logic across components has become essential, which leads to this PR. The function `clang::targets::AllocateTarget` serves as the factory for Clang's `TargetInfo`. To enable sharing, this PR moves `AllocateTarget` to a public header. The existing header `clang/lib/Basic/Targets.h` previously contained two parts: the `AllocateTarget` function and target-specific macro helpers. With `AllocateTarget` moved, only the macro stuff remain in `Targets.h`. To better organize the code, the macro helpers have been relocated to a new file, `clang/lib/Basic/TargetDefines.h` (essentially a rename). The original `Targets.h` now serves as a proxy header that includes both headers to maintain compatibility.
40 lines
1.4 KiB
C++
40 lines
1.4 KiB
C++
//===------- TargetDefines.h - Target define helpers ------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file declares a series of helper functions for defining target-specific
|
|
// macros.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_LIB_BASIC_TARGETDEFINES_H
|
|
#define LLVM_CLANG_LIB_BASIC_TARGETDEFINES_H
|
|
|
|
#include "clang/Basic/LangOptions.h"
|
|
#include "clang/Basic/MacroBuilder.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
|
|
namespace clang {
|
|
namespace targets {
|
|
/// Define a macro name and standard variants. For example if MacroName is
|
|
/// "unix", then this will define "__unix", "__unix__", and "unix" when in GNU
|
|
/// mode.
|
|
LLVM_LIBRARY_VISIBILITY
|
|
void DefineStd(clang::MacroBuilder &Builder, llvm::StringRef MacroName,
|
|
const clang::LangOptions &Opts);
|
|
|
|
LLVM_LIBRARY_VISIBILITY
|
|
void defineCPUMacros(clang::MacroBuilder &Builder, llvm::StringRef CPUName,
|
|
bool Tuning = true);
|
|
|
|
LLVM_LIBRARY_VISIBILITY
|
|
void addCygMingDefines(const clang::LangOptions &Opts,
|
|
clang::MacroBuilder &Builder);
|
|
} // namespace targets
|
|
} // namespace clang
|
|
#endif // LLVM_CLANG_LIB_BASIC_TARGETDEFINES_H
|