Files
simian/CMakeLists.txt
Nick Koirala 24e4d33307
All checks were successful
CI / build-and-test (push) Successful in 2m8s
chore: refactor
2025-11-17 20:03:26 +13:00

130 lines
3.7 KiB
CMake
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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/ScriptEngine.cpp
src/ScriptBindings.cpp
src/HotReload.cpp
src/GuiManager.cpp
src/LogWindow.cpp
src/log/log.c
)
target_include_directories(simian PUBLIC
include
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()
# -------------------------