1load( 2 ":build_defs.bzl", 3 "CLDEBUGINFO100_GRAMMAR_JSON_FILE", 4 "COMMON_COPTS", 5 "DEBUGINFO_GRAMMAR_JSON_FILE", 6 "SHDEBUGINFO100_GRAMMAR_JSON_FILE", 7 "TEST_COPTS", 8 "generate_core_tables", 9 "generate_enum_string_mapping", 10 "generate_extinst_lang_headers", 11 "generate_glsl_tables", 12 "generate_opencl_tables", 13 "generate_vendor_tables", 14 "incompatible_with", 15) 16 17package( 18 default_visibility = ["//visibility:private"], 19 features = [ 20 "layering_check", 21 ], 22) 23 24licenses(["notice"]) 25 26exports_files([ 27 "CHANGES", 28 "LICENSE", 29]) 30 31py_binary( 32 name = "generate_grammar_tables", 33 srcs = ["utils/generate_grammar_tables.py"], 34) 35 36py_binary( 37 name = "generate_language_headers", 38 srcs = ["utils/generate_language_headers.py"], 39) 40 41generate_core_tables(version = "unified1") 42 43generate_enum_string_mapping(version = "unified1") 44 45generate_opencl_tables(version = "unified1") 46 47generate_glsl_tables(version = "unified1") 48 49generate_vendor_tables(extension = "spv-amd-shader-explicit-vertex-parameter") 50 51generate_vendor_tables(extension = "spv-amd-shader-trinary-minmax") 52 53generate_vendor_tables(extension = "spv-amd-gcn-shader") 54 55generate_vendor_tables(extension = "spv-amd-shader-ballot") 56 57generate_vendor_tables(extension = "debuginfo") 58 59generate_vendor_tables(extension = "nonsemantic.clspvreflection") 60 61generate_vendor_tables(extension = "nonsemantic.vkspreflection") 62 63generate_vendor_tables( 64 extension = "opencl.debuginfo.100", 65 operand_kind_prefix = "CLDEBUG100_", 66) 67 68generate_vendor_tables( 69 extension = "nonsemantic.shader.debuginfo.100", 70 operand_kind_prefix = "SHDEBUG100_", 71) 72 73generate_extinst_lang_headers( 74 name = "DebugInfo", 75 grammar = DEBUGINFO_GRAMMAR_JSON_FILE, 76) 77 78generate_extinst_lang_headers( 79 name = "OpenCLDebugInfo100", 80 grammar = CLDEBUGINFO100_GRAMMAR_JSON_FILE, 81) 82 83generate_extinst_lang_headers( 84 name = "NonSemanticShaderDebugInfo100", 85 grammar = SHDEBUGINFO100_GRAMMAR_JSON_FILE, 86) 87 88py_binary( 89 name = "generate_registry_tables", 90 srcs = ["utils/generate_registry_tables.py"], 91) 92 93genrule( 94 name = "generators_inc", 95 srcs = ["@spirv_headers//:spirv_xml_registry"], 96 outs = ["generators.inc"], 97 cmd = "$(location :generate_registry_tables) --xml=$(location @spirv_headers//:spirv_xml_registry) --generator-output=$(location generators.inc)", 98 cmd_bat = "$(location :generate_registry_tables) --xml=$(location @spirv_headers//:spirv_xml_registry) --generator-output=$(location generators.inc)", 99 tools = [":generate_registry_tables"], 100) 101 102py_binary( 103 name = "update_build_version", 104 srcs = ["utils/update_build_version.py"], 105) 106 107genrule( 108 name = "build_version_inc", 109 srcs = ["CHANGES"], 110 outs = ["build-version.inc"], 111 cmd = "SOURCE_DATE_EPOCH=0 $(location :update_build_version) $(location CHANGES) $(location build-version.inc)", 112 cmd_bat = "set SOURCE_DATE_EPOCH=0 && $(location :update_build_version) $(location CHANGES) $(location build-version.inc)", 113 tools = [":update_build_version"], 114) 115 116# Libraries 117 118cc_library( 119 name = "spirv_tools", 120 hdrs = [ 121 "include/spirv-tools/libspirv.h", 122 "include/spirv-tools/libspirv.hpp", 123 ], 124 copts = COMMON_COPTS, 125 includes = ["include"], 126 linkstatic = 1, 127 visibility = ["//visibility:public"], 128 deps = [ 129 ":spirv_tools_internal", 130 ], 131) 132 133cc_library( 134 name = "spirv_tools_internal", 135 srcs = glob([ 136 "source/*.cpp", 137 "source/util/*.cpp", 138 "source/val/*.cpp", 139 ]) + [ 140 ":build_version_inc", 141 ":gen_core_tables_unified1", 142 ":gen_enum_string_mapping", 143 ":gen_extinst_lang_headers_DebugInfo", 144 ":gen_extinst_lang_headers_NonSemanticShaderDebugInfo100", 145 ":gen_extinst_lang_headers_OpenCLDebugInfo100", 146 ":gen_glsl_tables_unified1", 147 ":gen_opencl_tables_unified1", 148 ":gen_vendor_tables_debuginfo", 149 ":gen_vendor_tables_nonsemantic_clspvreflection", 150 ":gen_vendor_tables_nonsemantic_vkspreflection", 151 ":gen_vendor_tables_nonsemantic_shader_debuginfo_100", 152 ":gen_vendor_tables_opencl_debuginfo_100", 153 ":gen_vendor_tables_spv_amd_gcn_shader", 154 ":gen_vendor_tables_spv_amd_shader_ballot", 155 ":gen_vendor_tables_spv_amd_shader_explicit_vertex_parameter", 156 ":gen_vendor_tables_spv_amd_shader_trinary_minmax", 157 ":generators_inc", 158 ], 159 hdrs = [ 160 "include/spirv-tools/libspirv.h", 161 "include/spirv-tools/libspirv.hpp", 162 ":gen_extinst_lang_headers_DebugInfo", 163 ":gen_extinst_lang_headers_NonSemanticShaderDebugInfo100", 164 ":gen_extinst_lang_headers_OpenCLDebugInfo100", 165 ] + glob([ 166 "source/*.h", 167 "source/util/*.h", 168 "source/val/*.h", 169 ]), 170 copts = COMMON_COPTS, 171 includes = ["include"], 172 deps = [ 173 "@spirv_headers//:spirv_common_headers", 174 "@spirv_headers//:spirv_cpp11_headers", 175 ], 176) 177 178cc_library( 179 name = "spirv_tools_opt", 180 hdrs = [ 181 "include/spirv-tools/optimizer.hpp", 182 ], 183 copts = COMMON_COPTS, 184 linkstatic = 1, 185 visibility = ["//visibility:public"], 186 deps = [ 187 ":spirv_tools", 188 ":spirv_tools_opt_internal", 189 ], 190) 191 192cc_library( 193 name = "spirv_tools_opt_internal", 194 srcs = glob(["source/opt/*.cpp"]) + [ 195 ":gen_vendor_tables_spv_amd_shader_ballot", 196 ], 197 hdrs = glob(["source/opt/*.h"]) + [ 198 "include/spirv-tools/optimizer.hpp", 199 ], 200 copts = COMMON_COPTS, 201 deps = [ 202 ":spirv_tools_internal", 203 "@spirv_headers//:spirv_common_headers", 204 ], 205) 206 207cc_library( 208 name = "spirv_tools_reduce", 209 srcs = glob(["source/reduce/*.cpp"]), 210 hdrs = glob(["source/reduce/*.h"]), 211 copts = COMMON_COPTS, 212 deps = [ 213 ":spirv_tools_internal", 214 ":spirv_tools_opt_internal", 215 ], 216) 217 218cc_library( 219 name = "spirv_tools_link", 220 srcs = glob(["source/link/*.cpp"]), 221 hdrs = ["include/spirv-tools/linker.hpp"], 222 copts = COMMON_COPTS, 223 linkstatic = 1, 224 visibility = ["//visibility:public"], 225 deps = [ 226 ":spirv_tools_internal", 227 ":spirv_tools_opt_internal", 228 ], 229) 230 231cc_library( 232 name = "spirv_tools_lint_internal", 233 srcs = glob([ 234 "source/lint/*.cpp", 235 "source/lint/*.h", 236 ]), 237 hdrs = ["include/spirv-tools/linter.hpp"] + glob([ 238 "source/lint/*.h", 239 ]), 240 copts = COMMON_COPTS, 241 includes = ["include"], 242 deps = [ 243 ":spirv_tools_internal", 244 ":spirv_tools_opt_internal", 245 ], 246) 247 248cc_library( 249 name = "spirv_tools_lint", 250 hdrs = ["include/spirv-tools/linter.hpp"], 251 copts = COMMON_COPTS, 252 includes = ["include"], 253 linkstatic = 1, 254 visibility = ["//visibility:public"], 255 deps = [ 256 ":spirv_tools", 257 ":spirv_tools_lint_internal", 258 ], 259) 260 261cc_library( 262 name = "tools_util", 263 srcs = glob(["tools/util/*.cpp"]), 264 hdrs = glob(["tools/util/*.h"]), 265 copts = COMMON_COPTS, 266 deps = [":spirv_tools"], 267) 268 269cc_library( 270 name = "tools_io", 271 hdrs = ["tools/io.h"], 272 srcs = ["tools/io.cpp"], 273 copts = COMMON_COPTS, 274) 275 276# Tools 277 278cc_binary( 279 name = "spirv-as", 280 srcs = [ 281 "tools/as/as.cpp", 282 ], 283 copts = COMMON_COPTS, 284 visibility = ["//visibility:public"], 285 deps = [ 286 ":spirv_tools_internal", 287 ":tools_io", 288 ":tools_util", 289 ], 290) 291 292cc_binary( 293 name = "spirv-dis", 294 srcs = [ 295 "tools/dis/dis.cpp", 296 ], 297 copts = COMMON_COPTS, 298 visibility = ["//visibility:public"], 299 deps = [ 300 ":spirv_tools", 301 ":tools_io", 302 ":tools_util", 303 ], 304) 305 306cc_binary( 307 name = "spirv-objdump", 308 srcs = [ 309 "tools/objdump/extract_source.cpp", 310 "tools/objdump/extract_source.h", 311 "tools/objdump/objdump.cpp", 312 ], 313 copts = COMMON_COPTS, 314 visibility = ["//visibility:public"], 315 deps = [ 316 ":spirv_tools_internal", 317 ":spirv_tools_opt_internal", 318 ":tools_io", 319 ":tools_util", 320 "@spirv_headers//:spirv_cpp_headers", 321 ], 322) 323 324cc_binary( 325 name = "spirv-val", 326 srcs = [ 327 "tools/val/val.cpp", 328 ], 329 copts = COMMON_COPTS, 330 visibility = ["//visibility:public"], 331 deps = [ 332 ":spirv_tools_internal", 333 ":tools_io", 334 ":tools_util", 335 ], 336) 337 338cc_binary( 339 name = "spirv-opt", 340 srcs = [ 341 "tools/opt/opt.cpp", 342 ], 343 copts = COMMON_COPTS, 344 visibility = ["//visibility:public"], 345 deps = [ 346 ":spirv_tools_internal", 347 ":spirv_tools_opt_internal", 348 ":tools_io", 349 ":tools_util", 350 ], 351) 352 353cc_binary( 354 name = "spirv-reduce", 355 srcs = [ 356 "tools/reduce/reduce.cpp", 357 ], 358 copts = COMMON_COPTS, 359 visibility = ["//visibility:public"], 360 deps = [ 361 ":spirv_tools_internal", 362 ":spirv_tools_opt_internal", 363 ":spirv_tools_reduce", 364 ":tools_io", 365 ":tools_util", 366 ], 367) 368 369cc_binary( 370 name = "spirv-link", 371 srcs = [ 372 "tools/link/linker.cpp", 373 ], 374 copts = COMMON_COPTS, 375 visibility = ["//visibility:public"], 376 deps = [ 377 ":spirv_tools_internal", 378 ":spirv_tools_link", 379 ":tools_io", 380 ":tools_util", 381 ], 382) 383 384cc_binary( 385 name = "spirv-lint", 386 srcs = [ 387 "tools/lint/lint.cpp", 388 ], 389 copts = COMMON_COPTS, 390 visibility = ["//visibility:public"], 391 deps = [ 392 ":spirv_tools_lint", 393 ":spirv_tools_opt_internal", 394 ":tools_io", 395 ":tools_util", 396 ], 397) 398 399cc_binary( 400 name = "spirv-cfg", 401 srcs = [ 402 "tools/cfg/bin_to_dot.cpp", 403 "tools/cfg/bin_to_dot.h", 404 "tools/cfg/cfg.cpp", 405 ], 406 copts = COMMON_COPTS, 407 visibility = ["//visibility:public"], 408 deps = [ 409 ":spirv_tools_internal", 410 ":tools_io", 411 ":tools_util", 412 ], 413) 414 415# Unit tests 416 417cc_library( 418 name = "test_lib", 419 testonly = 1, 420 srcs = [ 421 "test/unit_spirv.cpp", 422 ], 423 hdrs = [ 424 "test/test_fixture.h", 425 "test/unit_spirv.h", 426 ], 427 copts = TEST_COPTS, 428 deps = [ 429 ":spirv_tools_internal", 430 "@googletest//:gtest", 431 ], 432) 433 434# PCH (precompiled header) tests only work when using CMake and MSVC on Windows, 435# so they will be skipped in the Bazel builds. 436 437[cc_test( 438 name = "base_{testcase}_test".format(testcase = f[len("test/"):-len("_test.cpp")]), 439 size = "small", 440 srcs = [f], 441 copts = TEST_COPTS + ["-DTESTING"], 442 linkstatic = 1, 443 target_compatible_with = { 444 "test/timer_test.cpp": incompatible_with(["@bazel_tools//src/conditions:windows"]), 445 }.get(f, []), 446 deps = [ 447 "tools_util", 448 ":spirv_tools_internal", 449 ":test_lib", 450 ":tools_io", 451 "@googletest//:gtest", 452 "@googletest//:gtest_main", 453 ], 454) for f in glob( 455 [ 456 "test/*_test.cpp", 457 "test/tools/*_test.cpp", 458 ], 459 exclude = [ 460 "test/cpp_interface_test.cpp", 461 "test/pch_test.cpp", 462 ], 463)] 464 465cc_test( 466 name = "base_cpp_interface_test", 467 size = "small", 468 srcs = ["test/cpp_interface_test.cpp"], 469 linkstatic = 1, 470 deps = [ 471 ":spirv_tools_opt_internal", 472 "@googletest//:gtest", 473 "@googletest//:gtest_main", 474 "@spirv_headers//:spirv_cpp11_headers", 475 ], 476) 477 478cc_test( 479 name = "base_ilist_test", 480 size = "small", 481 srcs = ["test/util/ilist_test.cpp"], 482 copts = TEST_COPTS, 483 linkstatic = 1, 484 deps = [ 485 ":spirv_tools_internal", 486 "@googletest//:gtest", 487 "@googletest//:gtest_main", 488 ], 489) 490 491cc_library( 492 name = "link_test_lib", 493 testonly = 1, 494 hdrs = ["test/link/linker_fixture.h"], 495 copts = TEST_COPTS, 496 deps = [ 497 ":spirv_tools_internal", 498 ":spirv_tools_link", 499 ":test_lib", 500 "@effcee//:effcee", 501 "@re2//:re2", 502 ], 503) 504 505[cc_test( 506 name = "link_{testcase}_test".format(testcase = f[len("test/link/"):-len("_test.cpp")]), 507 size = "small", 508 srcs = [f], 509 copts = TEST_COPTS, 510 linkstatic = 1, 511 deps = [ 512 ":link_test_lib", 513 "@googletest//:gtest", 514 "@googletest//:gtest_main", 515 ], 516) for f in glob( 517 ["test/link/*_test.cpp"], 518)] 519 520[cc_test( 521 name = "lint_{testcase}_test".format(testcase = f[len("test/lint/"):-len("_test.cpp")]), 522 size = "small", 523 srcs = [f], 524 copts = TEST_COPTS, 525 linkstatic = 1, 526 deps = [ 527 ":spirv_tools", 528 ":spirv_tools_lint_internal", 529 ":spirv_tools_opt_internal", 530 "@googletest//:gtest", 531 "@googletest//:gtest_main", 532 ], 533) for f in glob( 534 ["test/lint/*_test.cpp"], 535)] 536 537cc_library( 538 name = "opt_test_lib", 539 testonly = 1, 540 srcs = [ 541 "test/opt/pass_utils.cpp", 542 ], 543 hdrs = [ 544 "test/opt/assembly_builder.h", 545 "test/opt/function_utils.h", 546 "test/opt/module_utils.h", 547 "test/opt/pass_fixture.h", 548 "test/opt/pass_utils.h", 549 ], 550 copts = TEST_COPTS, 551 deps = [ 552 ":spirv_tools_internal", 553 ":spirv_tools_opt_internal", 554 "@effcee//:effcee", 555 "@googletest//:gtest", 556 ], 557) 558 559[cc_test( 560 name = "opt_{testcase}_test".format(testcase = f[len("test/opt/"):-len("_test.cpp")]), 561 size = "small", 562 srcs = [f], 563 copts = TEST_COPTS, 564 linkstatic = 1, 565 deps = [ 566 ":opt_test_lib", 567 ":spirv_tools_internal", 568 ":spirv_tools_opt_internal", 569 ":test_lib", 570 "@effcee//:effcee", 571 "@googletest//:gtest", 572 "@googletest//:gtest_main", 573 ], 574) for f in glob(["test/opt/*_test.cpp"])] 575 576[cc_test( 577 name = "opt_dom_tree_{testcase}_test".format(testcase = f[len("test/opt/dominator_tree/"):-len(".cpp")]), 578 size = "small", 579 srcs = [f], 580 copts = TEST_COPTS, 581 linkstatic = 1, 582 deps = [ 583 ":opt_test_lib", 584 ":spirv_tools_opt_internal", 585 "@googletest//:gtest", 586 "@googletest//:gtest_main", 587 ], 588) for f in glob( 589 ["test/opt/dominator_tree/*.cpp"], 590 exclude = ["test/opt/dominator_tree/pch_test_opt_dom.cpp"], 591)] 592 593[cc_test( 594 name = "opt_loop_{testcase}_test".format(testcase = f[len("test/opt/loop_optimizations/"):-len(".cpp")]), 595 size = "small", 596 srcs = [f], 597 copts = TEST_COPTS, 598 linkstatic = 1, 599 deps = [ 600 ":opt_test_lib", 601 ":spirv_tools", 602 ":spirv_tools_opt_internal", 603 "@effcee//:effcee", 604 "@googletest//:gtest", 605 "@googletest//:gtest_main", 606 ], 607) for f in glob( 608 ["test/opt/loop_optimizations/*.cpp"], 609 exclude = ["test/opt/loop_optimizations/pch_test_opt_loop.cpp"], 610)] 611 612cc_library( 613 name = "reduce_test_lib", 614 testonly = 1, 615 srcs = [ 616 "test/reduce/reduce_test_util.cpp", 617 ], 618 hdrs = ["test/reduce/reduce_test_util.h"], 619 copts = TEST_COPTS, 620 deps = [ 621 ":spirv_tools", 622 ":spirv_tools_opt_internal", 623 ":spirv_tools_reduce", 624 ":test_lib", 625 ":tools_io", 626 "@googletest//:gtest", 627 ], 628) 629 630[cc_test( 631 name = "reduce_{testcase}_test".format(testcase = f[len("test/reduce/"):-len("_test.cpp")]), 632 size = "small", 633 srcs = [f], 634 copts = TEST_COPTS, 635 linkstatic = 1, 636 deps = [ 637 ":reduce_test_lib", 638 ":spirv_tools_internal", 639 ":spirv_tools_opt_internal", 640 ":spirv_tools_reduce", 641 "@googletest//:gtest_main", 642 ], 643) for f in glob(["test/reduce/*_test.cpp"])] 644 645[cc_test( 646 name = "util_{testcase}_test".format(testcase = f[len("test/util/"):-len("_test.cpp")]), 647 size = "small", 648 srcs = [f], 649 copts = TEST_COPTS, 650 linkstatic = 1, 651 deps = [ 652 ":spirv_tools_internal", 653 "@googletest//:gtest", 654 "@googletest//:gtest_main", 655 ], 656) for f in glob(["test/util/*_test.cpp"])] 657 658cc_library( 659 name = "val_test_lib", 660 testonly = 1, 661 srcs = [ 662 "test/val/val_code_generator.cpp", 663 ], 664 hdrs = [ 665 "test/val/val_code_generator.h", 666 "test/val/val_fixtures.h", 667 ], 668 copts = TEST_COPTS, 669 deps = [ 670 ":spirv_tools_internal", 671 ":test_lib", 672 ], 673) 674 675[cc_test( 676 name = "val_{testcase}_test".format(testcase = f[len("test/val/val_"):-len("_test.cpp")]), 677 size = "small", 678 srcs = [f], 679 copts = TEST_COPTS, 680 linkstatic = 1, 681 deps = [ 682 ":spirv_tools_internal", 683 ":test_lib", 684 ":val_test_lib", 685 "@googletest//:gtest", 686 "@googletest//:gtest_main", 687 ], 688) for f in glob( 689 ["test/val/val_*_test.cpp"], 690 exclude = [ 691 "test/val/val_capability_test.cpp", 692 "test/val/val_limits_test.cpp", 693 ], 694)] 695 696cc_test( 697 name = "val_capability_test", 698 size = "large", 699 timeout = "long", 700 srcs = ["test/val/val_capability_test.cpp"], 701 copts = TEST_COPTS + ["-O3"], 702 linkstatic = 1, 703 deps = [ 704 ":spirv_tools_internal", 705 ":test_lib", 706 ":val_test_lib", 707 "@googletest//:gtest", 708 "@googletest//:gtest_main", 709 ], 710) 711 712cc_test( 713 name = "val_limits_test", 714 size = "large", 715 timeout = "long", 716 srcs = ["test/val/val_limits_test.cpp"], 717 copts = TEST_COPTS + [ 718 "-O3", 719 ], 720 linkstatic = 1, 721 deps = [ 722 ":test_lib", 723 ":val_test_lib", 724 "@googletest//:gtest", 725 "@googletest//:gtest_main", 726 ], 727) 728