-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
139 lines (115 loc) · 4.77 KB
/
CMakeLists.txt
File metadata and controls
139 lines (115 loc) · 4.77 KB
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
cmake_minimum_required(VERSION 3.21)
project(gpu_memory_layout_experiments VERSION 0.1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
option(BUILD_SHADERS "Compile GLSL shaders during the build" ON)
option(ENABLE_VULKAN_VALIDATION "Enable Vulkan validation by default at runtime" OFF)
include(CTest)
find_package(Vulkan REQUIRED)
include(FetchContent)
FetchContent_Declare(
cli11
GIT_REPOSITORY https://github.com/CLIUtils/CLI11.git
GIT_TAG v2.5.0
)
FetchContent_MakeAvailable(cli11)
FetchContent_Declare(
nlohmann_json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG v3.11.3
)
FetchContent_MakeAvailable(nlohmann_json)
include("${CMAKE_SOURCE_DIR}/cmake/experiments_manifest.cmake")
include("${CMAKE_SOURCE_DIR}/cmake/generate_experiment_registry.cmake")
set(GENERATED_SOURCE_DIR "${CMAKE_BINARY_DIR}/generated")
set(GENERATED_EXPERIMENT_DIR "${GENERATED_SOURCE_DIR}/experiments")
file(MAKE_DIRECTORY "${GENERATED_EXPERIMENT_DIR}")
set(EXPERIMENT_REGISTRY_HEADER "${GENERATED_EXPERIMENT_DIR}/experiment_registry.hpp")
set(EXPERIMENT_REGISTRY_SOURCE "${GENERATED_EXPERIMENT_DIR}/experiment_registry.cpp")
generate_experiment_registry(
MANIFEST_ENTRIES_VAR EXPERIMENT_MANIFEST_ENTRIES
HEADER_TEMPLATE "${CMAKE_SOURCE_DIR}/cmake/templates/experiment_registry.hpp.in"
SOURCE_TEMPLATE "${CMAKE_SOURCE_DIR}/cmake/templates/experiment_registry.cpp.in"
OUTPUT_HEADER "${EXPERIMENT_REGISTRY_HEADER}"
OUTPUT_SOURCE "${EXPERIMENT_REGISTRY_SOURCE}"
)
add_executable(gpu_memory_layout_experiments
src/main.cpp
"${EXPERIMENT_REGISTRY_SOURCE}"
${EXPERIMENT_SOURCE_FILES}
${EXPERIMENT_ADAPTER_SOURCE_FILES}
src/utils/app_options.cpp
src/utils/json_exporter.cpp
src/utils/vulkan_compute_utils.cpp
src/utils/gpu_timestamp_timer.cpp
src/vulkan_context.cpp
src/utils/buffer_utils.cpp
src/utils/scalar_type_width_utils.cpp
src/benchmark_runner.cpp
)
target_include_directories(gpu_memory_layout_experiments
PRIVATE
include
"${GENERATED_SOURCE_DIR}"
)
target_link_libraries(gpu_memory_layout_experiments
PRIVATE
Vulkan::Vulkan
CLI11::CLI11
nlohmann_json::nlohmann_json
)
target_compile_definitions(gpu_memory_layout_experiments
PRIVATE
$<$<BOOL:${ENABLE_VULKAN_VALIDATION}>:DEFAULT_ENABLE_VULKAN_VALIDATION=1>
)
if(MSVC)
target_compile_options(gpu_memory_layout_experiments PRIVATE /W4 /permissive-)
set_target_properties(gpu_memory_layout_experiments PROPERTIES
VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
VS_DEBUGGER_COMMAND_ARGUMENTS "--validation --experiment all --iterations 10 --warmup 3 --size 16M --output \"${CMAKE_SOURCE_DIR}/results/tables/all_run\""
)
else()
target_compile_options(gpu_memory_layout_experiments PRIVATE -Wall -Wextra -Wpedantic)
endif()
set(SHADER_SOURCE_DIR "${CMAKE_SOURCE_DIR}/shaders")
set(SHADER_BINARY_DIR "${CMAKE_BINARY_DIR}/shaders")
file(MAKE_DIRECTORY "${SHADER_BINARY_DIR}")
string(REPLACE "\\" "/" SHADER_SOURCE_DIR_NORMALIZED "${SHADER_SOURCE_DIR}")
string(REPLACE "\\" "/" SHADER_BINARY_DIR_NORMALIZED "${SHADER_BINARY_DIR}")
target_compile_definitions(gpu_memory_layout_experiments
PRIVATE
PROJECT_SHADER_SOURCE_DIR=\"${SHADER_SOURCE_DIR_NORMALIZED}\"
PROJECT_SHADER_BINARY_DIR=\"${SHADER_BINARY_DIR_NORMALIZED}\"
)
if(BUILD_SHADERS)
if(DEFINED Vulkan_GLSLC_EXECUTABLE AND EXISTS "${Vulkan_GLSLC_EXECUTABLE}")
file(GLOB_RECURSE SHADER_SOURCES CONFIGURE_DEPENDS
"${SHADER_SOURCE_DIR}/*.comp"
"${SHADER_SOURCE_DIR}/*.vert"
"${SHADER_SOURCE_DIR}/*.frag"
)
set(SPIRV_OUTPUTS)
foreach(SHADER_FILE IN LISTS SHADER_SOURCES)
get_filename_component(SHADER_NAME "${SHADER_FILE}" NAME)
file(RELATIVE_PATH SHADER_RELATIVE_PATH "${SHADER_SOURCE_DIR}" "${SHADER_FILE}")
set(SPIRV_FILE "${SHADER_BINARY_DIR}/${SHADER_NAME}.spv")
add_custom_command(
OUTPUT "${SPIRV_FILE}"
COMMAND "${Vulkan_GLSLC_EXECUTABLE}" --target-env=vulkan1.1 "${SHADER_FILE}" -o "${SPIRV_FILE}"
DEPENDS "${SHADER_FILE}"
COMMENT "Compiling shader ${SHADER_RELATIVE_PATH}"
VERBATIM
)
list(APPEND SPIRV_OUTPUTS "${SPIRV_FILE}")
endforeach()
if(SPIRV_OUTPUTS)
add_custom_target(compile_shaders ALL DEPENDS ${SPIRV_OUTPUTS})
add_dependencies(gpu_memory_layout_experiments compile_shaders)
endif()
else()
message(WARNING "glslc was not found by CMake. Set Vulkan_GLSLC_EXECUTABLE or disable BUILD_SHADERS.")
endif()
endif()
include("${CMAKE_SOURCE_DIR}/cmake/tests.cmake")
configure_gpu_memory_layout_tests()