• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2020 The Tint Authors.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#     http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15function(tint_spvtools_compile_options TARGET)
16  # We'll use the optimizer for its nice SPIR-V in-memory representation
17  target_link_libraries(${TARGET} SPIRV-Tools-opt SPIRV-Tools)
18
19  # We'll be cheating: using internal interfaces to the SPIRV-Tools
20  # optimizer.
21  target_include_directories(${TARGET} PRIVATE
22    ${spirv-tools_SOURCE_DIR}
23    ${spirv-tools_BINARY_DIR}
24  )
25
26  if (${CMAKE_CXX_COMPILER_ID} MATCHES Clang)
27    # The SPIRV-Tools code is conditioned against C++ and an older version of Clang.
28    # Suppress warnings triggered in our current compilation environment.
29    # TODO(dneto): Fix the issues upstream.
30    target_compile_options(${TARGET} PRIVATE
31      -Wno-newline-eof
32      -Wno-sign-conversion
33      -Wno-old-style-cast
34      -Wno-weak-vtables
35    )
36  endif()
37endfunction()
38
39set(TINT_LIB_SRCS
40  ../include/tint/tint.h
41  ast/access.cc
42  ast/access.h
43  ast/alias.cc
44  ast/alias.h
45  ast/index_accessor_expression.cc
46  ast/index_accessor_expression.h
47  ast/array.cc
48  ast/array.h
49  ast/assignment_statement.cc
50  ast/assignment_statement.h
51  ast/atomic.cc
52  ast/atomic.h
53  ast/binary_expression.cc
54  ast/binary_expression.h
55  ast/binding_decoration.cc
56  ast/binding_decoration.h
57  ast/bitcast_expression.cc
58  ast/bitcast_expression.h
59  ast/block_statement.cc
60  ast/block_statement.h
61  ast/bool_literal_expression.cc
62  ast/bool_literal_expression.h
63  ast/bool.cc
64  ast/bool.h
65  ast/break_statement.cc
66  ast/break_statement.h
67  ast/builtin_decoration.cc
68  ast/builtin_decoration.h
69  ast/builtin.cc
70  ast/builtin.h
71  ast/call_expression.cc
72  ast/call_expression.h
73  ast/call_statement.cc
74  ast/call_statement.h
75  ast/case_statement.cc
76  ast/case_statement.h
77  ast/continue_statement.cc
78  ast/continue_statement.h
79  ast/decoration.cc
80  ast/decoration.h
81  ast/depth_multisampled_texture.cc
82  ast/depth_multisampled_texture.h
83  ast/disable_validation_decoration.cc
84  ast/disable_validation_decoration.h
85  ast/depth_texture.cc
86  ast/depth_texture.h
87  ast/discard_statement.cc
88  ast/discard_statement.h
89  ast/else_statement.cc
90  ast/else_statement.h
91  ast/expression.cc
92  ast/expression.h
93  ast/external_texture.cc
94  ast/external_texture.h
95  ast/f32.cc
96  ast/f32.h
97  ast/fallthrough_statement.cc
98  ast/fallthrough_statement.h
99  ast/float_literal_expression.cc
100  ast/float_literal_expression.h
101  ast/for_loop_statement.cc
102  ast/for_loop_statement.h
103  ast/function.cc
104  ast/function.h
105  ast/group_decoration.cc
106  ast/group_decoration.h
107  ast/i32.cc
108  ast/i32.h
109  ast/identifier_expression.cc
110  ast/identifier_expression.h
111  ast/if_statement.cc
112  ast/if_statement.h
113  ast/int_literal_expression.cc
114  ast/int_literal_expression.h
115  ast/internal_decoration.cc
116  ast/internal_decoration.h
117  ast/interpolate_decoration.cc
118  ast/interpolate_decoration.h
119  ast/invariant_decoration.cc
120  ast/invariant_decoration.h
121  ast/literal_expression.cc
122  ast/literal_expression.h
123  ast/location_decoration.cc
124  ast/location_decoration.h
125  ast/loop_statement.cc
126  ast/loop_statement.h
127  ast/matrix.cc
128  ast/matrix.h
129  ast/member_accessor_expression.cc
130  ast/member_accessor_expression.h
131  ast/module.cc
132  ast/module.h
133  ast/multisampled_texture.cc
134  ast/multisampled_texture.h
135  ast/node.cc
136  ast/node.h
137  ast/override_decoration.cc
138  ast/override_decoration.h
139  ast/phony_expression.cc
140  ast/phony_expression.h
141  ast/pipeline_stage.cc
142  ast/pipeline_stage.h
143  ast/pointer.cc
144  ast/pointer.h
145  ast/return_statement.cc
146  ast/return_statement.h
147  ast/sampled_texture.cc
148  ast/sampled_texture.h
149  ast/sampler.cc
150  ast/sampler.h
151  ast/sint_literal_expression.cc
152  ast/sint_literal_expression.h
153  ast/stage_decoration.cc
154  ast/stage_decoration.h
155  ast/statement.cc
156  ast/statement.h
157  ast/storage_class.cc
158  ast/storage_class.h
159  ast/storage_texture.cc
160  ast/storage_texture.h
161  ast/stride_decoration.cc
162  ast/stride_decoration.h
163  ast/struct_block_decoration.cc
164  ast/struct_block_decoration.h
165  ast/struct_member_align_decoration.cc
166  ast/struct_member_align_decoration.h
167  ast/struct_member_offset_decoration.cc
168  ast/struct_member_offset_decoration.h
169  ast/struct_member_size_decoration.cc
170  ast/struct_member_size_decoration.h
171  ast/struct_member.cc
172  ast/struct_member.h
173  ast/struct.cc
174  ast/struct.h
175  ast/switch_statement.cc
176  ast/switch_statement.h
177  ast/texture.cc
178  ast/texture.h
179  ast/traverse_expressions.h
180  ast/type_name.cc
181  ast/type_name.h
182  ast/ast_type.cc  # TODO(bclayton) - rename to type.cc
183  ast/type.h
184  ast/type_decl.cc
185  ast/type_decl.h
186  ast/type_name.cc
187  ast/type_name.h
188  ast/u32.cc
189  ast/u32.h
190  ast/uint_literal_expression.cc
191  ast/uint_literal_expression.h
192  ast/unary_op_expression.cc
193  ast/unary_op_expression.h
194  ast/unary_op.cc
195  ast/unary_op.h
196  ast/variable_decl_statement.cc
197  ast/variable_decl_statement.h
198  ast/variable.cc
199  ast/variable.h
200  ast/vector.cc
201  ast/vector.h
202  ast/void.cc
203  ast/void.h
204  ast/workgroup_decoration.cc
205  ast/workgroup_decoration.h
206  block_allocator.h
207  castable.cc
208  castable.h
209  clone_context.cc
210  clone_context.h
211  debug.cc
212  debug.h
213  demangler.cc
214  demangler.h
215  diagnostic/diagnostic.cc
216  diagnostic/diagnostic.h
217  diagnostic/formatter.cc
218  diagnostic/formatter.h
219  diagnostic/printer.cc
220  diagnostic/printer.h
221  inspector/entry_point.cc
222  inspector/entry_point.h
223  inspector/inspector.cc
224  inspector/inspector.h
225  inspector/resource_binding.cc
226  inspector/resource_binding.h
227  inspector/sampler_texture_pair.h
228  inspector/scalar.cc
229  inspector/scalar.h
230  intrinsic_table.cc
231  intrinsic_table.h
232  intrinsic_table.inl
233  program_builder.cc
234  program_builder.h
235  program_id.cc
236  program_id.h
237  program.cc
238  program.h
239  reader/reader.cc
240  reader/reader.h
241  resolver/dependency_graph.cc
242  resolver/dependency_graph.h
243  resolver/resolver.cc
244  resolver/resolver_constants.cc
245  resolver/resolver_validation.cc
246  resolver/resolver.h
247  scope_stack.h
248  sem/array.cc
249  sem/array.h
250  sem/atomic_type.cc
251  sem/atomic_type.h
252  sem/behavior.cc
253  sem/behavior.h
254  sem/binding_point.h
255  sem/block_statement.cc
256  sem/block_statement.h
257  sem/call_target.cc
258  sem/call_target.h
259  sem/call.cc
260  sem/call.h
261  sem/constant.cc
262  sem/constant.h
263  sem/depth_multisampled_texture_type.cc
264  sem/depth_multisampled_texture_type.h
265  sem/expression.cc
266  sem/expression.h
267  sem/function.cc
268  sem/info.cc
269  sem/info.h
270  sem/intrinsic_type.cc
271  sem/intrinsic_type.h
272  sem/intrinsic.cc
273  sem/intrinsic.h
274  sem/member_accessor_expression.cc
275  sem/parameter_usage.cc
276  sem/parameter_usage.h
277  sem/pipeline_stage_set.h
278  sem/node.cc
279  sem/node.h
280  sem/statement.cc
281  sem/struct.cc
282  sem/type_mappings.h
283  sem/variable.cc
284  source.cc
285  source.h
286  symbol_table.cc
287  symbol_table.h
288  symbol.cc
289  symbol.h
290  traits.h
291  transform/add_empty_entry_point.cc
292  transform/add_empty_entry_point.h
293  transform/array_length_from_uniform.cc
294  transform/array_length_from_uniform.h
295  transform/binding_remapper.cc
296  transform/binding_remapper.h
297  transform/calculate_array_length.cc
298  transform/calculate_array_length.h
299  transform/canonicalize_entry_point_io.cc
300  transform/canonicalize_entry_point_io.h
301  transform/decompose_memory_access.cc
302  transform/decompose_memory_access.h
303  transform/decompose_strided_matrix.cc
304  transform/decompose_strided_matrix.h
305  transform/external_texture_transform.cc
306  transform/external_texture_transform.h
307  transform/first_index_offset.cc
308  transform/first_index_offset.h
309  transform/fold_constants.cc
310  transform/fold_constants.h
311  transform/fold_trivial_single_use_lets.cc
312  transform/fold_trivial_single_use_lets.h
313  transform/for_loop_to_loop.cc
314  transform/for_loop_to_loop.h
315  transform/glsl.cc
316  transform/glsl.h
317  transform/loop_to_for_loop.cc
318  transform/loop_to_for_loop.h
319  transform/manager.cc
320  transform/manager.h
321  transform/module_scope_var_to_entry_point_param.cc
322  transform/module_scope_var_to_entry_point_param.h
323  transform/multiplanar_external_texture.cc
324  transform/multiplanar_external_texture.h
325  transform/num_workgroups_from_uniform.cc
326  transform/num_workgroups_from_uniform.h
327  transform/pad_array_elements.cc
328  transform/pad_array_elements.h
329  transform/promote_initializers_to_const_var.cc
330  transform/promote_initializers_to_const_var.h
331  transform/remove_phonies.cc
332  transform/remove_phonies.h
333  transform/remove_unreachable_statements.cc
334  transform/remove_unreachable_statements.h
335  transform/renamer.cc
336  transform/renamer.h
337  transform/robustness.cc
338  transform/robustness.h
339  transform/simplify_pointers.cc
340  transform/simplify_pointers.h
341  transform/single_entry_point.cc
342  transform/single_entry_point.h
343  transform/transform.cc
344  transform/transform.h
345  transform/unshadow.cc
346  transform/unshadow.h
347  transform/vectorize_scalar_matrix_constructors.cc
348  transform/vectorize_scalar_matrix_constructors.h
349  transform/vertex_pulling.cc
350  transform/vertex_pulling.h
351  transform/wrap_arrays_in_structs.cc
352  transform/wrap_arrays_in_structs.h
353  transform/zero_init_workgroup_memory.cc
354  transform/zero_init_workgroup_memory.h
355  sem/bool_type.cc
356  sem/bool_type.h
357  sem/depth_texture_type.cc
358  sem/depth_texture_type.h
359  sem/external_texture_type.cc
360  sem/external_texture_type.h
361  sem/f32_type.cc
362  sem/f32_type.h
363  sem/for_loop_statement.cc
364  sem/for_loop_statement.h
365  sem/i32_type.cc
366  sem/i32_type.h
367  sem/if_statement.cc
368  sem/if_statement.h
369  sem/loop_statement.cc
370  sem/loop_statement.h
371  sem/matrix_type.cc
372  sem/matrix_type.h
373  sem/multisampled_texture_type.cc
374  sem/multisampled_texture_type.h
375  sem/pointer_type.cc
376  sem/pointer_type.h
377  sem/reference_type.cc
378  sem/reference_type.h
379  sem/sampled_texture_type.cc
380  sem/sampled_texture_type.h
381  sem/sampler_type.cc
382  sem/sampler_type.h
383  sem/storage_texture_type.cc
384  sem/storage_texture_type.h
385  sem/switch_statement.cc
386  sem/switch_statement.h
387  sem/texture_type.cc
388  sem/texture_type.h
389  sem/type_constructor.cc
390  sem/type_constructor.h
391  sem/type_conversion.cc
392  sem/type_conversion.h
393  sem/type.cc
394  sem/type.h
395  sem/type_manager.cc
396  sem/type_manager.h
397  sem/u32_type.cc
398  sem/u32_type.h
399  sem/vector_type.cc
400  sem/vector_type.h
401  sem/void_type.cc
402  sem/void_type.h
403  utils/enum_set.h
404  utils/hash.h
405  utils/map.h
406  utils/math.h
407  utils/scoped_assignment.h
408  utils/string.h
409  utils/unique_vector.h
410  writer/append_vector.cc
411  writer/append_vector.h
412  writer/array_length_from_uniform_options.cc
413  writer/array_length_from_uniform_options.h
414  writer/float_to_string.cc
415  writer/float_to_string.h
416  writer/text_generator.cc
417  writer/text_generator.h
418  writer/text.cc
419  writer/text.h
420  writer/writer.cc
421  writer/writer.h
422)
423
424if(UNIX)
425  list(APPEND TINT_LIB_SRCS diagnostic/printer_linux.cc)
426elseif(WIN32)
427  list(APPEND TINT_LIB_SRCS diagnostic/printer_windows.cc)
428else()
429  list(APPEND TINT_LIB_SRCS diagnostic/printer_other.cc)
430endif()
431
432if(${TINT_BUILD_SPV_READER})
433  list(APPEND TINT_LIB_SRCS
434    reader/spirv/construct.h
435    reader/spirv/construct.cc
436    reader/spirv/entry_point_info.h
437    reader/spirv/entry_point_info.cc
438    reader/spirv/enum_converter.h
439    reader/spirv/enum_converter.cc
440    reader/spirv/fail_stream.h
441    reader/spirv/function.cc
442    reader/spirv/function.h
443    reader/spirv/namer.cc
444    reader/spirv/namer.h
445    reader/spirv/parser_type.cc
446    reader/spirv/parser_type.h
447    reader/spirv/parser.cc
448    reader/spirv/parser.h
449    reader/spirv/parser_impl.cc
450    reader/spirv/parser_impl.h
451    reader/spirv/usage.cc
452    reader/spirv/usage.h
453  )
454endif()
455
456if(${TINT_BUILD_WGSL_READER})
457  list(APPEND TINT_LIB_SRCS
458    reader/wgsl/lexer.cc
459    reader/wgsl/lexer.h
460    reader/wgsl/parser.cc
461    reader/wgsl/parser.h
462    reader/wgsl/parser_impl.cc
463    reader/wgsl/parser_impl.h
464    reader/wgsl/parser_impl_detail.h
465    reader/wgsl/token.cc
466    reader/wgsl/token.h
467  )
468endif()
469
470if(${TINT_BUILD_SPV_WRITER})
471  list(APPEND TINT_LIB_SRCS
472    writer/spirv/binary_writer.cc
473    writer/spirv/binary_writer.h
474    writer/spirv/builder.cc
475    writer/spirv/builder.h
476    writer/spirv/function.cc
477    writer/spirv/function.h
478    writer/spirv/generator.cc
479    writer/spirv/generator.h
480    writer/spirv/instruction.cc
481    writer/spirv/instruction.h
482    writer/spirv/operand.cc
483    writer/spirv/operand.h
484    writer/spirv/scalar_constant.h
485  )
486endif()
487
488if(${TINT_BUILD_WGSL_WRITER})
489  list(APPEND TINT_LIB_SRCS
490    writer/wgsl/generator.cc
491    writer/wgsl/generator.h
492    writer/wgsl/generator_impl.cc
493    writer/wgsl/generator_impl.h
494  )
495endif()
496
497if(${TINT_BUILD_MSL_WRITER})
498  list(APPEND TINT_LIB_SRCS
499    writer/msl/generator.cc
500    writer/msl/generator.h
501    writer/msl/generator_impl.cc
502    writer/msl/generator_impl.h
503  )
504endif()
505
506if(${TINT_BUILD_GLSL_WRITER})
507  list(APPEND TINT_LIB_SRCS
508    writer/glsl/generator.cc
509    writer/glsl/generator.h
510    writer/glsl/generator_impl.cc
511    writer/glsl/generator_impl.h
512  )
513endif()
514
515if(${TINT_BUILD_HLSL_WRITER})
516  list(APPEND TINT_LIB_SRCS
517    writer/hlsl/generator.cc
518    writer/hlsl/generator.h
519    writer/hlsl/generator_impl.cc
520    writer/hlsl/generator_impl.h
521  )
522endif()
523
524## Tint IO utilities. Used by tint_val.
525add_library(tint_utils_io
526  utils/io/command_${TINT_OS_CC_SUFFIX}.cc
527  utils/io/command.h
528  utils/io/tmpfile_${TINT_OS_CC_SUFFIX}.cc
529  utils/io/tmpfile.h
530)
531tint_default_compile_options(tint_utils_io)
532
533## Tint validation utilities. Used by tests and the tint executable.
534add_library(tint_val
535  val/hlsl.cc
536  val/msl.cc
537  val/val.h
538)
539
540# If we're building on mac / ios and we have CoreGraphics, then we can use the
541# metal API to validate our shaders. This is roughly 4x faster than invoking
542# the metal shader compiler executable.
543if(APPLE)
544  find_library(LIB_CORE_GRAPHICS CoreGraphics)
545  if(LIB_CORE_GRAPHICS)
546    target_sources(tint_val PRIVATE "val/msl_metal.mm")
547    target_compile_definitions(tint_val PUBLIC "-DTINT_ENABLE_MSL_VALIDATION_USING_METAL_API=1")
548    target_compile_options(tint_val PRIVATE "-fmodules" "-fcxx-modules")
549    target_link_options(tint_val PUBLIC "-framework" "CoreGraphics")
550  endif()
551endif()
552
553tint_default_compile_options(tint_val)
554target_link_libraries(tint_val tint_utils_io)
555
556## Tint library
557add_library(libtint ${TINT_LIB_SRCS})
558tint_default_compile_options(libtint)
559if (${COMPILER_IS_LIKE_GNU})
560  target_compile_options(libtint PRIVATE -fvisibility=hidden)
561endif()
562if (${TINT_SYMBOL_STORE_DEBUG_NAME})
563    target_compile_definitions(libtint PUBLIC "TINT_SYMBOL_STORE_DEBUG_NAME=1")
564endif()
565set_target_properties(libtint PROPERTIES OUTPUT_NAME "tint")
566
567if (${TINT_BUILD_FUZZERS})
568  # Tint library with fuzzer instrumentation
569  add_library(libtint-fuzz ${TINT_LIB_SRCS})
570  tint_default_compile_options(libtint-fuzz)
571  if (${COMPILER_IS_LIKE_GNU})
572    target_compile_options(libtint-fuzz PRIVATE -fvisibility=hidden)
573  endif()
574
575  if (NOT ${TINT_LIB_FUZZING_ENGINE_LINK_OPTIONS} STREQUAL "")
576    # This is set when the fuzzers are being built by OSS-Fuzz. In this case the
577    # variable provides the necessary linker flags, and OSS-Fuzz will take care
578    # of passing suitable compiler flags.
579    target_link_options(libtint-fuzz PUBLIC ${TINT_LIB_FUZZING_ENGINE_LINK_OPTIONS})
580  else()
581    # When the fuzzers are being built outside of OSS-Fuzz, specific libFuzzer
582    # arguments to enable fuzzing are used.
583    target_compile_options(libtint-fuzz PUBLIC -fsanitize=fuzzer -fsanitize-coverage=trace-cmp)
584    target_link_options(libtint-fuzz PUBLIC -fsanitize=fuzzer -fsanitize-coverage=trace-cmp)
585  endif()
586endif()
587
588if(${TINT_BUILD_SPV_READER} OR ${TINT_BUILD_SPV_WRITER})
589  tint_spvtools_compile_options(libtint)
590  if (${TINT_BUILD_FUZZERS})
591    tint_spvtools_compile_options(libtint-fuzz)
592  endif()
593endif()
594
595if(${TINT_BUILD_TESTS})
596  set(TINT_TEST_SRCS
597    ast/alias_test.cc
598    ast/array_test.cc
599    ast/assignment_statement_test.cc
600    ast/atomic_test.cc
601    ast/binary_expression_test.cc
602    ast/binding_decoration_test.cc
603    ast/bitcast_expression_test.cc
604    ast/block_statement_test.cc
605    ast/bool_literal_expression_test.cc
606    ast/bool_test.cc
607    ast/break_statement_test.cc
608    ast/builtin_decoration_test.cc
609    ast/call_expression_test.cc
610    ast/call_statement_test.cc
611    ast/case_statement_test.cc
612    ast/continue_statement_test.cc
613    ast/depth_multisampled_texture_test.cc
614    ast/depth_texture_test.cc
615    ast/discard_statement_test.cc
616    ast/else_statement_test.cc
617    ast/external_texture_test.cc
618    ast/f32_test.cc
619    ast/fallthrough_statement_test.cc
620    ast/float_literal_expression_test.cc
621    ast/for_loop_statement_test.cc
622    ast/function_test.cc
623    ast/group_decoration_test.cc
624    ast/i32_test.cc
625    ast/identifier_expression_test.cc
626    ast/if_statement_test.cc
627    ast/index_accessor_expression_test.cc
628    ast/int_literal_expression_test.cc
629    ast/interpolate_decoration_test.cc
630    ast/intrinsic_texture_helper_test.cc
631    ast/intrinsic_texture_helper_test.h
632    ast/invariant_decoration_test.cc
633    ast/location_decoration_test.cc
634    ast/loop_statement_test.cc
635    ast/matrix_test.cc
636    ast/member_accessor_expression_test.cc
637    ast/module_clone_test.cc
638    ast/module_test.cc
639    ast/multisampled_texture_test.cc
640    ast/override_decoration_test.cc
641    ast/phony_expression_test.cc
642    ast/pointer_test.cc
643    ast/return_statement_test.cc
644    ast/sampled_texture_test.cc
645    ast/sampler_test.cc
646    ast/sint_literal_expression_test.cc
647    ast/stage_decoration_test.cc
648    ast/storage_texture_test.cc
649    ast/stride_decoration_test.cc
650    ast/struct_member_align_decoration_test.cc
651    ast/struct_member_offset_decoration_test.cc
652    ast/struct_member_size_decoration_test.cc
653    ast/struct_member_test.cc
654    ast/struct_test.cc
655    ast/switch_statement_test.cc
656    ast/test_helper.h
657    ast/texture_test.cc
658    ast/traverse_expressions_test.cc
659    ast/u32_test.cc
660    ast/uint_literal_expression_test.cc
661    ast/unary_op_expression_test.cc
662    ast/variable_decl_statement_test.cc
663    ast/variable_test.cc
664    ast/vector_test.cc
665    ast/workgroup_decoration_test.cc
666    block_allocator_test.cc
667    castable_test.cc
668    clone_context_test.cc
669    debug_test.cc
670    demangler_test.cc
671    diagnostic/formatter_test.cc
672    diagnostic/printer_test.cc
673    intrinsic_table_test.cc
674    program_test.cc
675    resolver/array_accessor_test.cc
676    resolver/assignment_validation_test.cc
677    resolver/atomics_test.cc
678    resolver/atomics_validation_test.cc
679    resolver/bitcast_validation_test.cc
680    resolver/builtins_validation_test.cc
681    resolver/call_test.cc
682    resolver/call_validation_test.cc
683    resolver/compound_statement_test.cc
684    resolver/control_block_validation_test.cc
685    resolver/decoration_validation_test.cc
686    resolver/dependency_graph_test.cc
687    resolver/entry_point_validation_test.cc
688    resolver/function_validation_test.cc
689    resolver/host_shareable_validation_test.cc
690    resolver/inferred_type_test.cc
691    resolver/intrinsic_test.cc
692    resolver/intrinsic_validation_test.cc
693    resolver/is_host_shareable_test.cc
694    resolver/is_storeable_test.cc
695    resolver/pipeline_overridable_constant_test.cc
696    resolver/ptr_ref_test.cc
697    resolver/ptr_ref_validation_test.cc
698    resolver/resolver_behavior_test.cc
699    resolver/resolver_constants_test.cc
700    resolver/resolver_test_helper.cc
701    resolver/resolver_test_helper.h
702    resolver/resolver_test.cc
703    resolver/storage_class_layout_validation_test.cc
704    resolver/storage_class_validation_test.cc
705    resolver/struct_layout_test.cc
706    resolver/struct_pipeline_stage_use_test.cc
707    resolver/struct_storage_class_use_test.cc
708    resolver/type_constructor_validation_test.cc
709    resolver/type_validation_test.cc
710    resolver/validation_test.cc
711    resolver/var_let_test.cc
712    resolver/var_let_validation_test.cc
713    scope_stack_test.cc
714    sem/atomic_type_test.cc
715    sem/bool_type_test.cc
716    sem/depth_multisampled_texture_type_test.cc
717    sem/depth_texture_type_test.cc
718    sem/external_texture_type_test.cc
719    sem/f32_type_test.cc
720    sem/i32_type_test.cc
721    sem/intrinsic_test.cc
722    sem/matrix_type_test.cc
723    sem/multisampled_texture_type_test.cc
724    sem/pointer_type_test.cc
725    sem/reference_type_test.cc
726    sem/sampled_texture_type_test.cc
727    sem/sampler_type_test.cc
728    sem/sem_array_test.cc
729    sem/sem_struct_test.cc
730    sem/storage_texture_type_test.cc
731    sem/texture_type_test.cc
732    sem/type_manager_test.cc
733    sem/u32_type_test.cc
734    sem/vector_type_test.cc
735    symbol_table_test.cc
736    symbol_test.cc
737    test_main.cc
738    traits_test.cc
739    transform/transform_test.cc
740    utils/defer_test.cc
741    utils/enum_set_test.cc
742    utils/hash_test.cc
743    utils/io/command_test.cc
744    utils/io/tmpfile_test.cc
745    utils/map_test.cc
746    utils/math_test.cc
747    utils/reverse_test.cc
748    utils/scoped_assignment_test.cc
749    utils/string_test.cc
750    utils/transform_test.cc
751    utils/unique_vector_test.cc
752    writer/append_vector_test.cc
753    writer/float_to_string_test.cc
754    writer/text_generator_test.cc
755  )
756
757  # Inspector tests depend on WGSL reader
758  if(${TINT_BUILD_WGSL_READER})
759    list(APPEND TINT_TEST_SRCS
760      inspector/inspector_test.cc
761      inspector/test_inspector_builder.cc
762      inspector/test_inspector_builder.h
763      inspector/test_inspector_runner.cc
764      inspector/test_inspector_runner.h
765    )
766  endif()
767
768  if(${TINT_BUILD_SPV_READER} AND ${TINT_BUILD_WGSL_WRITER})
769    list(APPEND TINT_TEST_SRCS
770      reader/spirv/enum_converter_test.cc
771      reader/spirv/fail_stream_test.cc
772      reader/spirv/function_arithmetic_test.cc
773      reader/spirv/function_bit_test.cc
774      reader/spirv/function_cfg_test.cc
775      reader/spirv/function_call_test.cc
776      reader/spirv/function_composite_test.cc
777      reader/spirv/function_conversion_test.cc
778      reader/spirv/function_decl_test.cc
779      reader/spirv/function_glsl_std_450_test.cc
780      reader/spirv/function_logical_test.cc
781      reader/spirv/function_memory_test.cc
782      reader/spirv/function_misc_test.cc
783      reader/spirv/function_var_test.cc
784      reader/spirv/namer_test.cc
785      reader/spirv/parser_impl_barrier_test.cc
786      reader/spirv/parser_impl_convert_member_decoration_test.cc
787      reader/spirv/parser_impl_convert_type_test.cc
788      reader/spirv/parser_impl_function_decl_test.cc
789      reader/spirv/parser_impl_get_decorations_test.cc
790      reader/spirv/parser_impl_handle_test.cc
791      reader/spirv/parser_impl_import_test.cc
792      reader/spirv/parser_impl_module_var_test.cc
793      reader/spirv/parser_impl_named_types_test.cc
794      reader/spirv/parser_impl_test_helper.cc
795      reader/spirv/parser_impl_test_helper.h
796      reader/spirv/parser_impl_test.cc
797      reader/spirv/parser_impl_user_name_test.cc
798      reader/spirv/parser_type_test.cc
799      reader/spirv/parser_test.cc
800      reader/spirv/spirv_tools_helpers_test.cc
801      reader/spirv/spirv_tools_helpers_test.h
802      reader/spirv/usage_test.cc
803    )
804  endif()
805
806  if(${TINT_BUILD_WGSL_READER})
807    list(APPEND TINT_TEST_SRCS
808      reader/wgsl/lexer_test.cc
809      reader/wgsl/parser_test.cc
810      reader/wgsl/parser_impl_additive_expression_test.cc
811      reader/wgsl/parser_impl_and_expression_test.cc
812      reader/wgsl/parser_impl_argument_expression_list_test.cc
813      reader/wgsl/parser_impl_assignment_stmt_test.cc
814      reader/wgsl/parser_impl_body_stmt_test.cc
815      reader/wgsl/parser_impl_break_stmt_test.cc
816      reader/wgsl/parser_impl_bug_cases_test.cc
817      reader/wgsl/parser_impl_call_stmt_test.cc
818      reader/wgsl/parser_impl_case_body_test.cc
819      reader/wgsl/parser_impl_const_expr_test.cc
820      reader/wgsl/parser_impl_const_literal_test.cc
821      reader/wgsl/parser_impl_continue_stmt_test.cc
822      reader/wgsl/parser_impl_continuing_stmt_test.cc
823      reader/wgsl/parser_impl_depth_texture_type_test.cc
824      reader/wgsl/parser_impl_external_texture_type_test.cc
825      reader/wgsl/parser_impl_else_stmt_test.cc
826      reader/wgsl/parser_impl_elseif_stmt_test.cc
827      reader/wgsl/parser_impl_equality_expression_test.cc
828      reader/wgsl/parser_impl_error_msg_test.cc
829      reader/wgsl/parser_impl_error_resync_test.cc
830      reader/wgsl/parser_impl_exclusive_or_expression_test.cc
831      reader/wgsl/parser_impl_for_stmt_test.cc
832      reader/wgsl/parser_impl_function_decl_test.cc
833      reader/wgsl/parser_impl_function_decoration_list_test.cc
834      reader/wgsl/parser_impl_function_decoration_test.cc
835      reader/wgsl/parser_impl_function_header_test.cc
836      reader/wgsl/parser_impl_global_constant_decl_test.cc
837      reader/wgsl/parser_impl_global_decl_test.cc
838      reader/wgsl/parser_impl_global_variable_decl_test.cc
839      reader/wgsl/parser_impl_if_stmt_test.cc
840      reader/wgsl/parser_impl_image_storage_type_test.cc
841      reader/wgsl/parser_impl_inclusive_or_expression_test.cc
842      reader/wgsl/parser_impl_logical_and_expression_test.cc
843      reader/wgsl/parser_impl_logical_or_expression_test.cc
844      reader/wgsl/parser_impl_loop_stmt_test.cc
845      reader/wgsl/parser_impl_multiplicative_expression_test.cc
846      reader/wgsl/parser_impl_param_list_test.cc
847      reader/wgsl/parser_impl_paren_rhs_stmt_test.cc
848      reader/wgsl/parser_impl_pipeline_stage_test.cc
849      reader/wgsl/parser_impl_primary_expression_test.cc
850      reader/wgsl/parser_impl_relational_expression_test.cc
851      reader/wgsl/parser_impl_reserved_keyword_test.cc
852      reader/wgsl/parser_impl_sampled_texture_type_test.cc
853      reader/wgsl/parser_impl_sampler_type_test.cc
854      reader/wgsl/parser_impl_shift_expression_test.cc
855      reader/wgsl/parser_impl_singular_expression_test.cc
856      reader/wgsl/parser_impl_statement_test.cc
857      reader/wgsl/parser_impl_statements_test.cc
858      reader/wgsl/parser_impl_storage_class_test.cc
859      reader/wgsl/parser_impl_storage_texture_type_test.cc
860      reader/wgsl/parser_impl_struct_body_decl_test.cc
861      reader/wgsl/parser_impl_struct_decl_test.cc
862      reader/wgsl/parser_impl_struct_decoration_decl_test.cc
863      reader/wgsl/parser_impl_struct_decoration_test.cc
864      reader/wgsl/parser_impl_struct_member_decoration_decl_test.cc
865      reader/wgsl/parser_impl_struct_member_decoration_test.cc
866      reader/wgsl/parser_impl_struct_member_test.cc
867      reader/wgsl/parser_impl_switch_body_test.cc
868      reader/wgsl/parser_impl_switch_stmt_test.cc
869      reader/wgsl/parser_impl_test.cc
870      reader/wgsl/parser_impl_test_helper.cc
871      reader/wgsl/parser_impl_test_helper.h
872      reader/wgsl/parser_impl_texture_sampler_types_test.cc
873      reader/wgsl/parser_impl_type_alias_test.cc
874      reader/wgsl/parser_impl_type_decl_test.cc
875      reader/wgsl/parser_impl_unary_expression_test.cc
876      reader/wgsl/parser_impl_variable_decl_test.cc
877      reader/wgsl/parser_impl_variable_decoration_list_test.cc
878      reader/wgsl/parser_impl_variable_decoration_test.cc
879      reader/wgsl/parser_impl_variable_ident_decl_test.cc
880      reader/wgsl/parser_impl_variable_stmt_test.cc
881      reader/wgsl/parser_impl_variable_qualifier_test.cc
882      reader/wgsl/token_test.cc
883    )
884  endif()
885
886  if(${TINT_BUILD_SPV_WRITER})
887    list(APPEND TINT_TEST_SRCS
888      writer/spirv/binary_writer_test.cc
889      writer/spirv/builder_accessor_expression_test.cc
890      writer/spirv/builder_assign_test.cc
891      writer/spirv/builder_binary_expression_test.cc
892      writer/spirv/builder_bitcast_expression_test.cc
893      writer/spirv/builder_block_test.cc
894      writer/spirv/builder_call_test.cc
895      writer/spirv/builder_constructor_expression_test.cc
896      writer/spirv/builder_discard_test.cc
897      writer/spirv/builder_entry_point_test.cc
898      writer/spirv/builder_format_conversion_test.cc
899      writer/spirv/builder_function_decoration_test.cc
900      writer/spirv/builder_function_test.cc
901      writer/spirv/builder_function_variable_test.cc
902      writer/spirv/builder_global_variable_test.cc
903      writer/spirv/builder_ident_expression_test.cc
904      writer/spirv/builder_if_test.cc
905      writer/spirv/builder_intrinsic_test.cc
906      writer/spirv/builder_intrinsic_texture_test.cc
907      writer/spirv/builder_literal_test.cc
908      writer/spirv/builder_loop_test.cc
909      writer/spirv/builder_return_test.cc
910      writer/spirv/builder_switch_test.cc
911      writer/spirv/builder_test.cc
912      writer/spirv/builder_type_test.cc
913      writer/spirv/builder_unary_op_expression_test.cc
914      writer/spirv/instruction_test.cc
915      writer/spirv/operand_test.cc
916      writer/spirv/scalar_constant_test.cc
917      writer/spirv/spv_dump.cc
918      writer/spirv/spv_dump.h
919      writer/spirv/test_helper.h
920    )
921  endif()
922
923  if(${TINT_BUILD_WGSL_WRITER})
924    list(APPEND TINT_TEST_SRCS
925      writer/wgsl/generator_impl_test.cc
926      writer/wgsl/generator_impl_alias_type_test.cc
927      writer/wgsl/generator_impl_array_accessor_test.cc
928      writer/wgsl/generator_impl_assign_test.cc
929      writer/wgsl/generator_impl_binary_test.cc
930      writer/wgsl/generator_impl_bitcast_test.cc
931      writer/wgsl/generator_impl_block_test.cc
932      writer/wgsl/generator_impl_break_test.cc
933      writer/wgsl/generator_impl_call_test.cc
934      writer/wgsl/generator_impl_case_test.cc
935      writer/wgsl/generator_impl_cast_test.cc
936      writer/wgsl/generator_impl_constructor_test.cc
937      writer/wgsl/generator_impl_continue_test.cc
938      writer/wgsl/generator_impl_discard_test.cc
939      writer/wgsl/generator_impl_fallthrough_test.cc
940      writer/wgsl/generator_impl_function_test.cc
941      writer/wgsl/generator_impl_global_decl_test.cc
942      writer/wgsl/generator_impl_identifier_test.cc
943      writer/wgsl/generator_impl_if_test.cc
944      writer/wgsl/generator_impl_loop_test.cc
945      writer/wgsl/generator_impl_literal_test.cc
946      writer/wgsl/generator_impl_member_accessor_test.cc
947      writer/wgsl/generator_impl_return_test.cc
948      writer/wgsl/generator_impl_switch_test.cc
949      writer/wgsl/generator_impl_type_test.cc
950      writer/wgsl/generator_impl_unary_op_test.cc
951      writer/wgsl/generator_impl_variable_decl_statement_test.cc
952      writer/wgsl/generator_impl_variable_test.cc
953      writer/wgsl/test_helper.h
954    )
955  endif()
956
957  if(${TINT_BUILD_WGSL_READER} AND ${TINT_BUILD_WGSL_WRITER})
958    list(APPEND TINT_TEST_SRCS
959      transform/add_empty_entry_point_test.cc
960      transform/array_length_from_uniform_test.cc
961      transform/binding_remapper_test.cc
962      transform/calculate_array_length_test.cc
963      transform/canonicalize_entry_point_io_test.cc
964      transform/decompose_memory_access_test.cc
965      transform/decompose_strided_matrix_test.cc
966      transform/external_texture_transform_test.cc
967      transform/first_index_offset_test.cc
968      transform/fold_constants_test.cc
969      transform/fold_trivial_single_use_lets_test.cc
970      transform/for_loop_to_loop_test.cc
971      transform/loop_to_for_loop_test.cc
972      transform/module_scope_var_to_entry_point_param_test.cc
973      transform/multiplanar_external_texture_test.cc
974      transform/num_workgroups_from_uniform_test.cc
975      transform/pad_array_elements_test.cc
976      transform/promote_initializers_to_const_var_test.cc
977      transform/remove_phonies_test.cc
978      transform/remove_unreachable_statements_test.cc
979      transform/renamer_test.cc
980      transform/robustness_test.cc
981      transform/simplify_pointers_test.cc
982      transform/single_entry_point_test.cc
983      transform/test_helper.h
984      transform/unshadow_test.cc
985      transform/vectorize_scalar_matrix_constructors_test.cc
986      transform/vertex_pulling_test.cc
987      transform/wrap_arrays_in_structs_test.cc
988      transform/zero_init_workgroup_memory_test.cc
989    )
990  endif()
991
992  if(${TINT_BUILD_MSL_WRITER})
993    list(APPEND TINT_TEST_SRCS
994      writer/msl/generator_impl_array_accessor_test.cc
995      writer/msl/generator_impl_assign_test.cc
996      writer/msl/generator_impl_binary_test.cc
997      writer/msl/generator_impl_bitcast_test.cc
998      writer/msl/generator_impl_block_test.cc
999      writer/msl/generator_impl_break_test.cc
1000      writer/msl/generator_impl_call_test.cc
1001      writer/msl/generator_impl_case_test.cc
1002      writer/msl/generator_impl_cast_test.cc
1003      writer/msl/generator_impl_constructor_test.cc
1004      writer/msl/generator_impl_continue_test.cc
1005      writer/msl/generator_impl_discard_test.cc
1006      writer/msl/generator_impl_function_test.cc
1007      writer/msl/generator_impl_identifier_test.cc
1008      writer/msl/generator_impl_if_test.cc
1009      writer/msl/generator_impl_import_test.cc
1010      writer/msl/generator_impl_intrinsic_test.cc
1011      writer/msl/generator_impl_intrinsic_texture_test.cc
1012      writer/msl/generator_impl_loop_test.cc
1013      writer/msl/generator_impl_member_accessor_test.cc
1014      writer/msl/generator_impl_module_constant_test.cc
1015      writer/msl/generator_impl_return_test.cc
1016      writer/msl/generator_impl_sanitizer_test.cc
1017      writer/msl/generator_impl_switch_test.cc
1018      writer/msl/generator_impl_test.cc
1019      writer/msl/generator_impl_type_test.cc
1020      writer/msl/generator_impl_unary_op_test.cc
1021      writer/msl/generator_impl_variable_decl_statement_test.cc
1022      writer/msl/test_helper.h
1023    )
1024  endif()
1025
1026  if (${TINT_BUILD_GLSL_WRITER})
1027    list(APPEND TINT_TEST_SRCS
1028      writer/glsl/generator_impl_array_accessor_test.cc
1029      writer/glsl/generator_impl_assign_test.cc
1030      writer/glsl/generator_impl_binary_test.cc
1031      writer/glsl/generator_impl_bitcast_test.cc
1032      writer/glsl/generator_impl_block_test.cc
1033      writer/glsl/generator_impl_break_test.cc
1034      writer/glsl/generator_impl_call_test.cc
1035      writer/glsl/generator_impl_case_test.cc
1036      writer/glsl/generator_impl_cast_test.cc
1037      writer/glsl/generator_impl_constructor_test.cc
1038      writer/glsl/generator_impl_continue_test.cc
1039      writer/glsl/generator_impl_discard_test.cc
1040      writer/glsl/generator_impl_function_test.cc
1041      writer/glsl/generator_impl_identifier_test.cc
1042      writer/glsl/generator_impl_if_test.cc
1043      writer/glsl/generator_impl_intrinsic_test.cc
1044      writer/glsl/generator_impl_intrinsic_texture_test.cc
1045      writer/glsl/generator_impl_import_test.cc
1046      writer/glsl/generator_impl_loop_test.cc
1047      writer/glsl/generator_impl_member_accessor_test.cc
1048      writer/glsl/generator_impl_module_constant_test.cc
1049      writer/glsl/generator_impl_return_test.cc
1050      writer/glsl/generator_impl_sanitizer_test.cc
1051      writer/glsl/generator_impl_switch_test.cc
1052      writer/glsl/generator_impl_test.cc
1053      writer/glsl/generator_impl_type_test.cc
1054      writer/glsl/generator_impl_unary_op_test.cc
1055      writer/glsl/generator_impl_variable_decl_statement_test.cc
1056      writer/glsl/generator_impl_workgroup_var_test.cc
1057      writer/glsl/test_helper.h
1058    )
1059  endif()
1060
1061  if (${TINT_BUILD_HLSL_WRITER})
1062    list(APPEND TINT_TEST_SRCS
1063      writer/hlsl/generator_impl_array_accessor_test.cc
1064      writer/hlsl/generator_impl_assign_test.cc
1065      writer/hlsl/generator_impl_binary_test.cc
1066      writer/hlsl/generator_impl_bitcast_test.cc
1067      writer/hlsl/generator_impl_block_test.cc
1068      writer/hlsl/generator_impl_break_test.cc
1069      writer/hlsl/generator_impl_call_test.cc
1070      writer/hlsl/generator_impl_case_test.cc
1071      writer/hlsl/generator_impl_cast_test.cc
1072      writer/hlsl/generator_impl_constructor_test.cc
1073      writer/hlsl/generator_impl_continue_test.cc
1074      writer/hlsl/generator_impl_discard_test.cc
1075      writer/hlsl/generator_impl_function_test.cc
1076      writer/hlsl/generator_impl_identifier_test.cc
1077      writer/hlsl/generator_impl_if_test.cc
1078      writer/hlsl/generator_impl_intrinsic_test.cc
1079      writer/hlsl/generator_impl_intrinsic_texture_test.cc
1080      writer/hlsl/generator_impl_import_test.cc
1081      writer/hlsl/generator_impl_loop_test.cc
1082      writer/hlsl/generator_impl_member_accessor_test.cc
1083      writer/hlsl/generator_impl_module_constant_test.cc
1084      writer/hlsl/generator_impl_return_test.cc
1085      writer/hlsl/generator_impl_sanitizer_test.cc
1086      writer/hlsl/generator_impl_switch_test.cc
1087      writer/hlsl/generator_impl_test.cc
1088      writer/hlsl/generator_impl_type_test.cc
1089      writer/hlsl/generator_impl_unary_op_test.cc
1090      writer/hlsl/generator_impl_variable_decl_statement_test.cc
1091      writer/hlsl/generator_impl_workgroup_var_test.cc
1092      writer/hlsl/test_helper.h
1093    )
1094  endif()
1095
1096  if (${TINT_BUILD_FUZZERS})
1097    list(APPEND TINT_TEST_SRCS
1098      ../fuzzers/mersenne_twister_engine.cc
1099      ../fuzzers/mersenne_twister_engine.h
1100      ../fuzzers/random_generator.cc
1101      ../fuzzers/random_generator.h
1102      ../fuzzers/random_generator_engine.cc
1103      ../fuzzers/random_generator_engine.h
1104      ../fuzzers/random_generator_test.cc
1105    )
1106  endif()
1107
1108  add_executable(tint_unittests ${TINT_TEST_SRCS})
1109
1110  if(NOT MSVC)
1111    target_compile_options(tint_unittests PRIVATE
1112      -Wno-global-constructors
1113      -Wno-weak-vtables
1114    )
1115  endif()
1116
1117  ## Test executable
1118  target_include_directories(
1119      tint_unittests PRIVATE ${gmock_SOURCE_DIR}/include)
1120  target_link_libraries(tint_unittests libtint gmock tint_utils_io)
1121  tint_default_compile_options(tint_unittests)
1122
1123  if(${TINT_BUILD_SPV_READER} OR ${TINT_BUILD_SPV_WRITER})
1124    tint_spvtools_compile_options(tint_unittests)
1125  endif()
1126
1127  add_test(NAME tint_unittests COMMAND tint_unittests)
1128endif()
1129