From 02eaf3c5a7ff24be27ebc9674576d956e7c68da6 Mon Sep 17 00:00:00 2001 From: crueter Date: Tue, 16 Jun 2026 16:15:49 +0200 Subject: [cmake, docs] Reorganize CMakeModules directory and add GentooCross toolchain (#4088) Lightly inspired by my earlier toolchain and writeup from the PowerPC PR. Closes #3793 Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4088 Reviewed-by: Lizzie Reviewed-by: MaranBr --- CMakeModules/FindDiscordRPC.cmake | 33 ----- CMakeModules/FindFFmpeg.cmake | 198 ------------------------------ CMakeModules/FindLLVM.cmake | 30 ----- CMakeModules/FindOpus.cmake | 22 ---- CMakeModules/FindRenderDoc.cmake | 19 --- CMakeModules/FindSimpleIni.cmake | 21 ---- CMakeModules/Findenet.cmake | 23 ---- CMakeModules/Findgamemode.cmake | 15 --- CMakeModules/Findhttplib.cmake | 31 ----- CMakeModules/Findlibiw.cmake | 29 ----- CMakeModules/Findlibusb.cmake | 23 ---- CMakeModules/Findlz4.cmake | 34 ----- CMakeModules/Findstb.cmake | 31 ----- CMakeModules/Findzstd.cmake | 41 ------- CMakeModules/WindowsCopyFiles.cmake | 39 ------ CMakeModules/aqt_config.ini | 30 ----- CMakeModules/find/FindDiscordRPC.cmake | 33 +++++ CMakeModules/find/FindFFmpeg.cmake | 198 ++++++++++++++++++++++++++++++ CMakeModules/find/FindLLVM.cmake | 30 +++++ CMakeModules/find/FindOpus.cmake | 22 ++++ CMakeModules/find/FindRenderDoc.cmake | 22 ++++ CMakeModules/find/FindSimpleIni.cmake | 24 ++++ CMakeModules/find/Findenet.cmake | 23 ++++ CMakeModules/find/Findgamemode.cmake | 18 +++ CMakeModules/find/Findhttplib.cmake | 34 +++++ CMakeModules/find/Findlibiw.cmake | 29 +++++ CMakeModules/find/Findlibusb.cmake | 23 ++++ CMakeModules/find/Findlz4.cmake | 34 +++++ CMakeModules/find/Findstb.cmake | 34 +++++ CMakeModules/find/Findzstd.cmake | 41 +++++++ CMakeModules/toolchains/GentooCross.cmake | 39 ++++++ 31 files changed, 604 insertions(+), 619 deletions(-) delete mode 100644 CMakeModules/FindDiscordRPC.cmake delete mode 100644 CMakeModules/FindFFmpeg.cmake delete mode 100644 CMakeModules/FindLLVM.cmake delete mode 100644 CMakeModules/FindOpus.cmake delete mode 100644 CMakeModules/FindRenderDoc.cmake delete mode 100644 CMakeModules/FindSimpleIni.cmake delete mode 100644 CMakeModules/Findenet.cmake delete mode 100644 CMakeModules/Findgamemode.cmake delete mode 100644 CMakeModules/Findhttplib.cmake delete mode 100644 CMakeModules/Findlibiw.cmake delete mode 100644 CMakeModules/Findlibusb.cmake delete mode 100644 CMakeModules/Findlz4.cmake delete mode 100644 CMakeModules/Findstb.cmake delete mode 100644 CMakeModules/Findzstd.cmake delete mode 100644 CMakeModules/WindowsCopyFiles.cmake delete mode 100644 CMakeModules/aqt_config.ini create mode 100644 CMakeModules/find/FindDiscordRPC.cmake create mode 100644 CMakeModules/find/FindFFmpeg.cmake create mode 100644 CMakeModules/find/FindLLVM.cmake create mode 100644 CMakeModules/find/FindOpus.cmake create mode 100644 CMakeModules/find/FindRenderDoc.cmake create mode 100644 CMakeModules/find/FindSimpleIni.cmake create mode 100644 CMakeModules/find/Findenet.cmake create mode 100644 CMakeModules/find/Findgamemode.cmake create mode 100644 CMakeModules/find/Findhttplib.cmake create mode 100644 CMakeModules/find/Findlibiw.cmake create mode 100644 CMakeModules/find/Findlibusb.cmake create mode 100644 CMakeModules/find/Findlz4.cmake create mode 100644 CMakeModules/find/Findstb.cmake create mode 100644 CMakeModules/find/Findzstd.cmake create mode 100644 CMakeModules/toolchains/GentooCross.cmake (limited to 'CMakeModules') diff --git a/CMakeModules/FindDiscordRPC.cmake b/CMakeModules/FindDiscordRPC.cmake deleted file mode 100644 index 5ae9f4f999..0000000000 --- a/CMakeModules/FindDiscordRPC.cmake +++ /dev/null @@ -1,33 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -# SPDX-FileCopyrightText: 2022 Alexandre Bouvier -# -# SPDX-License-Identifier: GPL-3.0-or-later - -find_package(DiscordRPC CONFIG QUIET) - -if (NOT DiscordRPC_FOUND) - 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 - ) -endif() diff --git a/CMakeModules/FindFFmpeg.cmake b/CMakeModules/FindFFmpeg.cmake deleted file mode 100644 index edd0e0a882..0000000000 --- a/CMakeModules/FindFFmpeg.cmake +++ /dev/null @@ -1,198 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -# SPDX-FileCopyrightText: 2019 Citra Emulator Project -# SPDX-License-Identifier: GPL-2.0-or-later - -# FindFFmpeg -# ---------- -# -# Find the native FFmpeg includes and libraries -# -# This module defines the following variables: -# -# FFmpeg_INCLUDE_: where to find .h -# FFmpeg_LIBRARY_: where to find the library -# FFmpeg_INCLUDE_DIR: aggregate all the include paths -# FFmpeg_LIBRARIES: aggregate all the paths to the libraries -# FFmpeg_FOUND: True if all components have been found -# -# This module defines the following targets, which are preferred over variables: -# -# FFmpeg::: Target to use directly, with include path, -# library and dependencies set up. If you are using a static build, you are -# responsible for adding any external dependencies (such as zlib, bzlib...). -# -# can be one of: -# avcodec -# avdevice -# avfilter -# avformat -# avutil -# postproc -# swresample -# swscale -# - -set(_FFmpeg_ALL_COMPONENTS - avcodec - avdevice - avfilter - avformat - avutil - postproc - swresample - swscale -) - -set(_FFmpeg_DEPS_avcodec avutil) -set(_FFmpeg_DEPS_avdevice avcodec avformat avutil) -set(_FFmpeg_DEPS_avfilter avutil) -set(_FFmpeg_DEPS_avformat avcodec avutil) -set(_FFmpeg_DEPS_postproc avutil) -set(_FFmpeg_DEPS_swresample avutil) -set(_FFmpeg_DEPS_swscale avutil) - -function(find_ffmpeg LIBNAME) - if(DEFINED ENV{FFMPEG_DIR}) - set(FFMPEG_DIR $ENV{FFMPEG_DIR}) - endif() - - if(FFMPEG_DIR) - list(APPEND INCLUDE_PATHS - ${FFMPEG_DIR} - ${FFMPEG_DIR}/ffmpeg - ${FFMPEG_DIR}/lib${LIBNAME} - ${FFMPEG_DIR}/include/lib${LIBNAME} - ${FFMPEG_DIR}/include/ffmpeg - ${FFMPEG_DIR}/include - NO_DEFAULT_PATH - NO_CMAKE_FIND_ROOT_PATH - ) - list(APPEND LIB_PATHS - ${FFMPEG_DIR} - ${FFMPEG_DIR}/lib - ${FFMPEG_DIR}/lib${LIBNAME} - NO_DEFAULT_PATH - NO_CMAKE_FIND_ROOT_PATH - ) - else() - list(APPEND INCLUDE_PATHS - ${CMAKE_SYSROOT}/usr/local/include/ffmpeg - ${CMAKE_SYSROOT}/usr/local/include/lib${LIBNAME} - ${CMAKE_SYSROOT}/usr/include/ffmpeg - ${CMAKE_SYSROOT}/usr/include/lib${LIBNAME} - ${CMAKE_SYSROOT}/usr/include/ffmpeg/lib${LIBNAME} - ) - - list(APPEND LIB_PATHS - ${CMAKE_SYSROOT}/usr/local/lib - ${CMAKE_SYSROOT}/usr/lib - ) - endif() - - find_path(FFmpeg_INCLUDE_${LIBNAME} lib${LIBNAME}/${LIBNAME}.h - HINTS ${INCLUDE_PATHS} - ) - - find_library(FFmpeg_LIBRARY_${LIBNAME} ${LIBNAME} - HINTS ${LIB_PATHS} - ) - - if(NOT FFMPEG_DIR AND (NOT FFmpeg_LIBRARY_${LIBNAME} OR NOT FFmpeg_INCLUDE_${LIBNAME})) - # Didn't find it in the usual paths, try pkg-config - find_package(PkgConfig QUIET) - pkg_check_modules(FFmpeg_PKGCONFIG_${LIBNAME} QUIET lib${LIBNAME}) - - find_path(FFmpeg_INCLUDE_${LIBNAME} lib${LIBNAME}/${LIBNAME}.h - ${FFmpeg_PKGCONFIG_${LIBNAME}_INCLUDE_DIRS} - ) - - find_library(FFmpeg_LIBRARY_${LIBNAME} ${LIBNAME} - ${FFmpeg_PKGCONFIG_${LIBNAME}_LIBRARY_DIRS} - ) - endif() - - if(FFmpeg_INCLUDE_${LIBNAME} AND FFmpeg_LIBRARY_${LIBNAME}) - set(FFmpeg_INCLUDE_${LIBNAME} "${FFmpeg_INCLUDE_${LIBNAME}}" PARENT_SCOPE) - set(FFmpeg_LIBRARY_${LIBNAME} "${FFmpeg_LIBRARY_${LIBNAME}}" PARENT_SCOPE) - - # Extract FFmpeg version from version.h - foreach(v MAJOR MINOR MICRO) - set(FFmpeg_${LIBNAME}_VERSION_${v} 0) - endforeach() - string(TOUPPER ${LIBNAME} LIBNAME_UPPER) - file(STRINGS "${FFmpeg_INCLUDE_${LIBNAME}}/lib${LIBNAME}/version.h" _FFmpeg_VERSION_H_CONTENTS REGEX "#define LIB${LIBNAME_UPPER}_VERSION_(MAJOR|MINOR|MICRO) ") - set(_FFmpeg_VERSION_REGEX "([0-9]+)") - foreach(v MAJOR MINOR MICRO) - if("${_FFmpeg_VERSION_H_CONTENTS}" MATCHES "#define LIB${LIBNAME_UPPER}_VERSION_${v}[\\t ]+${_FFmpeg_VERSION_REGEX}") - set(FFmpeg_${LIBNAME}_VERSION_${v} "${CMAKE_MATCH_1}") - endif() - endforeach() - set(FFmpeg_${LIBNAME}_VERSION "${FFmpeg_${LIBNAME}_VERSION_MAJOR}.${FFmpeg_${LIBNAME}_VERSION_MINOR}.${FFmpeg_${LIBNAME}_VERSION_MICRO}") - set(FFmpeg_${c}_VERSION "${FFmpeg_${LIBNAME}_VERSION}" PARENT_SCOPE) - unset(_FFmpeg_VERSION_REGEX) - unset(_FFmpeg_VERSION_H_CONTENTS) - - set(FFmpeg_${c}_FOUND TRUE PARENT_SCOPE) - if(NOT FFmpeg_FIND_QUIETLY) - message("-- Found ${LIBNAME}: ${FFmpeg_INCLUDE_${LIBNAME}} ${FFmpeg_LIBRARY_${LIBNAME}} (version: ${FFmpeg_${LIBNAME}_VERSION})") - endif() - endif() -endfunction() - -foreach(c ${_FFmpeg_ALL_COMPONENTS}) - find_ffmpeg(${c}) -endforeach() - -foreach(c ${_FFmpeg_ALL_COMPONENTS}) - if(FFmpeg_${c}_FOUND) - list(APPEND FFmpeg_INCLUDE_DIR ${FFmpeg_INCLUDE_${c}}) - list(APPEND FFmpeg_LIBRARIES ${FFmpeg_LIBRARY_${c}}) - - add_library(FFmpeg::${c} IMPORTED UNKNOWN) - set_target_properties(FFmpeg::${c} PROPERTIES - IMPORTED_LOCATION ${FFmpeg_LIBRARY_${c}} - INTERFACE_INCLUDE_DIRECTORIES ${FFmpeg_INCLUDE_${c}} - ) - if(_FFmpeg_DEPS_${c}) - set(deps) - foreach(dep ${_FFmpeg_DEPS_${c}}) - list(APPEND deps FFmpeg::${dep}) - endforeach() - - set_target_properties(FFmpeg::${c} PROPERTIES - INTERFACE_LINK_LIBRARIES "${deps}" - ) - unset(deps) - endif() - endif() -endforeach() - -if(FFmpeg_INCLUDE_DIR) - list(REMOVE_DUPLICATES FFmpeg_INCLUDE_DIR) -endif() - -foreach(c ${FFmpeg_FIND_COMPONENTS}) - list(APPEND _FFmpeg_REQUIRED_VARS FFmpeg_INCLUDE_${c} FFmpeg_LIBRARY_${c}) -endforeach() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(FFmpeg - REQUIRED_VARS ${_FFmpeg_REQUIRED_VARS} - HANDLE_COMPONENTS -) - -foreach(c ${_FFmpeg_ALL_COMPONENTS}) - unset(_FFmpeg_DEPS_${c}) -endforeach() -unset(_FFmpeg_ALL_COMPONENTS) -unset(_FFmpeg_REQUIRED_VARS) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(FFmpeg - REQUIRED_VARS - FFmpeg_LIBRARIES - FFmpeg_INCLUDE_DIR - HANDLE_COMPONENTS -) diff --git a/CMakeModules/FindLLVM.cmake b/CMakeModules/FindLLVM.cmake deleted file mode 100644 index f169f134d5..0000000000 --- a/CMakeModules/FindLLVM.cmake +++ /dev/null @@ -1,30 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -# SPDX-FileCopyrightText: 2023 Alexandre Bouvier -# -# SPDX-License-Identifier: GPL-3.0-or-later - -find_package(LLVM QUIET COMPONENTS CONFIG) -if (LLVM_FOUND) - separate_arguments(LLVM_DEFINITIONS) - if (LLVMDemangle IN_LIST LLVM_AVAILABLE_LIBS) - set(LLVM_Demangle_FOUND TRUE) - endif() -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(LLVM HANDLE_COMPONENTS CONFIG_MODE) - -# Demangle only for Windows targets -if (WIN32 AND LLVM_FOUND AND LLVM_Demangle_FOUND AND NOT TARGET LLVM::Demangle) - add_library(LLVM::Demangle INTERFACE IMPORTED) - target_compile_definitions(LLVM::Demangle INTERFACE ${LLVM_DEFINITIONS}) - target_include_directories(LLVM::Demangle INTERFACE ${LLVM_INCLUDE_DIRS}) - # prefer shared LLVM: https://github.com/llvm/llvm-project/issues/34593 - # but use ugly hack because llvm_config doesn't support interface library - add_library(_dummy_lib SHARED EXCLUDE_FROM_ALL ${CMAKE_SOURCE_DIR}/src/yuzu/main.cpp) - llvm_config(_dummy_lib USE_SHARED demangle) - get_target_property(LLVM_LIBRARIES _dummy_lib LINK_LIBRARIES) - target_link_libraries(LLVM::Demangle INTERFACE ${LLVM_LIBRARIES}) -endif() diff --git a/CMakeModules/FindOpus.cmake b/CMakeModules/FindOpus.cmake deleted file mode 100644 index 5557cd1baf..0000000000 --- a/CMakeModules/FindOpus.cmake +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -# SPDX-FileCopyrightText: 2022 yuzu Emulator Project -# SPDX-License-Identifier: GPL-2.0-or-later - -find_package(PkgConfig QUIET) -pkg_search_module(OPUS QUIET IMPORTED_TARGET opus) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Opus - REQUIRED_VARS OPUS_LINK_LIBRARIES - VERSION_VAR OPUS_VERSION -) - -if (PLATFORM_MSYS) - FixMsysPath(PkgConfig::OPUS) -endif() - -if (Opus_FOUND AND NOT TARGET Opus::opus) - add_library(Opus::opus ALIAS PkgConfig::OPUS) -endif() diff --git a/CMakeModules/FindRenderDoc.cmake b/CMakeModules/FindRenderDoc.cmake deleted file mode 100644 index 2678b936bc..0000000000 --- a/CMakeModules/FindRenderDoc.cmake +++ /dev/null @@ -1,19 +0,0 @@ -# SPDX-FileCopyrightText: 2023 Alexandre Bouvier -# -# SPDX-License-Identifier: GPL-3.0-or-later - -find_path(RenderDoc_INCLUDE_DIR renderdoc_app.h) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(RenderDoc - REQUIRED_VARS RenderDoc_INCLUDE_DIR -) - -if (RenderDoc_FOUND AND NOT TARGET RenderDoc::API) - add_library(RenderDoc::API INTERFACE IMPORTED) - set_target_properties(RenderDoc::API PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${RenderDoc_INCLUDE_DIR}" - ) -endif() - -mark_as_advanced(RenderDoc_INCLUDE_DIR) diff --git a/CMakeModules/FindSimpleIni.cmake b/CMakeModules/FindSimpleIni.cmake deleted file mode 100644 index 13426b25ba..0000000000 --- a/CMakeModules/FindSimpleIni.cmake +++ /dev/null @@ -1,21 +0,0 @@ -# SPDX-FileCopyrightText: 2023 Alexandre Bouvier -# -# SPDX-License-Identifier: GPL-3.0-or-later - -include(FindPackageHandleStandardArgs) - -find_package(SimpleIni QUIET CONFIG) -if (SimpleIni_CONSIDERED_CONFIGS) - find_package_handle_standard_args(SimpleIni CONFIG_MODE) -else() - find_package(PkgConfig QUIET) - pkg_search_module(SIMPLEINI QUIET IMPORTED_TARGET simpleini) - find_package_handle_standard_args(SimpleIni - REQUIRED_VARS SIMPLEINI_INCLUDEDIR - VERSION_VAR SIMPLEINI_VERSION - ) -endif() - -if (SimpleIni_FOUND AND NOT TARGET SimpleIni::SimpleIni) - add_library(SimpleIni::SimpleIni ALIAS PkgConfig::SIMPLEINI) -endif() diff --git a/CMakeModules/Findenet.cmake b/CMakeModules/Findenet.cmake deleted file mode 100644 index d80e737ebb..0000000000 --- a/CMakeModules/Findenet.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -# SPDX-FileCopyrightText: 2022 Alexandre Bouvier -# -# SPDX-License-Identifier: GPL-3.0-or-later - -find_package(PkgConfig QUIET) -pkg_search_module(ENET QUIET IMPORTED_TARGET libenet) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(enet - REQUIRED_VARS ENET_LINK_LIBRARIES - VERSION_VAR ENET_VERSION -) - -if (PLATFORM_MSYS) - FixMsysPath(PkgConfig::ENET) -endif() - -if (enet_FOUND AND NOT TARGET enet::enet) - add_library(enet::enet ALIAS PkgConfig::ENET) -endif() diff --git a/CMakeModules/Findgamemode.cmake b/CMakeModules/Findgamemode.cmake deleted file mode 100644 index aa2f366832..0000000000 --- a/CMakeModules/Findgamemode.cmake +++ /dev/null @@ -1,15 +0,0 @@ -# SPDX-FileCopyrightText: 2023 yuzu Emulator Project -# SPDX-License-Identifier: GPL-2.0-or-later - -find_package(PkgConfig QUIET) -pkg_search_module(GAMEMODE QUIET IMPORTED_TARGET gamemode) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(gamemode - REQUIRED_VARS GAMEMODE_INCLUDEDIR - VERSION_VAR GAMEMODE_VERSION -) - -if (gamemode_FOUND AND NOT TARGET gamemode::headers) - add_library(gamemode::headers ALIAS PkgConfig::GAMEMODE) -endif() diff --git a/CMakeModules/Findhttplib.cmake b/CMakeModules/Findhttplib.cmake deleted file mode 100644 index 48967add96..0000000000 --- a/CMakeModules/Findhttplib.cmake +++ /dev/null @@ -1,31 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Andrea Pappacoda -# -# SPDX-License-Identifier: GPL-2.0-or-later - -include(FindPackageHandleStandardArgs) - -find_package(httplib QUIET CONFIG) -if (httplib_CONSIDERED_CONFIGS) - find_package_handle_standard_args(httplib HANDLE_COMPONENTS CONFIG_MODE) -else() - find_package(PkgConfig QUIET) - pkg_search_module(HTTPLIB QUIET IMPORTED_TARGET cpp-httplib) - if ("-DCPPHTTPLIB_OPENSSL_SUPPORT" IN_LIST HTTPLIB_CFLAGS_OTHER) - set(httplib_OpenSSL_FOUND TRUE) - endif() - if ("-DCPPHTTPLIB_ZLIB_SUPPORT" IN_LIST HTTPLIB_CFLAGS_OTHER) - set(httplib_ZLIB_FOUND TRUE) - endif() - if ("-DCPPHTTPLIB_BROTLI_SUPPORT" IN_LIST HTTPLIB_CFLAGS_OTHER) - set(httplib_Brotli_FOUND TRUE) - endif() - find_package_handle_standard_args(httplib - REQUIRED_VARS HTTPLIB_INCLUDEDIR - VERSION_VAR HTTPLIB_VERSION - HANDLE_COMPONENTS - ) -endif() - -if (httplib_FOUND AND NOT TARGET httplib::httplib) - add_library(httplib::httplib ALIAS PkgConfig::HTTPLIB) -endif() diff --git a/CMakeModules/Findlibiw.cmake b/CMakeModules/Findlibiw.cmake deleted file mode 100644 index 1d13d7705a..0000000000 --- a/CMakeModules/Findlibiw.cmake +++ /dev/null @@ -1,29 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -find_package(PkgConfig QUIET) -pkg_search_module(IW QUIET IMPORTED_TARGET iw) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Libiw - REQUIRED_VARS IW_LIBRARIES IW_INCLUDE_DIRS - VERSION_VAR IW_VERSION - FAIL_MESSAGE "libiw (Wireless Tools library) not found. Please install libiw-dev (Debian/Ubuntu), wireless-tools-devel (Fedora), wireless_tools (Arch), or net-wireless/iw (Gentoo)." -) - -if (Libiw_FOUND AND TARGET PkgConfig::IW AND NOT TARGET iw::iw) - add_library(iw::iw ALIAS PkgConfig::IW) -endif() - -if(Libiw_FOUND) - mark_as_advanced( - IW_INCLUDE_DIRS - IW_LIBRARIES - IW_LIBRARY_DIRS - IW_LINK_LIBRARIES # Often set by pkg-config - IW_LDFLAGS - IW_CFLAGS - IW_CFLAGS_OTHER - IW_VERSION - ) -endif() diff --git a/CMakeModules/Findlibusb.cmake b/CMakeModules/Findlibusb.cmake deleted file mode 100644 index 87b174c5b4..0000000000 --- a/CMakeModules/Findlibusb.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -# SPDX-FileCopyrightText: 2022 Alexandre Bouvier -# -# SPDX-License-Identifier: GPL-3.0-or-later - -find_package(PkgConfig QUIET) -pkg_search_module(LIBUSB QUIET IMPORTED_TARGET libusb-1.0) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(libusb - REQUIRED_VARS LIBUSB_LINK_LIBRARIES - VERSION_VAR LIBUSB_VERSION -) - -if (PLATFORM_MSYS) - FixMsysPath(PkgConfig::LIBUSB) -endif() - -if (libusb_FOUND AND NOT TARGET libusb::usb) - add_library(libusb::usb ALIAS PkgConfig::LIBUSB) -endif() diff --git a/CMakeModules/Findlz4.cmake b/CMakeModules/Findlz4.cmake deleted file mode 100644 index af230166eb..0000000000 --- a/CMakeModules/Findlz4.cmake +++ /dev/null @@ -1,34 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -# SPDX-FileCopyrightText: 2022 yuzu Emulator Project -# SPDX-License-Identifier: GPL-2.0-or-later - -include(FindPackageHandleStandardArgs) - -find_package(lz4 QUIET CONFIG) -if (lz4_CONSIDERED_CONFIGS) - find_package_handle_standard_args(lz4 CONFIG_MODE) -else() - find_package(PkgConfig QUIET) - pkg_search_module(LZ4 QUIET IMPORTED_TARGET liblz4) - - if (PLATFORM_MSYS) - FixMsysPath(PkgConfig::LZ4) - endif() - - find_package_handle_standard_args(lz4 - REQUIRED_VARS LZ4_LINK_LIBRARIES - VERSION_VAR LZ4_VERSION - ) -endif() - -if (lz4_FOUND AND NOT TARGET lz4::lz4) - if (TARGET LZ4::lz4_shared) - add_library(lz4::lz4 ALIAS LZ4::lz4_shared) - elseif (TARGET LZ4::lz4_static) - add_library(lz4::lz4 ALIAS LZ4::lz4_static) - else() - add_library(lz4::lz4 ALIAS PkgConfig::LZ4) - endif() -endif() diff --git a/CMakeModules/Findstb.cmake b/CMakeModules/Findstb.cmake deleted file mode 100644 index bff9985802..0000000000 --- a/CMakeModules/Findstb.cmake +++ /dev/null @@ -1,31 +0,0 @@ -# SPDX-FileCopyrightText: 2023 Alexandre Bouvier -# -# SPDX-License-Identifier: GPL-3.0-or-later - -find_path(stb_image_INCLUDE_DIR stb_image.h PATH_SUFFIXES stb) -find_path(stb_image_resize_INCLUDE_DIR stb_image_resize.h PATH_SUFFIXES stb) -find_path(stb_image_write_INCLUDE_DIR stb_image_write.h PATH_SUFFIXES stb) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(stb - REQUIRED_VARS - stb_image_INCLUDE_DIR - stb_image_resize_INCLUDE_DIR - stb_image_write_INCLUDE_DIR -) - -if (stb_FOUND AND NOT TARGET stb::headers) - add_library(stb::headers INTERFACE IMPORTED) - set_property(TARGET stb::headers PROPERTY - INTERFACE_INCLUDE_DIRECTORIES - "${stb_image_INCLUDE_DIR}" - "${stb_image_resize_INCLUDE_DIR}" - "${stb_image_write_INCLUDE_DIR}" - ) -endif() - -mark_as_advanced( - stb_image_INCLUDE_DIR - stb_image_resize_INCLUDE_DIR - stb_image_write_INCLUDE_DIR -) diff --git a/CMakeModules/Findzstd.cmake b/CMakeModules/Findzstd.cmake deleted file mode 100644 index 8e44b7a892..0000000000 --- a/CMakeModules/Findzstd.cmake +++ /dev/null @@ -1,41 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -# SPDX-FileCopyrightText: 2022 yuzu Emulator Project -# SPDX-License-Identifier: GPL-2.0-or-later - -include(FindPackageHandleStandardArgs) - -find_package(zstd QUIET CONFIG) -if (zstd_CONSIDERED_CONFIGS) - find_package_handle_standard_args(zstd CONFIG_MODE) -else() - find_package(PkgConfig QUIET) - pkg_search_module(ZSTD QUIET IMPORTED_TARGET libzstd) - find_package_handle_standard_args(zstd - REQUIRED_VARS ZSTD_LINK_LIBRARIES - VERSION_VAR ZSTD_VERSION) -endif() - -if (zstd_FOUND AND NOT TARGET zstd::zstd) - if (TARGET zstd::libzstd_shared AND NOT YUZU_STATIC_BUILD) - add_library(zstd::zstd ALIAS zstd::libzstd_shared) - elseif (TARGET zstd::libzstd_static) - add_library(zstd::zstd ALIAS zstd::libzstd_static) - else() - add_library(zstd::zstd ALIAS PkgConfig::ZSTD) - endif() -endif() - -get_target_property(ZSTD_TARGET zstd::zstd ALIASED_TARGET) - -if (NOT TARGET zstd::libzstd) - if (ZSTD_TARGET) - add_library(zstd::libzstd ALIAS ${ZSTD_TARGET}) - else() - add_library(zstd::libzstd ALIAS zstd::zstd) - endif() -elseif(YUZU_STATIC_BUILD AND TARGET zstd::libzstd_static) - # zstd::libzstd links to shared zstd by default - set_target_properties(zstd::libzstd PROPERTIES INTERFACE_LINK_LIBRARIES zstd::libzstd_static) -endif() diff --git a/CMakeModules/WindowsCopyFiles.cmake b/CMakeModules/WindowsCopyFiles.cmake deleted file mode 100644 index a4afeb77bf..0000000000 --- a/CMakeModules/WindowsCopyFiles.cmake +++ /dev/null @@ -1,39 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -# SPDX-FileCopyrightText: 2018 yuzu Emulator Project -# SPDX-License-Identifier: GPL-2.0-or-later - -# This file provides the function windows_copy_files. -# This is only valid on Windows. - -# Include guard -if(__windows_copy_files) - return() -endif() -set(__windows_copy_files YES) - -# Any number of files to copy from SOURCE_DIR to DEST_DIR can be specified after DEST_DIR. -# This copying happens post-build. -if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") - function(windows_copy_files TARGET SOURCE_DIR DEST_DIR) - # windows commandline expects the / to be \ so switch them - string(REPLACE "/" "\\\\" SOURCE_DIR ${SOURCE_DIR}) - string(REPLACE "/" "\\\\" DEST_DIR ${DEST_DIR}) - - # /NJH /NJS /NDL /NFL /NC /NS /NP - Silence any output - # cmake adds an extra check for command success which doesn't work too well with robocopy - # so trick it into thinking the command was successful with the || cmd /c "exit /b 0" - add_custom_command(TARGET ${TARGET} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${DEST_DIR} - COMMAND robocopy ${SOURCE_DIR} ${DEST_DIR} ${ARGN} /NJH /NJS /NDL /NFL /NC /NS /NP || cmd /c "exit /b 0" - ) - endfunction() -else() - function(windows_copy_files TARGET SOURCE_DIR DEST_DIR) - add_custom_command(TARGET ${TARGET} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${DEST_DIR} - COMMAND cp -ra ${SOURCE_DIR}/. ${DEST_DIR} - ) - endfunction() -endif() diff --git a/CMakeModules/aqt_config.ini b/CMakeModules/aqt_config.ini deleted file mode 100644 index c87caf4988..0000000000 --- a/CMakeModules/aqt_config.ini +++ /dev/null @@ -1,30 +0,0 @@ -# SPDX-FileCopyrightText: 2024 kleidis - -[aqt] -concurrency: 2 - -[mirrors] -trusted_mirrors: - https://download.qt.io -blacklist: - https://qt.mirror.constant.com - https://mirrors.ocf.berkeley.edu - https://mirrors.ustc.edu.cn - https://mirrors.tuna.tsinghua.edu.cn - https://mirrors.geekpie.club - https://mirrors-wan.geekpie.club - https://mirrors.sjtug.sjtu.edu.cn -fallbacks: - https://qtproject.mirror.liquidtelecom.com/ - https://mirrors.aliyun.com/qt/ - https://ftp.jaist.ac.jp/pub/qtproject/ - https://ftp.yz.yamagata-u.ac.jp/pub/qtproject/ - https://qt-mirror.dannhauer.de/ - https://ftp.fau.de/qtproject/ - https://mirror.netcologne.de/qtproject/ - https://mirrors.dotsrc.org/qtproject/ - https://www.nic.funet.fi/pub/mirrors/download.qt-project.org/ - https://master.qt.io/ - https://mirrors.ukfast.co.uk/sites/qt.io/ - https://ftp2.nluug.nl/languages/qt/ - https://ftp1.nluug.nl/languages/qt/ diff --git a/CMakeModules/find/FindDiscordRPC.cmake b/CMakeModules/find/FindDiscordRPC.cmake new file mode 100644 index 0000000000..a498cb0f26 --- /dev/null +++ b/CMakeModules/find/FindDiscordRPC.cmake @@ -0,0 +1,33 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2022 Alexandre Bouvier +# +# SPDX-License-Identifier: GPL-3.0-or-later + +find_package(DiscordRPC CONFIG QUIET) + +if (NOT DiscordRPC_FOUND) + 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 + ) +endif() diff --git a/CMakeModules/find/FindFFmpeg.cmake b/CMakeModules/find/FindFFmpeg.cmake new file mode 100644 index 0000000000..11dd08acd5 --- /dev/null +++ b/CMakeModules/find/FindFFmpeg.cmake @@ -0,0 +1,198 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2019 Citra Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +# FindFFmpeg +# ---------- +# +# Find the native FFmpeg includes and libraries +# +# This module defines the following variables: +# +# FFmpeg_INCLUDE_: where to find .h +# FFmpeg_LIBRARY_: where to find the library +# FFmpeg_INCLUDE_DIR: aggregate all the include paths +# FFmpeg_LIBRARIES: aggregate all the paths to the libraries +# FFmpeg_FOUND: True if all components have been found +# +# This module defines the following targets, which are preferred over variables: +# +# FFmpeg::: Target to use directly, with include path, +# library and dependencies set up. If you are using a static build, you are +# responsible for adding any external dependencies (such as zlib, bzlib...). +# +# can be one of: +# avcodec +# avdevice +# avfilter +# avformat +# avutil +# postproc +# swresample +# swscale +# + +set(_FFmpeg_ALL_COMPONENTS + avcodec + avdevice + avfilter + avformat + avutil + postproc + swresample + swscale +) + +set(_FFmpeg_DEPS_avcodec avutil) +set(_FFmpeg_DEPS_avdevice avcodec avformat avutil) +set(_FFmpeg_DEPS_avfilter avutil) +set(_FFmpeg_DEPS_avformat avcodec avutil) +set(_FFmpeg_DEPS_postproc avutil) +set(_FFmpeg_DEPS_swresample avutil) +set(_FFmpeg_DEPS_swscale avutil) + +function(find_ffmpeg LIBNAME) + if(DEFINED ENV{FFMPEG_DIR}) + set(FFMPEG_DIR $ENV{FFMPEG_DIR}) + endif() + + if(FFMPEG_DIR) + list(APPEND INCLUDE_PATHS + ${FFMPEG_DIR} + ${FFMPEG_DIR}/ffmpeg + ${FFMPEG_DIR}/lib${LIBNAME} + ${FFMPEG_DIR}/include/lib${LIBNAME} + ${FFMPEG_DIR}/include/ffmpeg + ${FFMPEG_DIR}/include + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) + list(APPEND LIB_PATHS + ${FFMPEG_DIR} + ${FFMPEG_DIR}/lib + ${FFMPEG_DIR}/lib${LIBNAME} + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) + else() + list(APPEND INCLUDE_PATHS + ${CMAKE_SYSROOT}/usr/local/include/ffmpeg + ${CMAKE_SYSROOT}/usr/local/include/lib${LIBNAME} + ${CMAKE_SYSROOT}/usr/include/ffmpeg + ${CMAKE_SYSROOT}/usr/include/lib${LIBNAME} + ${CMAKE_SYSROOT}/usr/include/ffmpeg/lib${LIBNAME} + ) + + list(APPEND LIB_PATHS + ${CMAKE_SYSROOT}/usr/local/lib + ${CMAKE_SYSROOT}/usr/lib + ) + endif() + + find_path(FFmpeg_INCLUDE_${LIBNAME} lib${LIBNAME}/${LIBNAME}.h + HINTS ${INCLUDE_PATHS} + ) + + find_library(FFmpeg_LIBRARY_${LIBNAME} ${LIBNAME} + HINTS ${LIB_PATHS} + ) + + if(NOT FFMPEG_DIR AND (NOT FFmpeg_LIBRARY_${LIBNAME} OR NOT FFmpeg_INCLUDE_${LIBNAME})) + # Didn't find it in the usual paths, try pkg-config + find_package(PkgConfig QUIET) + pkg_check_modules(FFmpeg_PKGCONFIG_${LIBNAME} QUIET lib${LIBNAME}) + + find_path(FFmpeg_INCLUDE_${LIBNAME} lib${LIBNAME}/${LIBNAME}.h + ${FFmpeg_PKGCONFIG_${LIBNAME}_INCLUDE_DIRS} + ) + + find_library(FFmpeg_LIBRARY_${LIBNAME} ${LIBNAME} + ${FFmpeg_PKGCONFIG_${LIBNAME}_LIBRARY_DIRS} + ) + endif() + + if(FFmpeg_INCLUDE_${LIBNAME} AND FFmpeg_LIBRARY_${LIBNAME}) + set(FFmpeg_INCLUDE_${LIBNAME} "${FFmpeg_INCLUDE_${LIBNAME}}" PARENT_SCOPE) + set(FFmpeg_LIBRARY_${LIBNAME} "${FFmpeg_LIBRARY_${LIBNAME}}" PARENT_SCOPE) + + # Extract FFmpeg version from version.h + foreach(v MAJOR MINOR MICRO) + set(FFmpeg_${LIBNAME}_VERSION_${v} 0) + endforeach() + string(TOUPPER ${LIBNAME} LIBNAME_UPPER) + file(STRINGS "${FFmpeg_INCLUDE_${LIBNAME}}/lib${LIBNAME}/version.h" _FFmpeg_VERSION_H_CONTENTS REGEX "#define LIB${LIBNAME_UPPER}_VERSION_(MAJOR|MINOR|MICRO) ") + set(_FFmpeg_VERSION_REGEX "([0-9]+)") + foreach(v MAJOR MINOR MICRO) + if("${_FFmpeg_VERSION_H_CONTENTS}" MATCHES "#define LIB${LIBNAME_UPPER}_VERSION_${v}[\\t ]+${_FFmpeg_VERSION_REGEX}") + set(FFmpeg_${LIBNAME}_VERSION_${v} "${CMAKE_MATCH_1}") + endif() + endforeach() + set(FFmpeg_${LIBNAME}_VERSION "${FFmpeg_${LIBNAME}_VERSION_MAJOR}.${FFmpeg_${LIBNAME}_VERSION_MINOR}.${FFmpeg_${LIBNAME}_VERSION_MICRO}") + set(FFmpeg_${c}_VERSION "${FFmpeg_${LIBNAME}_VERSION}" PARENT_SCOPE) + unset(_FFmpeg_VERSION_REGEX) + unset(_FFmpeg_VERSION_H_CONTENTS) + + set(FFmpeg_${c}_FOUND TRUE PARENT_SCOPE) + if(NOT FFmpeg_FIND_QUIETLY) + message("-- Found ${LIBNAME}: ${FFmpeg_INCLUDE_${LIBNAME}} ${FFmpeg_LIBRARY_${LIBNAME}} (version: ${FFmpeg_${LIBNAME}_VERSION})") + endif() + endif() +endfunction() + +foreach(c ${_FFmpeg_ALL_COMPONENTS}) + find_ffmpeg(${c}) +endforeach() + +foreach(c ${_FFmpeg_ALL_COMPONENTS}) + if(FFmpeg_${c}_FOUND) + list(APPEND FFmpeg_INCLUDE_DIR ${FFmpeg_INCLUDE_${c}}) + list(APPEND FFmpeg_LIBRARIES ${FFmpeg_LIBRARY_${c}}) + + add_library(FFmpeg::${c} IMPORTED UNKNOWN) + set_target_properties(FFmpeg::${c} PROPERTIES + IMPORTED_LOCATION ${FFmpeg_LIBRARY_${c}} + INTERFACE_INCLUDE_DIRECTORIES ${FFmpeg_INCLUDE_${c}} + ) + if(_FFmpeg_DEPS_${c}) + set(deps) + foreach(dep ${_FFmpeg_DEPS_${c}}) + list(APPEND deps FFmpeg::${dep}) + endforeach() + + set_target_properties(FFmpeg::${c} PROPERTIES + INTERFACE_LINK_LIBRARIES "${deps}" + ) + unset(deps) + endif() + endif() +endforeach() + +if(FFmpeg_INCLUDE_DIR) + list(REMOVE_DUPLICATES FFmpeg_INCLUDE_DIR) +endif() + +foreach(c ${FFmpeg_FIND_COMPONENTS}) + list(APPEND _FFmpeg_REQUIRED_VARS FFmpeg_INCLUDE_${c} FFmpeg_LIBRARY_${c}) +endforeach() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(FFmpeg + REQUIRED_VARS ${_FFmpeg_REQUIRED_VARS} + HANDLE_COMPONENTS +) + +foreach(c ${_FFmpeg_ALL_COMPONENTS}) + unset(_FFmpeg_DEPS_${c}) +endforeach() +unset(_FFmpeg_ALL_COMPONENTS) +unset(_FFmpeg_REQUIRED_VARS) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(FFmpeg + REQUIRED_VARS + FFmpeg_LIBRARIES + FFmpeg_INCLUDE_DIR + HANDLE_COMPONENTS +) diff --git a/CMakeModules/find/FindLLVM.cmake b/CMakeModules/find/FindLLVM.cmake new file mode 100644 index 0000000000..f169f134d5 --- /dev/null +++ b/CMakeModules/find/FindLLVM.cmake @@ -0,0 +1,30 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2023 Alexandre Bouvier +# +# SPDX-License-Identifier: GPL-3.0-or-later + +find_package(LLVM QUIET COMPONENTS CONFIG) +if (LLVM_FOUND) + separate_arguments(LLVM_DEFINITIONS) + if (LLVMDemangle IN_LIST LLVM_AVAILABLE_LIBS) + set(LLVM_Demangle_FOUND TRUE) + endif() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LLVM HANDLE_COMPONENTS CONFIG_MODE) + +# Demangle only for Windows targets +if (WIN32 AND LLVM_FOUND AND LLVM_Demangle_FOUND AND NOT TARGET LLVM::Demangle) + add_library(LLVM::Demangle INTERFACE IMPORTED) + target_compile_definitions(LLVM::Demangle INTERFACE ${LLVM_DEFINITIONS}) + target_include_directories(LLVM::Demangle INTERFACE ${LLVM_INCLUDE_DIRS}) + # prefer shared LLVM: https://github.com/llvm/llvm-project/issues/34593 + # but use ugly hack because llvm_config doesn't support interface library + add_library(_dummy_lib SHARED EXCLUDE_FROM_ALL ${CMAKE_SOURCE_DIR}/src/yuzu/main.cpp) + llvm_config(_dummy_lib USE_SHARED demangle) + get_target_property(LLVM_LIBRARIES _dummy_lib LINK_LIBRARIES) + target_link_libraries(LLVM::Demangle INTERFACE ${LLVM_LIBRARIES}) +endif() diff --git a/CMakeModules/find/FindOpus.cmake b/CMakeModules/find/FindOpus.cmake new file mode 100644 index 0000000000..a4247f06db --- /dev/null +++ b/CMakeModules/find/FindOpus.cmake @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2022 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +find_package(PkgConfig QUIET) +pkg_search_module(OPUS QUIET IMPORTED_TARGET opus) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Opus + REQUIRED_VARS OPUS_LINK_LIBRARIES + VERSION_VAR OPUS_VERSION +) + +if (PLATFORM_MSYS) + FixMsysPath(PkgConfig::OPUS) +endif() + +if (Opus_FOUND AND NOT TARGET Opus::opus) + add_library(Opus::opus ALIAS PkgConfig::OPUS) +endif() diff --git a/CMakeModules/find/FindRenderDoc.cmake b/CMakeModules/find/FindRenderDoc.cmake new file mode 100644 index 0000000000..8ac4271a36 --- /dev/null +++ b/CMakeModules/find/FindRenderDoc.cmake @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2023 Alexandre Bouvier +# +# SPDX-License-Identifier: GPL-3.0-or-later + +find_path(RenderDoc_INCLUDE_DIR renderdoc_app.h) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(RenderDoc + REQUIRED_VARS RenderDoc_INCLUDE_DIR +) + +if (RenderDoc_FOUND AND NOT TARGET RenderDoc::API) + add_library(RenderDoc::API INTERFACE IMPORTED) + set_target_properties(RenderDoc::API PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${RenderDoc_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(RenderDoc_INCLUDE_DIR) diff --git a/CMakeModules/find/FindSimpleIni.cmake b/CMakeModules/find/FindSimpleIni.cmake new file mode 100644 index 0000000000..1d2379fc82 --- /dev/null +++ b/CMakeModules/find/FindSimpleIni.cmake @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2023 Alexandre Bouvier +# +# SPDX-License-Identifier: GPL-3.0-or-later + +include(FindPackageHandleStandardArgs) + +find_package(SimpleIni QUIET CONFIG) +if (SimpleIni_CONSIDERED_CONFIGS) + find_package_handle_standard_args(SimpleIni CONFIG_MODE) +else() + find_package(PkgConfig QUIET) + pkg_search_module(SIMPLEINI QUIET IMPORTED_TARGET simpleini) + find_package_handle_standard_args(SimpleIni + REQUIRED_VARS SIMPLEINI_INCLUDEDIR + VERSION_VAR SIMPLEINI_VERSION + ) +endif() + +if (SimpleIni_FOUND AND NOT TARGET SimpleIni::SimpleIni) + add_library(SimpleIni::SimpleIni ALIAS PkgConfig::SIMPLEINI) +endif() diff --git a/CMakeModules/find/Findenet.cmake b/CMakeModules/find/Findenet.cmake new file mode 100644 index 0000000000..2a2d1d807d --- /dev/null +++ b/CMakeModules/find/Findenet.cmake @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2022 Alexandre Bouvier +# +# SPDX-License-Identifier: GPL-3.0-or-later + +find_package(PkgConfig QUIET) +pkg_search_module(ENET QUIET IMPORTED_TARGET libenet) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(enet + REQUIRED_VARS ENET_LINK_LIBRARIES + VERSION_VAR ENET_VERSION +) + +if (PLATFORM_MSYS) + FixMsysPath(PkgConfig::ENET) +endif() + +if (enet_FOUND AND NOT TARGET enet::enet) + add_library(enet::enet ALIAS PkgConfig::ENET) +endif() diff --git a/CMakeModules/find/Findgamemode.cmake b/CMakeModules/find/Findgamemode.cmake new file mode 100644 index 0000000000..3ec966c82d --- /dev/null +++ b/CMakeModules/find/Findgamemode.cmake @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2023 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +find_package(PkgConfig QUIET) +pkg_search_module(GAMEMODE QUIET IMPORTED_TARGET gamemode) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(gamemode + REQUIRED_VARS GAMEMODE_INCLUDEDIR + VERSION_VAR GAMEMODE_VERSION +) + +if (gamemode_FOUND AND NOT TARGET gamemode::headers) + add_library(gamemode::headers ALIAS PkgConfig::GAMEMODE) +endif() diff --git a/CMakeModules/find/Findhttplib.cmake b/CMakeModules/find/Findhttplib.cmake new file mode 100644 index 0000000000..e92a9be63f --- /dev/null +++ b/CMakeModules/find/Findhttplib.cmake @@ -0,0 +1,34 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2022 Andrea Pappacoda +# +# SPDX-License-Identifier: GPL-2.0-or-later + +include(FindPackageHandleStandardArgs) + +find_package(httplib QUIET CONFIG) +if (httplib_CONSIDERED_CONFIGS) + find_package_handle_standard_args(httplib HANDLE_COMPONENTS CONFIG_MODE) +else() + find_package(PkgConfig QUIET) + pkg_search_module(HTTPLIB QUIET IMPORTED_TARGET cpp-httplib) + if ("-DCPPHTTPLIB_OPENSSL_SUPPORT" IN_LIST HTTPLIB_CFLAGS_OTHER) + set(httplib_OpenSSL_FOUND TRUE) + endif() + if ("-DCPPHTTPLIB_ZLIB_SUPPORT" IN_LIST HTTPLIB_CFLAGS_OTHER) + set(httplib_ZLIB_FOUND TRUE) + endif() + if ("-DCPPHTTPLIB_BROTLI_SUPPORT" IN_LIST HTTPLIB_CFLAGS_OTHER) + set(httplib_Brotli_FOUND TRUE) + endif() + find_package_handle_standard_args(httplib + REQUIRED_VARS HTTPLIB_INCLUDEDIR + VERSION_VAR HTTPLIB_VERSION + HANDLE_COMPONENTS + ) +endif() + +if (httplib_FOUND AND NOT TARGET httplib::httplib) + add_library(httplib::httplib ALIAS PkgConfig::HTTPLIB) +endif() diff --git a/CMakeModules/find/Findlibiw.cmake b/CMakeModules/find/Findlibiw.cmake new file mode 100644 index 0000000000..3381db0f08 --- /dev/null +++ b/CMakeModules/find/Findlibiw.cmake @@ -0,0 +1,29 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +find_package(PkgConfig QUIET) +pkg_search_module(IW QUIET IMPORTED_TARGET iw) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Libiw + REQUIRED_VARS IW_LIBRARIES IW_INCLUDE_DIRS + VERSION_VAR IW_VERSION + FAIL_MESSAGE "libiw (Wireless Tools library) not found. Please install libiw-dev (Debian/Ubuntu), wireless-tools-devel (Fedora), wireless_tools (Arch), or net-wireless/iw (Gentoo)." +) + +if (Libiw_FOUND AND TARGET PkgConfig::IW AND NOT TARGET iw::iw) + add_library(iw::iw ALIAS PkgConfig::IW) +endif() + +if(Libiw_FOUND) + mark_as_advanced( + IW_INCLUDE_DIRS + IW_LIBRARIES + IW_LIBRARY_DIRS + IW_LINK_LIBRARIES # Often set by pkg-config + IW_LDFLAGS + IW_CFLAGS + IW_CFLAGS_OTHER + IW_VERSION + ) +endif() diff --git a/CMakeModules/find/Findlibusb.cmake b/CMakeModules/find/Findlibusb.cmake new file mode 100644 index 0000000000..dee8187d81 --- /dev/null +++ b/CMakeModules/find/Findlibusb.cmake @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2022 Alexandre Bouvier +# +# SPDX-License-Identifier: GPL-3.0-or-later + +find_package(PkgConfig QUIET) +pkg_search_module(LIBUSB QUIET IMPORTED_TARGET libusb-1.0) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(libusb + REQUIRED_VARS LIBUSB_LINK_LIBRARIES + VERSION_VAR LIBUSB_VERSION +) + +if (PLATFORM_MSYS) + FixMsysPath(PkgConfig::LIBUSB) +endif() + +if (libusb_FOUND AND NOT TARGET libusb::usb) + add_library(libusb::usb ALIAS PkgConfig::LIBUSB) +endif() diff --git a/CMakeModules/find/Findlz4.cmake b/CMakeModules/find/Findlz4.cmake new file mode 100644 index 0000000000..13235d7ac8 --- /dev/null +++ b/CMakeModules/find/Findlz4.cmake @@ -0,0 +1,34 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2022 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +include(FindPackageHandleStandardArgs) + +find_package(lz4 QUIET CONFIG) +if (lz4_CONSIDERED_CONFIGS) + find_package_handle_standard_args(lz4 CONFIG_MODE) +else() + find_package(PkgConfig QUIET) + pkg_search_module(LZ4 QUIET IMPORTED_TARGET liblz4) + + if (PLATFORM_MSYS) + FixMsysPath(PkgConfig::LZ4) + endif() + + find_package_handle_standard_args(lz4 + REQUIRED_VARS LZ4_LINK_LIBRARIES + VERSION_VAR LZ4_VERSION + ) +endif() + +if (lz4_FOUND AND NOT TARGET lz4::lz4) + if (TARGET LZ4::lz4_shared) + add_library(lz4::lz4 ALIAS LZ4::lz4_shared) + elseif (TARGET LZ4::lz4_static) + add_library(lz4::lz4 ALIAS LZ4::lz4_static) + else() + add_library(lz4::lz4 ALIAS PkgConfig::LZ4) + endif() +endif() diff --git a/CMakeModules/find/Findstb.cmake b/CMakeModules/find/Findstb.cmake new file mode 100644 index 0000000000..4808c45397 --- /dev/null +++ b/CMakeModules/find/Findstb.cmake @@ -0,0 +1,34 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2023 Alexandre Bouvier +# +# SPDX-License-Identifier: GPL-3.0-or-later + +find_path(stb_image_INCLUDE_DIR stb_image.h PATH_SUFFIXES stb) +find_path(stb_image_resize_INCLUDE_DIR stb_image_resize.h PATH_SUFFIXES stb) +find_path(stb_image_write_INCLUDE_DIR stb_image_write.h PATH_SUFFIXES stb) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(stb + REQUIRED_VARS + stb_image_INCLUDE_DIR + stb_image_resize_INCLUDE_DIR + stb_image_write_INCLUDE_DIR +) + +if (stb_FOUND AND NOT TARGET stb::headers) + add_library(stb::headers INTERFACE IMPORTED) + set_property(TARGET stb::headers PROPERTY + INTERFACE_INCLUDE_DIRECTORIES + "${stb_image_INCLUDE_DIR}" + "${stb_image_resize_INCLUDE_DIR}" + "${stb_image_write_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced( + stb_image_INCLUDE_DIR + stb_image_resize_INCLUDE_DIR + stb_image_write_INCLUDE_DIR +) diff --git a/CMakeModules/find/Findzstd.cmake b/CMakeModules/find/Findzstd.cmake new file mode 100644 index 0000000000..58f0aa6117 --- /dev/null +++ b/CMakeModules/find/Findzstd.cmake @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +# SPDX-FileCopyrightText: 2022 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +include(FindPackageHandleStandardArgs) + +find_package(zstd QUIET CONFIG) +if (zstd_CONSIDERED_CONFIGS) + find_package_handle_standard_args(zstd CONFIG_MODE) +else() + find_package(PkgConfig QUIET) + pkg_search_module(ZSTD QUIET IMPORTED_TARGET libzstd) + find_package_handle_standard_args(zstd + REQUIRED_VARS ZSTD_LINK_LIBRARIES + VERSION_VAR ZSTD_VERSION) +endif() + +if (zstd_FOUND AND NOT TARGET zstd::zstd) + if (TARGET zstd::libzstd_shared AND NOT YUZU_STATIC_BUILD) + add_library(zstd::zstd ALIAS zstd::libzstd_shared) + elseif (TARGET zstd::libzstd_static) + add_library(zstd::zstd ALIAS zstd::libzstd_static) + else() + add_library(zstd::zstd ALIAS PkgConfig::ZSTD) + endif() +endif() + +get_target_property(ZSTD_TARGET zstd::zstd ALIASED_TARGET) + +if (NOT TARGET zstd::libzstd) + if (ZSTD_TARGET) + add_library(zstd::libzstd ALIAS ${ZSTD_TARGET}) + else() + add_library(zstd::libzstd ALIAS zstd::zstd) + endif() +elseif(YUZU_STATIC_BUILD AND TARGET zstd::libzstd_static) + # zstd::libzstd links to shared zstd by default + set_target_properties(zstd::libzstd PROPERTIES INTERFACE_LINK_LIBRARIES zstd::libzstd_static) +endif() diff --git a/CMakeModules/toolchains/GentooCross.cmake b/CMakeModules/toolchains/GentooCross.cmake new file mode 100644 index 0000000000..0bb78795fd --- /dev/null +++ b/CMakeModules/toolchains/GentooCross.cmake @@ -0,0 +1,39 @@ +# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +set(CROSS_TARGET "" CACHE STRING "Cross-compilation target (aarch64, etc)") +set(CROSS_PLATFORM "unknown-linux-gnu" CACHE STRING "Cross-compilation platform (e.g. unknown-linux-gnu)") +set(CROSS_COMPILER "gcc" CACHE STRING "Cross compiler type (gcc or clang)") + +if (NOT CROSS_TARGET) + message(FATAL_ERROR "GentooCross used without a valid CROSS_TARGET") +endif() + +set(prefix ${CROSS_TARGET}-${CROSS_PLATFORM}) + +set(CMAKE_SYSROOT /usr/${prefix}) + +if (CROSS_COMPILER STREQUAL "gcc") + set(CMAKE_C_COMPILER ${prefix}-gcc) + set(CMAKE_CXX_COMPILER ${prefix}-g++) +elseif (CROSS_COMPILER STREQUAL "clang") + set(CMAKE_C_COMPILER ${prefix}-clang) + set(CMAKE_CXX_COMPILER ${prefix}-clang++) +else() + message(FATAL_ERROR "Unsupported cross compiler type ${CROSS_COMPILER}") +endif() + +# search programs in the host environment +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + +# search headers and libraries in the target environment +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + +# sanity checks +if (NOT IS_DIRECTORY ${CMAKE_SYSROOT}) + message(FATAL_ERROR "Invalid sysroot ${CMAKE_SYSROOT}." + "Double-check your CROSS_TARGET and CROSS_PLATFORM.") +endif() -- cgit v1.2.3