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