WIP: [cmake] allow static MoltenVK, fix IOKit link
All checks were successful
eden-license / license-header (pull_request) Successful in 25s
All checks were successful
eden-license / license-header (pull_request) Successful in 25s
Signed-off-by: crueter <crueter@eden-emu.dev>
This commit is contained in:
parent
cf0628af46
commit
d086d75cab
3 changed files with 62 additions and 15 deletions
|
@ -238,7 +238,7 @@ function(download_qt target)
|
|||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(download_moltenvk version platform)
|
||||
function(download_moltenvk platform version)
|
||||
if(NOT version)
|
||||
message(FATAL_ERROR "download_moltenvk: version argument is required")
|
||||
endif()
|
||||
|
@ -249,12 +249,17 @@ function(download_moltenvk version platform)
|
|||
set(MOLTENVK_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK")
|
||||
set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar")
|
||||
|
||||
message(STATUS "Using bundled MoltenVK")
|
||||
|
||||
if(NOT EXISTS "${MOLTENVK_DIR}")
|
||||
if(NOT EXISTS "${MOLTENVK_TAR}")
|
||||
message(STATUS "Downloading MoltenVK ${version}")
|
||||
file(DOWNLOAD "https://github.com/KhronosGroup/MoltenVK/releases/download/${version}/MoltenVK-${platform}.tar"
|
||||
"${MOLTENVK_TAR}" SHOW_PROGRESS)
|
||||
endif()
|
||||
|
||||
message(STATUS "Extracting MoltenVK tarball at ${MOLTENVK_TAR}")
|
||||
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals"
|
||||
|
@ -265,7 +270,36 @@ function(download_moltenvk version platform)
|
|||
message(FATAL_ERROR "Extracting MoltenVK failed: ${tar_err}")
|
||||
endif()
|
||||
endif()
|
||||
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/dylib/${platform}")
|
||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# TODO: is this portable?
|
||||
set(MVK_STATIC "${MOLTENVK_DIR}/MoltenVK/static/MoltenVK.xcframework/macos-arm64_x86_64/libMoltenVK.a")
|
||||
set(MVK_DYLIB "${MOLTENVK_DIR}/MoltenVK/dylib/${platform}/libMoltenVK.dylib")
|
||||
|
||||
# prefer static lib if it exists for smaller executable size
|
||||
if (EXISTS "${MVK_STATIC}")
|
||||
# Using static MoltenVK requires linking to a few extra libraries
|
||||
find_library(IOSURFACE_LIBRARY IOSurface)
|
||||
if(NOT IOSURFACE_LIBRARY)
|
||||
message(FATAL_ERROR "IOSurface not found, did you install XCode tools?")
|
||||
endif()
|
||||
|
||||
find_library(QUARTZCORE_LIBRARY QuartzCore)
|
||||
if(NOT QUARTZCORE_LIBRARY)
|
||||
message(FATAL_ERROR "QuartzCore not found, did you install XCode tools?")
|
||||
endif()
|
||||
|
||||
add_library(moltenvk STATIC IMPORTED)
|
||||
set_target_properties(moltenvk PROPERTIES
|
||||
IMPORTED_LOCATION "${MVK_STATIC}"
|
||||
)
|
||||
|
||||
target_link_libraries(moltenvk INTERFACE ${IOSURFACE_LIBRARY} ${QUARTZCORE_LIBRARY})
|
||||
else()
|
||||
add_library(moltenvk SHARED IMPORTED)
|
||||
set_target_properties(moltenvk PROPERTIES
|
||||
IMPORTED_LOCATION "${MVK_DYLIB}"
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(MoltenVK::MoltenVK ALIAS moltenvk)
|
||||
endfunction()
|
||||
|
|
|
@ -276,4 +276,13 @@ if(YUZU_USE_PRECOMPILED_HEADERS)
|
|||
target_precompile_headers(common PRIVATE precompiled_headers.h)
|
||||
endif()
|
||||
|
||||
# IOPS (needed for power state) requires linking to IOKit
|
||||
if (APPLE)
|
||||
find_library(IOKIT_LIBRARY IOKit)
|
||||
if(NOT IOKIT_LIBRARY)
|
||||
message(FATAL_ERROR "IOKit not found, did you install XCode tools?")
|
||||
endif()
|
||||
target_link_libraries(common PRIVATE ${IOKIT_LIBRARY})
|
||||
endif()
|
||||
|
||||
create_target_directory_groups(common)
|
||||
|
|
|
@ -366,18 +366,22 @@ if (APPLE)
|
|||
set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE TRUE)
|
||||
set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
|
||||
|
||||
if (YUZU_USE_BUNDLED_MOLTENVK)
|
||||
set(MOLTENVK_PLATFORM "macOS")
|
||||
set(MOLTENVK_VERSION "v1.3.0")
|
||||
download_moltenvk(${MOLTENVK_PLATFORM} ${MOLTENVK_VERSION})
|
||||
endif()
|
||||
find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED)
|
||||
message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.")
|
||||
set_source_files_properties(${MOLTENVK_LIBRARY} PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks
|
||||
XCODE_FILE_ATTRIBUTES "CodeSignOnCopy")
|
||||
target_sources(yuzu PRIVATE ${MOLTENVK_LIBRARY})
|
||||
find_library(MOLTENVK_LIBRARY MoltenVK)
|
||||
|
||||
elseif(WIN32)
|
||||
if (NOT MOLTENVK_LIBRARY OR YUZU_USE_BUNDLED_MOLTENVK)
|
||||
set(MOLTENVK_PLATFORM "macos")
|
||||
set(MOLTENVK_VERSION "v1.4.0")
|
||||
download_moltenvk(${MOLTENVK_PLATFORM} ${MOLTENVK_VERSION})
|
||||
target_link_libraries(yuzu PRIVATE MoltenVK::MoltenVK)
|
||||
else()
|
||||
message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.")
|
||||
set_source_files_properties(${MOLTENVK_LIBRARY} PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks
|
||||
XCODE_FILE_ATTRIBUTES "CodeSignOnCopy")
|
||||
target_link_libraries(yuzu PRIVATE ${MOLTENVK_LIBRARY})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
# compile as a win32 gui application instead of a console application
|
||||
target_link_libraries(yuzu PRIVATE Qt6::EntryPointPrivate)
|
||||
if(MSVC)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue