diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 06cc7758f..8b0ad0858 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -18,7 +18,7 @@ jobs: matrix: config: - {name: i686-pc-windows-msvc, os: windows-latest, shell: cmd, arch: x86, cmakeArgs: -G Ninja, buildType: Release} - - {name: apple-darwin, os: macos-latest, shell: sh, cmakeArgs: -G Xcode -DAPPLE_BREAKPAD=ON, destDir: osx, buildType: RelWithDebInfo} + - {name: apple-darwin, os: macos-latest, shell: sh, cmakeArgs: -G Xcode -DAPPLE_BREAKPAD=ON -DCMAKE_DISABLE_FIND_PACKAGE_Vulkan=ON, destDir: osx, buildType: RelWithDebInfo} - {name: apple-ios, os: macos-latest, shell: sh, cmakeArgs: -DCMAKE_SYSTEM_NAME=iOS -G Xcode, destDir: ios, buildType: Release} - {name: x86_64-pc-linux-gnu, os: ubuntu-latest, shell: sh, cmakeArgs: -G Ninja, buildType: Release} - {name: x86_64-pc-windows-msvc, os: windows-latest, shell: cmd, arch: x64, cmakeArgs: -G Ninja, buildType: Release} diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a24d66b8..0b9c7a650 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -282,24 +282,34 @@ if(USE_OPENMP) endif() endif() -option(BUILD_SHARED_LIBS "Build shared library" OFF) -set(XXHASH_BUILD_XXHSUM OFF CACHE BOOL "Build the xxhsum binary") -add_subdirectory(core/deps/xxHash/cmake_unofficial) +find_package(xxHash) +if(NOT XXHASH_FOUND) + option(BUILD_SHARED_LIBS "Build shared library" OFF) + set(XXHASH_BUILD_XXHSUM OFF CACHE BOOL "Build the xxhsum binary") + add_subdirectory(core/deps/xxHash/cmake_unofficial EXCLUDE_FROM_ALL) +endif() target_link_libraries(${PROJECT_NAME} PRIVATE xxHash::xxhash) -option(BUILD_SHARED_LIBS "Build shared library" OFF) -add_subdirectory(core/deps/glm) +find_package(glm) +if(NOT glm_FOUND) + option(BUILD_SHARED_LIBS "Build shared library" OFF) + add_subdirectory(core/deps/glm EXCLUDE_FROM_ALL) +endif() target_link_libraries(${PROJECT_NAME} PRIVATE glm::glm) if(USE_VULKAN) - option(BUILD_EXTERNAL "Build external dependencies in /External" OFF) - option(SKIP_GLSLANG_INSTALL "Skip installation" ON) - option(ENABLE_SPVREMAPPER "Enables building of SPVRemapper" OFF) - option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" OFF) - option(ENABLE_HLSL "Enables HLSL input support" OFF) - option(ENABLE_PCH "Enables Precompiled header" OFF) - add_subdirectory(core/deps/glslang EXCLUDE_FROM_ALL) - target_link_libraries(${PROJECT_NAME} PRIVATE SPIRV) + find_package(Vulkan COMPONENTS glslang) + if(NOT Vulkan_glslang_FOUND) + option(BUILD_EXTERNAL "Build external dependencies in /External" OFF) + option(SKIP_GLSLANG_INSTALL "Skip installation" ON) + option(ENABLE_SPVREMAPPER "Enables building of SPVRemapper" OFF) + option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" OFF) + option(ENABLE_HLSL "Enables HLSL input support" OFF) + option(ENABLE_PCH "Enables Precompiled header" OFF) + add_subdirectory(core/deps/glslang EXCLUDE_FROM_ALL) + add_library(Vulkan::glslang-spirv ALIAS SPIRV) + endif() + target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::glslang-spirv) endif() if(NOT LIBRETRO) @@ -349,16 +359,25 @@ if(NOT LIBRETRO) find_package(Lua) if(NOT APPLE AND LUA_FOUND) + find_package(LuaBridge) + if (NOT LuaBridge_FOUND) + add_subdirectory(core/deps/luabridge EXCLUDE_FROM_ALL) + add_library(LuaBridge::LuaBridge ALIAS LuaBridge) + endif() target_compile_definitions(${PROJECT_NAME} PRIVATE USE_LUA) - target_include_directories(${PROJECT_NAME} PRIVATE ${LUA_INCLUDE_DIR} core/deps/luabridge/Source) + target_include_directories(${PROJECT_NAME} PRIVATE ${LUA_INCLUDE_DIR}) list(TRANSFORM LUA_LIBRARIES REPLACE "\.dll" "") - target_link_libraries(${PROJECT_NAME} PRIVATE ${LUA_LIBRARIES}) + target_link_libraries(${PROJECT_NAME} PRIVATE ${LUA_LIBRARIES} LuaBridge::LuaBridge) endif() endif() -add_subdirectory(core/deps/libchdr EXCLUDE_FROM_ALL) -target_link_libraries(${PROJECT_NAME} PRIVATE chdr-static) -target_include_directories(${PROJECT_NAME} PRIVATE core/deps/libchdr/include) +find_package(chdr) +if(NOT chdr_FOUND) + add_subdirectory(core/deps/libchdr EXCLUDE_FROM_ALL) + target_include_directories(${PROJECT_NAME} PRIVATE core/deps/libchdr/include) + add_library(chdr::chdr ALIAS chdr-static) +endif() +target_link_libraries(${PROJECT_NAME} PRIVATE chdr::chdr) if(NOT WITH_SYSTEM_ZLIB) target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/core/deps/libchdr/deps/zlib-1.2.11") @@ -1068,12 +1087,18 @@ if(NOT LIBRETRO) endif() if(USE_VULKAN) - add_subdirectory(core/deps/Vulkan-Headers) + find_package(Vulkan) + if(NOT Vulkan_FOUND) + add_subdirectory(core/deps/Vulkan-Headers EXCLUDE_FROM_ALL) + endif() target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::Headers) - add_library(VulkanMemoryAllocator INTERFACE) - target_include_directories(VulkanMemoryAllocator INTERFACE core/deps/VulkanMemoryAllocator/include) - target_link_libraries(${PROJECT_NAME} PRIVATE VulkanMemoryAllocator) + find_package(VulkanMemoryAllocator) + if(NOT VulkanMemoryAllocator_FOUND) + add_library(VulkanMemoryAllocator::VulkanMemoryAllocator INTERFACE IMPORTED) + target_include_directories(VulkanMemoryAllocator::VulkanMemoryAllocator INTERFACE core/deps/VulkanMemoryAllocator/include) + endif() + target_link_libraries(${PROJECT_NAME} PRIVATE VulkanMemoryAllocator::VulkanMemoryAllocator) if(NOT LIBRETRO) if(ANDROID) @@ -1086,10 +1111,14 @@ if(USE_VULKAN) set(VOLK_STATIC_DEFINES VK_USE_PLATFORM_MACOS_MVK) endif() - set(VOLK_PULL_IN_VULKAN OFF) - add_subdirectory(core/deps/volk) - target_include_directories(volk PRIVATE core/deps/Vulkan-Headers/include) - target_link_libraries(${PROJECT_NAME} PRIVATE volk) + find_package(volk) + if(NOT volk_FOUND) + set(VOLK_PULL_IN_VULKAN OFF) + add_subdirectory(core/deps/volk EXCLUDE_FROM_ALL) + cmake_policy(SET CMP0079 NEW) + target_link_libraries(volk PRIVATE Vulkan::Headers) + endif() + target_link_libraries(${PROJECT_NAME} PRIVATE volk::volk) endif() target_compile_definitions(${PROJECT_NAME} PRIVATE USE_VULKAN HAVE_VULKAN) @@ -1291,7 +1320,10 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*)" OR CMAKE_OSX_ set(KNOWN_ARCHITECTURE_DETECTED ON) endif() if(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|x86_64.*|AMD64.*" OR CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") - add_subdirectory(core/deps/xbyak EXCLUDE_FROM_ALL) + find_package(xbyak) + if(NOT xbyak_FOUND) + add_subdirectory(core/deps/xbyak EXCLUDE_FROM_ALL) + endif() target_link_libraries(${PROJECT_NAME} PRIVATE xbyak::xbyak) if(CMAKE_SIZEOF_VOID_P EQUAL 4) target_sources(${PROJECT_NAME} PRIVATE @@ -1561,12 +1593,12 @@ if(NINTENDO_SWITCH) if(LIBRETRO) add_custom_target(combined ALL COMMAND ${CMAKE_AR} -x $ - COMMAND ${CMAKE_AR} -x $ + COMMAND ${CMAKE_AR} -x $ COMMAND ${CMAKE_AR} -x $ COMMAND ${CMAKE_AR} -rs flycast_libretro_libnx.a *.o COMMAND rm *.o WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} - DEPENDS xxHash::xxhash chdr-static zip ${PROJECT_NAME}) + DEPENDS xxHash::xxhash chdr::chdr zip ${PROJECT_NAME}) else() nx_generate_nacp(flycast.nacp NAME "Flycast" AUTHOR "flyinghead, M4xw" VERSION "${GIT_VERSION}") nx_create_nro(flycast NACP flycast.nacp ICON "${CMAKE_SOURCE_DIR}/shell/switch/flycast.jpeg") diff --git a/core/rend/vulkan/compiler.cpp b/core/rend/vulkan/compiler.cpp index 8c017b321..986676b53 100644 --- a/core/rend/vulkan/compiler.cpp +++ b/core/rend/vulkan/compiler.cpp @@ -19,7 +19,7 @@ along with Flycast. If not, see . */ #include "compiler.h" -#include "SPIRV/GlslangToSpv.h" +#include #include "vulkan_context.h" static const TBuiltInResource DefaultTBuiltInResource = { diff --git a/core/rend/vulkan/shaders.h b/core/rend/vulkan/shaders.h index f58ac0d44..bdbc98ad3 100644 --- a/core/rend/vulkan/shaders.h +++ b/core/rend/vulkan/shaders.h @@ -20,7 +20,7 @@ */ #pragma once #include "vulkan.h" -#include "SPIRV/GlslangToSpv.h" +#include #include #include diff --git a/shell/cmake/FindLuaBridge.cmake b/shell/cmake/FindLuaBridge.cmake new file mode 100644 index 000000000..eb87913b2 --- /dev/null +++ b/shell/cmake/FindLuaBridge.cmake @@ -0,0 +1,15 @@ +find_path(LuaBridge_INCLUDE_DIR LuaBridge/LuaBridge.h) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LuaBridge + REQUIRED_VARS LuaBridge_INCLUDE_DIR +) + +if (LuaBridge_FOUND AND NOT TARGET LuaBridge::LuaBridge) + add_library(LuaBridge::LuaBridge INTERFACE IMPORTED) + set_target_properties(LuaBridge::LuaBridge PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${LuaBridge_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(LuaBridge_INCLUDE_DIR) diff --git a/shell/cmake/Findchdr.cmake b/shell/cmake/Findchdr.cmake new file mode 100644 index 000000000..1f0fe99ff --- /dev/null +++ b/shell/cmake/Findchdr.cmake @@ -0,0 +1,14 @@ +find_package(PkgConfig QUIET) +if (PKG_CONFIG_FOUND) + pkg_search_module(CHDR QUIET IMPORTED_TARGET GLOBAL libchdr) + if (CHDR_FOUND) + add_library(chdr::chdr ALIAS PkgConfig::CHDR) + set(chdr_VERSION ${CHDR_VERSION}) + endif() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(chdr + REQUIRED_VARS CHDR_LINK_LIBRARIES + VERSION_VAR chdr_VERSION +) diff --git a/shell/cmake/FindxxHash.cmake b/shell/cmake/FindxxHash.cmake new file mode 100644 index 000000000..b913067b2 --- /dev/null +++ b/shell/cmake/FindxxHash.cmake @@ -0,0 +1,14 @@ +find_package(PkgConfig QUIET) +if (PKG_CONFIG_FOUND) + pkg_search_module(XXHASH QUIET IMPORTED_TARGET GLOBAL libxxhash) + if (XXHASH_FOUND) + add_library(xxHash::xxhash ALIAS PkgConfig::XXHASH) + set(xxHash_VERSION ${XXHASH_VERSION}) + endif() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(xxHash + REQUIRED_VARS XXHASH_LINK_LIBRARIES + VERSION_VAR xxHash_VERSION +)