[clang] [Clang][NFC] Refactor `Targets.h` to make it publicly accessible (PR #116090)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 13 10:44:51 PST 2024
https://github.com/seven-mile created https://github.com/llvm/llvm-project/pull/116090
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.
>From 79266a93dde83c29c180f4a2c00ebdd3e575aea2 Mon Sep 17 00:00:00 2001
From: seven-mile <i at 7li.moe>
Date: Wed, 13 Nov 2024 18:10:58 +0000
Subject: [PATCH] [Clang][NFC] Refactor target info allocation to make it
publicly accessible
---
clang/include/clang/Basic/TargetInfo.h | 5 ++++
clang/lib/Basic/TargetDefines.h | 39 ++++++++++++++++++++++++++
clang/lib/Basic/Targets.h | 27 +-----------------
3 files changed, 45 insertions(+), 26 deletions(-)
create mode 100644 clang/lib/Basic/TargetDefines.h
diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h
index 25eda907d20a7b..71873ee2ca7cb9 100644
--- a/clang/include/clang/Basic/TargetInfo.h
+++ b/clang/include/clang/Basic/TargetInfo.h
@@ -1860,6 +1860,11 @@ class TargetInfo : public TransferrableTargetInfo,
void CheckFixedPointBits() const;
};
+namespace targets {
+std::unique_ptr<clang::TargetInfo>
+AllocateTarget(const llvm::Triple &Triple, const clang::TargetOptions &Opts);
+} // namespace targets
+
} // end namespace clang
#endif
diff --git a/clang/lib/Basic/TargetDefines.h b/clang/lib/Basic/TargetDefines.h
new file mode 100644
index 00000000000000..01db32f6a3d710
--- /dev/null
+++ b/clang/lib/Basic/TargetDefines.h
@@ -0,0 +1,39 @@
+//===------- 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 {
+/// DefineStd - 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
diff --git a/clang/lib/Basic/Targets.h b/clang/lib/Basic/Targets.h
index b4d2486b5d2b13..7b40b4388f8e23 100644
--- a/clang/lib/Basic/Targets.h
+++ b/clang/lib/Basic/Targets.h
@@ -15,32 +15,7 @@
#ifndef LLVM_CLANG_LIB_BASIC_TARGETS_H
#define LLVM_CLANG_LIB_BASIC_TARGETS_H
-#include "clang/Basic/LangOptions.h"
-#include "clang/Basic/MacroBuilder.h"
#include "clang/Basic/TargetInfo.h"
-#include "llvm/ADT/StringRef.h"
+#include "TargetDefines.h"
-namespace clang {
-namespace targets {
-
-LLVM_LIBRARY_VISIBILITY
-std::unique_ptr<clang::TargetInfo>
-AllocateTarget(const llvm::Triple &Triple, const clang::TargetOptions &Opts);
-
-/// DefineStd - 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_TARGETS_H
More information about the cfe-commits
mailing list