mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-08-03 11:23:49 +00:00
Register regression tests with CTest Co-authored-by: Dafenx <196083014+Dafenxz0@users.noreply.github.com>
569 lines
20 KiB
CMake
569 lines
20 KiB
CMake
cmake_minimum_required(VERSION 3.12...4.3)
|
|
|
|
if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.0)
|
|
set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "Minimum policy version for bundled dependencies")
|
|
endif()
|
|
|
|
project(Kyty)
|
|
|
|
if(CMAKE_SYSTEM_NAME MATCHES ".*Linux")
|
|
set(LINUX TRUE)
|
|
endif()
|
|
|
|
if (NOT (WIN32 OR LINUX OR APPLE))
|
|
message(FATAL_ERROR "only Windows, Linux, and macOS builds are supported")
|
|
endif()
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
set(CMAKE_CXX_SCAN_FOR_MODULES OFF)
|
|
|
|
include(utils.cmake)
|
|
include(CTest)
|
|
|
|
option(KYTY_ENABLE_CLANG_TIDY "Run clang-tidy checks during builds" OFF)
|
|
|
|
set(KYTY_THIRD_PARTY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty")
|
|
|
|
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
|
|
|
include(TestBigEndian)
|
|
|
|
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
message(FATAL_ERROR "only 64-bit builds are supported")
|
|
endif()
|
|
|
|
test_big_endian(BIG_ENDIAN)
|
|
if(BIG_ENDIAN)
|
|
set(KYTY_ENDIAN KYTY_ENDIAN_BIG)
|
|
else()
|
|
set(KYTY_ENDIAN KYTY_ENDIAN_LITTLE)
|
|
endif()
|
|
|
|
if(CMAKE_BUILD_TYPE MATCHES Debug)
|
|
set(KYTY_BUILD KYTY_BUILD_DEBUG)
|
|
else()
|
|
set(KYTY_BUILD KYTY_BUILD_RELEASE)
|
|
endif()
|
|
|
|
if(LINUX OR APPLE)
|
|
# macOS rides the POSIX/Linux code paths until it gets a dedicated platform
|
|
set(KYTY_PLATFORM KYTY_PLATFORM_LINUX)
|
|
else()
|
|
set(KYTY_PLATFORM KYTY_PLATFORM_WINDOWS)
|
|
endif()
|
|
|
|
set(CLANG FALSE)
|
|
set(GCC FALSE)
|
|
set(KYTY_CLANG_CL FALSE)
|
|
get_filename_component(KYTY_CXX_COMPILER_NAME "${CMAKE_CXX_COMPILER}" NAME_WE)
|
|
string(TOLOWER "${KYTY_CXX_COMPILER_NAME}" KYTY_CXX_COMPILER_NAME)
|
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")
|
|
set(CLANG TRUE)
|
|
set(KYTY_COMPILER CLANG)
|
|
if(WIN32 AND KYTY_CXX_COMPILER_NAME STREQUAL "clang-cl")
|
|
set(KYTY_CLANG_CL TRUE)
|
|
set(KYTY_LINKER LLD_LINK)
|
|
elseif(APPLE)
|
|
set(KYTY_LINKER LD64) # Apple's default linker; lld flags don't apply
|
|
else()
|
|
set(KYTY_LINKER LLD)
|
|
endif()
|
|
if ((CMAKE_AR MATCHES "llvm") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.0.0) AND (CMAKE_CXX_COMPILER MATCHES "winlibs"))
|
|
string(REPLACE "llvm-ar.exe" "ar.exe" CMAKE_AR ${CMAKE_AR}) # llvm-ar.exe 11.0.0 from winlibs is broken
|
|
endif()
|
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
set(GCC TRUE)
|
|
set(KYTY_COMPILER GCC)
|
|
set(KYTY_LINKER LD)
|
|
else()
|
|
message(FATAL_ERROR "only Clang and GCC are supported; found ${CMAKE_CXX_COMPILER_ID}")
|
|
endif()
|
|
|
|
set(KYTY_PROJECT_NAME "Emulator" CACHE STRING "Project name suffix")
|
|
|
|
string(TOLOWER ${KYTY_COMPILER} KYTY_COMPILER_ID)
|
|
string(TOLOWER ${KYTY_LINKER} KYTY_LINKER_ID)
|
|
|
|
if (CLANG AND (KYTY_LINKER STREQUAL LLD))
|
|
set(KYTY_LD_OPTIONS "-fuse-ld=lld")
|
|
endif()
|
|
|
|
if (KYTY_LINKER STREQUAL LD AND NOT LINUX)
|
|
set(KYTY_LD_OPTIONS "-Wl,--image-base=0x100000000000")
|
|
endif()
|
|
|
|
project(Kyty${KYTY_PROJECT_NAME}${CMAKE_BUILD_TYPE}${KYTY_COMPILER} VERSION 0.2.2)
|
|
|
|
include_directories(
|
|
${KYTY_THIRD_PARTY_DIR}/gtest/include
|
|
${KYTY_THIRD_PARTY_DIR}/gtest
|
|
${KYTY_THIRD_PARTY_DIR}/fmt/include
|
|
${KYTY_THIRD_PARTY_DIR}/magic_enum/include/magic_enum
|
|
${PROJECT_BINARY_DIR}
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
)
|
|
|
|
set(KYTY_VERSION "${PROJECT_VERSION}")
|
|
|
|
configure_file(
|
|
${PROJECT_SOURCE_DIR}/cmake_config.h.in
|
|
${PROJECT_BINARY_DIR}/cmake_config.h
|
|
)
|
|
|
|
find_package(Git)
|
|
|
|
add_custom_target( KytyGitVersion
|
|
COMMAND ${CMAKE_COMMAND}
|
|
-D INPUT_FILE=${CMAKE_CURRENT_SOURCE_DIR}/kytyGitVersion.h.in
|
|
-D OUTPUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/kytyGitVersion.h
|
|
-D GIT_EXECUTABLE=${GIT_EXECUTABLE}
|
|
-D GIT_WORKING_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}
|
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/generate_version.cmake
|
|
COMMENT "Generate kytyGitVersion.h"
|
|
)
|
|
|
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0.0)
|
|
list(APPEND KYTY_IWYU
|
|
kyty_emulator
|
|
common
|
|
#launcher
|
|
)
|
|
list(APPEND KYTY_CLANG_TIDY
|
|
kyty_emulator
|
|
#common
|
|
launcher
|
|
)
|
|
endif()
|
|
|
|
option(KYTY_BUILD_LAUNCHER "Build Qt launcher" ON)
|
|
|
|
config_compiler_and_linker()
|
|
|
|
add_subdirectory("${KYTY_THIRD_PARTY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/3rdparty")
|
|
add_subdirectory(common)
|
|
|
|
file(GLOB kyty_emulator_src CONFIGURE_DEPENDS
|
|
libs/*.cpp
|
|
libs/*.h
|
|
graphics/*.cpp
|
|
graphics/*.h
|
|
graphics/guest_gpu/*.cpp
|
|
graphics/guest_gpu/*.h
|
|
graphics/guest_gpu/command_processor/*.cpp
|
|
graphics/guest_gpu/command_processor/*.h
|
|
graphics/host_gpu/*.cpp
|
|
graphics/host_gpu/*.h
|
|
graphics/host_gpu/renderer/*.cpp
|
|
graphics/host_gpu/renderer/*.h
|
|
graphics/host_gpu/renderer/cache/*.cpp
|
|
graphics/host_gpu/renderer/cache/*.h
|
|
graphics/host_gpu/renderer/image/*.cpp
|
|
graphics/host_gpu/renderer/image/*.h
|
|
graphics/host_gpu/renderer/pipeline/*.cpp
|
|
graphics/host_gpu/renderer/pipeline/*.h
|
|
graphics/shader/*.cpp
|
|
graphics/shader/*.h
|
|
graphics/shader/recompiler/*.cpp
|
|
graphics/shader/recompiler/*.h
|
|
graphics/shader/recompiler/cfg/*.cpp
|
|
graphics/shader/recompiler/cfg/*.h
|
|
graphics/shader/recompiler/decompiler/*.cpp
|
|
graphics/shader/recompiler/decompiler/*.h
|
|
graphics/shader/recompiler/emitter/*.cpp
|
|
graphics/shader/recompiler/emitter/*.h
|
|
graphics/shader/recompiler/ir/*.cpp
|
|
graphics/shader/recompiler/ir/*.h
|
|
graphics/presentation/*.cpp
|
|
graphics/presentation/*.h
|
|
graphics/presentation/window/*.cpp
|
|
graphics/presentation/window/*.h
|
|
kernel/*.cpp
|
|
kernel/*.h
|
|
loader/*.cpp
|
|
loader/*.h
|
|
)
|
|
|
|
find_program(KYTY_GLSLANG_VALIDATOR glslangValidator REQUIRED)
|
|
set(gpu_tiler_shader_dir "${CMAKE_CURRENT_SOURCE_DIR}/graphics/host_gpu/shaders")
|
|
set(gpu_tiler_generated_dir "${PROJECT_BINARY_DIR}/gpu_tiler_shaders")
|
|
set(gpu_tiler_shader_names
|
|
standard256
|
|
standard4
|
|
standard4_3d
|
|
standard64
|
|
standard64_3d
|
|
prt
|
|
prt_3d
|
|
render_target
|
|
depth
|
|
promote_d16
|
|
demote_d16
|
|
swap_bgra16
|
|
)
|
|
file(GLOB gpu_tiler_shader_includes CONFIGURE_DEPENDS "${gpu_tiler_shader_dir}/gpu_tiler_*.inc")
|
|
foreach(shader_name IN LISTS gpu_tiler_shader_names)
|
|
set(shader_source "${gpu_tiler_shader_dir}/gpu_tiler_${shader_name}.comp")
|
|
set(shader_spv "${gpu_tiler_generated_dir}/gpu_tiler_${shader_name}.spv")
|
|
set(shader_header "${gpu_tiler_generated_dir}/gpu_tiler_${shader_name}_spv.h")
|
|
string(TOUPPER "GPU_TILER_${shader_name}_SPV" shader_symbol)
|
|
add_custom_command(
|
|
OUTPUT "${shader_header}"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${gpu_tiler_generated_dir}"
|
|
COMMAND "${KYTY_GLSLANG_VALIDATOR}" -V --target-env vulkan1.0 -Os
|
|
"-I${gpu_tiler_shader_dir}" -o "${shader_spv}" "${shader_source}"
|
|
COMMAND ${CMAKE_COMMAND} -DINPUT=${shader_spv} -DOUTPUT=${shader_header}
|
|
-DSYMBOL=${shader_symbol} -P "${CMAKE_CURRENT_SOURCE_DIR}/embed_spirv.cmake"
|
|
DEPENDS "${shader_source}" ${gpu_tiler_shader_includes}
|
|
VERBATIM
|
|
)
|
|
list(APPEND gpu_tiler_shader_headers "${shader_header}")
|
|
endforeach()
|
|
list(APPEND kyty_emulator_src ${gpu_tiler_shader_headers})
|
|
|
|
set(gpu_blit_generated_dir "${PROJECT_BINARY_DIR}/gpu_blit_shaders")
|
|
set(gpu_blit_shader_sources
|
|
"${gpu_tiler_shader_dir}/gpu_blit_fs_triangle.vert"
|
|
"${gpu_tiler_shader_dir}/gpu_blit_color_to_ms_depth.frag"
|
|
)
|
|
foreach(shader_source IN LISTS gpu_blit_shader_sources)
|
|
get_filename_component(shader_name "${shader_source}" NAME_WE)
|
|
set(shader_spv "${gpu_blit_generated_dir}/${shader_name}.spv")
|
|
set(shader_header "${gpu_blit_generated_dir}/${shader_name}_spv.h")
|
|
string(TOUPPER "${shader_name}_SPV" shader_symbol)
|
|
add_custom_command(
|
|
OUTPUT "${shader_header}"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${gpu_blit_generated_dir}"
|
|
COMMAND "${KYTY_GLSLANG_VALIDATOR}" -V --target-env vulkan1.0 -Os
|
|
"-I${gpu_tiler_shader_dir}" -o "${shader_spv}" "${shader_source}"
|
|
COMMAND ${CMAKE_COMMAND} -DINPUT=${shader_spv} -DOUTPUT=${shader_header}
|
|
-DSYMBOL=${shader_symbol} -P "${CMAKE_CURRENT_SOURCE_DIR}/embed_spirv.cmake"
|
|
DEPENDS "${shader_source}"
|
|
VERBATIM
|
|
)
|
|
list(APPEND gpu_blit_shader_headers "${shader_header}")
|
|
endforeach()
|
|
list(APPEND kyty_emulator_src ${gpu_blit_shader_headers})
|
|
|
|
list(APPEND kyty_emulator_src
|
|
emulator.h
|
|
emulator.cpp
|
|
)
|
|
list(REMOVE_DUPLICATES kyty_emulator_src)
|
|
|
|
if (KYTY_CLANG_CL)
|
|
set_source_files_properties(${kyty_emulator_src} PROPERTIES COMPILE_FLAGS "-Wno-pragma-pack -Wno-deprecated-declarations -D_TIMESPEC_DEFINED")
|
|
endif()
|
|
|
|
set(kyty_emulator_link_libraries common Vulkan::Headers spirv-tools-opt spirv-tools SDL2-static xxhash FFmpeg::ffmpeg fmt::fmt nlohmann_json::nlohmann_json LibAtrac9)
|
|
|
|
# Linux system libraries required by the static FFmpeg archive.
|
|
if(LINUX)
|
|
find_package(Threads REQUIRED)
|
|
list(APPEND kyty_emulator_link_libraries m ${CMAKE_DL_LIBS} Threads::Threads)
|
|
|
|
# Optional FFmpeg dependencies.
|
|
find_package(ZLIB)
|
|
if(ZLIB_FOUND)
|
|
list(APPEND kyty_emulator_link_libraries ZLIB::ZLIB)
|
|
endif()
|
|
find_library(KYTY_BZ2_LIBRARY bz2)
|
|
if(KYTY_BZ2_LIBRARY)
|
|
list(APPEND kyty_emulator_link_libraries ${KYTY_BZ2_LIBRARY})
|
|
endif()
|
|
find_library(KYTY_LZMA_LIBRARY lzma)
|
|
if(KYTY_LZMA_LIBRARY)
|
|
list(APPEND kyty_emulator_link_libraries ${KYTY_LZMA_LIBRARY})
|
|
endif()
|
|
endif()
|
|
|
|
set(inc_headers
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${KYTY_THIRD_PARTY_DIR}/SDL2/include
|
|
${KYTY_THIRD_PARTY_DIR}/VulkanMemoryAllocator/include
|
|
${KYTY_THIRD_PARTY_DIR}/SPIRV-Tools/include
|
|
${KYTY_THIRD_PARTY_DIR}/fmt/include
|
|
${KYTY_THIRD_PARTY_DIR}/xxhash
|
|
${KYTY_THIRD_PARTY_DIR}/cpuinfo/include
|
|
${KYTY_THIRD_PARTY_DIR}/stb
|
|
)
|
|
|
|
if (KYTY_CLANG_CL)
|
|
list(APPEND kyty_emulator_link_libraries winpthread)
|
|
list(APPEND inc_headers
|
|
${KYTY_THIRD_PARTY_DIR}/winpthread/include
|
|
)
|
|
endif()
|
|
|
|
list(APPEND check_headers
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
)
|
|
|
|
function(add_kyty_full_emulator_test target source)
|
|
add_executable(${target} EXCLUDE_FROM_ALL ${source} ${kyty_emulator_src})
|
|
target_link_libraries(${target} ${kyty_emulator_link_libraries})
|
|
target_include_directories(${target} PRIVATE ${inc_headers})
|
|
if (WIN32)
|
|
target_link_libraries(${target} iphlpapi)
|
|
endif()
|
|
if (KYTY_CLANG_CL)
|
|
target_link_libraries(${target} onecore)
|
|
add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${KYTY_THIRD_PARTY_DIR}/winpthread/bin/libwinpthread-1.dll" $<TARGET_FILE_DIR:${target}>/libwinpthread-1.dll)
|
|
endif()
|
|
# The macOS x86_64 guest address space needs its .zerofill segments anchored
|
|
# by linker flags, or the kernel kills the binary on load (posix_spawn EIO).
|
|
configure_macos_guest_address_space(${target})
|
|
endfunction()
|
|
|
|
function(configure_macos_guest_address_space target)
|
|
if(APPLE AND (CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64" OR
|
|
(NOT CMAKE_OSX_ARCHITECTURES AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64)$")))
|
|
target_sources(${target} PRIVATE kernel/macosGuestAddressSpace.cpp)
|
|
target_compile_definitions(${target} PRIVATE KYTY_LINKED_GUEST_ADDRESS_SPACE=1)
|
|
target_link_options(${target} PRIVATE
|
|
-Wl,-ld_classic,-no_pie,-no_fixup_chains,-no_huge,-pagezero_size,0x40000,-segaddr,SYSTEM_MANAGED,0x40000,-segaddr,SYSTEM_RESERVED,0x7ffffc000,-segaddr,USER_AREA,0x7000000000,-image_base,0x700000000000)
|
|
endif()
|
|
endfunction()
|
|
|
|
add_kyty_full_emulator_test(shader_cfg_tests ../tests/shaderCfgTests.cpp)
|
|
|
|
add_executable(scalar_provenance_tests EXCLUDE_FROM_ALL
|
|
../tests/ScalarProvenanceTests.cpp
|
|
graphics/host_gpu/hostMemory.cpp
|
|
graphics/shader/recompiler/ir/ReadLaneElimination.cpp
|
|
graphics/shader/recompiler/ir/ScalarProvenance.cpp
|
|
graphics/shader/recompiler/ir/SrtWalker.cpp
|
|
)
|
|
target_link_libraries(scalar_provenance_tests fmt::fmt)
|
|
target_include_directories(scalar_provenance_tests PRIVATE ${inc_headers})
|
|
|
|
add_executable(page_manager_tests EXCLUDE_FROM_ALL
|
|
../tests/PageManagerTests.cpp
|
|
graphics/host_gpu/pageManager.cpp
|
|
)
|
|
target_include_directories(page_manager_tests PRIVATE ${inc_headers})
|
|
|
|
add_executable(memory_tracker_tests EXCLUDE_FROM_ALL
|
|
../tests/MemoryTrackerTests.cpp
|
|
graphics/host_gpu/pageManager.cpp
|
|
graphics/host_gpu/memoryTracker.cpp
|
|
)
|
|
target_link_libraries(memory_tracker_tests fmt::fmt common)
|
|
target_include_directories(memory_tracker_tests PRIVATE ${inc_headers})
|
|
|
|
add_executable(shader_vertex_metadata_tests EXCLUDE_FROM_ALL
|
|
../tests/ShaderVertexMetadataTests.cpp
|
|
graphics/host_gpu/hostMemory.cpp
|
|
graphics/shader/shaderVertexMetadata.cpp
|
|
)
|
|
target_include_directories(shader_vertex_metadata_tests PRIVATE ${inc_headers})
|
|
|
|
add_executable(shader_stage_runtime_tests EXCLUDE_FROM_ALL
|
|
../tests/ShaderStageRuntimeTests.cpp
|
|
graphics/guest_gpu/gpu_format.cpp
|
|
graphics/host_gpu/hostMemory.cpp
|
|
graphics/shader/shaderStageRuntime.cpp
|
|
graphics/shader/recompiler/ir/ResourceMaterialization.cpp
|
|
graphics/shader/recompiler/ir/ScalarProvenance.cpp
|
|
graphics/shader/recompiler/ir/SrtWalker.cpp
|
|
)
|
|
target_link_libraries(shader_stage_runtime_tests fmt::fmt)
|
|
target_include_directories(shader_stage_runtime_tests PRIVATE ${inc_headers})
|
|
|
|
add_executable(resource_tracking_tests EXCLUDE_FROM_ALL
|
|
../tests/ResourceTrackingTests.cpp
|
|
graphics/guest_gpu/gpu_format.cpp
|
|
graphics/host_gpu/hostMemory.cpp
|
|
graphics/shader/recompiler/ir/ScalarProvenance.cpp
|
|
graphics/shader/recompiler/ir/SrtWalker.cpp
|
|
graphics/shader/recompiler/ir/SrtPatcher.cpp
|
|
graphics/shader/recompiler/ir/ResourceTracking.cpp
|
|
graphics/shader/recompiler/ir/ResourceMaterialization.cpp
|
|
graphics/shader/recompiler/ir/ShaderInfoCollection.cpp
|
|
graphics/shader/recompiler/ir/BindingLayout.cpp
|
|
)
|
|
target_link_libraries(resource_tracking_tests fmt::fmt)
|
|
target_include_directories(resource_tracking_tests PRIVATE ${inc_headers})
|
|
|
|
add_executable(resource_mutex_tests EXCLUDE_FROM_ALL
|
|
../tests/ResourceMutexTests.cpp
|
|
graphics/host_gpu/renderer/cache/resourceMutex.cpp
|
|
)
|
|
target_link_libraries(resource_mutex_tests common)
|
|
target_include_directories(resource_mutex_tests PRIVATE ${inc_headers})
|
|
|
|
add_executable(event_queue_lifetime_tests EXCLUDE_FROM_ALL
|
|
../tests/EventQueueLifetimeTests.cpp
|
|
kernel/eventQueue.cpp
|
|
loader/timer.cpp
|
|
)
|
|
target_link_libraries(event_queue_lifetime_tests common fmt::fmt)
|
|
target_include_directories(event_queue_lifetime_tests PRIVATE ${inc_headers})
|
|
|
|
add_executable(image_page_table_tests EXCLUDE_FROM_ALL
|
|
../tests/ImagePageTableTests.cpp
|
|
)
|
|
target_link_libraries(image_page_table_tests common fmt::fmt)
|
|
target_include_directories(image_page_table_tests PRIVATE ${inc_headers})
|
|
|
|
add_kyty_full_emulator_test(shader_recompiler_compute_tests ../tests/ShaderRecompilerComputeTests.cpp)
|
|
|
|
set(gpu_test_generated_dir "${PROJECT_BINARY_DIR}/gpu_test_shaders")
|
|
set(gpu_test_ms_depth_source
|
|
"${gpu_tiler_shader_dir}/gpu_test_ms_depth.comp")
|
|
set(gpu_test_ms_depth_spv
|
|
"${gpu_test_generated_dir}/gpu_test_ms_depth.spv")
|
|
set(gpu_test_ms_depth_header
|
|
"${gpu_test_generated_dir}/gpu_test_ms_depth_spv.h")
|
|
add_custom_command(
|
|
OUTPUT "${gpu_test_ms_depth_header}"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${gpu_test_generated_dir}"
|
|
COMMAND "${KYTY_GLSLANG_VALIDATOR}" -V --target-env vulkan1.0 -Os
|
|
-o "${gpu_test_ms_depth_spv}" "${gpu_test_ms_depth_source}"
|
|
COMMAND ${CMAKE_COMMAND} -DINPUT=${gpu_test_ms_depth_spv}
|
|
-DOUTPUT=${gpu_test_ms_depth_header} -DSYMBOL=GPU_TEST_MS_DEPTH_SPV
|
|
-P "${CMAKE_CURRENT_SOURCE_DIR}/embed_spirv.cmake"
|
|
DEPENDS "${gpu_test_ms_depth_source}"
|
|
VERBATIM
|
|
)
|
|
target_sources(shader_recompiler_compute_tests PRIVATE
|
|
"${gpu_test_ms_depth_header}")
|
|
|
|
add_kyty_full_emulator_test(virtual_memory_allocation_tests ../tests/VirtualMemoryAllocationTests.cpp)
|
|
target_compile_definitions(virtual_memory_allocation_tests PRIVATE
|
|
KYTY_VIRTUAL_MEMORY_ALLOCATION_TESTS=1)
|
|
|
|
# These tests use exceptions.
|
|
if(NOT KYTY_CLANG_CL)
|
|
foreach(kyty_exception_test scalar_provenance_tests resource_tracking_tests
|
|
virtual_memory_allocation_tests)
|
|
target_compile_options(${kyty_exception_test} PRIVATE -fexceptions)
|
|
endforeach()
|
|
endif()
|
|
|
|
if(BUILD_TESTING)
|
|
add_test(NAME shader_cfg COMMAND $<TARGET_FILE:shader_cfg_tests>)
|
|
add_test(NAME scalar_provenance COMMAND $<TARGET_FILE:scalar_provenance_tests>)
|
|
add_test(NAME image_page_table COMMAND $<TARGET_FILE:image_page_table_tests>)
|
|
add_test(NAME memory_tracker COMMAND $<TARGET_FILE:memory_tracker_tests>)
|
|
add_test(NAME page_manager COMMAND $<TARGET_FILE:page_manager_tests>)
|
|
add_test(NAME shader_vertex_metadata COMMAND $<TARGET_FILE:shader_vertex_metadata_tests>)
|
|
add_test(NAME shader_stage_runtime COMMAND $<TARGET_FILE:shader_stage_runtime_tests>)
|
|
add_test(NAME resource_tracking COMMAND $<TARGET_FILE:resource_tracking_tests>)
|
|
add_test(NAME resource_mutex COMMAND $<TARGET_FILE:resource_mutex_tests>)
|
|
add_test(NAME event_queue_lifetime COMMAND $<TARGET_FILE:event_queue_lifetime_tests>)
|
|
add_test(NAME shader_recompiler_compute COMMAND $<TARGET_FILE:shader_recompiler_compute_tests>)
|
|
add_test(NAME virtual_memory_allocation
|
|
COMMAND $<TARGET_FILE:virtual_memory_allocation_tests>)
|
|
add_test(NAME command_scheduler_timeline
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --scheduler-only)
|
|
add_test(NAME stream_buffer_ring
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --stream-buffer-only)
|
|
add_test(NAME gpu_command_lane
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --gpu-command-lane-only)
|
|
add_test(NAME gpu_tiler
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --gpu-tiler-only)
|
|
|
|
add_test(NAME texture_cache_layered_image
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --layered-image-only)
|
|
add_test(NAME texture_cache_image_views
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --image-view-cache-only)
|
|
add_test(NAME texture_cache_storage_sampled
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --storage-sampled-only)
|
|
add_test(NAME texture_cache_depth_readback
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --depth-readback-only)
|
|
add_test(NAME buffer_cache_dirty_gc
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --buffer-cache-gc-only)
|
|
|
|
if(WIN32)
|
|
# These tests still depend on the Windows multisample-depth path.
|
|
add_test(NAME texture_cache_image_overlap
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --image-overlap-only)
|
|
add_test(NAME texture_cache_htile_clear
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --htile-clear-only)
|
|
add_test(NAME buffer_cache_ranges
|
|
COMMAND $<TARGET_FILE:shader_recompiler_compute_tests> --buffer-cache-range-only)
|
|
endif()
|
|
|
|
add_custom_target(kyty_tests DEPENDS
|
|
shader_cfg_tests
|
|
scalar_provenance_tests
|
|
image_page_table_tests
|
|
memory_tracker_tests
|
|
page_manager_tests
|
|
shader_vertex_metadata_tests
|
|
shader_stage_runtime_tests
|
|
resource_tracking_tests
|
|
resource_mutex_tests
|
|
event_queue_lifetime_tests
|
|
shader_recompiler_compute_tests
|
|
virtual_memory_allocation_tests
|
|
)
|
|
endif()
|
|
|
|
|
|
add_executable(kyty_emulator main.cpp ${kyty_emulator_src})
|
|
configure_macos_guest_address_space(kyty_emulator)
|
|
|
|
target_link_libraries(kyty_emulator ${kyty_emulator_link_libraries})
|
|
if (WIN32)
|
|
target_link_libraries(kyty_emulator opengl32)
|
|
target_link_libraries(kyty_emulator iphlpapi)
|
|
target_link_libraries(kyty_emulator setupapi)
|
|
target_link_libraries(kyty_emulator ws2_32)
|
|
endif()
|
|
if (KYTY_CLANG_CL)
|
|
target_link_libraries(kyty_emulator onecore)
|
|
endif()
|
|
if (CLANG AND NOT KYTY_CLANG_CL)
|
|
target_link_libraries(kyty_emulator pthread)
|
|
endif()
|
|
# dlopen/dlsym/dladdr for RenderDoc.
|
|
target_link_libraries(kyty_emulator ${CMAKE_DL_LIBS})
|
|
target_include_directories(kyty_emulator PRIVATE ${inc_headers})
|
|
|
|
clang_tidy_check(kyty_emulator "" "${check_headers}" "${inc_headers}")
|
|
|
|
include_what_you_use(kyty_emulator "${inc_headers}")
|
|
|
|
set(KYTY_EMULATOR_MAP_NAME "kyty_emulator_${KYTY_COMPILER_ID}_${KYTY_LINKER_ID}.map")
|
|
|
|
set(KYTY_EMULATOR_MAP_LINK_PATH "${CMAKE_CURRENT_BINARY_DIR}/${KYTY_EMULATOR_MAP_NAME}")
|
|
set(KYTY_EMULATOR_PDB_LINK_PATH "${CMAKE_CURRENT_BINARY_DIR}/kyty_emulator.pdb")
|
|
|
|
if(KYTY_CLANG_CL)
|
|
target_link_options(kyty_emulator PRIVATE
|
|
"/DYNAMICBASE:NO"
|
|
"/DEBUG:FULL"
|
|
"/PDB:${KYTY_EMULATOR_PDB_LINK_PATH}"
|
|
"/lldmap:${KYTY_EMULATOR_MAP_LINK_PATH}"
|
|
)
|
|
add_custom_command(TARGET kyty_emulator POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${KYTY_THIRD_PARTY_DIR}/winpthread/bin/libwinpthread-1.dll" $<TARGET_FILE_DIR:kyty_emulator>/libwinpthread-1.dll)
|
|
elseif(WIN32 OR LINUX)
|
|
set_target_properties(kyty_emulator PROPERTIES LINK_FLAGS "${KYTY_LD_OPTIONS} -Wl,-Map=${KYTY_EMULATOR_MAP_LINK_PATH}")
|
|
endif()
|
|
|
|
add_dependencies(kyty_emulator KytyGitVersion)
|
|
|
|
if(APPLE)
|
|
# The emulator writes x86-64 trampolines/PLT stubs into memory and executes them, and
|
|
# runs guest code under Rosetta. That requires the JIT / unsigned-executable-memory
|
|
# entitlements, so re-sign the binary after every link (an unsigned/relinked binary
|
|
# reverts to the hardened defaults and aborts when it first executes written code).
|
|
add_custom_command(TARGET kyty_emulator POST_BUILD
|
|
COMMAND codesign -s - --force --options runtime
|
|
--entitlements "${CMAKE_CURRENT_SOURCE_DIR}/macos_jit.entitlements"
|
|
$<TARGET_FILE:kyty_emulator>
|
|
COMMENT "Codesign kyty_emulator with JIT entitlements (macOS)")
|
|
endif()
|
|
|
|
install(TARGETS kyty_emulator DESTINATION .)
|
|
if(KYTY_BUILD_LAUNCHER)
|
|
add_subdirectory(launcher)
|
|
endif()
|
|
if(KYTY_CLANG_CL)
|
|
install(FILES "${KYTY_THIRD_PARTY_DIR}/winpthread/bin/libwinpthread-1.dll" DESTINATION .)
|
|
endif()
|