-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
118 lines (97 loc) · 3.77 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# set the project name and version
cmake_minimum_required (VERSION 3.24 FATAL_ERROR)
#policies
# https://cmake.org/cmake/help/latest/prop_tgt/MSVC_RUNTIME_LIBRARY.html
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0")
message(STATUS "Policy CMP0091 set")
cmake_policy(SET CMP0091 NEW)
endif()
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
message(STATUS "Policy CMP0135 set")
cmake_policy(SET CMP0135 NEW)
endif()
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.0.0")
message(STATUS "Policy CMP0048 set")
cmake_policy(SET CMP0048 NEW)
endif()
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.13.0")
message(STATUS "Policy CMP0048 set")
cmake_policy(SET CMP0048 NEW)
endif()
if(UNIX)
add_compile_options(-std=c++20 -std=gnu++20)
endif()
set(ATMA_APP_TYPE "${ATMA_APP_TYPE}" CACHE STRING "Determines the application type" FORCE)
if(ATMA_APP_TYPE STREQUAL "Server")
message(STATUS "Adding Server compile definition")
add_compile_definitions("ATMA_SERVER")
elseif(ATMA_APP_TYPE STREQUAL "OpenGL")
message(STATUS "Adding OpenGL compile definition")
add_compile_definitions("ATMA_OPENGL")
else()
message(STATUS "No app type compile definition")
endif()
message(STATUS "CMAKE_VERSION = ${CMAKE_VERSION}")
message(STATUS "CMAKE_GENERATOR = ${CMAKE_GENERATOR}")
message(STATUS "C Compiler executable: ${CMAKE_C_COMPILER}")
message(STATUS "CXX Compiler executable: ${CMAKE_CXX_COMPILER}")
message(STATUS "Linker executable: ${CMAKE_LINKER}")
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
message(STATUS "Binary output directory: ${CMAKE_BINARY_DIR}")
message(STATUS "System Target Architecture: ${CMAKE_SYSTEM_PROCESSOR}")
message(STATUS "Atomina App Type: '${ATMA_APP_TYPE}'")
message(STATUS "Compile Definitions: ${COMPILE_DEFINITIONS}")
project(Atomina_Main VERSION 0.2.1)
# Stop in source builds
SET(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
option(ATOMINA_BUILD_TESTS "Build tests" ON)
SET(CMAKE_COLOR_DIAGNOSTICS ON)
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "dir='${dir}'")
endforeach()
set_property(GLOBAL PROPERTY POSITION_INDEPENDENT_CODE ON) # spdlog will not compile without this
# For Windows: Prevent overriding the parent project's compiler/linker settings
SET(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
SET(CMAKE_CXX_STANDARD 20 FORCE)
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin)
SET(ATOMINA_APP_NAME "Atomina-Engine App")
#dependencies
find_package(spdlog CONFIG REQUIRED)
find_package(GTest CONFIG REQUIRED)
find_package(glfw3 CONFIG REQUIRED)
if(ATMA_APP_TYPE STREQUAL "OpenGL")
find_package(GLEW REQUIRED)
endif()
if(MSVC)
find_package(stb REQUIRED)
elseif(UNIX) # for some reason stb using different casing on different OSes
find_package(Stb REQUIRED)
find_package(TBB REQUIRED components tbb)
endif()
include(GoogleTest)
#get include paths for each package
find_path(LIB_DIR lib)
find_path(SPDLOG_INCLUDE spdlog)
find_path(GTEST_INCLUDE gtest)
find_path(GLFW_INCLUDE GLFW)
if(ATMA_APP_TYPE STREQUAL "OpenGL")
if(MSVC)
find_path(GLEW_INCLUDE gl)
elseif(UNIX) # for some reason glew using different casing on different OSes
find_path(GLEW_INCLUDE GL)
endif()
endif()
find_path(FMT_INCLUDE fmt)
message(STATUS "spdlog path: ${SPDLOG_INCLUDE}")
message(STATUS "gtest path: ${GTEST_INCLUDE}")
message(STATUS "GLEW path: ${GLEW_INCLUDE}")
message(STATUS "fmt path: ${FMT_INCLUDE}")
message(STATUS "GLFW path: ${GLFW_INCLUDE}")
add_subdirectory("atomina-shared" atomina-shared)
add_subdirectory("atomina-game" atomina-game)
add_subdirectory("atomina-test" atomina-test)