cmake_minimum_required(VERSION 3.16)
project(PlanetSim CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include(FetchContent)
FetchContent_Declare(
    raylib
    GIT_REPOSITORY https://github.com/raysan5/raylib.git
    GIT_TAG 5.5
)
# Build raylib as a static lib, no examples.
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(BUILD_GAMES    OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(raylib)

add_executable(planetsim
    src/main.cpp
    # Engine (raylib-free, testable headless) -- src/sim
    src/sim/IcoSphere.cpp
    src/sim/Planet.cpp
    src/sim/PlanetTectonics.cpp
    src/sim/PlanetDrift.cpp
    src/sim/PlanetErosion.cpp
    src/sim/PlanetHydrology.cpp
    src/sim/PlanetBiomes.cpp
    src/sim/PlanetClimate.cpp
    src/sim/PlanetIO.cpp
    # Viewer (raylib) -- src/render
    src/render/Colors.cpp
    src/render/Map2D.cpp
    src/render/Overlays.cpp
    src/render/Picking.cpp
    src/render/Panels.cpp
    src/render/Viewer.cpp
    src/render/ViewerInput.cpp
    src/render/ViewerRender.cpp
)
# Flat includes ("Planet.hpp", "Viewer.hpp", ...) resolve across both folders.
target_include_directories(planetsim PRIVATE src/sim src/render)
target_link_libraries(planetsim PRIVATE raylib)

# OpenMP parallelizes the per-cell passes in Planet::step(). Optional: without
# it the #pragma omp lines are ignored and the sim runs (correctly) serial.
find_package(OpenMP)
if(OpenMP_CXX_FOUND)
    target_link_libraries(planetsim PRIVATE OpenMP::OpenMP_CXX)
endif()

# Linux system libs raylib needs at link time.
if(UNIX AND NOT APPLE)
    target_link_libraries(planetsim PRIVATE m pthread dl)
endif()
