168 lines
4.2 KiB
CMake
168 lines
4.2 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
||
project(factory-hole-core LANGUAGES CXX)
|
||
|
||
set(CMAKE_CXX_STANDARD 17)
|
||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||
|
||
include(FetchContent)
|
||
|
||
# ---- Core dependencies -------------------------------------------------------
|
||
|
||
# Flecs ECS
|
||
FetchContent_Declare(
|
||
flecs
|
||
GIT_REPOSITORY https://github.com/SanderMertens/flecs.git
|
||
GIT_TAG v4.1.4
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
|
||
# Doctest
|
||
FetchContent_Declare(
|
||
doctest
|
||
GIT_REPOSITORY https://github.com/doctest/doctest.git
|
||
GIT_TAG v2.4.12
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
|
||
# GLM – vector/matrix math
|
||
FetchContent_Declare(
|
||
glm
|
||
GIT_REPOSITORY https://github.com/g-truc/glm.git
|
||
GIT_TAG 1.0.1
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
|
||
# nlohmann/json – graph serialisation
|
||
FetchContent_Declare(
|
||
nlohmann_json
|
||
GIT_REPOSITORY https://github.com/nlohmann/json.git
|
||
GIT_TAG v3.11.3
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
|
||
# ---- World-generation dependencies ------------------------------------------
|
||
|
||
# FastNoise2 – noise nodes
|
||
FetchContent_Declare(
|
||
FastNoise2
|
||
GIT_REPOSITORY https://github.com/Auburn/FastNoise2.git
|
||
GIT_TAG master
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
|
||
# FastNoiseLite – single-header noise generation (used by WorldGraph noise nodes)
|
||
FetchContent_Declare(
|
||
FastNoiseLite
|
||
GIT_REPOSITORY https://github.com/Auburn/FastNoiseLite.git
|
||
GIT_TAG master
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
|
||
# ---- Frontend dependencies (used by tools/) ----------------------------------
|
||
|
||
# GLFW – windowing for the node-editor tool
|
||
FetchContent_Declare(
|
||
glfw
|
||
GIT_REPOSITORY https://github.com/glfw/glfw.git
|
||
GIT_TAG 3.4
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
|
||
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
||
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
||
|
||
# Dear ImGui
|
||
FetchContent_Declare(
|
||
imgui
|
||
GIT_REPOSITORY https://github.com/ocornut/imgui.git
|
||
GIT_TAG v1.91.6
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
|
||
# ImNodes – node-graph editor widget for ImGui
|
||
FetchContent_Declare(
|
||
imnodes
|
||
GIT_REPOSITORY https://github.com/Nelarius/imnodes.git
|
||
GIT_TAG v0.5
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
|
||
# ImGuiFileDialog – file browser widget for the node-editor tool
|
||
FetchContent_Declare(
|
||
ImGuiFileDialog
|
||
GIT_REPOSITORY https://github.com/aiekick/ImGuiFileDialog.git
|
||
GIT_TAG v0.6.7
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
|
||
FetchContent_MakeAvailable(flecs doctest glm nlohmann_json glfw imgui imnodes FastNoiseLite)
|
||
|
||
# ---- OpenCL (GPU compute backend) -------------------------------------------
|
||
|
||
find_package(OpenCL REQUIRED)
|
||
|
||
# opencl-clhpp: official Khronos C++ bindings (header-only)
|
||
FetchContent_Declare(
|
||
opencl_clhpp
|
||
GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-CLHPP.git
|
||
GIT_TAG v2024.10.24
|
||
GIT_SHALLOW TRUE
|
||
)
|
||
|
||
FetchContent_MakeAvailable(opencl_clhpp)
|
||
|
||
# ---- Core library ------------------------------------------------------------
|
||
|
||
set(SOURCES
|
||
src/Components/Config/WorldConfig.cpp
|
||
src/Components/Support.cpp
|
||
src/Core/WorldInstance.cpp
|
||
src/WorldGraph/WorldGraph.cpp
|
||
src/WorldGraph/WorldGraphSerializer.cpp
|
||
src/WorldGraph/WorldGraphChunk.cpp
|
||
)
|
||
|
||
add_library(factory-hole-core ${SOURCES})
|
||
|
||
target_include_directories(factory-hole-core PUBLIC
|
||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||
${fastnoiselite_SOURCE_DIR}/Cpp
|
||
)
|
||
|
||
target_link_libraries(factory-hole-core PUBLIC
|
||
flecs::flecs_static
|
||
doctest::doctest
|
||
glm::glm
|
||
nlohmann_json::nlohmann_json
|
||
)
|
||
|
||
# ---- Main executable ---------------------------------------------------------
|
||
|
||
add_executable(factory-hole-app src/main.cpp)
|
||
target_link_libraries(factory-hole-app PRIVATE factory-hole-core)
|
||
|
||
# ---- Tests -------------------------------------------------------------------
|
||
|
||
enable_testing()
|
||
|
||
file(GLOB_RECURSE TEST_SOURCES tests/*.cpp)
|
||
|
||
add_executable(factory-hole-tests ${TEST_SOURCES})
|
||
|
||
target_include_directories(factory-hole-tests PRIVATE
|
||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||
${fastnoiselite_SOURCE_DIR}/Cpp
|
||
)
|
||
|
||
target_link_libraries(factory-hole-tests PRIVATE
|
||
factory-hole-core
|
||
doctest::doctest_with_main
|
||
)
|
||
|
||
add_test(NAME factory-hole-tests COMMAND factory-hole-tests)
|
||
|
||
# ---- Tools -------------------------------------------------------------------
|
||
|
||
add_subdirectory(tools/node-editor)
|