105 lines
2.7 KiB
CMake
105 lines
2.7 KiB
CMake
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
|
|
$<TARGET_FILE_DIR:mosis-designer>/assets
|
|
)
|