blob: 00bd93c49f3de38c4fc7f6d501edaab3e12252fc (
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
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
|
#
# 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
EXPORT_SET_NAME SlangGeneratorTargets
${ARGN}
)
endif()
endfunction()
if(NOT SLANG_OVERRIDE_LUA_PATH)
generator(
slang-fiddle
LINK_WITH_PRIVATE
compiler-core
INCLUDE_DIRECTORIES_PUBLIC
${slang_SOURCE_DIR}/external
)
else()
generator(
slang-fiddle
LINK_WITH_PRIVATE
compiler-core
INCLUDE_DIRECTORIES_PUBLIC
${SLANG_OVERRIDE_LUA_PATH}
)
endif()
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
EXTRA_COMPILE_DEFINITIONS_PRIVATE
SLANG_BOOTSTRAP=1
LINK_WITH_PUBLIC
slang-without-embedded-core-module
LINK_WITH_PRIVATE
prelude
slang-capability-lookup
slang-lookup-tables
Threads::Threads
)
slang_add_target(
slang-cpp-parser
STATIC
EXPORT_MACRO_PREFIX SLANG
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE core compiler-core
INCLUDE_DIRECTORIES_PUBLIC .
FOLDER generators
)
#
# Language Server
#
if(SLANG_ENABLE_SLANGD)
slang_add_target(
slangd
EXECUTABLE
LINK_WITH_PRIVATE
core
compiler-core
slang
slang-fiddle-output
slang-capability-defs
Threads::Threads
INSTALL
EXPORT_SET_NAME SlangTargets
)
endif()
#
# Slang Interpreter
#
if(SLANG_ENABLE_SLANGI)
slang_add_target(
slangi
EXECUTABLE
LINK_WITH_PRIVATE core compiler-core slang
INSTALL
EXPORT_SET_NAME SlangTargets
)
endif()
if(SLANG_ENABLE_GFX)
#
# GFX
#
slang_add_target(
gfx
${SLANG_LIB_TYPE}
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE
core
slang
Vulkan-Headers
metal-cpp
stb
$<$<BOOL:${SLANG_ENABLE_XLIB}>:X11::X11>
$<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cuda_driver>
$<$<BOOL:${SLANG_ENABLE_NVAPI}>:${NVAPI_LIBRARIES}>
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
if
(not ${SLANG_OVERRIDE_SPIRV_TOOLS_PATH})
INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
INCLUDE_DIRECTORIES_PUBLIC
${SLANG_OVERRIDE_SPIRV_TOOLS_PATH}
endif
()
if
(not ${SLANG_OVERRIDE_GLM_PATH})
INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
INCLUDE_DIRECTORIES_PUBLIC
${SLANG_OVERRIDE_GLM_PATH}
endif
()
if
(not ${SLANG_OVERRIDE_IMGUI_PATH})
INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
INCLUDE_DIRECTORIES_PUBLIC
${SLANG_OVERRIDE_IMGUI_PATH}
endif
()
if
(not ${SLANG_OVERRIDE_TINYOBJLOADER_PATH})
INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
INCLUDE_DIRECTORIES_PUBLIC ${SLANG_OVERRIDE_TINYOBJLOADER_PATH} endif ()
INCLUDE_DIRECTORIES_PRIVATE ${NVAPI_INCLUDE_DIRS}
INSTALL
EXPORT_SET_NAME SlangTargets
FOLDER gfx
)
#
# `platform` contains all the platform abstractions for a GUI application.
#
slang_add_target(
platform
${SLANG_LIB_TYPE}
EXCLUDE_FROM_ALL
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE
core
imgui
stb
$<$<BOOL:${SLANG_ENABLE_XLIB}>:X11::X11>
$<$<BOOL:${SLANG_ENABLE_SLANG_RHI}>:slang-rhi>
"$<$<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
imgui
$<$<BOOL:${SLANG_ENABLE_SLANG_RHI}>:slang-rhi>
INCLUDE_DIRECTORIES_PUBLIC
.
platform
if
(not ${SLANG_OVERRIDE_GLM_PATH})
INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
INCLUDE_DIRECTORIES_PUBLIC ${SLANG_OVERRIDE_GLM_PATH} endif ()
EXPORT_MACRO_PREFIX SLANG_PLATFORM
)
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}
)
endif()
if(SLANG_ENABLE_TESTS)
# The test executables and runtime-loaded modules
slang_add_target(
test-server
EXECUTABLE
EXCLUDE_FROM_ALL
LINK_WITH_PRIVATE core compiler-core slang
INCLUDE_FROM_PRIVATE
unit-test
$<$<BOOL:${SLANG_ENABLE_SLANG_RHI}>:slang-rhi>
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
INCLUDE_DIRECTORIES_PUBLIC .
LINK_WITH_PRIVATE
core
compiler-core
slang
stb
${CMAKE_DL_LIBS}
Threads::Threads
INCLUDE_FROM_PRIVATE $<$<BOOL:${SLANG_ENABLE_SLANG_RHI}>:slang-rhi>
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
slang-rt
slang-glslang
slang-llvm
copy-webgpu_dawn
copy-slang-tint
# See issue 5305.
copy-prebuilt-binaries
FOLDER test
DEBUG_DIR ${slang_SOURCE_DIR}
)
set_property(
DIRECTORY ${slang_SOURCE_DIR}
PROPERTY VS_STARTUP_PROJECT slang-test
)
add_dependencies(slang-test copy-gfx-slang-modules)
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_DIRECTORIES_PUBLIC .
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
stb
platform
$<$<BOOL:${SLANG_ENABLE_SLANG_RHI}>:slang-rhi>
INCLUDE_FROM_PRIVATE $<$<BOOL:${SLANG_ENABLE_SLANG_RHI}>:slang-rhi>
INCLUDE_DIRECTORIES_PUBLIC
.
platform
if
(not ${SLANG_OVERRIDE_GLM_PATH})
INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
INCLUDE_DIRECTORIES_PUBLIC ${SLANG_OVERRIDE_GLM_PATH} endif ()
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
stb
$<$<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>
EXTRA_COMPILE_OPTIONS_PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/EHa>
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()
|