116 lines
3.0 KiB
CMake
116 lines
3.0 KiB
CMake
cmake_minimum_required(VERSION 3.25)
|
|
project(ModernEngine LANGUAGES CXX C) # Add C for glad.c
|
|
|
|
# Use the latest C++ standard (C++23)
|
|
set(CMAKE_CXX_STANDARD 23)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
# Add compile flags for modern C++
|
|
if(MSVC)
|
|
add_compile_options(/W4)
|
|
else()
|
|
add_compile_options(-Wall -Wextra -Wpedantic)
|
|
endif()
|
|
|
|
# Find required packages
|
|
find_package(PkgConfig REQUIRED)
|
|
find_package(OpenGL REQUIRED)
|
|
|
|
# Find GLFW via pkg-config
|
|
pkg_check_modules(GLFW REQUIRED glfw3)
|
|
link_directories(${GLFW_LIBRARY_DIRS})
|
|
|
|
# Find GLM (Homebrew or system)
|
|
find_package(glm REQUIRED)
|
|
if(NOT DEFINED GLM_INCLUDE_DIRS)
|
|
find_path(GLM_INCLUDE_DIRS
|
|
glm/glm.hpp
|
|
PATHS /opt/homebrew/include /usr/local/include ${CMAKE_PREFIX_PATH}
|
|
NO_DEFAULT_PATH
|
|
)
|
|
endif()
|
|
if(NOT GLM_INCLUDE_DIRS)
|
|
message(FATAL_ERROR "Could not find glm headers (glm/glm.hpp). Install with 'brew install glm'.")
|
|
endif()
|
|
message(STATUS "Using GLM include dir: ${GLM_INCLUDE_DIRS}")
|
|
|
|
# GLAD setup - check multiple possible locations
|
|
set(GLAD_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include)
|
|
set(GLAD_SOURCE_CANDIDATES
|
|
${CMAKE_SOURCE_DIR}/src/glad.c
|
|
${CMAKE_SOURCE_DIR}/external/glad/src/glad.c
|
|
${CMAKE_SOURCE_DIR}/glad/src/glad.c
|
|
)
|
|
|
|
# Find GLAD source file
|
|
set(GLAD_SOURCE "")
|
|
foreach(candidate ${GLAD_SOURCE_CANDIDATES})
|
|
if(EXISTS ${candidate})
|
|
set(GLAD_SOURCE ${candidate})
|
|
message(STATUS "Found GLAD source: ${GLAD_SOURCE}")
|
|
break()
|
|
endif()
|
|
endforeach()
|
|
|
|
if(NOT GLAD_SOURCE)
|
|
message(FATAL_ERROR "Could not find glad.c in any of the expected locations: ${GLAD_SOURCE_CANDIDATES}")
|
|
endif()
|
|
|
|
# Collect engine source files (exclude glad.c from glob to avoid duplication)
|
|
file(GLOB_RECURSE ENGINE_SOURCES
|
|
${CMAKE_SOURCE_DIR}/src/*.cpp
|
|
)
|
|
|
|
# Remove glad.c from ENGINE_SOURCES if it was included by glob
|
|
list(FILTER ENGINE_SOURCES EXCLUDE REGEX ".*glad\\.c$")
|
|
|
|
# Create executable target
|
|
add_executable(${PROJECT_NAME}
|
|
${ENGINE_SOURCES}
|
|
${GLAD_SOURCE}
|
|
)
|
|
|
|
# Include directories
|
|
target_include_directories(${PROJECT_NAME}
|
|
PRIVATE
|
|
${CMAKE_SOURCE_DIR}/include # For glad.h
|
|
${GLFW_INCLUDE_DIRS}
|
|
${GLM_INCLUDE_DIRS}
|
|
)
|
|
|
|
# Link libraries and macOS frameworks
|
|
target_link_libraries(${PROJECT_NAME}
|
|
PRIVATE
|
|
OpenGL::GL
|
|
${GLFW_LIBRARIES}
|
|
)
|
|
|
|
# macOS-specific frameworks
|
|
if(APPLE)
|
|
target_link_libraries(${PROJECT_NAME}
|
|
PRIVATE
|
|
"-framework Cocoa"
|
|
"-framework IOKit"
|
|
"-framework CoreVideo"
|
|
"-framework QuartzCore"
|
|
"-framework AudioToolbox"
|
|
"-framework CoreAudio"
|
|
)
|
|
endif()
|
|
|
|
# Copy assets to build directory if assets exist
|
|
if(EXISTS ${CMAKE_SOURCE_DIR}/assets)
|
|
file(COPY ${CMAKE_SOURCE_DIR}/assets DESTINATION ${CMAKE_BINARY_DIR})
|
|
endif()
|
|
|
|
# Windows-specific properties
|
|
if(WIN32)
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
|
WIN32_EXECUTABLE TRUE
|
|
)
|
|
endif()
|
|
|
|
# Debug information
|
|
message(STATUS "Engine sources found: ${ENGINE_SOURCES}")
|
|
message(STATUS "GLAD source: ${GLAD_SOURCE}")
|