blob: 26ab1390947f85ab51c27d9beb848e2b30f5fd58 (
plain)
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
|
#
# Tools used to generate source during the build:
#
add_custom_target(
all-generators
COMMENT "meta target which depends on all generators"
)
set_target_properties(all-generators PROPERTIES FOLDER generators)
if(CMAKE_HOST_WIN32)
set(CMAKE_HOST_EXECUTABLE_SUFFIX ".exe")
else()
set(CMAKE_HOST_EXECUTABLE_SUFFIX "")
endif()
function(generator dir)
if(SLANG_GENERATORS_PATH)
cmake_parse_arguments(ARG "" "TARGET_NAME" "" ${ARGN})
if(ARG_TARGET_NAME)
set(target ${ARG_TARGET_NAME})
else()
get_filename_component(target ${dir} NAME)
endif()
add_executable(${target} IMPORTED GLOBAL)
set_property(
TARGET ${target}
PROPERTY
IMPORTED_LOCATION
"${SLANG_GENERATORS_PATH}/${target}${CMAKE_HOST_EXECUTABLE_SUFFIX}"
)
else()
slang_add_target(
${dir}
EXECUTABLE
EXCLUDE_FROM_ALL
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE core
OUTPUT_DIR generators
REQUIRED_BY all-generators
FOLDER generators
INSTALL_COMPONENT generators
${ARGN}
)
endif()
endfunction()
generator(slang-cpp-extractor USE_FEWER_WARNINGS LINK_WITH_PRIVATE compiler-core)
generator(slang-embed)
generator(slang-generate USE_FEWER_WARNINGS)
generator(slang-lookup-generator LINK_WITH_PRIVATE compiler-core)
generator(slang-capability-generator LINK_WITH_PRIVATE compiler-core)
generator(slang-spirv-embed-generator LINK_WITH_PRIVATE compiler-core)
generator(
${slang_SOURCE_DIR}/source/slangc
TARGET_NAME slang-bootstrap
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE
prelude
slang-without-embedded-core-module
slang-capability-lookup
slang-lookup-tables
Threads::Threads
)
#
# Language Server
#
if(SLANG_ENABLE_SLANGD)
slang_add_target(
slangd
EXECUTABLE
LINK_WITH_PRIVATE
core
compiler-core
slang
slang-reflect-headers
slang-capability-defs
Threads::Threads
INSTALL
)
endif()
if(SLANG_ENABLE_GFX)
#
# `platform` contains all the platform abstractions for a GUI application.
#
slang_add_target(
platform
SHARED
EXCLUDE_FROM_ALL
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE
core
imgui
$<$<BOOL:${SLANG_ENABLE_XLIB}>:X11::X11>
"$<$<PLATFORM_ID:Darwin>:-framework Cocoa>"
"$<$<PLATFORM_ID:Darwin>:-framework QuartzCore>"
${CMAKE_DL_LIBS}
LINK_WITH_FRAMEWORK
Foundation
Cocoa
QuartzCore
EXTRA_COMPILE_DEFINITIONS_PRIVATE
$<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB=1>
INCLUDE_FROM_PRIVATE gfx
INCLUDE_DIRECTORIES_PUBLIC platform
EXPORT_MACRO_PREFIX SLANG_PLATFORM
)
#
# GFX
#
slang_add_target(
gfx
SHARED
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE
core
slang
Vulkan-Headers
metal-cpp
$<$<BOOL:${SLANG_ENABLE_XLIB}>:X11::X11>
$<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cuda_driver>
LINK_WITH_FRAMEWORK
Foundation
Cocoa
QuartzCore
Metal
EXTRA_COMPILE_DEFINITIONS_PRIVATE
$<$<BOOL:${SLANG_ENABLE_CUDA}>:GFX_ENABLE_CUDA>
$<$<BOOL:${SLANG_ENABLE_OPTIX}>:GFX_OPTIX>
$<$<BOOL:${SLANG_ENABLE_NVAPI}>:GFX_NVAPI>
$<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB>
# This is a shared library, so we need to set a preprocessor macro to mark
# exported symbols
EXPORT_MACRO_PREFIX SLANG_GFX
# slang-gfx is in this directory, anything which depends on gfx should include
# this
INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR} ${slang_SOURCE_DIR}/include
REQUIRES copy-gfx-slang-modules
INSTALL
FOLDER gfx
)
set(modules_dest_dir $<TARGET_FILE_DIR:slang-test>)
add_custom_target(
copy-gfx-slang-modules
COMMAND ${CMAKE_COMMAND} -E make_directory ${modules_dest_dir}
COMMAND
${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/gfx/gfx.slang
${modules_dest_dir}/gfx.slang
COMMAND
${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/gfx/slang.slang
${modules_dest_dir}/slang.slang
WORKING_DIRECTORY ${slang_SOURCE_DIR}
VERBATIM
)
set_target_properties(copy-gfx-slang-modules PROPERTIES FOLDER generators)
install(
FILES ${modules_dest_dir}/gfx.slang ${modules_dest_dir}/slang.slang
DESTINATION ${runtime_subdir}
)
slang_add_target(
gfx-util
STATIC
LINK_WITH_PRIVATE core
INCLUDE_FROM_PRIVATE gfx
# The headers are included with 'include "gfx-util/blah.h"' which is found
# in the tools directory
INCLUDE_DIRECTORIES_PUBLIC .
FOLDER gfx
)
endif()
#
# The test executables and runtime-loaded modules
#
if(SLANG_ENABLE_TESTS)
slang_add_target(
test-server
EXECUTABLE
EXCLUDE_FROM_ALL
LINK_WITH_PRIVATE core compiler-core slang
FOLDER test
)
slang_add_target(
test-process
EXECUTABLE
EXCLUDE_FROM_ALL
LINK_WITH_PRIVATE core compiler-core
FOLDER test
)
slang_add_target(
slang-test
EXECUTABLE
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE core compiler-core slang ${CMAKE_DL_LIBS} Threads::Threads
REQUIRES
# Shared libraries dlopened by slang-test
slang-reflection-test
slang-unit-test
# Used by some tests when they run
slangd
test-server
test-process
OPTIONAL_REQUIRES
gfx
slang-rt
slang-glslang
slang-llvm
copy-webgpu_dawn
copy-slang-tint
FOLDER test
DEBUG_DIR ${slang_SOURCE_DIR}
)
set_property(
DIRECTORY ${slang_SOURCE_DIR}
PROPERTY VS_STARTUP_PROJECT slang-test
)
include(CTest)
add_test(
NAME slang-test
COMMAND
slang-test -bindir ${slang_SOURCE_DIR}/build/$<CONFIG>/${runtime_subdir}
-expected-failure-list ${slang_SOURCE_DIR}/tests/expected-failure.txt
-expected-failure-list
${slang_SOURCE_DIR}/tests/expected-failure-github.txt
WORKING_DIRECTORY ${slang_SOURCE_DIR}
)
slang_add_target(
unit-test
OBJECT
EXCLUDE_FROM_ALL
INCLUDE_FROM_PRIVATE slang core
INCLUDE_DIRECTORIES_PRIVATE ${slang_SOURCE_DIR}/include
FOLDER test
)
# These are libraries loaded at runtime from the test executable:
if(SLANG_ENABLE_GFX)
slang_add_target(
gfx-unit-test
MODULE
EXCLUDE_FROM_ALL
EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE core slang unit-test gfx gfx-util platform
OUTPUT_NAME gfx-unit-test-tool
REQUIRED_BY slang-test
FOLDER test/tools
)
if(SLANG_ENABLE_SLANG_RHI)
slang_add_target(
render-test
MODULE
EXCLUDE_FROM_ALL
EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE
core
compiler-core
slang
slang-rhi
platform
$<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cuda_driver>
EXTRA_COMPILE_DEFINITIONS_PRIVATE
$<$<BOOL:${SLANG_ENABLE_CUDA}>:RENDER_TEST_CUDA>
$<$<BOOL:${SLANG_ENABLE_OPTIX}>:RENDER_TEST_OPTIX>
OUTPUT_NAME render-test-tool
REQUIRED_BY slang-test
FOLDER test/tools
)
endif()
endif()
slang_add_target(
slang-unit-test
MODULE
EXCLUDE_FROM_ALL
EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE core compiler-core unit-test slang Threads::Threads
OUTPUT_NAME slang-unit-test-tool
FOLDER test/tools
)
slang_add_target(
slang-reflection-test
MODULE
EXCLUDE_FROM_ALL
EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE core slang Threads::Threads
OUTPUT_NAME slang-reflection-test-tool
FOLDER test/tools
)
slang_add_target(
slang-profile
EXECUTABLE
EXCLUDE_FROM_ALL
LINK_WITH_PRIVATE core slang
FOLDER test
)
endif()
#
# slang-replay tool for replaying the record files
#
if (SLANG_ENABLE_REPLAYER)
slang_add_target(
slang-replay
EXECUTABLE
EXTRA_SOURCE_DIRS
${slang_SOURCE_DIR}/source/slang-record-replay/replay
${slang_SOURCE_DIR}/source/slang-record-replay/util
LINK_WITH_PRIVATE core compiler-core slang
INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/source/slang-record-replay
FOLDER test
)
endif()
|