1load("@rules_cc//cc:defs.bzl", "cc_binary") 2load("//rust:defs.bzl", "rust_proc_macro") 3 4# buildifier: disable=bzl-visibility 5load("//rust/private:transitions.bzl", "alias_with_import_macro_bootstrapping_mode") 6 7alias_with_import_macro_bootstrapping_mode( 8 name = "import_macro", 9 actual = ":import_macro_impl", 10) 11 12rust_proc_macro( 13 name = "import_macro_impl", 14 srcs = [ 15 "import.rs", 16 ], 17 crate_name = "import", 18 edition = "2021", 19) 20 21alias( 22 name = "import", 23 actual = select({ 24 ":use_fake_import_macro": ":fake_import_macro_impl", 25 "//conditions:default": ":import_macro_label", 26 }), 27 visibility = ["//visibility:public"], 28) 29 30# This is there to cut the loading-time dependency on the import macro dependencies 31# (so users who don't use the macro don't need to add those deps to their WORKSPACE 32# file). Bazel in the loading phase doesn't "see" through `label_flag`. 33label_flag( 34 name = "import_macro_label", 35 build_setting_default = "import_macro", 36) 37 38config_setting( 39 name = "use_fake_import_macro", 40 flag_values = { 41 "@rules_rust//rust/settings:use_real_import_macro": "False", 42 }, 43) 44 45cc_binary( 46 name = "fake_import_macro_impl", 47 srcs = ["fake_import_macro_impl.cc"], 48) 49