cmake: use more system libraries

This commit is contained in:
Alexandre Bouvier 2022-09-01 12:48:31 +02:00
parent d8da8a54a6
commit 8a18a7df81
5 changed files with 87 additions and 5 deletions

View file

@ -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)

View file

@ -0,0 +1,26 @@
# SPDX-FileCopyrightText: 2022 Alexandre Bouvier <contact@amb.tf>
# 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
)

View file

@ -0,0 +1,46 @@
# SPDX-FileCopyrightText: 2022 Alexandre Bouvier <contact@amb.tf>
# 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)

View file

@ -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

View file

@ -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()