Author: 7mile Date: 2024-11-20T16:24:45+01:00 New Revision: acc32667b051d84b1660460344dabdc64b9244c1
URL: https://github.com/llvm/llvm-project/commit/acc32667b051d84b1660460344dabdc64b9244c1 DIFF: https://github.com/llvm/llvm-project/commit/acc32667b051d84b1660460344dabdc64b9244c1.diff LOG: [Clang][NFC] Refactor `Targets.h` to make it publicly accessible (#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. Added: clang/lib/Basic/TargetDefines.h Modified: clang/include/clang/Basic/TargetInfo.h clang/lib/Basic/Targets.h Removed: ################################################################################ diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 019ca25bb57ffd..9cd23d123f2bac 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1871,6 +1871,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..96fc4fe70fa9d2 --- /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 { +/// 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..e1458384fa1c8b 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 "TargetDefines.h" #include "clang/Basic/TargetInfo.h" -#include "llvm/ADT/StringRef.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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits