130 lines
3.7 KiB
CMake
130 lines
3.7 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/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()
|
||
# ------------------------- |