98 lines
No EOL
3.3 KiB
CMake
98 lines
No EOL
3.3 KiB
CMake
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) |