blob: 5e83a6c0bc04c3e80d6c61bc66644a8a6ee199a1 [file] [log] [blame]
UebelAndre26fa5a12022-04-26 07:50:23 -07001load("@rules_cc//cc:defs.bzl", "cc_binary")
Chris Fredrickson2f5253f2022-02-18 08:35:40 -05002load("//rust:defs.bzl", "rust_library", "rust_proc_macro", "rust_test")
3
Chris Fredrickson3db49e82022-02-22 12:07:33 -05004# buildifier: disable=bzl-visibility
Marcel Hlopko86d47a12022-03-16 16:46:41 +01005load("//rust/private:transitions.bzl", "alias_with_import_macro_bootstrapping_mode")
Chris Fredrickson3db49e82022-02-22 12:07:33 -05006
Marcel Hlopko86d47a12022-03-16 16:46:41 +01007alias_with_import_macro_bootstrapping_mode(
Chris Fredrickson3db49e82022-02-22 12:07:33 -05008 name = "import_macro",
Marcel Hlopko86d47a12022-03-16 16:46:41 +01009 actual = ":import_macro_impl",
Chris Fredrickson3db49e82022-02-22 12:07:33 -050010)
11
Chris Fredrickson2f5253f2022-02-18 08:35:40 -050012rust_proc_macro(
Chris Fredrickson3db49e82022-02-22 12:07:33 -050013 name = "import_macro_impl",
Chris Fredrickson2f5253f2022-02-18 08:35:40 -050014 srcs = [
15 "import.rs",
16 ],
Chris Fredrickson3db49e82022-02-22 12:07:33 -050017 crate_name = "import",
David Tolnay03a70792022-04-25 08:47:31 -070018 edition = "2018",
Chris Fredrickson2f5253f2022-02-18 08:35:40 -050019 deps = [
20 ":import_internal",
UebelAndre0ffde972022-08-02 06:16:10 -070021 "//util/import/3rdparty/crates:syn",
Chris Fredrickson2f5253f2022-02-18 08:35:40 -050022 ],
23)
24
25rust_library(
26 name = "import_internal",
27 srcs = [
28 "import_internal.rs",
29 ],
David Tolnay03a70792022-04-25 08:47:31 -070030 edition = "2018",
Chris Fredrickson2f5253f2022-02-18 08:35:40 -050031 deps = [
UebelAndre0ffde972022-08-02 06:16:10 -070032 "//util/import/3rdparty/crates:aho-corasick",
33 "//util/import/3rdparty/crates:lazy_static",
34 "//util/import/3rdparty/crates:proc-macro2",
35 "//util/import/3rdparty/crates:quote",
36 "//util/import/3rdparty/crates:syn",
Chris Fredrickson2f5253f2022-02-18 08:35:40 -050037 "//util/label",
38 ],
39)
40
41rust_test(
42 name = "import_internal_test",
43 crate = ":import_internal",
David Tolnay03a70792022-04-25 08:47:31 -070044 edition = "2018",
UebelAndrebd647112022-12-06 08:35:44 -080045 # TODO: https://github.com/bazelbuild/rules_rust/issues/1672
46 tags = ["manual"],
Chris Fredrickson2f5253f2022-02-18 08:35:40 -050047 deps = [
UebelAndre0ffde972022-08-02 06:16:10 -070048 "//util/import/3rdparty/crates:quickcheck",
Chris Fredrickson2f5253f2022-02-18 08:35:40 -050049 ],
50)
Chris Fredrickson3db49e82022-02-22 12:07:33 -050051
52alias(
53 name = "import",
54 actual = select({
55 ":use_fake_import_macro": ":fake_import_macro_impl",
Marcel Hlopkoe5fefdc2022-03-08 22:12:34 +010056 "//conditions:default": ":import_macro_label",
Chris Fredrickson3db49e82022-02-22 12:07:33 -050057 }),
58 visibility = ["//visibility:public"],
59)
60
Marcel Hlopkoe5fefdc2022-03-08 22:12:34 +010061# This is there to cut the loading-time dependency on the import macro dependencies
62# (so users who don't use the macro don't need to add those deps to their WORKSPACE
63# file). Bazel in the loading phase doesn't "see" through `label_flag`.
64label_flag(
65 name = "import_macro_label",
66 build_setting_default = "import_macro",
67)
68
Chris Fredrickson3db49e82022-02-22 12:07:33 -050069config_setting(
70 name = "use_fake_import_macro",
71 flag_values = {
72 "@rules_rust//rust/settings:use_real_import_macro": "False",
73 },
74)
75
UebelAndre26fa5a12022-04-26 07:50:23 -070076cc_binary(
Chris Fredrickson3db49e82022-02-22 12:07:33 -050077 name = "fake_import_macro_impl",
UebelAndre26fa5a12022-04-26 07:50:23 -070078 srcs = ["fake_import_macro_impl.cc"],
Chris Fredrickson3db49e82022-02-22 12:07:33 -050079)