1# Copyright (c) 2021 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6#     http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14import("//build/ohos.gni")
15import("//third_party/vk-gl-cts/vk_gl_cts.gni")
16
17config("deqp_spirvtool_opt_config") {
18  cflags_cc = deqp_common_cflags_cc
19  defines = deqp_common_defines
20  defines += [
21    "SPIRV_CHECK_CONTEXT",
22    "SPIRV_COLOR_TERMINAL",
23    "SPIRV_LINUX",
24    "SPIRV_TIMER_ENABLED",
25  ]
26}
27
28config("spv_headers_public_config") {
29  include_dirs = [ "include" ]
30}
31
32config("spvtools_include_gen_dirs") {
33  include_dirs = [ "$target_gen_dir" ]
34}
35
36config("spvtools_internal_config") {
37  include_dirs = [
38    ".",
39    "//third_party/spirv-headers/include",
40  ]
41
42  configs = [
43    ":spv_headers_public_config",
44    ":spvtools_include_gen_dirs",
45  ]
46
47  cflags = []
48  if (is_clang) {
49    cflags += [
50      "-Wno-implicit-fallthrough",
51      "-Wno-newline-eof",
52      "-Wno-unreachable-code-break",
53      "-Wno-unreachable-code-return",
54    ]
55  } else if (!is_win) {
56    # Work around a false-positive on a Skia GCC 10 builder.
57    cflags += [ "-Wno-format-truncation" ]
58  } else {
59    # Make MSVC report the correct value for __cplusplus
60    cflags += [ "/Zc:__cplusplus" ]
61  }
62
63  if (!is_win) {
64    cflags += [ "-std=c++17" ]
65  } else {
66    cflags += [ "/std:c++17" ]
67  }
68}
69
70ohos_source_set("deqp_spirvtool_opt_source") {
71  sources = [
72    "//third_party/spirv-tools/include/spirv-tools/instrument.hpp",
73    "//third_party/spirv-tools/include/spirv-tools/libspirv.h",
74    "//third_party/spirv-tools/include/spirv-tools/libspirv.hpp",
75    "//third_party/spirv-tools/include/spirv-tools/linker.hpp",
76    "//third_party/spirv-tools/include/spirv-tools/optimizer.hpp",
77    "//third_party/spirv-tools/source/opt/aggressive_dead_code_elim_pass.cpp",
78    "//third_party/spirv-tools/source/opt/aggressive_dead_code_elim_pass.h",
79    "//third_party/spirv-tools/source/opt/amd_ext_to_khr.cpp",
80    "//third_party/spirv-tools/source/opt/amd_ext_to_khr.h",
81    "//third_party/spirv-tools/source/opt/analyze_live_input_pass.cpp",
82    "//third_party/spirv-tools/source/opt/analyze_live_input_pass.h",
83    "//third_party/spirv-tools/source/opt/basic_block.cpp",
84    "//third_party/spirv-tools/source/opt/basic_block.h",
85    "//third_party/spirv-tools/source/opt/block_merge_pass.cpp",
86    "//third_party/spirv-tools/source/opt/block_merge_pass.h",
87    "//third_party/spirv-tools/source/opt/block_merge_util.cpp",
88    "//third_party/spirv-tools/source/opt/block_merge_util.h",
89    "//third_party/spirv-tools/source/opt/build_module.cpp",
90    "//third_party/spirv-tools/source/opt/build_module.h",
91    "//third_party/spirv-tools/source/opt/ccp_pass.cpp",
92    "//third_party/spirv-tools/source/opt/ccp_pass.h",
93    "//third_party/spirv-tools/source/opt/cfg.cpp",
94    "//third_party/spirv-tools/source/opt/cfg.h",
95    "//third_party/spirv-tools/source/opt/cfg_cleanup_pass.cpp",
96    "//third_party/spirv-tools/source/opt/cfg_cleanup_pass.h",
97    "//third_party/spirv-tools/source/opt/code_sink.cpp",
98    "//third_party/spirv-tools/source/opt/code_sink.h",
99    "//third_party/spirv-tools/source/opt/combine_access_chains.cpp",
100    "//third_party/spirv-tools/source/opt/combine_access_chains.h",
101    "//third_party/spirv-tools/source/opt/compact_ids_pass.cpp",
102    "//third_party/spirv-tools/source/opt/compact_ids_pass.h",
103    "//third_party/spirv-tools/source/opt/composite.cpp",
104    "//third_party/spirv-tools/source/opt/composite.h",
105    "//third_party/spirv-tools/source/opt/const_folding_rules.cpp",
106    "//third_party/spirv-tools/source/opt/const_folding_rules.h",
107    "//third_party/spirv-tools/source/opt/constants.cpp",
108    "//third_party/spirv-tools/source/opt/constants.h",
109    "//third_party/spirv-tools/source/opt/control_dependence.cpp",
110    "//third_party/spirv-tools/source/opt/control_dependence.h",
111    "//third_party/spirv-tools/source/opt/convert_to_half_pass.cpp",
112    "//third_party/spirv-tools/source/opt/convert_to_half_pass.h",
113    "//third_party/spirv-tools/source/opt/convert_to_sampled_image_pass.cpp",
114    "//third_party/spirv-tools/source/opt/convert_to_sampled_image_pass.h",
115    "//third_party/spirv-tools/source/opt/copy_prop_arrays.cpp",
116    "//third_party/spirv-tools/source/opt/copy_prop_arrays.h",
117    "//third_party/spirv-tools/source/opt/dataflow.cpp",
118    "//third_party/spirv-tools/source/opt/dataflow.h",
119    "//third_party/spirv-tools/source/opt/dead_branch_elim_pass.cpp",
120    "//third_party/spirv-tools/source/opt/dead_branch_elim_pass.h",
121    "//third_party/spirv-tools/source/opt/dead_insert_elim_pass.cpp",
122    "//third_party/spirv-tools/source/opt/dead_insert_elim_pass.h",
123    "//third_party/spirv-tools/source/opt/dead_variable_elimination.cpp",
124    "//third_party/spirv-tools/source/opt/dead_variable_elimination.h",
125    "//third_party/spirv-tools/source/opt/debug_info_manager.cpp",
126    "//third_party/spirv-tools/source/opt/debug_info_manager.h",
127    "//third_party/spirv-tools/source/opt/decoration_manager.cpp",
128    "//third_party/spirv-tools/source/opt/decoration_manager.h",
129    "//third_party/spirv-tools/source/opt/def_use_manager.cpp",
130    "//third_party/spirv-tools/source/opt/def_use_manager.h",
131    "//third_party/spirv-tools/source/opt/desc_sroa.cpp",
132    "//third_party/spirv-tools/source/opt/desc_sroa.h",
133    "//third_party/spirv-tools/source/opt/desc_sroa_util.cpp",
134    "//third_party/spirv-tools/source/opt/desc_sroa_util.h",
135    "//third_party/spirv-tools/source/opt/dominator_analysis.cpp",
136    "//third_party/spirv-tools/source/opt/dominator_analysis.h",
137    "//third_party/spirv-tools/source/opt/dominator_tree.cpp",
138    "//third_party/spirv-tools/source/opt/dominator_tree.h",
139    "//third_party/spirv-tools/source/opt/eliminate_dead_constant_pass.cpp",
140    "//third_party/spirv-tools/source/opt/eliminate_dead_constant_pass.h",
141    "//third_party/spirv-tools/source/opt/eliminate_dead_functions_pass.cpp",
142    "//third_party/spirv-tools/source/opt/eliminate_dead_functions_pass.h",
143    "//third_party/spirv-tools/source/opt/eliminate_dead_functions_util.cpp",
144    "//third_party/spirv-tools/source/opt/eliminate_dead_functions_util.h",
145    "//third_party/spirv-tools/source/opt/eliminate_dead_io_components_pass.cpp",
146    "//third_party/spirv-tools/source/opt/eliminate_dead_io_components_pass.h",
147    "//third_party/spirv-tools/source/opt/eliminate_dead_members_pass.cpp",
148    "//third_party/spirv-tools/source/opt/eliminate_dead_members_pass.h",
149    "//third_party/spirv-tools/source/opt/eliminate_dead_output_stores_pass.cpp",
150    "//third_party/spirv-tools/source/opt/eliminate_dead_output_stores_pass.h",
151    "//third_party/spirv-tools/source/opt/empty_pass.h",
152    "//third_party/spirv-tools/source/opt/feature_manager.cpp",
153    "//third_party/spirv-tools/source/opt/feature_manager.h",
154    "//third_party/spirv-tools/source/opt/fix_func_call_arguments.cpp",
155    "//third_party/spirv-tools/source/opt/fix_func_call_arguments.h",
156    "//third_party/spirv-tools/source/opt/fix_storage_class.cpp",
157    "//third_party/spirv-tools/source/opt/fix_storage_class.h",
158    "//third_party/spirv-tools/source/opt/flatten_decoration_pass.cpp",
159    "//third_party/spirv-tools/source/opt/flatten_decoration_pass.h",
160    "//third_party/spirv-tools/source/opt/fold.cpp",
161    "//third_party/spirv-tools/source/opt/fold.h",
162    "//third_party/spirv-tools/source/opt/fold_spec_constant_op_and_composite_pass.cpp",
163    "//third_party/spirv-tools/source/opt/fold_spec_constant_op_and_composite_pass.h",
164    "//third_party/spirv-tools/source/opt/folding_rules.cpp",
165    "//third_party/spirv-tools/source/opt/folding_rules.h",
166    "//third_party/spirv-tools/source/opt/freeze_spec_constant_value_pass.cpp",
167    "//third_party/spirv-tools/source/opt/freeze_spec_constant_value_pass.h",
168    "//third_party/spirv-tools/source/opt/function.cpp",
169    "//third_party/spirv-tools/source/opt/function.h",
170    "//third_party/spirv-tools/source/opt/graphics_robust_access_pass.cpp",
171    "//third_party/spirv-tools/source/opt/graphics_robust_access_pass.h",
172    "//third_party/spirv-tools/source/opt/if_conversion.cpp",
173    "//third_party/spirv-tools/source/opt/if_conversion.h",
174    "//third_party/spirv-tools/source/opt/inline_exhaustive_pass.cpp",
175    "//third_party/spirv-tools/source/opt/inline_exhaustive_pass.h",
176    "//third_party/spirv-tools/source/opt/inline_opaque_pass.cpp",
177    "//third_party/spirv-tools/source/opt/inline_opaque_pass.h",
178    "//third_party/spirv-tools/source/opt/inline_pass.cpp",
179    "//third_party/spirv-tools/source/opt/inline_pass.h",
180    "//third_party/spirv-tools/source/opt/inst_bindless_check_pass.cpp",
181    "//third_party/spirv-tools/source/opt/inst_bindless_check_pass.h",
182    "//third_party/spirv-tools/source/opt/inst_buff_addr_check_pass.cpp",
183    "//third_party/spirv-tools/source/opt/inst_buff_addr_check_pass.h",
184    "//third_party/spirv-tools/source/opt/inst_debug_printf_pass.cpp",
185    "//third_party/spirv-tools/source/opt/inst_debug_printf_pass.h",
186    "//third_party/spirv-tools/source/opt/instruction.cpp",
187    "//third_party/spirv-tools/source/opt/instruction.h",
188    "//third_party/spirv-tools/source/opt/instruction_list.cpp",
189    "//third_party/spirv-tools/source/opt/instruction_list.h",
190    "//third_party/spirv-tools/source/opt/instrument_pass.cpp",
191    "//third_party/spirv-tools/source/opt/instrument_pass.h",
192    "//third_party/spirv-tools/source/opt/interface_var_sroa.cpp",
193    "//third_party/spirv-tools/source/opt/interface_var_sroa.h",
194    "//third_party/spirv-tools/source/opt/interp_fixup_pass.cpp",
195    "//third_party/spirv-tools/source/opt/interp_fixup_pass.h",
196    "//third_party/spirv-tools/source/opt/invocation_interlock_placement_pass.cpp",
197    "//third_party/spirv-tools/source/opt/invocation_interlock_placement_pass.h",
198    "//third_party/spirv-tools/source/opt/ir_builder.h",
199    "//third_party/spirv-tools/source/opt/ir_context.cpp",
200    "//third_party/spirv-tools/source/opt/ir_context.h",
201    "//third_party/spirv-tools/source/opt/ir_loader.cpp",
202    "//third_party/spirv-tools/source/opt/ir_loader.h",
203    "//third_party/spirv-tools/source/opt/iterator.h",
204    "//third_party/spirv-tools/source/opt/licm_pass.cpp",
205    "//third_party/spirv-tools/source/opt/licm_pass.h",
206    "//third_party/spirv-tools/source/opt/liveness.cpp",
207    "//third_party/spirv-tools/source/opt/liveness.h",
208    "//third_party/spirv-tools/source/opt/local_access_chain_convert_pass.cpp",
209    "//third_party/spirv-tools/source/opt/local_access_chain_convert_pass.h",
210    "//third_party/spirv-tools/source/opt/local_redundancy_elimination.cpp",
211    "//third_party/spirv-tools/source/opt/local_redundancy_elimination.h",
212    "//third_party/spirv-tools/source/opt/local_single_block_elim_pass.cpp",
213    "//third_party/spirv-tools/source/opt/local_single_block_elim_pass.h",
214    "//third_party/spirv-tools/source/opt/local_single_store_elim_pass.cpp",
215    "//third_party/spirv-tools/source/opt/local_single_store_elim_pass.h",
216    "//third_party/spirv-tools/source/opt/log.h",
217    "//third_party/spirv-tools/source/opt/loop_dependence.cpp",
218    "//third_party/spirv-tools/source/opt/loop_dependence.h",
219    "//third_party/spirv-tools/source/opt/loop_dependence_helpers.cpp",
220    "//third_party/spirv-tools/source/opt/loop_descriptor.cpp",
221    "//third_party/spirv-tools/source/opt/loop_descriptor.h",
222    "//third_party/spirv-tools/source/opt/loop_fission.cpp",
223    "//third_party/spirv-tools/source/opt/loop_fission.h",
224    "//third_party/spirv-tools/source/opt/loop_fusion.cpp",
225    "//third_party/spirv-tools/source/opt/loop_fusion.h",
226    "//third_party/spirv-tools/source/opt/loop_fusion_pass.cpp",
227    "//third_party/spirv-tools/source/opt/loop_fusion_pass.h",
228    "//third_party/spirv-tools/source/opt/loop_peeling.cpp",
229    "//third_party/spirv-tools/source/opt/loop_peeling.h",
230    "//third_party/spirv-tools/source/opt/loop_unroller.cpp",
231    "//third_party/spirv-tools/source/opt/loop_unroller.h",
232    "//third_party/spirv-tools/source/opt/loop_unswitch_pass.cpp",
233    "//third_party/spirv-tools/source/opt/loop_unswitch_pass.h",
234    "//third_party/spirv-tools/source/opt/loop_utils.cpp",
235    "//third_party/spirv-tools/source/opt/loop_utils.h",
236    "//third_party/spirv-tools/source/opt/mem_pass.cpp",
237    "//third_party/spirv-tools/source/opt/mem_pass.h",
238    "//third_party/spirv-tools/source/opt/merge_return_pass.cpp",
239    "//third_party/spirv-tools/source/opt/merge_return_pass.h",
240    "//third_party/spirv-tools/source/opt/module.cpp",
241    "//third_party/spirv-tools/source/opt/module.h",
242    "//third_party/spirv-tools/source/opt/null_pass.h",
243    "//third_party/spirv-tools/source/opt/optimizer.cpp",
244    "//third_party/spirv-tools/source/opt/pass.cpp",
245    "//third_party/spirv-tools/source/opt/pass.h",
246    "//third_party/spirv-tools/source/opt/pass_manager.cpp",
247    "//third_party/spirv-tools/source/opt/pass_manager.h",
248    "//third_party/spirv-tools/source/opt/passes.h",
249    "//third_party/spirv-tools/source/opt/private_to_local_pass.cpp",
250    "//third_party/spirv-tools/source/opt/private_to_local_pass.h",
251    "//third_party/spirv-tools/source/opt/propagator.cpp",
252    "//third_party/spirv-tools/source/opt/propagator.h",
253    "//third_party/spirv-tools/source/opt/reduce_load_size.cpp",
254    "//third_party/spirv-tools/source/opt/reduce_load_size.h",
255    "//third_party/spirv-tools/source/opt/redundancy_elimination.cpp",
256    "//third_party/spirv-tools/source/opt/redundancy_elimination.h",
257    "//third_party/spirv-tools/source/opt/reflect.h",
258    "//third_party/spirv-tools/source/opt/register_pressure.cpp",
259    "//third_party/spirv-tools/source/opt/register_pressure.h",
260    "//third_party/spirv-tools/source/opt/relax_float_ops_pass.cpp",
261    "//third_party/spirv-tools/source/opt/relax_float_ops_pass.h",
262    "//third_party/spirv-tools/source/opt/remove_dontinline_pass.cpp",
263    "//third_party/spirv-tools/source/opt/remove_dontinline_pass.h",
264    "//third_party/spirv-tools/source/opt/remove_duplicates_pass.cpp",
265    "//third_party/spirv-tools/source/opt/remove_duplicates_pass.h",
266    "//third_party/spirv-tools/source/opt/remove_unused_interface_variables_pass.cpp",
267    "//third_party/spirv-tools/source/opt/remove_unused_interface_variables_pass.h",
268    "//third_party/spirv-tools/source/opt/replace_desc_array_access_using_var_index.cpp",
269    "//third_party/spirv-tools/source/opt/replace_desc_array_access_using_var_index.h",
270    "//third_party/spirv-tools/source/opt/replace_invalid_opc.cpp",
271    "//third_party/spirv-tools/source/opt/replace_invalid_opc.h",
272    "//third_party/spirv-tools/source/opt/scalar_analysis.cpp",
273    "//third_party/spirv-tools/source/opt/scalar_analysis.h",
274    "//third_party/spirv-tools/source/opt/scalar_analysis_nodes.h",
275    "//third_party/spirv-tools/source/opt/scalar_analysis_simplification.cpp",
276    "//third_party/spirv-tools/source/opt/scalar_replacement_pass.cpp",
277    "//third_party/spirv-tools/source/opt/scalar_replacement_pass.h",
278    "//third_party/spirv-tools/source/opt/set_spec_constant_default_value_pass.cpp",
279    "//third_party/spirv-tools/source/opt/set_spec_constant_default_value_pass.h",
280    "//third_party/spirv-tools/source/opt/simplification_pass.cpp",
281    "//third_party/spirv-tools/source/opt/simplification_pass.h",
282    "//third_party/spirv-tools/source/opt/spread_volatile_semantics.cpp",
283    "//third_party/spirv-tools/source/opt/spread_volatile_semantics.h",
284    "//third_party/spirv-tools/source/opt/ssa_rewrite_pass.cpp",
285    "//third_party/spirv-tools/source/opt/ssa_rewrite_pass.h",
286    "//third_party/spirv-tools/source/opt/strength_reduction_pass.cpp",
287    "//third_party/spirv-tools/source/opt/strength_reduction_pass.h",
288    "//third_party/spirv-tools/source/opt/strip_debug_info_pass.cpp",
289    "//third_party/spirv-tools/source/opt/strip_debug_info_pass.h",
290    "//third_party/spirv-tools/source/opt/strip_nonsemantic_info_pass.cpp",
291    "//third_party/spirv-tools/source/opt/strip_nonsemantic_info_pass.h",
292    "//third_party/spirv-tools/source/opt/struct_cfg_analysis.cpp",
293    "//third_party/spirv-tools/source/opt/struct_cfg_analysis.h",
294    "//third_party/spirv-tools/source/opt/switch_descriptorset_pass.cpp",
295    "//third_party/spirv-tools/source/opt/switch_descriptorset_pass.h",
296    "//third_party/spirv-tools/source/opt/tree_iterator.h",
297    "//third_party/spirv-tools/source/opt/trim_capabilities_pass.cpp",
298    "//third_party/spirv-tools/source/opt/trim_capabilities_pass.h",
299    "//third_party/spirv-tools/source/opt/type_manager.cpp",
300    "//third_party/spirv-tools/source/opt/type_manager.h",
301    "//third_party/spirv-tools/source/opt/types.cpp",
302    "//third_party/spirv-tools/source/opt/types.h",
303    "//third_party/spirv-tools/source/opt/unify_const_pass.cpp",
304    "//third_party/spirv-tools/source/opt/unify_const_pass.h",
305    "//third_party/spirv-tools/source/opt/upgrade_memory_model.cpp",
306    "//third_party/spirv-tools/source/opt/upgrade_memory_model.h",
307    "//third_party/spirv-tools/source/opt/value_number_table.cpp",
308    "//third_party/spirv-tools/source/opt/value_number_table.h",
309    "//third_party/spirv-tools/source/opt/vector_dce.cpp",
310    "//third_party/spirv-tools/source/opt/vector_dce.h",
311    "//third_party/spirv-tools/source/opt/workaround1209.cpp",
312    "//third_party/spirv-tools/source/opt/workaround1209.h",
313    "//third_party/spirv-tools/source/opt/wrap_opkill.cpp",
314    "//third_party/spirv-tools/source/opt/wrap_opkill.h",
315    "//third_party/spirv-tools/source/util/timer.cpp",
316    "//third_party/spirv-tools/source/util/timer.h",
317  ]
318
319  include_dirs = deqp_common_include_dirs
320  include_dirs += [
321    "//third_party/spirv-tools",
322    "//third_party/vk-gl-cts/build/external/spirv-tools/spirv-tools",
323    "//third_party/spirv-headers/include",
324    "//third_party/spirv-headers/include/spirv/unified1",
325    "//third_party/spirv-tools/include",
326    "//third_party/spirv-tools/source/opt",
327    "//third_party/spirv-tools/source/util",
328  ]
329
330  if (build_with_chromium) {
331    configs -= [ "//build/config/compiler:chromium_code" ]
332    configs += [ "//build/config/compiler:no_chromium_code" ]
333  }
334
335  configs = [ ":deqp_spirvtool_opt_config" ]
336  configs += [ ":spv_headers_public_config" ]
337  configs += [ ":spvtools_internal_config" ]
338}
339
340ohos_static_library("libdeqp_spirvtools-opt") {
341  deps = [
342    ":deqp_spirvtool_opt_source",
343    "//third_party/spirv-tools:libdeqp_spirvtools",
344  ]
345  part_name = "graphic_2d"
346  subsystem_name = "graphic"
347}
348