yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
2db6ac97a
master
1# 2# In this file, for core module source embed and core module embed itself, we define two 3# targets, one which includes the embed and one which does not, these are 4# linked in as needed to libslang and libslang-without-embedded-core-module (for 5# slang-bootstrap) 6# 7# If MSVC supported weak linking we could just have a single library for each 8# and just not link it if we didn't want the embed... 9# 10 11# 12# Compiling the meta.slang files 13# 14 15# List of *.meta.slang headers 16set ( core_module_meta_source_dir " ${ slang_SOURCE_DIR } /source/slang" ) 17glob_append ( 18core_module_meta_source 19" ${ core_module_meta_source_dir } /*.meta.slang" 20) 21 22set ( core_module_meta_output_dir " ${ CMAKE_CURRENT_BINARY_DIR } /core-module-meta" ) 23 24# Generate the output file list 25set ( core_module_meta_generated_headers ) 26foreach ( meta_source${ core_module_meta_source }) 27file ( 28RELATIVE_PATH 29meta_source_relative 30" ${ core_module_meta_source_dir } " 31${ meta_source } 32) 33list ( 34APPEND 35core_module_meta_generated_headers 36" ${ core_module_meta_output_dir } / ${ meta_source_relative } .h" 37) 38endforeach () 39 40add_custom_command ( 41OUTPUT ${ core_module_meta_generated_headers } 42COMMAND ${ CMAKE_COMMAND } -E make_directory ${ core_module_meta_output_dir } 43COMMAND 44slang-generate ${ core_module_meta_source } --target-directory 45${ core_module_meta_output_dir } 46DEPENDS ${ core_module_meta_source } slang-generate 47WORKING_DIRECTORY " ${ core_module_meta_source_dir } " 48VERBATIM 49) 50 51# 52# Generate embedded core module source library (or a dummy library with just nullptrs) 53# 54 55set ( core_module_source_common_args 56. 57OBJECT 58EXCLUDE_FROM_ALL 59USE_EXTRA_WARNINGS 60LINK_WITH_PRIVATE 61core 62slang-capability-defs 63slang-fiddle-output 64SPIRV-Headers::SPIRV-Headers 65INCLUDE_DIRECTORIES_PRIVATE 66../slang 67${ core_module_meta_output_dir } 68FOLDER 69generated 70EXPLICIT_SOURCE 71./slang-embedded-core-module-source.cpp 72EXPORT_MACRO_PREFIX 73SLANG 74EXPORT_TYPE_AS 75${ SLANG_LIB_TYPE } 76) 77 78slang_add_target ( 79${ core_module_source_common_args } 80TARGET_NAME slang-embedded-core-module-source 81EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_EMBED_CORE_MODULE_SOURCE 82EXPLICIT_SOURCE ${ core_module_meta_generated_headers } 83EXCLUDE_FROM_ALL 84) 85 86slang_add_target ( 87${ core_module_source_common_args } 88TARGET_NAME slang-no-embedded-core-module-source 89EXCLUDE_FROM_ALL 90) 91 92# 93# Use that source to generate an embeddable core module, this uses 94# slang-bootstrap which will include the embedded source we have above 95# 96 97set ( core_module_generated_header_dir ${ CMAKE_CURRENT_BINARY_DIR }) 98set ( core_module_generated_header 99${ core_module_generated_header_dir } /slang-core-module-generated.h 100) 101set ( glsl_module_generated_header_dir 102${ CMAKE_CURRENT_BINARY_DIR } /../slang-glsl-module 103) 104set ( glsl_module_generated_header 105${ glsl_module_generated_header_dir } /slang-glsl-module-generated.h 106) 107 108# Propagate to parent directory scope, so they're visible to 109# slang-glsl-module/CMakeLists.txt 110set ( glsl_module_generated_header_dir 111${ glsl_module_generated_header_dir } 112PARENT_SCOPE 113) 114set ( glsl_module_generated_header ${ glsl_module_generated_header } PARENT_SCOPE ) 115 116add_custom_command ( 117OUTPUT ${ core_module_generated_header } ${ glsl_module_generated_header } 118COMMAND 119slang-bootstrap -archive-type riff-lz4 -save-core-module-bin-source 120${ core_module_generated_header } -save-glsl-module-bin-source 121${ glsl_module_generated_header } 122DEPENDS slang-bootstrap slang-without-embedded-core-module 123VERBATIM 124) 125# Add a target so that we can depend on the above step when we create the glsl 126# module 127add_custom_target ( 128generate_core_module_headers 129DEPENDS ${ core_module_generated_header } ${ glsl_module_generated_header } 130) 131set_target_properties ( generate_core_module_headers PROPERTIES FOLDER generated ) 132 133set ( core_module_common_args 134. 135OBJECT 136EXCLUDE_FROM_ALL 137EXPORT_MACRO_PREFIX 138SLANG 139EXPORT_TYPE_AS 140${ SLANG_LIB_TYPE } 141FOLDER 142generated 143LINK_WITH_PRIVATE 144core 145USE_EXTRA_WARNINGS 146EXPLICIT_SOURCE 147./slang-embedded-core-module.cpp 148) 149 150slang_add_target ( 151${ core_module_common_args } 152TARGET_NAME slang-embedded-core-module 153REQUIRES generate_core_module_headers 154EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_EMBED_CORE_MODULE 155INCLUDE_DIRECTORIES_PRIVATE ${ core_module_generated_header_dir } 156) 157 158slang_add_target ( 159${ core_module_common_args } 160TARGET_NAME slang-no-embedded-core-module 161)