mirror of
https://github.com/InstanceBrick/nightcap.git
synced 2026-10-18 01:01:36 +02:00
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.
186 lines
7.1 KiB
CMake
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()
|