blob: 96a874d081308d8b501777c5faf56a5dbc627950 (
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
|
#
# In this file, for core module source embed and core module embed itself, we define two
# targets, one which includes the embed and one which does not, these are
# linked in as needed to libslang and libslang-without-embedded-core-module (for
# slang-bootstrap)
#
# If MSVC supported weak linking we could just have a single library for each
# and just not link it if we didn't want the embed...
#
#
# Generate an embeddable core module
#
set(core_module_generated_header_dir ${CMAKE_CURRENT_BINARY_DIR})
set(core_module_generated_header
${core_module_generated_header_dir}/slang-core-module-generated.h
)
add_custom_command(
OUTPUT ${core_module_generated_header}
COMMAND
slang-bootstrap -archive-type riff-lz4 -save-core-module-bin-source
${core_module_generated_header}
DEPENDS slang-bootstrap
VERBATIM
)
set(core_module_common_args
.
OBJECT
EXCLUDE_FROM_ALL
EXPORT_MACRO_PREFIX
SLANG
EXPORT_TYPE_AS
${SLANG_LIB_TYPE}
FOLDER
generated
LINK_WITH_PRIVATE
core
USE_EXTRA_WARNINGS
EXPLICIT_SOURCE
./slang-embedded-core-module.cpp
)
slang_add_target(
${core_module_common_args}
TARGET_NAME slang-embedded-core-module
EXPLICIT_SOURCE ${core_module_generated_header}
EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_EMBED_CORE_MODULE
INCLUDE_DIRECTORIES_PRIVATE ${core_module_generated_header_dir}
)
slang_add_target(
${core_module_common_args}
TARGET_NAME slang-no-embedded-core-module
)
#
# Compiling the meta.slang files
#
# List of *.meta.slang headers
set(core_module_meta_source_dir "${slang_SOURCE_DIR}/source/slang")
glob_append(
core_module_meta_source
"${core_module_meta_source_dir}/*.meta.slang"
)
set(core_module_meta_output_dir "${CMAKE_CURRENT_BINARY_DIR}/core-module-meta")
# Generate the output file list
set(core_module_meta_generated_headers)
foreach(meta_source ${core_module_meta_source})
file(
RELATIVE_PATH
meta_source_relative
"${core_module_meta_source_dir}"
${meta_source}
)
list(
APPEND
core_module_meta_generated_headers
"${core_module_meta_output_dir}/${meta_source_relative}.h"
)
endforeach()
add_custom_command(
OUTPUT ${core_module_meta_generated_headers}
COMMAND ${CMAKE_COMMAND} -E make_directory ${core_module_meta_output_dir}
COMMAND
slang-generate ${core_module_meta_source} --target-directory
${core_module_meta_output_dir}
DEPENDS ${core_module_meta_source} slang-generate
WORKING_DIRECTORY "${core_module_meta_source_dir}"
VERBATIM
)
add_custom_target(
generate-core-module-headers
DEPENDS ${core_module_meta_generated_headers}
)
set_target_properties(generate-core-module-headers PROPERTIES FOLDER generated)
#
# Generate embedded core module source
#
set(core_module_source_common_args
.
OBJECT
EXCLUDE_FROM_ALL
USE_EXTRA_WARNINGS
LINK_WITH_PRIVATE
core
slang-capability-defs
slang-reflect-headers
SPIRV-Headers
INCLUDE_DIRECTORIES_PRIVATE
../slang
FOLDER
generated
EXPLICIT_SOURCE
./slang-embedded-core-module-source.cpp
${core_module_meta_generated_headers}
REQUIRES
generate-core-module-headers
EXTRA_COMPILE_DEFINITIONS_PRIVATE
SLANG_EMBED_CORE_MODULE_SOURCE
INCLUDE_DIRECTORIES_PRIVATE
${core_module_meta_output_dir}
EXPORT_MACRO_PREFIX
SLANG
EXPORT_TYPE_AS
${SLANG_LIB_TYPE}
)
slang_add_target(
${core_module_source_common_args}
TARGET_NAME slang-embedded-core-module-source
EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_EMBED_CORE_MODULE_SOURCE
)
slang_add_target(
${core_module_source_common_args}
TARGET_NAME slang-no-embedded-core-module-source
)
|