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