Files
InstanceBrick--nightcap/cmake/MocktailPlatformGraphics.cmake
T
vii 349e314850 feat(packaging): rename app ID to io.github.CoderDayton.nightcap and publish Flatpak
Rename the desktop entry, metainfo, icons, Flatpak manifest, and SDL app
identity so Nightcap installs side by side with upstream. Build a signed
Flatpak on v* tags, publish the OSTree repo and landing page to GitHub
Pages, and attach the bundle to the release. Release creation tolerates
the AppImage and Flatpak workflows racing on the same tag.
2026-09-15 07:10:26 -05:00

186 lines
7.1 KiB
CMake

# 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()