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