From 34b1ea9c1925d0da9377973d25e10e9b5ec40e94 Mon Sep 17 00:00:00 2001 From: Alexandre Bouvier Date: Mon, 23 Jan 2023 01:51:12 +0100 Subject: [PATCH] cmake: prefer system llvm library --- CMakeLists.txt | 1 + CMakeModules/FindLLVM.cmake | 16 ++++++++++++++++ externals/CMakeLists.txt | 9 ++++++--- externals/demangle/ItaniumDemangle.cpp | 4 ++-- .../demangle/{ => llvm/Demangle}/Demangle.h | 0 .../{ => llvm/Demangle}/DemangleConfig.h | 0 .../{ => llvm/Demangle}/ItaniumDemangle.h | 0 .../demangle/{ => llvm/Demangle}/StringView.h | 0 externals/demangle/{ => llvm/Demangle}/Utility.h | 0 src/common/CMakeLists.txt | 2 +- src/common/demangle.cpp | 6 ++---- 11 files changed, 28 insertions(+), 10 deletions(-) create mode 100644 CMakeModules/FindLLVM.cmake rename externals/demangle/{ => llvm/Demangle}/Demangle.h (100%) rename externals/demangle/{ => llvm/Demangle}/DemangleConfig.h (100%) rename externals/demangle/{ => llvm/Demangle}/ItaniumDemangle.h (100%) rename externals/demangle/{ => llvm/Demangle}/StringView.h (100%) rename externals/demangle/{ => llvm/Demangle}/Utility.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index f91ba950aa..b3329318a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -208,6 +208,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) find_package(enet 1.3 MODULE) find_package(fmt 9 REQUIRED) find_package(inih MODULE) +find_package(LLVM MODULE) find_package(lz4 REQUIRED) find_package(nlohmann_json 3.8 REQUIRED) find_package(Opus 1.3 MODULE) diff --git a/CMakeModules/FindLLVM.cmake b/CMakeModules/FindLLVM.cmake new file mode 100644 index 0000000000..513d9a5365 --- /dev/null +++ b/CMakeModules/FindLLVM.cmake @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: 2023 Alexandre Bouvier +# +# SPDX-License-Identifier: GPL-3.0-or-later + +find_package(LLVM QUIET CONFIG) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LLVM CONFIG_MODE) + +if (LLVM_FOUND AND NOT TARGET LLVM::Demangle) + add_library(LLVM::Demangle INTERFACE IMPORTED) + llvm_map_components_to_libnames(LLVM_LIBRARIES demangle) + target_compile_definitions(LLVM::Demangle INTERFACE ${LLVM_DEFINITIONS}) + target_include_directories(LLVM::Demangle INTERFACE ${LLVM_INCLUDE_DIRS}) + target_link_libraries(LLVM::Demangle INTERFACE ${LLVM_LIBRARIES}) +endif() diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 94dd8bb622..8532fd7a8a 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -158,6 +158,9 @@ if (YUZU_USE_EXTERNAL_VULKAN_HEADERS) add_subdirectory(Vulkan-Headers EXCLUDE_FROM_ALL) endif() -add_library(demangle STATIC) -target_include_directories(demangle PUBLIC ./demangle) -target_sources(demangle PRIVATE demangle/ItaniumDemangle.cpp) +if (NOT TARGET LLVM::Demangle) + add_library(demangle STATIC) + target_include_directories(demangle PUBLIC ./demangle) + target_sources(demangle PRIVATE demangle/ItaniumDemangle.cpp) + add_library(LLVM::Demangle ALIAS demangle) +endif() diff --git a/externals/demangle/ItaniumDemangle.cpp b/externals/demangle/ItaniumDemangle.cpp index 5e078e3e2c..b055a2fd7d 100644 --- a/externals/demangle/ItaniumDemangle.cpp +++ b/externals/demangle/ItaniumDemangle.cpp @@ -11,8 +11,8 @@ // file does not yet support: // - C++ modules TS -#include "Demangle.h" -#include "ItaniumDemangle.h" +#include "llvm/Demangle/Demangle.h" +#include "llvm/Demangle/ItaniumDemangle.h" #include #include diff --git a/externals/demangle/Demangle.h b/externals/demangle/llvm/Demangle/Demangle.h similarity index 100% rename from externals/demangle/Demangle.h rename to externals/demangle/llvm/Demangle/Demangle.h diff --git a/externals/demangle/DemangleConfig.h b/externals/demangle/llvm/Demangle/DemangleConfig.h similarity index 100% rename from externals/demangle/DemangleConfig.h rename to externals/demangle/llvm/Demangle/DemangleConfig.h diff --git a/externals/demangle/ItaniumDemangle.h b/externals/demangle/llvm/Demangle/ItaniumDemangle.h similarity index 100% rename from externals/demangle/ItaniumDemangle.h rename to externals/demangle/llvm/Demangle/ItaniumDemangle.h diff --git a/externals/demangle/StringView.h b/externals/demangle/llvm/Demangle/StringView.h similarity index 100% rename from externals/demangle/StringView.h rename to externals/demangle/llvm/Demangle/StringView.h diff --git a/externals/demangle/Utility.h b/externals/demangle/llvm/Demangle/Utility.h similarity index 100% rename from externals/demangle/Utility.h rename to externals/demangle/llvm/Demangle/Utility.h diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index bd6ac67161..9884a4a0b4 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -177,7 +177,7 @@ endif() create_target_directory_groups(common) target_link_libraries(common PUBLIC ${Boost_LIBRARIES} fmt::fmt microprofile Threads::Threads) -target_link_libraries(common PRIVATE lz4::lz4 zstd::zstd demangle) +target_link_libraries(common PRIVATE lz4::lz4 zstd::zstd LLVM::Demangle) if (YUZU_USE_PRECOMPILED_HEADERS) target_precompile_headers(common PRIVATE precompiled_headers.h) diff --git a/src/common/demangle.cpp b/src/common/demangle.cpp index f4246f6668..3310faf86a 100644 --- a/src/common/demangle.cpp +++ b/src/common/demangle.cpp @@ -1,13 +1,11 @@ // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#include + #include "common/demangle.h" #include "common/scope_exit.h" -namespace llvm { -char* itaniumDemangle(const char* mangled_name, char* buf, size_t* n, int* status); -} - namespace Common { std::string DemangleSymbol(const std::string& mangled) {