diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f7ee45a..af952c10 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,7 +99,10 @@ if (UNIX AND NOT APPLE) endif() if (ENABLE_VULKAN) - include_directories("dependencies/Vulkan-Headers/include") + find_package(VulkanHeaders 1.3.221) + if (NOT VulkanHeaders_FOUND) + add_subdirectory("dependencies/Vulkan-Headers" EXCLUDE_FROM_ALL) + endif() endif() if (ENABLE_OPENGL) @@ -107,9 +110,13 @@ if (ENABLE_OPENGL) endif() if (ENABLE_DISCORD_RPC) - add_definitions(-DENABLE_DISCORD_RPC) - add_subdirectory(dependencies/discord-rpc EXCLUDE_FROM_ALL) - target_include_directories(discord-rpc INTERFACE ./dependencies/discord-rpc/include) + find_package(DiscordRPC) + if (NOT DiscordRPC_FOUND) + add_subdirectory("dependencies/discord-rpc" EXCLUDE_FROM_ALL) + target_include_directories(discord-rpc INTERFACE "./dependencies/discord-rpc/include") + add_library(DiscordRPC::discord-rpc ALIAS discord-rpc) + endif() + add_compile_definitions("ENABLE_DISCORD_RPC") endif() if (ENABLE_WXWIDGETS) diff --git a/cmake/FindDiscordRPC.cmake b/cmake/FindDiscordRPC.cmake new file mode 100644 index 00000000..bd19c80c --- /dev/null +++ b/cmake/FindDiscordRPC.cmake @@ -0,0 +1,26 @@ +# SPDX-FileCopyrightText: 2022 Alexandre Bouvier +# SPDX-License-Identifier: GPL-3.0-or-later + +find_path(DiscordRPC_INCLUDE_DIR discord_rpc.h) + +find_library(DiscordRPC_LIBRARY discord-rpc) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(DiscordRPC + REQUIRED_VARS + DiscordRPC_LIBRARY + DiscordRPC_INCLUDE_DIR +) + +if (DiscordRPC_FOUND AND NOT TARGET DiscordRPC::discord-rpc) + add_library(DiscordRPC::discord-rpc UNKNOWN IMPORTED) + set_target_properties(DiscordRPC::discord-rpc PROPERTIES + IMPORTED_LOCATION "${DiscordRPC_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${DiscordRPC_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced( + DiscordRPC_INCLUDE_DIR + DiscordRPC_LIBRARY +) diff --git a/cmake/FindVulkanHeaders.cmake b/cmake/FindVulkanHeaders.cmake new file mode 100644 index 00000000..b673308c --- /dev/null +++ b/cmake/FindVulkanHeaders.cmake @@ -0,0 +1,46 @@ +# SPDX-FileCopyrightText: 2022 Alexandre Bouvier +# SPDX-License-Identifier: GPL-3.0-or-later + +find_package(PkgConfig QUIET) +if (PKG_CONFIG_FOUND) + pkg_search_module(VULKANHEADERS QUIET vulkanheaders vulkan-headers) +endif() + +find_path(VulkanHeaders_INCLUDE_DIR + NAMES vulkan.h + HINTS ${VULKANHEADERS_INCLUDE_DIRS} + PATH_SUFFIXES vulkan +) + +if (VulkanHeaders_INCLUDE_DIR) + file(READ "${VulkanHeaders_INCLUDE_DIR}/vulkan_core.h" _vulkan_core_file) + string(REGEX MATCH "#define[ \t]+VK_HEADER_VERSION_COMPLETE[ \t]+VK_MAKE_API_VERSION\\(([0-9]+),[ \t]*([0-9]+),[ \t]*([0-9]+),[ \t]*VK_HEADER_VERSION\\)" _dummy_var "${_vulkan_core_file}") + if (CMAKE_MATCH_COUNT EQUAL 3) + set(VulkanHeaders_VERSION_TWEAK ${CMAKE_MATCH_1}) + set(VulkanHeaders_VERSION_MAJOR ${CMAKE_MATCH_2}) + set(VulkanHeaders_VERSION_MINOR ${CMAKE_MATCH_3}) + string(REGEX MATCH "#define[ \t]+VK_HEADER_VERSION[ \t]+([0-9]+)" _dummy_var "${_vulkan_core_file}") + if (CMAKE_MATCH_COUNT EQUAL 1) + set(VulkanHeaders_VERSION_PATCH ${CMAKE_MATCH_1}) + set(VulkanHeaders_VERSION "${VulkanHeaders_VERSION_MAJOR}.${VulkanHeaders_VERSION_MINOR}.${VulkanHeaders_VERSION_PATCH}.${VulkanHeaders_VERSION_TWEAK}") + endif() + endif() + unset(_vulkan_core_file) + unset(_dummy_var) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(VulkanHeaders + REQUIRED_VARS VulkanHeaders_INCLUDE_DIR + VERSION_VAR VulkanHeaders_VERSION +) + +if (VulkanHeaders_FOUND AND NOT TARGET Vulkan::Headers) + add_library(Vulkan::Headers INTERFACE IMPORTED) + set_target_properties(Vulkan::Headers PROPERTIES + INTERFACE_COMPILE_OPTIONS "${VULKANHEADERS_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${VulkanHeaders_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(VulkanHeaders_INCLUDE_DIR) diff --git a/src/Cafe/CMakeLists.txt b/src/Cafe/CMakeLists.txt index 47ad5667..64cfb65f 100644 --- a/src/Cafe/CMakeLists.txt +++ b/src/Cafe/CMakeLists.txt @@ -20,6 +20,9 @@ target_precompile_headers(CemuCafe PRIVATE ../Common/precompiled.h) target_include_directories(CemuCafe PUBLIC "../") +# PUBLIC because vulkan/vulkan.h is included in CocoaSurface.h, VulkanAPI.h and RendererShaderVk.h +target_link_libraries(CemuCafe PUBLIC Vulkan::Headers) + target_link_libraries(CemuCafe PRIVATE CemuAsm CemuAudio diff --git a/src/Cemu/CMakeLists.txt b/src/Cemu/CMakeLists.txt index b8ceb1d1..74ff6d65 100644 --- a/src/Cemu/CMakeLists.txt +++ b/src/Cemu/CMakeLists.txt @@ -28,5 +28,5 @@ target_link_libraries(CemuComponents PRIVATE target_link_libraries(CemuComponents PUBLIC fmt::fmt) if(ENABLE_DISCORD_RPC) -target_link_libraries(CemuComponents PRIVATE discord-rpc) + target_link_libraries(CemuComponents PRIVATE DiscordRPC::discord-rpc) endif()