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