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) set(SIM_SOURCES 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/PlanetWeather.cpp src/sim/PlanetBiota.cpp src/sim/PlanetFloraGen.cpp src/sim/PlanetFaunaGen.cpp src/sim/PlanetFungiGen.cpp src/sim/PlanetIO.cpp ) set(RENDER_SOURCES 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 ) add_library(planetsim_sim STATIC ${SIM_SOURCES}) target_include_directories(planetsim_sim PUBLIC src/sim) add_executable(planetsim src/main.cpp ${RENDER_SOURCES} ) # Flat includes ("Planet.hpp", "Viewer.hpp", ...) resolve across both folders. target_include_directories(planetsim PRIVATE src/sim src/render) target_link_libraries(planetsim PRIVATE planetsim_sim 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_sim PUBLIC 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() enable_testing() foreach(test_name logic biota ocean live weather) add_executable(test_${test_name} test_${test_name}.cpp) target_link_libraries(test_${test_name} PRIVATE planetsim_sim) add_test(NAME ${test_name} COMMAND test_${test_name}) endforeach()