cmake_minimum_required(VERSION 3.15) project(Engine2026 LANGUAGES CXX C) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # ------------------------------------------------------------------------------ # 1. Source and Header Files # ------------------------------------------------------------------------------ set(SOURCES main.cpp game/game.cpp engine/Assets/modelLoader.cpp vendor/glad/glad.c vendor/stb/stb_image.cpp engine/Backend/Backend.cpp engine/Backend/Model.cpp ) set(HEADERS engine/Backend/Backend.h engine/shader.h engine/texture.h engine/mesh.h engine/camera.h game/game.h engine/Assets/modelLoader.h engine/Backend/Model.h engine/Backend/Mesh.cpp engine/Backend/Mesh.h engine/Backend/Shader.cpp engine/Backend/Shader.h engine/Backend/Texture.cpp engine/Backend/Texture.h engine/Backend/Camera.cpp engine/Backend/Camera.h ) # Create the executable add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS}) # ------------------------------------------------------------------------------ # 2. Include Directories # ------------------------------------------------------------------------------ target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/vendor ${CMAKE_CURRENT_SOURCE_DIR}/vendor/assimp/include ) # ------------------------------------------------------------------------------ # 3. Dependencies & Linking # ------------------------------------------------------------------------------ # -- OpenGL -- find_package(OpenGL REQUIRED) target_link_libraries(${PROJECT_NAME} PRIVATE OpenGL::GL) # -- GLFW (Built from source) -- # Turn off extra GLFW targets to speed up your compile times set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) # Add the GLFW source directory. # NOTE: This automatically handles all underlying OS dependencies (gdi32, X11, Cocoa, etc.) add_subdirectory(vendor/glfw) # Link the GLFW target target_link_libraries(${PROJECT_NAME} PRIVATE glfw) # -- Assimp (Built from source) -- # Turn off extra Assimp targets to speed up compile times set(ASSIMP_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(ASSIMP_BUILD_ASSIMP_TOOLS OFF CACHE BOOL "" FORCE) # Add the Assimp source directory add_subdirectory(vendor/assimp) # Link the GLFW and Assimp targets target_link_libraries(${PROJECT_NAME} PRIVATE glfw assimp) # ------------------------------------------------------------------------------ # 4. Asset Synchronization (Runs Every Single Compile) # ------------------------------------------------------------------------------ add_custom_target(refresh_assets # Step 1: Wipe the assets folder using a static configuration path COMMAND ${CMAKE_COMMAND} -E rm -rf "${CMAKE_CURRENT_BINARY_DIR}/assets" # Step 2: Copy them fresh COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/assets" "${CMAKE_CURRENT_BINARY_DIR}/assets" COMMENT "Force-syncing assets to build directory..." ) # This now safely runs BEFORE the executable compiles, without the dependency loop add_dependencies(${PROJECT_NAME} refresh_assets)