-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
150 lines (126 loc) · 5.55 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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
CMAKE_MINIMUM_REQUIRED( VERSION 3.8 )
PROJECT(vulkan-samples)
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE)
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE)
OPTION(BUILD_SHARED_LIBS "Build package with shared libraries." ON)
IF(NOT BUILD_SHARED_LIBS)
SET(CMAKE_EXE_LINKER_FLAGS "-static")
SET(LINK_SEARCH_START_STATIC TRUE)
ELSE()
MESSAGE(STATUS "Shared libraries enabled")
ENDIF(NOT BUILD_SHARED_LIBS)
OPTION(BUILD_WITH_ASAN "Enable AddressSanitizer." OFF )
OPTION(BUILD_WITH_UBSAN "Enable Undefined Behavior sanitizer." OFF )
OPTION(BUILD_WITH_TSAN "Enable Thread sanitizer" OFF)
# GCC compiler flag options.
IF((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT CMAKE_COMPILER_IS_MINGW)
#
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -export-dynamic -rdynamic -std=c++17 -Wpedantic -Wextra -Wall")
IF (CMAKE_BUILD_TYPE STREQUAL "Release")
MESSAGE(STATUS "Compile for release.")
ADD_DEFINITIONS(-DNDEBUG=1)
ADD_DEFINITIONS(-O3)
SET(CMAKE_RELEASE TRUE)
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
ELSE()
MESSAGE(STATUS "Compile for debug.")
ADD_DEFINITIONS(-D_DEBUG)
ADD_DEFINITIONS(-g3 -O0)
SET(CMAKE_DEBUG TRUE)
ADD_DEFINITIONS(-D_GLIBCXX_ASSERTIONS)
ENDIF()
#
IF(BUILD_WITH_COVERAGE)
MESSAGE(STATUS "Building with coverage")
SET(GCC_COVERAGE_COMPILE_FLAGS "--coverage -fprofile-arcs -ftest-coverage")
SET(GCC_COVERAGE_LINK_FLAGS "-lgcov")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
ENDIF()
#
IF(BUILD_WITH_PROFILER)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg")
ENDIF()
ELSEIF ( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fno-strict-aliasing -Wall -Wno-long-long ${CMAKE_CXX_FLAGS}" )
SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
ELSEIF(MSVC)
# Enable multi-core compilation with MSVC
IF( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) # clang-cl
ADD_COMPILE_OPTIONS(/bigobj /W4 /WX )
ELSE() # msvc
ADD_COMPILE_OPTIONS(/MP /bigobj /W4 /WX)
ENDIF()
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D_DEBUG /Zi /Od")
ELSEIF ( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
SET(CMAKE_CXX_FLAGS "-g -fvisibility=hidden -fno-strict-aliasing -Wall -Wno-long-long ${CMAKE_CXX_FLAGS}" )
SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
ELSEIF( CMAKE_COMPILER_IS_MINGW )
SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fno-strict-aliasing -Wall -Wno-long-long -Wa,-mbig-obj ${CMAKE_CXX_FLAGS}")
SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
ADD_DEFINITIONS( -U__STRICT_ANSI__ )
ELSE()
ENDIF()
IF (BUILD_SHARED_LIBS AND CMAKE_SIZEOF_VOID_P EQUAL 8) # -fPIC is only required
SET (CMAKE_POSITION_INDEPENDENT_CODE TRUE)
ELSE()
SET (CMAKE_POSITION_INDEPENDENT_CODE FALSE)
ENDIF()
FIND_PACKAGE(PkgConfig QUIET)
FIND_PACKAGE(Vulkan QUIET)
IF(Vulkan_FOUND)
MESSAGE(STATUS "Vulkan: ${Vulkan_LIBRARY}")
ENDIF()
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/extern/fvkcore EXCLUDE_FROM_ALL)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/extern/SPIRV-Cross EXCLUDE_FROM_ALL)
#INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/common)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/extern/flythough_camera)
#SET(Vulkan_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/extern/Vulkan-Headers/include)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/common)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/common/Importer)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/StartupWindow)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/RenderHeadless)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/Triangle)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/Cube)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/Instance)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/particle-systems)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/Raytracing)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/Texture)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/Font)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/PushConstant)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/ReactionDiffusion)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/Mandelbrot)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/GameOfLife)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/Memory)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/SignedDistanceFieldVolume)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/SignedDistanceFieldTexture)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/VideoPlayback)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/StencilShadowVolume)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/SilhouetteDetection)
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/ShadowMap)
FILE(GLOB_RECURSE GLSL_SOURCE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.frag
${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.vert
${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.comp
)
FOREACH(GLSL ${GLSL_SOURCE_FILES})
get_filename_component(FILE_NAME ${GLSL} NAME)
set(SPIRV "${EXECUTABLE_OUTPUT_PATH}/shaders/${FILE_NAME}.spv")
add_custom_command(
OUTPUT ${SPIRV}
COMMAND ${CMAKE_COMMAND} -E make_directory "${EXECUTABLE_OUTPUT_PATH}/shaders/"
COMMAND glslc ${GLSL} -o ${SPIRV}
DEPENDS ${GLSL})
list(APPEND SPIRV_BINARY_FILES ${SPIRV})
endforeach(GLSL)
add_custom_target(
Shaders
DEPENDS ${SPIRV_BINARY_FILES}
)
IF(BUILD_WTIH_TEST)
ENABLE_TESTING()
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/test)
ENDIF()