yuzu-Ubuntu/debian/patches/cmake-mbedtls.patch
Andrea Pappacoda c6c86baabe
d/patches: update patches
Gbp-Dch: Ignore
2023-01-07 18:51:37 +01:00

93 lines
3.4 KiB
Diff

Description: Make CMake use system MbedTLS
Author: Andrea Pappacoda <andrea@pappacoda.it>
Forwarded: https://github.com/yuzu-emu/yuzu/pull/7044
Last-Update: 2023-01-07
--- yuzu-0-1176+ds.orig/externals/CMakeLists.txt
+++ yuzu-0-1176+ds/externals/CMakeLists.txt
@@ -36,9 +36,14 @@ if (NOT TARGET inih::INIReader)
add_subdirectory(inih)
endif()
-# mbedtls
-add_subdirectory(mbedtls EXCLUDE_FROM_ALL)
-target_include_directories(mbedtls PUBLIC ./mbedtls/include)
+# MbedTLS
+find_package(MbedTLS 2.16)
+if(NOT MbedTLS_FOUND)
+ message(STATUS "MbedTLS not found, falling back to externals")
+ add_subdirectory(mbedtls EXCLUDE_FROM_ALL)
+ target_include_directories(mbedcrypto PUBLIC ./mbedtls/include)
+ add_library(MbedTLS::mbedcrypto ALIAS mbedcrypto)
+endif()
# MicroProfile
add_library(microprofile INTERFACE)
--- /dev/null
+++ yuzu-0-1176+ds/CMakeModules/FindMbedTLS.cmake
@@ -0,0 +1,43 @@
+# SPDX-FileCopyrightText: 2021 Andrea Pappacoda <andrea@pappacoda.it>
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# MbedTLS 3.0.0 will ship with a CMake package config file,
+# see ARMmbed/mbedtls@d259e347e6e3a630acfc1a811709ca05e5d3b92e,
+# so when yuzu will switch to that version this won't be required anymore.
+#
+# yuzu only uses mbedcrypto, searching for mbedtls and mbedx509 is not
+# needed.
+
+find_path(MbedTLS_INCLUDE_DIR mbedtls/cipher.h)
+
+find_library(MbedTLS_LIBRARY mbedcrypto)
+
+if (MbedTLS_INCLUDE_DIR AND MbedTLS_LIBRARY)
+ # Check for CMAC support
+ include(CheckSymbolExists)
+ set(CMAKE_REQUIRED_LIBRARIES ${MbedTLS_LIBRARY})
+ check_symbol_exists(mbedtls_cipher_cmac ${MbedTLS_INCLUDE_DIR}/mbedtls/cmac.h mbedcrypto_HAS_CMAC)
+ unset(CMAKE_REQUIRED_LIBRARIES)
+
+ # Check if version 2.x is available
+ file(READ "${MbedTLS_INCLUDE_DIR}/mbedtls/version.h" MbedTLS_VERSION_FILE)
+ string(REGEX MATCH "#define[ ]+MBEDTLS_VERSION_STRING[ ]+\"([0-9.]+)\"" _ ${MbedTLS_VERSION_FILE})
+ set(MbedTLS_VERSION "${CMAKE_MATCH_1}")
+
+ if (NOT TARGET MbedTLS::mbedcrypto)
+ add_library(MbedTLS::mbedcrypto UNKNOWN IMPORTED GLOBAL)
+ set_target_properties(MbedTLS::mbedcrypto PROPERTIES
+ IMPORTED_LOCATION "${MbedTLS_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${MbedTLS_INCLUDE_DIR}"
+ )
+ endif()
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(MbedTLS
+ REQUIRED_VARS
+ MbedTLS_LIBRARY
+ MbedTLS_INCLUDE_DIR
+ mbedcrypto_HAS_CMAC
+ VERSION_VAR MbedTLS_VERSION
+)
--- yuzu-0-1176+ds.orig/src/core/CMakeLists.txt
+++ yuzu-0-1176+ds/src/core/CMakeLists.txt
@@ -783,7 +783,7 @@ endif()
create_target_directory_groups(core)
target_link_libraries(core PUBLIC common PRIVATE audio_core network video_core)
-target_link_libraries(core PUBLIC Boost::boost PRIVATE fmt::fmt nlohmann_json::nlohmann_json mbedtls Opus::opus)
+target_link_libraries(core PUBLIC Boost::boost PRIVATE fmt::fmt nlohmann_json::nlohmann_json MbedTLS::mbedcrypto Opus::opus)
if (MINGW)
target_link_libraries(core PRIVATE ${MSWSOCK_LIBRARY})
endif()
--- yuzu-0-1176+ds.orig/src/dedicated_room/CMakeLists.txt
+++ yuzu-0-1176+ds/src/dedicated_room/CMakeLists.txt
@@ -16,7 +16,7 @@ if (ENABLE_WEB_SERVICE)
target_link_libraries(yuzu-room PRIVATE web_service)
endif()
-target_link_libraries(yuzu-room PRIVATE mbedtls mbedcrypto)
+target_link_libraries(yuzu-room PRIVATE MbedTLS::mbedcrypto)
if (MSVC)
target_link_libraries(yuzu-room PRIVATE getopt)
endif()