blob: 6303bc1b91e2ab5d85ce763404d4e38a254398a5 (
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
|
#
# In this file, for stdlib source embed and stdlib 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-stdlib (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 stdlib
#
set(stdlib_generated_header_dir ${CMAKE_CURRENT_BINARY_DIR})
set(stdlib_generated_header
${stdlib_generated_header_dir}/slang-stdlib-generated.h
)
add_custom_command(
OUTPUT ${stdlib_generated_header}
COMMAND
slang-bootstrap -archive-type riff-lz4 -save-stdlib-bin-source
${stdlib_generated_header}
DEPENDS slang-bootstrap
VERBATIM
)
set(stdlib_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-stdlib.cpp
)
slang_add_target(
${stdlib_common_args}
TARGET_NAME slang-embedded-stdlib
EXPLICIT_SOURCE ${stdlib_generated_header}
EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_EMBED_STDLIB
INCLUDE_DIRECTORIES_PRIVATE ${stdlib_generated_header_dir}
)
slang_add_target(
${stdlib_common_args}
TARGET_NAME slang-no-embedded-stdlib
)
#
# Compiling the meta.slang files
#
# List of *.meta.slang headers
set(stdlib_meta_source_dir "${slang_SOURCE_DIR}/source/slang")
glob_append(stdlib_meta_source "${stdlib_meta_source_dir}/*.meta.slang")
set(stdlib_meta_output_dir "${CMAKE_CURRENT_BINARY_DIR}/stdlib-meta")
# Generate the output file list
set(stdlib_meta_generated_headers)
foreach(meta_source ${stdlib_meta_source})
file(
RELATIVE_PATH
meta_source_relative
"${stdlib_meta_source_dir}"
${meta_source}
)
list(
APPEND
stdlib_meta_generated_headers
"${stdlib_meta_output_dir}/${meta_source_relative}.h"
)
endforeach()
add_custom_command(
OUTPUT ${stdlib_meta_generated_headers}
COMMAND ${CMAKE_COMMAND} -E make_directory ${stdlib_meta_output_dir}
COMMAND
slang-generate ${stdlib_meta_source} --target-directory
${stdlib_meta_output_dir}
DEPENDS ${stdlib_meta_source} slang-generate
WORKING_DIRECTORY "${stdlib_meta_source_dir}"
VERBATIM
)
add_custom_target(generate_stdlib_headers DEPENDS ${stdlib_meta_generated_headers})
#
# Generate embedded stdlib source
#
set(stdlib_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-stdlib-source.cpp
${stdlib_meta_generated_headers}
REQUIRES generate_stdlib_headers
EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_EMBED_STDLIB_SOURCE
INCLUDE_DIRECTORIES_PRIVATE
${stdlib_meta_output_dir}
EXPORT_MACRO_PREFIX SLANG
EXPORT_TYPE_AS ${SLANG_LIB_TYPE}
)
slang_add_target(
${stdlib_source_common_args}
TARGET_NAME slang-embedded-stdlib-source
EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_EMBED_STDLIB_SOURCE
)
slang_add_target(
${stdlib_source_common_args}
TARGET_NAME slang-no-embedded-stdlib-source
)
|