xref: /aosp_15_r20/external/angle/third_party/clspv/BUILD.gn (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1import("//build_overrides/clspv.gni")
2import("//build_overrides/spirv_tools.gni")
3
4declare_args() {
5  # spirv namespace
6  spirv_namespace_strings = "spv"
7  spirv_namespace_glsl = "glsl"
8  spirv_namespace_reflection = "reflection"
9
10  # bake file variable names
11  clspv_bake_file_data_variable_name = "clspv_builtins_header_data"
12  clspv_bake_file_size_variable_name = "clspv_builtins_header_size"
13  clspv_bake_file_data_base_variable_name = "opencl_base_builtins_header_data"
14  clspv_bake_file_size_base_variable_name = "opencl_base_builtins_header_size"
15
16  # clspv builtin library variable names
17  clspv_library_data_var_name = "clspv_builtin_library_data"
18  clspv_library_size_var_name = "clspv_builtin_library_size"
19  clspv64_library_data_var_name = "clspv64_builtin_library_data"
20  clspv64_library_size_var_name = "clspv64_builtin_library_size"
21}
22
23# Action scripts to generate headers
24action("clspv_c_strings") {
25  script = "src/cmake/spirv_c_strings.py"
26
27  inputs =
28      [ "${spirv_tools_spirv_headers_dir}/include/spirv/unified1/spirv.hpp" ]
29
30  outputs = [ "$target_gen_dir/clspv/spirv_c_strings.hpp" ]
31
32  args = [
33    "--input-file=" + rebase_path(inputs[0], root_build_dir),
34    "--output-file=" + rebase_path(outputs[0], root_build_dir),
35    "--namespace=" + spirv_namespace_strings,
36  ]
37}
38
39action("clspv_glsl") {
40  script = "src/cmake/spirv_ext_inst.py"
41
42  inputs = [ "${spirv_tools_spirv_headers_dir}/include/spirv/unified1/extinst.glsl.std.450.grammar.json" ]
43
44  outputs = [ "$target_gen_dir/clspv/spirv_glsl.hpp" ]
45
46  args = [
47    "--input-file=" + rebase_path(inputs[0], root_build_dir),
48    "--output-file=" + rebase_path(outputs[0], root_build_dir),
49    "--namespace=" + spirv_namespace_glsl,
50  ]
51}
52
53action("clspv_reflection") {
54  script = "src/cmake/spirv_ext_inst.py"
55
56  inputs = [ "${spirv_tools_spirv_headers_dir}/include/spirv/unified1/extinst.nonsemantic.clspvreflection.grammar.json" ]
57
58  outputs = [ "$target_gen_dir/clspv/spirv_reflection.hpp" ]
59
60  args = [
61    "--input-file=" + rebase_path(inputs[0], root_build_dir),
62    "--output-file=" + rebase_path(outputs[0], root_build_dir),
63    "--namespace=" + spirv_namespace_reflection,
64  ]
65}
66
67action("clspv-builtins") {
68  script = "src/cmake/define_clspv_builtins.py"
69
70  outputs = [ "$target_gen_dir/clspv-builtins.h" ]
71
72  args = [ "--output-file=" + rebase_path(outputs[0], root_build_dir) ]
73}
74
75# The *.bc files are prebuilt binaries in the clspv. If these need to be regenerated, please refer
76# to the clspv README.md file for instructions.
77action("clspv_builtin_library") {
78  script = "src/cmake/bake_file.py"
79  inputs = [ "src/cmake/clspv--.bc" ]
80  outputs = [ "$target_gen_dir/clspv/clspv_builtin_library.h" ]
81
82  args = [
83    "--input-header-file=" + rebase_path(inputs[0], root_build_dir),
84    "--output-file=" + rebase_path(outputs[0], root_build_dir),
85    "--header-var=" + clspv_library_data_var_name,
86    "--header-size=" + clspv_library_size_var_name,
87  ]
88}
89
90action("clspv64_builtin_library") {
91  script = "src/cmake/bake_file.py"
92  inputs = [ "src/cmake/clspv64--.bc" ]
93  outputs = [ "$target_gen_dir/clspv/clspv64_builtin_library.h" ]
94
95  args = [
96    "--input-header-file=" + rebase_path(inputs[0], root_build_dir),
97    "--output-file=" + rebase_path(outputs[0], root_build_dir),
98    "--header-var=" + clspv64_library_data_var_name,
99    "--header-size=" + clspv64_library_size_var_name,
100  ]
101}
102
103action("clspv_baked_opencl_header") {
104  script =
105      "src/cmake/bake_file.py"  # cannot use data_deps as that's a rutime dep
106  deps = [ ":clspv-builtins" ]
107
108  inputs = [
109    "$target_gen_dir/clspv-builtins.h",
110    "//$clspv_llvm_dir/clang/lib/Headers/opencl-c-base.h",
111  ]
112
113  outputs = [ "$target_gen_dir/clspv/opencl_builtins_header.h" ]
114
115  args = [
116    "--input-header-file=" + rebase_path(inputs[0], root_build_dir),
117    "--input-base-file=" + rebase_path(inputs[1], root_build_dir),
118    "--output-file=" + rebase_path(outputs[0], root_build_dir),
119    "--header-var=" + clspv_bake_file_data_variable_name,
120    "--header-size-var=" + clspv_bake_file_size_variable_name,
121    "--base-var=" + clspv_bake_file_data_base_variable_name,
122    "--base-size-var=" + clspv_bake_file_size_base_variable_name,
123  ]
124}
125
126# CLSPV Lib Targets
127# a common config that will be used by all the clspv targets
128config("clspv_common_config") {
129  include_dirs = [
130    "src/include",
131    "${spirv_tools_spirv_headers_dir}/include",
132    "$root_gen_dir",
133    "$target_gen_dir/../",
134  ]
135  if (current_os != "win") {
136    cflags = [ "-Wno-deprecated-declarations" ]
137  }
138}
139
140source_set("clspv_passes") {
141  sources = [
142    "src/lib/AddFunctionAttributesPass.cpp",
143    "src/lib/AllocateDescriptorsPass.cpp",
144    "src/lib/AnnotationToMetadataPass.cpp",
145    "src/lib/ArgKind.cpp",
146    "src/lib/AutoPodArgsPass.cpp",
147    "src/lib/BitcastUtils.cpp",
148    "src/lib/Builtins.cpp",
149    "src/lib/CallGraphOrderedFunctions.cpp",
150    "src/lib/ClusterConstants.cpp",
151    "src/lib/ClusterPodKernelArgumentsPass.cpp",
152    "src/lib/ComputeStructuredOrder.cpp",
153    "src/lib/ConstantEmitter.cpp",
154    "src/lib/Constants.cpp",
155    "src/lib/DeclarePushConstantsPass.cpp",
156    "src/lib/DefineOpenCLWorkItemBuiltinsPass.cpp",
157    "src/lib/DescriptorCounter.cpp",
158    "src/lib/DirectResourceAccessPass.cpp",
159    "src/lib/FeatureMacro.cpp",
160    "src/lib/FixupBuiltinsPass.cpp",
161    "src/lib/FixupStructuredCFGPass.cpp",
162    "src/lib/FunctionInternalizerPass.cpp",
163    "src/lib/HideConstantLoadsPass.cpp",
164    "src/lib/InlineEntryPointsPass.cpp",
165    "src/lib/InlineFuncWithImageMetadataGetterPass.cpp",
166    "src/lib/InlineFuncWithPointerBitCastArgPass.cpp",
167    "src/lib/InlineFuncWithPointerToFunctionArgPass.cpp",
168    "src/lib/InlineFuncWithReadImage3DNonLiteralSampler.cpp",
169    "src/lib/InlineFuncWithSingleCallSitePass.cpp",
170    "src/lib/KernelArgNamesToMetadataPass.cpp",
171    "src/lib/Layout.cpp",
172    "src/lib/LogicalPointerToIntPass.cpp",
173    "src/lib/LongVectorLoweringPass.cpp",
174    "src/lib/LowerAddrSpaceCastPass.cpp",
175    "src/lib/LowerPrivatePointerPHIPass.cpp",
176    "src/lib/MultiVersionUBOFunctionsPass.cpp",
177    "src/lib/NativeMathPass.cpp",
178    "src/lib/NormalizeGlobalVariable.cpp",
179    "src/lib/OpenCLInlinerPass.cpp",
180    "src/lib/Option.cpp",
181    "src/lib/Passes.cpp",
182    "src/lib/PhysicalPointerArgsPass.cpp",
183    "src/lib/PrintfPass.cpp",
184    "src/lib/PushConstant.cpp",
185    "src/lib/RemoveUnusedArguments.cpp",
186    "src/lib/ReorderBasicBlocksPass.cpp",
187    "src/lib/ReplaceLLVMIntrinsicsPass.cpp",
188    "src/lib/ReplaceOpenCLBuiltinPass.cpp",
189    "src/lib/ReplacePointerBitcastPass.cpp",
190    "src/lib/RewriteInsertsPass.cpp",
191    "src/lib/RewritePackedStructs.cpp",
192    "src/lib/SPIRVOp.cpp",
193    "src/lib/SPIRVProducerPass.cpp",
194    "src/lib/SamplerUtils.cpp",
195    "src/lib/ScalarizePass.cpp",
196    "src/lib/SetImageMetadataPass.cpp",
197    "src/lib/ShareModuleScopeVariables.cpp",
198    "src/lib/SignedCompareFixupPass.cpp",
199    "src/lib/SimplifyPointerBitcastPass.cpp",
200    "src/lib/SpecConstant.cpp",
201    "src/lib/SpecializeImageTypes.cpp",
202    "src/lib/SplatArgPass.cpp",
203    "src/lib/SplatSelectCondition.cpp",
204    "src/lib/StripFreezePass.cpp",
205    "src/lib/ThreeElementVectorLoweringPass.cpp",
206    "src/lib/Types.cpp",
207    "src/lib/UBOTypeTransformPass.cpp",
208    "src/lib/UndoBoolPass.cpp",
209    "src/lib/UndoByvalPass.cpp",
210    "src/lib/UndoGetElementPtrConstantExprPass.cpp",
211    "src/lib/UndoInstCombinePass.cpp",
212    "src/lib/UndoSRetPass.cpp",
213    "src/lib/UndoTranslateSamplerFoldPass.cpp",
214    "src/lib/UndoTruncateToOddIntegerPass.cpp",
215    "src/lib/WrapKernelPass.cpp",
216    "src/lib/ZeroInitializeAllocasPass.cpp",
217  ]
218
219  deps = [
220    ":clspv_c_strings",
221    ":clspv_glsl",
222    ":clspv_reflection",
223    "gn/llvm/config:llvm-config",
224    "gn/llvm/sources:clspv_llvm_components",
225    "//third_party/spirv-headers/src:spv_headers",
226  ]
227
228  configs += [
229    ":clspv_common_config",
230    "gn/llvm/sources:clspv_llvm_private_config",
231  ]
232
233  configs += clspv_configs_to_append
234  configs -= clspv_configs_to_remove
235
236  include_dirs = [ "$root_gen_dir/$clspv_llvm_dir" ]
237}
238
239static_library("clspv_core") {
240  configs += [ ":clspv_common_config" ]
241  configs += clspv_configs_to_append
242  configs -= clspv_configs_to_remove
243  deps = [
244    "gn/llvm/sources:clspv_clang_lib_ast",
245    "gn/llvm/sources:clspv_clang_lib_basic",
246    "gn/llvm/sources:clspv_clang_lib_codegen",
247    "gn/llvm/sources:clspv_clang_lib_frontend",
248    "gn/llvm/sources:clspv_clang_lib_serialization",
249
250    # llvm/clang
251    ":clspv64_builtin_library",
252    ":clspv_baked_opencl_header",
253    ":clspv_builtin_library",
254    ":clspv_passes",
255    "gn/llvm/sources:clspv_llvm_components",
256    "gn/llvm/sources:clspv_llvm_lib_irreader",
257    "gn/llvm/sources:clspv_llvm_lib_linker",
258  ]
259  sources = [
260    "src/lib/Compiler.cpp",
261    "src/lib/FrontendPlugin.cpp",
262    "src/lib/Sampler.cpp",
263  ]
264  include_dirs = [
265    "//$clspv_llvm_dir/clang/include",
266    "//$clspv_llvm_dir/llvm/include",
267    "$root_gen_dir/$clspv_llvm_dir/",
268    "$target_gen_dir",
269    "$root_gen_dir/$clspv_llvm_dir/clang/include",
270  ]
271}
272
273shared_library("clspv_core_shared") {
274  configs += [ ":clspv_common_config" ]
275  configs += clspv_configs_to_append
276  configs -= clspv_configs_to_remove
277
278  if (is_android) {
279    # Removing this config, otherwise clspv API will not be visable
280    configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
281  }
282
283  deps = [
284    "gn/llvm/sources:clspv_clang_lib_ast",
285    "gn/llvm/sources:clspv_clang_lib_basic",
286    "gn/llvm/sources:clspv_clang_lib_codegen",
287    "gn/llvm/sources:clspv_clang_lib_frontend",
288    "gn/llvm/sources:clspv_clang_lib_serialization",
289
290    # llvm/clang
291    ":clspv64_builtin_library",
292    ":clspv_baked_opencl_header",
293    ":clspv_builtin_library",
294    ":clspv_passes",
295    "gn/llvm/sources:clspv_llvm_components",
296    "gn/llvm/sources:clspv_llvm_lib_irreader",
297    "gn/llvm/sources:clspv_llvm_lib_linker",
298  ]
299  sources = [
300    "src/lib/Compiler.cpp",
301    "src/lib/FrontendPlugin.cpp",
302    "src/lib/Sampler.cpp",
303  ]
304  include_dirs = [
305    "//$clspv_llvm_dir/clang/include",
306    "//$clspv_llvm_dir/llvm/include",
307    "$root_gen_dir/$clspv_llvm_dir/",
308    "$target_gen_dir",
309    "$root_gen_dir/$clspv_llvm_dir/clang/include",
310  ]
311}
312
313# CLSPV Tools Targets
314config("clspv_opt_config") {
315  include_dirs = [
316    "src/include",
317    "$clspv_llvm_dir/llvm/tools/opt",
318    "$root_gen_dir/$clspv_llvm_dir",
319  ]
320  configs = [ "gn/build:llvm_code" ]
321}
322
323executable("clspv-opt") {
324  sources = [ "src/tools/clspv-opt/main.cpp" ]
325
326  configs += [ ":clspv_opt_config" ]
327  configs += clspv_configs_to_append
328  configs -= clspv_configs_to_remove
329
330  deps = [ ":clspv_passes" ]
331}
332
333executable("clspv") {
334  sources = [ "src/tools/driver/main.cpp" ]
335
336  configs += [ ":clspv_common_config" ]
337  configs += clspv_configs_to_append
338  configs -= clspv_configs_to_remove
339
340  include_dirs = [
341    "$target_gen_dir",
342    "$root_gen_dir/$clspv_llvm_dir",
343  ]
344
345  deps = [ ":clspv_core" ]
346}
347
348executable("clspv-reflection") {
349  sources = [
350    "src/tools/reflection/ReflectionParser.cpp",
351    "src/tools/reflection/main.cpp",
352  ]
353
354  configs += [ ":clspv_common_config" ]
355  configs += clspv_configs_to_append
356  configs -= clspv_configs_to_remove
357
358  deps = [
359    ":clspv_core",
360    ":clspv_reflection",
361    "${spirv_tools_dir}:spvtools_link",
362    "//third_party/spirv-headers/src:spv_headers",
363  ]
364
365  include_dirs = [
366    "$spirv_tools_spirv_headers_dir/include",
367    "$target_gen_dir",
368  ]
369}
370
371group("default") {
372  deps = [
373    ":clspv",
374    ":clspv-opt",
375    ":clspv-reflection",
376  ]
377}
378