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/PlanetLive.cpp src/sim/PlanetOcean.cpp src/sim/PlanetBiota.cpp src/sim/PlanetFloraGen.cpp src/sim/PlanetFaunaGen.cpp src/sim/PlanetFungiGen.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()