-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
72 lines (60 loc) · 1.85 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
CMAKE_MINIMUM_REQUIRED(VERSION 3.24)
IF (DEFINED GUARD_STAY_PROJECT)
if(NOT GUARD_STAY_PROJECT STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
return()
endif()
else()
set(GUARD_STAY_PROJECT ${CMAKE_CURRENT_BINARY_DIR} CACHE INTERNAL "GUARD_STAY_PROJECT")
endif()
PROJECT(stay VERSION 0.1)
SET(CMAKE_CXX_STANDARD 17)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
IF (BUILD_SHARED_LIBS)
SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
ENDIF()
# Build or search for dependencies
ADD_SUBDIRECTORY(extern/box2d)
ADD_SUBDIRECTORY(extern/efsw)
ADD_SUBDIRECTORY(extern/entt)
ADD_SUBDIRECTORY(extern/glm)
ADD_SUBDIRECTORY(extern/json)
ADD_SUBDIRECTORY(extern/SFML)
# Collect source files
FILE(GLOB_RECURSE
${PROJECT_NAME}_SOURCE_CODE
CONFIGURE_DEPENDS
"source/*.cpp"
"source/*.hpp"
"include/*.hpp"
)
# Clang-tidy analyzer
OPTION(${PROJECT_NAME}_CLANG_TIDY "Enable clang-tidy checks" OFF)
IF (${PROJECT_NAME}_CLANG_TIDY)
SET(CMAKE_CXX_CLANG_TIDY
"clang-tidy"
"--config-file=${CMAKE_CURRENT_SOURCE_DIR}/.clang-tidy"
"--header-filter=${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp")
IF(MSVC)
LIST(APPEND CMAKE_CXX_CLANG_TIDY "--extra-arg=/EHsc")
ENDIF()
ENDIF()
# Add target and link libraries
ADD_LIBRARY(${PROJECT_NAME} ${${PROJECT_NAME}_SOURCE_CODE})
# Create target
TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC
nlohmann_json::nlohmann_json
sfml-graphics
sfml-audio
glm::glm-header-only
EnTT::EnTT
box2d
efsw
)
# Specific libraries macros
TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} PUBLIC "GLM_ENABLE_EXPERIMENTAL")
# Add thread support
SET(THREADS_PREFER_PTHREAD_FLAG TRUE)
FIND_PACKAGE(Threads REQUIRED)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} PRIVATE Threads::Threads)
# Add common header to include directory
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)