Files
simian/CMakeLists.txt
nick 4a43160537
CI / build-and-test (push) Successful in 2m19s
feat: math and texture functions. update tests
2025-11-19 15:49:03 +13:00

138 lines
4.0 KiB
CMake

cmake_minimum_required(VERSION 3.25)
project(SimianProject)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# -------------------------
# 1️⃣ Raylib (submodule)
# -------------------------
add_subdirectory(external/raylib)
# -------------------------
# 2️⃣ AngelScript (submodule)
# -------------------------
add_subdirectory(external/angelscript/sdk/angelscript/projects/cmake)
# -------------------------
# Dear ImGui (docking branch)
# -------------------------
# Ensure the submodule exists at external/imgui (added with git submodule)
add_subdirectory(cmake/imgui)
# -------------------------
# rlImGui (optional - Raylib ImGui integration)
# -------------------------
# If you add rlImGui as a submodule under external/rlImGui, CMake will pick it up
option(USE_RLIMGUI "Enable rlImGui integration if found in external/rlImGui" ON)
set(RLIMGUI_ROOT "${CMAKE_SOURCE_DIR}/external/rlImGui")
if(USE_RLIMGUI)
if(EXISTS "${RLIMGUI_ROOT}/CMakeLists.txt")
message(STATUS "rlImGui CMakeLists found at ${RLIMGUI_ROOT} - adding to build")
add_subdirectory(${RLIMGUI_ROOT} EXCLUDE_FROM_ALL)
set(HAVE_RLIMGUI TRUE)
elseif(EXISTS "${RLIMGUI_ROOT}")
message(STATUS "rlImGui sources found at ${RLIMGUI_ROOT} - using project wrapper cmake/rlImGui")
add_subdirectory(cmake/rlImGui)
set(HAVE_RLIMGUI TRUE)
else()
set(HAVE_RLIMGUI FALSE)
endif()
else()
set(HAVE_RLIMGUI FALSE)
endif()
# -------------------------
# Tests
# -------------------------
enable_testing()
add_subdirectory(tests)
# -------------------------
# 3️⃣ scriptstdstring add-on
# -------------------------
add_library(scriptstdstring STATIC
external/angelscript/sdk/add_on/scriptstdstring/scriptstdstring.cpp
)
target_include_directories(scriptstdstring
PUBLIC external/angelscript/sdk/angelscript/include
)
# -------------------------
# 3️⃣.1️⃣ scriptbuilder add-on
# -------------------------
add_library(scriptbuilder STATIC
external/angelscript/sdk/add_on/scriptbuilder/scriptbuilder.cpp
)
target_include_directories(scriptbuilder
PUBLIC external/angelscript/sdk/angelscript/include
)
# -------------------------
# 4️⃣ Main executable
# -------------------------
add_executable(simian
main.cpp
src/Application.cpp
src/scripting/ScriptEngine.cpp
src/scripting/ScriptBindings.cpp
src/scripting/ToastBindings.cpp
src/scripting/LogBindings.cpp
src/scripting/DrawBindings.cpp
src/scripting/ImageBindings.cpp
src/scripting/TextureBindings.cpp
src/scripting/MathBindings.cpp
src/HotReload.cpp
src/gui/GuiManager.cpp
src/gui/LogWindow.cpp
src/log/log.c
)
target_include_directories(simian PUBLIC
include
include/scripting
include/gui
src/log
external/raylib/src
external/angelscript/sdk/angelscript/include
external/angelscript/sdk/add_on/scriptstdstring
external/angelscript/sdk/add_on/scriptbuilder
external/imgui
)
target_link_libraries(simian PRIVATE
raylib
angelscript
scriptstdstring
scriptbuilder
imgui
)
if(HAVE_RLIMGUI)
target_include_directories(simian PUBLIC ${RLIMGUI_ROOT}/include)
target_link_libraries(simian PRIVATE rlImGui)
# Expose HAVE_RLIMGUI to the C++ compiler so source can guard ImGui calls
target_compile_definitions(simian PRIVATE HAVE_RLIMGUI=1)
message(STATUS "Linking rlImGui into simian")
else()
message(STATUS "rlImGui not found - building without rlImGui integration")
endif()
# -------------------------
# 5️⃣ Platform-specific linking
# -------------------------
if(WIN32)
target_link_libraries(simian PRIVATE winmm gdi32)
elseif(UNIX)
# Linux / macOS: Raylib handles system libs automatically
endif()
# -------------------------
# 6️⃣ Optional: Compile flags
# -------------------------
if(MSVC)
target_compile_options(simian PRIVATE /W4 /EHsc)
else()
target_compile_options(simian PRIVATE -Wall -Wextra -pedantic)
endif()
# -------------------------