cmake_minimum_required(VERSION 3.22.1) project(mosis-designer) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Find Lua before RmlUi so it can be used find_package(Lua REQUIRED) # Find other dependencies via vcpkg find_package(glfw3 CONFIG REQUIRED) find_package(freetype CONFIG REQUIRED) find_package(PNG REQUIRED) find_package(nlohmann_json CONFIG REQUIRED) # Fetch RmlUi include(FetchContent) FetchContent_Declare( rmlui GIT_REPOSITORY https://github.com/mikke89/RmlUi.git GIT_TAG 6.0 ) # Enable RmlUi Lua bindings before fetching set(RMLUI_LUA_BINDINGS ON CACHE BOOL "" FORCE) set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(RMLUI_SAMPLES OFF CACHE BOOL "" FORCE) set(RMLUI_TESTS OFF CACHE BOOL "" FORCE) set(RMLUI_FONT_ENGINE "freetype" CACHE STRING "" FORCE) FetchContent_MakeAvailable(rmlui) # Get the RmlUi source directory for backend sources FetchContent_GetProperties(rmlui) set(RMLUI_SOURCE_DIR ${rmlui_SOURCE_DIR}) # Shared kernel library sources (platform-agnostic code) set(KERNEL_SOURCES ../src/main/kernel/src/platform.cpp ../src/main/kernel/src/file_interface.cpp ) # Desktop platform sources set(DESIGNER_SOURCES src/main.cpp src/desktop_platform.cpp src/hot_reload.cpp src/data_models.cpp src/kernel_impl.cpp src/testing/action_recorder.cpp src/testing/action_player.cpp src/testing/ui_inspector.cpp src/testing/visual_capture.cpp # RmlUi backend sources ${RMLUI_SOURCE_DIR}/Backends/RmlUi_Backend_GLFW_GL3.cpp ${RMLUI_SOURCE_DIR}/Backends/RmlUi_Platform_GLFW.cpp ${RMLUI_SOURCE_DIR}/Backends/RmlUi_Renderer_GL3.cpp ) # Designer executable add_executable(mosis-designer ${KERNEL_SOURCES} ${DESIGNER_SOURCES} ) target_include_directories(mosis-designer PRIVATE src ../src/main/kernel/include ${RMLUI_SOURCE_DIR} ${RMLUI_SOURCE_DIR}/Backends ${LUA_INCLUDE_DIR} ) target_link_libraries(mosis-designer PRIVATE glfw freetype PNG::PNG RmlUi::RmlUi RmlUi::Lua nlohmann_json::nlohmann_json ) target_compile_definitions(mosis-designer PRIVATE MOSIS_PLATFORM_DESKTOP RMLUI_STATIC_LIB ) # Platform-specific libraries if(WIN32) target_link_libraries(mosis-designer PRIVATE opengl32) elseif(APPLE) find_library(OPENGL_LIBRARY OpenGL) target_link_libraries(mosis-designer PRIVATE ${OPENGL_LIBRARY}) else() find_package(OpenGL REQUIRED) target_link_libraries(mosis-designer PRIVATE OpenGL::GL) endif() # Copy assets for development add_custom_command(TARGET mosis-designer POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/../src/main/assets $/assets )