NBEngine/CMakeLists.txt
2026-08-20 08:08:20 -05:00

138 lines
3.2 KiB
CMake

cmake_minimum_required(VERSION 3.10)
project(NBEngine VERSION 0.1.0 LANGUAGES C CXX)
cmake_policy(SET CMP0135 NEW)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
include(CMakeDependentOption)
function(toAbsolutePath SETVAR PATHS)
set(PATHS ${PATHS} ${ARGN})
set(RET_VAL "")
foreach(FILE ${PATHS})
get_filename_component(TMP
${FILE}
REALPATH
)
list(
APPEND
RET_VAL
${TMP}
)
endforeach()
set(${SETVAR} ${RET_VAL} PARENT_SCOPE)
endfunction()
if(CMAKE_BUILD_TYPE STREQUAL "Release")
message(STATUS "Targeting Release build")
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "Targeting Debug build")
set(NB_DEBUG_BUILD ON)
add_compile_definitions(_NB_BUILD_DEBUG)
endif()
cmake_dependent_option(NB_LOGGING
"Creates a default logger and automatically logs with code locations."
ON
NB_DEBUG_BUILD
OFF
)
cmake_dependent_option(NB_BUILD_TESTS
"Build unit tests"
ON
NB_DEBUG_BUILD
OFF
)
cmake_dependent_option(NB_BUILD_DOCS
"Build documentation"
ON
NB_DEBUG_BUILD
OFF
)
cmake_dependent_option(NBENGINE_INSTALL
"Install NBEngine"
ON
NB_DEBUG_BUILD
OFF
)
cmake_dependent_option(NB_MONITOR_OPENGL_CALLS
"Monitors every OpenGL call for errors"
ON
NB_DEBUG_BUILD
OFF
)
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
message(STATUS "Building for Windows")
set(NB_TARGET_WINDOWS ON)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
message(STATUS "Building for Linux")
set(NB_TARGET_LINUX ON)
endif()
if(NB_BUILD_TESTS)
message(STATUS "Building tests")
enable_testing()
include(FetchContent)
FetchContent_Declare(
gtest
URL https://github.com/google/googletest/archive/refs/heads/main.zip
)
if (WIN32)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(gtest)
endif()
set(GTEST_COLOR ON)
endif()
if (NB_LOGGING)
message(STATUS "Building with automatic logging")
add_compile_definitions(_NB_AUTOLOG)
add_compile_definitions(_NB_CODE_ERROR_LOCATIONS)
endif()
if(NB_TARGET_WINDOWS)
add_compile_definitions(_NB_TARGET_WINDOWS)
endif()
if(NB_TARGET_LINUX)
add_compile_definitions(_NB_TARGET_LINUX)
endif()
get_filename_component(NBENGINE_ROOT ${CMAKE_CURRENT_LIST_DIR} ABSOLUTE)
add_subdirectory(./engine ${PROJECT_BINARY_DIR}/${CMAKE_BUILD_TYPE})
# Toggle
set(NB_REBUILD_DOCS)
if (NB_BUILD_DOCS)
add_subdirectory(./docs)
endif()
include(CMakePackageConfigHelpers)
configure_package_config_file(
"NBEngineConfig.cmake.in"
"${PROJECT_BINARY_DIR}/cmake/NBEngineConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake
PATH_VARS CMAKE_INSTALL_LIBDIR
)
write_basic_package_version_file(
"${PROJECT_BINARY_DIR}/cmake/NBEngineConfigVersion.cmake"
COMPATIBILITY AnyNewerVersion
)
if (NBENGINE_INSTALL)
include(GNUInstallDirs)
install(FILES
"${PROJECT_BINARY_DIR}/cmake/NBEngineConfig.cmake"
"${PROJECT_BINARY_DIR}/cmake/NBEngineConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_PREFIX}/cmake"
)
endif()