yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Gangzheng TongUpdate slang-rhi deps for gfx-unit-test (#8237)0b87355f9

master
12.1 KiB418 linesraw
1#
2# Tools used to generate source during the build:
3#
4
5add_custom_target(
6    all-generators
7    COMMENT "meta target which depends on all generators"
8)
9set_target_properties(all-generators PROPERTIES FOLDER generators)
10
11if(CMAKE_HOST_WIN32)
12    set(CMAKE_HOST_EXECUTABLE_SUFFIX ".exe")
13else()
14    set(CMAKE_HOST_EXECUTABLE_SUFFIX "")
15endif()
16function(generator dir)
17    if(SLANG_GENERATORS_PATH)
18        cmake_parse_arguments(ARG "" "TARGET_NAME" "" ${ARGN})
19        if(ARG_TARGET_NAME)
20            set(target ${ARG_TARGET_NAME})
21        else()
22            get_filename_component(target ${dir} NAME)
23        endif()
24        add_executable(${target} IMPORTED GLOBAL)
25        set_property(
26            TARGET ${target}
27            PROPERTY
28                IMPORTED_LOCATION
29                    "${SLANG_GENERATORS_PATH}/${target}${CMAKE_HOST_EXECUTABLE_SUFFIX}"
30        )
31    else()
32        slang_add_target(
33            ${dir}
34            EXECUTABLE
35            EXCLUDE_FROM_ALL
36            USE_FEWER_WARNINGS
37            LINK_WITH_PRIVATE core
38            OUTPUT_DIR generators
39            REQUIRED_BY all-generators
40            FOLDER generators
41            INSTALL_COMPONENT generators
42            EXPORT_SET_NAME SlangGeneratorTargets
43            ${ARGN}
44        )
45    endif()
46endfunction()
47
48if(NOT SLANG_OVERRIDE_LUA_PATH)
49    generator(
50        slang-fiddle
51        LINK_WITH_PRIVATE
52        compiler-core
53        INCLUDE_DIRECTORIES_PUBLIC
54        ${slang_SOURCE_DIR}/external
55    )
56else()
57    generator(
58        slang-fiddle
59        LINK_WITH_PRIVATE
60        compiler-core
61        INCLUDE_DIRECTORIES_PUBLIC
62        ${SLANG_OVERRIDE_LUA_PATH}
63    )
64endif()
65generator(slang-embed)
66generator(slang-generate USE_FEWER_WARNINGS)
67generator(slang-lookup-generator LINK_WITH_PRIVATE compiler-core)
68generator(slang-capability-generator LINK_WITH_PRIVATE compiler-core)
69generator(slang-spirv-embed-generator LINK_WITH_PRIVATE compiler-core)
70generator(
71    ${slang_SOURCE_DIR}/source/slangc
72    TARGET_NAME
73    slang-bootstrap
74    USE_FEWER_WARNINGS
75    EXTRA_COMPILE_DEFINITIONS_PRIVATE
76    SLANG_BOOTSTRAP=1
77    LINK_WITH_PUBLIC
78    slang-without-embedded-core-module
79    LINK_WITH_PRIVATE
80    prelude
81    slang-capability-lookup
82    slang-lookup-tables
83    Threads::Threads
84)
85
86slang_add_target(
87    slang-cpp-parser
88    STATIC
89    EXPORT_MACRO_PREFIX SLANG
90    USE_FEWER_WARNINGS
91    LINK_WITH_PRIVATE core compiler-core
92    INCLUDE_DIRECTORIES_PUBLIC .
93    FOLDER generators
94)
95
96#
97# Language Server
98#
99if(SLANG_ENABLE_SLANGD)
100    slang_add_target(
101        slangd
102        EXECUTABLE
103        LINK_WITH_PRIVATE
104            core
105            compiler-core
106            slang
107            slang-fiddle-output
108            slang-capability-defs
109            Threads::Threads
110        INSTALL
111        EXPORT_SET_NAME SlangTargets
112    )
113endif()
114
115#
116# Slang Interpreter
117#
118if(SLANG_ENABLE_SLANGI)
119    slang_add_target(
120        slangi
121        EXECUTABLE
122        LINK_WITH_PRIVATE core compiler-core slang
123        INSTALL
124        EXPORT_SET_NAME SlangTargets
125    )
126endif()
127
128if(SLANG_ENABLE_GFX)
129    #
130    # GFX
131    #
132    # `gfx` is kept here for legacy reasons. It's not used by any slang tests but some external
133    # projects use it. We should remove it in the future.
134    slang_add_target(
135        gfx
136        ${SLANG_LIB_TYPE}
137        USE_FEWER_WARNINGS
138        LINK_WITH_PRIVATE
139            core
140            slang
141            Vulkan-Headers
142            metal-cpp
143            stb
144            $<$<BOOL:${SLANG_ENABLE_XLIB}>:X11::X11>
145            $<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cuda_driver>
146            $<$<BOOL:${SLANG_ENABLE_NVAPI}>:${NVAPI_LIBRARIES}>
147        LINK_WITH_FRAMEWORK Foundation Cocoa QuartzCore Metal
148        EXTRA_COMPILE_DEFINITIONS_PRIVATE
149            $<$<BOOL:${SLANG_ENABLE_CUDA}>:GFX_ENABLE_CUDA>
150            $<$<BOOL:${SLANG_ENABLE_OPTIX}>:GFX_OPTIX>
151            $<$<BOOL:${SLANG_ENABLE_NVAPI}>:GFX_NVAPI>
152            $<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB>
153        # This is a shared library, so we need to set a preprocessor macro to mark
154        # exported symbols
155        EXPORT_MACRO_PREFIX SLANG_GFX
156        # slang-gfx is in this directory, anything which depends on gfx should include
157        # this
158        INCLUDE_DIRECTORIES_PUBLIC
159            ${slang_SOURCE_DIR}
160            ${slang_SOURCE_DIR}/include
161            if
162            (not ${SLANG_OVERRIDE_SPIRV_TOOLS_PATH})
163        INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
164        INCLUDE_DIRECTORIES_PUBLIC
165            ${SLANG_OVERRIDE_SPIRV_TOOLS_PATH}
166            endif
167            ()
168            if
169            (not ${SLANG_OVERRIDE_GLM_PATH})
170        INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
171        INCLUDE_DIRECTORIES_PUBLIC
172            ${SLANG_OVERRIDE_GLM_PATH}
173            endif
174            ()
175            if
176            (not ${SLANG_OVERRIDE_IMGUI_PATH})
177        INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
178        INCLUDE_DIRECTORIES_PUBLIC
179            ${SLANG_OVERRIDE_IMGUI_PATH}
180            endif
181            ()
182            if
183            (not ${SLANG_OVERRIDE_TINYOBJLOADER_PATH})
184        INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
185        INCLUDE_DIRECTORIES_PUBLIC ${SLANG_OVERRIDE_TINYOBJLOADER_PATH} endif ()
186        INCLUDE_DIRECTORIES_PRIVATE ${NVAPI_INCLUDE_DIRS}
187        INSTALL
188        EXPORT_SET_NAME SlangTargets
189        FOLDER gfx
190    )
191
192    # Since slang-test does not depend on gfx, we just copy the gfx modules to the slangc
193    # directory. So even if slang-test is not built, the gfx modules are still available.
194    set(modules_dest_dir $<TARGET_FILE_DIR:slangc>)
195    add_custom_target(
196        copy-gfx-slang-modules
197        COMMAND ${CMAKE_COMMAND} -E make_directory ${modules_dest_dir}
198        COMMAND
199            ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/gfx/gfx.slang
200            ${modules_dest_dir}/gfx.slang
201        COMMAND
202            ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/gfx/slang.slang
203            ${modules_dest_dir}/slang.slang
204        WORKING_DIRECTORY ${slang_SOURCE_DIR}
205        VERBATIM
206    )
207    set_target_properties(copy-gfx-slang-modules PROPERTIES FOLDER generators)
208    install(
209        FILES ${modules_dest_dir}/gfx.slang ${modules_dest_dir}/slang.slang
210        DESTINATION ${runtime_subdir}
211    )
212endif()
213if(SLANG_ENABLE_TESTS AND SLANG_ENABLE_SLANG_RHI)
214    # The test executables and runtime-loaded modules
215    slang_add_target(
216        test-server
217        EXECUTABLE
218        EXCLUDE_FROM_ALL
219        LINK_WITH_PRIVATE core compiler-core slang
220        INCLUDE_FROM_PRIVATE unit-test slang-rhi
221        FOLDER test
222    )
223    slang_add_target(
224        test-process
225        EXECUTABLE
226        EXCLUDE_FROM_ALL
227        LINK_WITH_PRIVATE core compiler-core
228        FOLDER test
229    )
230
231    slang_add_target(
232        slang-test
233        EXECUTABLE
234        USE_FEWER_WARNINGS
235        INCLUDE_DIRECTORIES_PUBLIC .
236        LINK_WITH_PRIVATE
237            core
238            compiler-core
239            slang
240            stb
241            ${CMAKE_DL_LIBS}
242            Threads::Threads
243        INCLUDE_FROM_PRIVATE slang-rhi
244        REQUIRES
245            # Shared libraries dlopened by slang-test
246            slang-reflection-test
247            slang-unit-test
248            # Used by some tests when they run
249            slangd
250            test-server
251            test-process
252        OPTIONAL_REQUIRES
253            slang-rt
254            slang-glslang
255            slang-llvm
256            copy-webgpu_dawn
257            copy-slang-tint
258            # See issue 5305.
259            copy-prebuilt-binaries
260        FOLDER test
261        DEBUG_DIR ${slang_SOURCE_DIR}
262    )
263    set_property(
264        DIRECTORY ${slang_SOURCE_DIR}
265        PROPERTY VS_STARTUP_PROJECT slang-test
266    )
267
268    if(SLANG_ENABLE_GFX)
269        add_dependencies(slang-test copy-gfx-slang-modules)
270    endif()
271
272    include(CTest)
273    add_test(
274        NAME slang-test
275        COMMAND
276            slang-test -bindir
277            ${slang_SOURCE_DIR}/build/$<CONFIG>/${runtime_subdir}
278            -expected-failure-list
279            ${slang_SOURCE_DIR}/tests/expected-failure.txt
280            -expected-failure-list
281            ${slang_SOURCE_DIR}/tests/expected-failure-github.txt
282        WORKING_DIRECTORY ${slang_SOURCE_DIR}
283    )
284
285    slang_add_target(
286        unit-test
287        OBJECT
288        EXCLUDE_FROM_ALL
289        INCLUDE_DIRECTORIES_PUBLIC .
290        INCLUDE_FROM_PRIVATE slang core
291        INCLUDE_DIRECTORIES_PRIVATE ${slang_SOURCE_DIR}/include
292        FOLDER test
293    )
294
295    # These are libraries loaded at runtime from the test executable:
296    #
297    # `platform` contains all the platform abstractions for a GUI application.
298    #
299    slang_add_target(
300        platform
301        ${SLANG_LIB_TYPE}
302        EXCLUDE_FROM_ALL
303        USE_FEWER_WARNINGS
304        LINK_WITH_PRIVATE
305            core
306            imgui
307            stb
308            $<$<BOOL:${SLANG_ENABLE_XLIB}>:X11::X11>
309            slang-rhi
310            "$<$<PLATFORM_ID:Darwin>:-framework Cocoa>"
311            "$<$<PLATFORM_ID:Darwin>:-framework QuartzCore>"
312            ${CMAKE_DL_LIBS}
313        LINK_WITH_FRAMEWORK Foundation Cocoa QuartzCore
314        EXTRA_COMPILE_DEFINITIONS_PRIVATE
315            $<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB=1>
316        INCLUDE_FROM_PRIVATE imgui slang-rhi
317        INCLUDE_DIRECTORIES_PUBLIC
318            .
319            platform
320            if
321            (not ${SLANG_OVERRIDE_GLM_PATH})
322        INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
323        INCLUDE_DIRECTORIES_PUBLIC ${SLANG_OVERRIDE_GLM_PATH} endif ()
324        EXPORT_MACRO_PREFIX SLANG_PLATFORM
325    )
326
327    slang_add_target(
328        gfx-unit-test
329        MODULE
330        EXCLUDE_FROM_ALL
331        EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
332        USE_FEWER_WARNINGS
333        LINK_WITH_PRIVATE core slang unit-test stb platform slang-rhi
334        INCLUDE_FROM_PRIVATE slang-rhi
335        INCLUDE_DIRECTORIES_PUBLIC
336            .
337            platform
338            if
339            (not ${SLANG_OVERRIDE_GLM_PATH})
340        INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/external else ()
341        INCLUDE_DIRECTORIES_PUBLIC ${SLANG_OVERRIDE_GLM_PATH} endif ()
342        OUTPUT_NAME gfx-unit-test-tool
343        REQUIRED_BY slang-test
344        FOLDER test/tools
345    )
346
347    slang_add_target(
348        render-test
349        MODULE
350        EXCLUDE_FROM_ALL
351        EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
352        USE_FEWER_WARNINGS
353        LINK_WITH_PRIVATE
354            core
355            compiler-core
356            slang
357            slang-rhi
358            platform
359            stb
360            $<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cuda_driver>
361        INCLUDE_FROM_PRIVATE slang-rhi
362        EXTRA_COMPILE_DEFINITIONS_PRIVATE
363            $<$<BOOL:${SLANG_ENABLE_CUDA}>:RENDER_TEST_CUDA>
364            $<$<BOOL:${SLANG_ENABLE_OPTIX}>:RENDER_TEST_OPTIX>
365        EXTRA_COMPILE_OPTIONS_PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/EHa>
366        OUTPUT_NAME render-test-tool
367        REQUIRED_BY slang-test
368        FOLDER test/tools
369    )
370
371    slang_add_target(
372        slang-unit-test
373        MODULE
374        EXCLUDE_FROM_ALL
375        EXTRA_COMPILE_DEFINITIONS_PRIVATE
376            SLANG_SHARED_LIBRARY_TOOL
377            SLANG_NO_DEPRECATION
378        USE_FEWER_WARNINGS
379        LINK_WITH_PRIVATE core compiler-core unit-test slang Threads::Threads
380        OUTPUT_NAME slang-unit-test-tool
381        FOLDER test/tools
382    )
383    slang_add_target(
384        slang-reflection-test
385        MODULE
386        EXCLUDE_FROM_ALL
387        EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
388        USE_FEWER_WARNINGS
389        LINK_WITH_PRIVATE core slang Threads::Threads
390        OUTPUT_NAME slang-reflection-test-tool
391        FOLDER test/tools
392    )
393
394    slang_add_target(
395        slang-profile
396        EXECUTABLE
397        EXCLUDE_FROM_ALL
398        LINK_WITH_PRIVATE core slang
399        FOLDER test
400    )
401endif()
402
403#
404# slang-replay tool for replaying the record files
405#
406if(SLANG_ENABLE_REPLAYER)
407    slang_add_target(
408        slang-replay
409        EXECUTABLE
410        EXTRA_SOURCE_DIRS
411            ${slang_SOURCE_DIR}/source/slang-record-replay/replay
412            ${slang_SOURCE_DIR}/source/slang-record-replay/util
413        LINK_WITH_PRIVATE core compiler-core slang
414        INCLUDE_DIRECTORIES_PUBLIC
415            ${slang_SOURCE_DIR}/source/slang-record-replay
416        FOLDER test
417    )
418endif()