# Modified by vii from komaruworld/mocktail. See README "About this fork". # Copyright 2026 Mocktail Project Authors # Licensed under the Apache License, Version 2.0. include_guard(GLOBAL) get_filename_component(MOCKTAIL_PLATFORM_GRAPHICS_ROOT "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE ) find_package(SDL3 3.4 REQUIRED CONFIG) find_path(MOCKTAIL_EGL_INCLUDE_DIR EGL/egl.h REQUIRED) find_path(MOCKTAIL_GLES3_INCLUDE_DIR GLES3/gl3.h REQUIRED) set(MOCKTAIL_WINDOW_ICON_PNG "${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/packaging/icons/hicolor/48x48/apps/io.github.CoderDayton.nightcap.png" ) set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${MOCKTAIL_WINDOW_ICON_PNG}" ) file(READ "${MOCKTAIL_WINDOW_ICON_PNG}" MOCKTAIL_WINDOW_ICON_HEX HEX) string(LENGTH "${MOCKTAIL_WINDOW_ICON_HEX}" MOCKTAIL_WINDOW_ICON_HEX_LENGTH) set(MOCKTAIL_WINDOW_ICON_BYTES "") set(MOCKTAIL_WINDOW_ICON_HEX_OFFSET 0) set(MOCKTAIL_WINDOW_ICON_COLUMN 0) while(MOCKTAIL_WINDOW_ICON_HEX_OFFSET LESS MOCKTAIL_WINDOW_ICON_HEX_LENGTH) string(SUBSTRING "${MOCKTAIL_WINDOW_ICON_HEX}" ${MOCKTAIL_WINDOW_ICON_HEX_OFFSET} 2 MOCKTAIL_WINDOW_ICON_BYTE ) string(APPEND MOCKTAIL_WINDOW_ICON_BYTES "0x${MOCKTAIL_WINDOW_ICON_BYTE}, " ) math(EXPR MOCKTAIL_WINDOW_ICON_HEX_OFFSET "${MOCKTAIL_WINDOW_ICON_HEX_OFFSET} + 2" ) math(EXPR MOCKTAIL_WINDOW_ICON_COLUMN "${MOCKTAIL_WINDOW_ICON_COLUMN} + 1" ) if(MOCKTAIL_WINDOW_ICON_COLUMN EQUAL 12) string(APPEND MOCKTAIL_WINDOW_ICON_BYTES "\n ") set(MOCKTAIL_WINDOW_ICON_COLUMN 0) endif() endwhile() set(MOCKTAIL_PLATFORM_GENERATED_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated" ) file(MAKE_DIRECTORY "${MOCKTAIL_PLATFORM_GENERATED_INCLUDE_DIR}/mocktail/platform" ) configure_file( "${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/cmake/templates/sdl_window_icon_data.h.in" "${MOCKTAIL_PLATFORM_GENERATED_INCLUDE_DIR}/mocktail/platform/sdl_window_icon_data.h" @ONLY ) set(MOCKTAIL_ANGLE_HEADERS_INCLUDE_DIR "${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/third_party/angle_headers/include" ) if(NOT EXISTS "${MOCKTAIL_ANGLE_HEADERS_INCLUDE_DIR}/EGL/eglext_angle.h") message(FATAL_ERROR "pinned ANGLE EGL extension header is unavailable") endif() add_library(mocktail_angle_headers INTERFACE) target_include_directories(mocktail_angle_headers SYSTEM INTERFACE "${MOCKTAIL_ANGLE_HEADERS_INCLUDE_DIR}" ) add_library(Mocktail::AngleHeaders ALIAS mocktail_angle_headers) add_library(mocktail_platform_sdl STATIC ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/platform/sdl_application_metadata.cc ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/platform/sdl_display_refresh_capabilities.cc ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/platform/sdl_event_converter.cc ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/platform/sdl_gamepad_manager.cc ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/platform/sdl_platform_runtime.cc ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/platform/sdl_text_clipboard.cc ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/platform/sdl_window_icon.cc ) target_include_directories(mocktail_platform_sdl PUBLIC ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/include ) target_include_directories(mocktail_platform_sdl PRIVATE ${MOCKTAIL_PLATFORM_GENERATED_INCLUDE_DIR} ) target_link_libraries(mocktail_platform_sdl PUBLIC SDL3::SDL3) target_compile_features(mocktail_platform_sdl PUBLIC cxx_std_17) target_compile_definitions(mocktail_platform_sdl PRIVATE MOCKTAIL_PROJECT_VERSION="${PROJECT_VERSION}" ) add_library(Mocktail::PlatformSdl ALIAS mocktail_platform_sdl) add_library(mocktail_graphics_foundation STATIC ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/graphics/graphics_backend.cc ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/graphics/angle_probe.cc ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/graphics/bionic_egl_bridge.cc ) target_include_directories(mocktail_graphics_foundation PUBLIC ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/include PRIVATE ${MOCKTAIL_EGL_INCLUDE_DIR} ) target_link_libraries(mocktail_graphics_foundation PRIVATE Mocktail::AngleHeaders ${CMAKE_DL_LIBS} ) target_compile_features(mocktail_graphics_foundation PUBLIC cxx_std_17) add_library(Mocktail::GraphicsFoundation ALIAS mocktail_graphics_foundation) add_library(mocktail_gles_text_overlay STATIC ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/graphics/gles_text_overlay_compositor.cc ) target_include_directories(mocktail_gles_text_overlay PUBLIC ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/include PRIVATE ${MOCKTAIL_GLES3_INCLUDE_DIR} ) target_link_libraries(mocktail_gles_text_overlay PUBLIC SDL3::SDL3) target_compile_features(mocktail_gles_text_overlay PUBLIC cxx_std_17) mocktail_apply_compile_options(mocktail_gles_text_overlay) add_library(Mocktail::GlesTextOverlay ALIAS mocktail_gles_text_overlay) add_library(mocktail_sdl_vulkan_wsi STATIC ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/graphics/sdl_vulkan_wsi.cc ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/graphics/android_vulkan_wsi_adapter.cc ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/src/graphics/present_mode_policy.cc ) set_target_properties(mocktail_sdl_vulkan_wsi PROPERTIES POSITION_INDEPENDENT_CODE ON ) target_include_directories(mocktail_sdl_vulkan_wsi PUBLIC ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/include ) target_link_libraries(mocktail_sdl_vulkan_wsi PUBLIC SDL3::SDL3) target_link_libraries(mocktail_sdl_vulkan_wsi PUBLIC Vulkan::Headers) target_compile_features(mocktail_sdl_vulkan_wsi PUBLIC cxx_std_17) add_library(Mocktail::SdlVulkanWsi ALIAS mocktail_sdl_vulkan_wsi) if(BUILD_TESTING AND TARGET GTest::gtest_main) add_executable(gles_text_overlay_compositor_test ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/tests/gles_text_overlay_compositor_test.cc ) target_include_directories(gles_text_overlay_compositor_test PRIVATE ${MOCKTAIL_GLES3_INCLUDE_DIR} ) target_link_libraries(gles_text_overlay_compositor_test PRIVATE Mocktail::GlesTextOverlay GTest::gtest_main ) add_executable(bionic_egl_bridge_test ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/tests/bionic_egl_bridge_test.cc ) target_link_libraries(bionic_egl_bridge_test PRIVATE Mocktail::GraphicsFoundation GTest::gtest_main ) add_dependencies(bionic_egl_bridge_test stub_egl) add_executable(platform_graphics_foundation_test ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/tests/platform_graphics_foundation_test.cc ) add_executable(display_refresh_capabilities_test ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/tests/display_refresh_capabilities_test.cc ) add_executable(present_mode_policy_test ${MOCKTAIL_PLATFORM_GRAPHICS_ROOT}/tests/present_mode_policy_test.cc ) target_link_libraries(present_mode_policy_test PRIVATE Mocktail::SdlVulkanWsi GTest::gtest_main ) target_link_libraries(display_refresh_capabilities_test PRIVATE Mocktail::PlatformSdl GTest::gtest_main ) target_link_libraries(platform_graphics_foundation_test PRIVATE Mocktail::PlatformSdl Mocktail::GraphicsFoundation Mocktail::SdlVulkanWsi GTest::gtest_main ) include(GoogleTest) gtest_discover_tests(gles_text_overlay_compositor_test) gtest_discover_tests(bionic_egl_bridge_test) gtest_discover_tests(platform_graphics_foundation_test) gtest_discover_tests(display_refresh_capabilities_test) gtest_discover_tests(present_mode_policy_test) endif()