BUILD 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698
  1. # Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. # Exceptions. See /LICENSE for license information.
  3. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. load("@rules_shell//shell:sh_test.bzl", "sh_test")
  5. load("//bazel/cc_rules:defs.bzl", "cc_binary", "cc_library", "cc_test")
  6. load("//bazel/version:rules.bzl", "expand_version_build_info")
  7. package(default_visibility = ["//visibility:public"])
  8. cc_library(
  9. name = "array_stack",
  10. hdrs = ["array_stack.h"],
  11. deps = [
  12. ":check",
  13. "@llvm-project//llvm:Support",
  14. ],
  15. )
  16. cc_test(
  17. name = "array_stack_test",
  18. size = "small",
  19. srcs = ["array_stack_test.cpp"],
  20. deps = [
  21. ":array_stack",
  22. "//testing/base:gtest_main",
  23. "@googletest//:gtest",
  24. ],
  25. )
  26. cc_library(
  27. name = "bazel_working_dir",
  28. hdrs = ["bazel_working_dir.h"],
  29. deps = [
  30. "@llvm-project//llvm:Support",
  31. ],
  32. )
  33. cc_library(
  34. name = "build_data",
  35. srcs = [
  36. "build_data.cpp",
  37. "build_data_linkstamp.h",
  38. ],
  39. hdrs = ["build_data.h"],
  40. linkstamp = "build_data_linkstamp.cpp",
  41. deps = ["@llvm-project//llvm:Support"],
  42. )
  43. cc_test(
  44. name = "build_data_test",
  45. size = "small",
  46. srcs = ["build_data_test.cpp"],
  47. deps = [
  48. ":build_data",
  49. ":ostream",
  50. "//testing/base:gtest_main",
  51. "@googletest//:gtest",
  52. ],
  53. )
  54. cc_library(
  55. name = "command_line",
  56. srcs = ["command_line.cpp"],
  57. hdrs = ["command_line.h"],
  58. deps = [
  59. ":check",
  60. ":error",
  61. ":ostream",
  62. ":raw_string_ostream",
  63. "@llvm-project//llvm:Support",
  64. ],
  65. )
  66. cc_test(
  67. name = "command_line_test",
  68. size = "small",
  69. srcs = ["command_line_test.cpp"],
  70. deps = [
  71. ":command_line",
  72. ":error_test_helpers",
  73. ":raw_string_ostream",
  74. "//testing/base:gtest_main",
  75. "@googletest//:gtest",
  76. "@llvm-project//llvm:Support",
  77. ],
  78. )
  79. cc_library(
  80. name = "check",
  81. srcs = [
  82. "check_internal.cpp",
  83. "check_internal.h",
  84. ],
  85. hdrs = ["check.h"],
  86. deps = [
  87. ":ostream",
  88. ":template_string",
  89. "@llvm-project//llvm:Support",
  90. ],
  91. )
  92. cc_test(
  93. name = "check_test",
  94. size = "small",
  95. srcs = ["check_test.cpp"],
  96. deps = [
  97. ":check",
  98. "//testing/base:gtest_main",
  99. "@googletest//:gtest",
  100. ],
  101. )
  102. cc_library(
  103. name = "concepts",
  104. hdrs = ["concepts.h"],
  105. )
  106. cc_library(
  107. name = "emplace_by_calling",
  108. hdrs = ["emplace_by_calling.h"],
  109. )
  110. cc_test(
  111. name = "emplace_by_calling_test",
  112. srcs = ["emplace_by_calling_test.cpp"],
  113. deps = [
  114. ":emplace_by_calling",
  115. "//testing/base:gtest_main",
  116. "@googletest//:gtest",
  117. ],
  118. )
  119. cc_library(
  120. name = "enum_base",
  121. hdrs = ["enum_base.h"],
  122. deps = [
  123. "//common:ostream",
  124. "@llvm-project//llvm:Support",
  125. ],
  126. )
  127. cc_library(
  128. name = "enum_base_test_def",
  129. testonly = 1,
  130. textual_hdrs = ["enum_base_test.def"],
  131. )
  132. cc_test(
  133. name = "enum_base_test",
  134. size = "small",
  135. srcs = ["enum_base_test.cpp"],
  136. deps = [
  137. ":enum_base",
  138. ":enum_base_test_def",
  139. ":raw_string_ostream",
  140. "//testing/base:gtest_main",
  141. "@googletest//:gtest",
  142. ],
  143. )
  144. cc_library(
  145. name = "error",
  146. hdrs = ["error.h"],
  147. deps = [
  148. ":check",
  149. ":ostream",
  150. ":raw_string_ostream",
  151. "@llvm-project//llvm:Support",
  152. ],
  153. )
  154. cc_library(
  155. name = "error_test_helpers",
  156. testonly = 1,
  157. hdrs = ["error_test_helpers.h"],
  158. deps = [
  159. ":error",
  160. "@googletest//:gtest",
  161. ],
  162. )
  163. cc_test(
  164. name = "error_test",
  165. size = "small",
  166. srcs = ["error_test.cpp"],
  167. deps = [
  168. ":error",
  169. ":error_test_helpers",
  170. ":raw_string_ostream",
  171. "//testing/base:gtest_main",
  172. "@googletest//:gtest",
  173. ],
  174. )
  175. cc_library(
  176. name = "exe_path",
  177. srcs = ["exe_path.cpp"],
  178. hdrs = ["exe_path.h"],
  179. deps = [
  180. "@llvm-project//llvm:Support",
  181. ],
  182. )
  183. cc_test(
  184. name = "exe_path_test",
  185. size = "small",
  186. srcs = ["exe_path_test.cpp"],
  187. deps = [
  188. ":exe_path",
  189. "//testing/base:gtest_main",
  190. "@googletest//:gtest",
  191. "@llvm-project//llvm:Support",
  192. ],
  193. )
  194. cc_library(
  195. name = "find",
  196. hdrs = ["find.h"],
  197. deps = [
  198. ":check",
  199. ":ostream",
  200. ":raw_string_ostream",
  201. "@llvm-project//llvm:Support",
  202. ],
  203. )
  204. cc_test(
  205. name = "find_test",
  206. size = "small",
  207. srcs = ["find_test.cpp"],
  208. deps = [
  209. ":find",
  210. "//testing/base:gtest_main",
  211. "@googletest//:gtest",
  212. ],
  213. )
  214. cc_library(
  215. name = "hashing",
  216. srcs = ["hashing.cpp"],
  217. hdrs = ["hashing.h"],
  218. deps = [
  219. ":check",
  220. ":ostream",
  221. "@llvm-project//llvm:Support",
  222. ],
  223. )
  224. cc_test(
  225. name = "hashing_test",
  226. size = "small",
  227. srcs = ["hashing_test.cpp"],
  228. deps = [
  229. ":hashing",
  230. ":raw_string_ostream",
  231. "//testing/base:gtest_main",
  232. "@googletest//:gtest",
  233. "@llvm-project//llvm:Support",
  234. ],
  235. )
  236. cc_binary(
  237. name = "hashing_benchmark",
  238. testonly = 1,
  239. srcs = ["hashing_benchmark.cpp"],
  240. deps = [
  241. ":check",
  242. ":hashing",
  243. "//testing/base:benchmark_main",
  244. "@abseil-cpp//absl/hash",
  245. "@abseil-cpp//absl/random",
  246. "@google_benchmark//:benchmark",
  247. "@llvm-project//llvm:Support",
  248. ],
  249. )
  250. cc_library(
  251. name = "hashtable_key_context",
  252. hdrs = ["hashtable_key_context.h"],
  253. deps = [
  254. ":hashing",
  255. "@llvm-project//llvm:Support",
  256. ],
  257. )
  258. cc_test(
  259. name = "hashtable_key_context_test",
  260. size = "small",
  261. srcs = ["hashtable_key_context_test.cpp"],
  262. deps = [
  263. ":hashtable_key_context",
  264. "//testing/base:gtest_main",
  265. "@googletest//:gtest",
  266. "@llvm-project//llvm:Support",
  267. ],
  268. )
  269. cc_library(
  270. name = "init_llvm",
  271. srcs = ["init_llvm.cpp"],
  272. hdrs = ["init_llvm.h"],
  273. deps = [
  274. "@llvm-project//llvm:Support",
  275. ],
  276. )
  277. # Link against this to cause `:init_llvm` to pull in all LLVM targets.
  278. #
  279. # Be careful when depending on this: it pulls in several hundred megabytes of
  280. # LLVM binary size in -c fastbuild. This should only be depended on by a
  281. # `cc_binary` or `cc_test` target, never a `cc_library`.
  282. cc_library(
  283. name = "all_llvm_targets",
  284. srcs = ["all_llvm_targets.cpp"],
  285. deps = [
  286. ":init_llvm",
  287. "@llvm-project//llvm:AllTargetsAsmParsers",
  288. "@llvm-project//llvm:AllTargetsCodeGens",
  289. "@llvm-project//llvm:Support",
  290. ],
  291. alwayslink = 1,
  292. )
  293. cc_library(
  294. name = "map",
  295. hdrs = ["map.h"],
  296. deps = [
  297. ":check",
  298. ":concepts",
  299. ":hashtable_key_context",
  300. ":raw_hashtable",
  301. "@llvm-project//llvm:Support",
  302. ],
  303. )
  304. cc_test(
  305. name = "map_test",
  306. size = "small",
  307. srcs = ["map_test.cpp"],
  308. deps = [
  309. ":map",
  310. ":raw_hashtable_test_helpers",
  311. "//testing/base:gtest_main",
  312. "@googletest//:gtest",
  313. ],
  314. )
  315. cc_binary(
  316. name = "map_benchmark",
  317. testonly = 1,
  318. srcs = ["map_benchmark.cpp"],
  319. deps = [
  320. ":map",
  321. ":raw_hashtable_benchmark_helpers",
  322. "//testing/base:benchmark_main",
  323. "@abseil-cpp//absl/container:flat_hash_map",
  324. "@abseil-cpp//absl/random",
  325. "@boost_unordered",
  326. "@google_benchmark//:benchmark",
  327. "@llvm-project//llvm:Support",
  328. ],
  329. )
  330. sh_test(
  331. name = "map_benchmark_test",
  332. # The benchmark allocates a large amount of memory.
  333. size = "enormous",
  334. # We configure the test to run somewhat quickly.
  335. timeout = "moderate",
  336. srcs = [":map_benchmark"],
  337. args = [
  338. "--benchmark_min_time=1x",
  339. # The `$$` is repeated for Bazel escaping of `$`.
  340. "--benchmark_filter=^[^/]*/[1-9][0-9]{0,3}(/[0-9]+)?$$",
  341. ],
  342. )
  343. cc_library(
  344. name = "move_only",
  345. hdrs = ["move_only.h"],
  346. )
  347. cc_library(
  348. name = "ostream",
  349. hdrs = ["ostream.h"],
  350. deps = [
  351. "@llvm-project//llvm:Support",
  352. ],
  353. )
  354. cc_library(
  355. name = "raw_hashtable",
  356. srcs = ["raw_hashtable.cpp"],
  357. hdrs = ["raw_hashtable.h"],
  358. deps = [
  359. ":check",
  360. ":concepts",
  361. ":hashing",
  362. ":hashtable_key_context",
  363. ":raw_hashtable_metadata_group",
  364. "@llvm-project//llvm:Support",
  365. ],
  366. )
  367. cc_library(
  368. name = "raw_hashtable_metadata_group",
  369. srcs = ["raw_hashtable_metadata_group.cpp"],
  370. hdrs = ["raw_hashtable_metadata_group.h"],
  371. deps = [
  372. ":check",
  373. ":ostream",
  374. "@llvm-project//llvm:Support",
  375. ],
  376. )
  377. cc_binary(
  378. name = "raw_hashtable_metadata_group_benchmark",
  379. testonly = 1,
  380. srcs = ["raw_hashtable_metadata_group_benchmark.cpp"],
  381. deps = [
  382. ":raw_hashtable_metadata_group",
  383. "//testing/base:benchmark_main",
  384. "@abseil-cpp//absl/random",
  385. "@google_benchmark//:benchmark",
  386. "@llvm-project//llvm:Support",
  387. ],
  388. )
  389. sh_test(
  390. name = "raw_hashtable_metadata_group_benchmark_test",
  391. size = "small",
  392. srcs = ["raw_hashtable_metadata_group_benchmark"],
  393. args = [
  394. "--benchmark_min_time=1x",
  395. ],
  396. )
  397. cc_library(
  398. name = "raw_hashtable_benchmark_helpers",
  399. testonly = 1,
  400. srcs = ["raw_hashtable_benchmark_helpers.cpp"],
  401. hdrs = ["raw_hashtable_benchmark_helpers.h"],
  402. copts = [
  403. "-O2", # Always optimize to make testing benchmarks faster.
  404. ],
  405. deps = [
  406. ":check",
  407. ":hashing",
  408. ":raw_hashtable",
  409. ":set",
  410. "@abseil-cpp//absl/base:no_destructor",
  411. "@abseil-cpp//absl/hash",
  412. "@abseil-cpp//absl/random",
  413. "@google_benchmark//:benchmark",
  414. "@llvm-project//llvm:Support",
  415. ],
  416. )
  417. cc_library(
  418. name = "raw_hashtable_test_helpers",
  419. testonly = 1,
  420. hdrs = ["raw_hashtable_test_helpers.h"],
  421. deps = [
  422. ":check",
  423. ":hashing",
  424. ":hashtable_key_context",
  425. ":ostream",
  426. ],
  427. )
  428. cc_library(
  429. name = "raw_string_ostream",
  430. hdrs = ["raw_string_ostream.h"],
  431. deps = [
  432. ":check",
  433. ":ostream",
  434. ],
  435. )
  436. cc_test(
  437. name = "raw_string_ostream_test",
  438. size = "small",
  439. srcs = ["raw_string_ostream_test.cpp"],
  440. deps = [
  441. ":raw_string_ostream",
  442. "//testing/base:gtest_main",
  443. "@googletest//:gtest",
  444. ],
  445. )
  446. cc_library(
  447. name = "set",
  448. hdrs = ["set.h"],
  449. deps = [
  450. ":check",
  451. ":hashtable_key_context",
  452. ":raw_hashtable",
  453. "@llvm-project//llvm:Support",
  454. ],
  455. )
  456. cc_test(
  457. name = "set_test",
  458. size = "small",
  459. srcs = ["set_test.cpp"],
  460. deps = [
  461. ":raw_hashtable_test_helpers",
  462. ":set",
  463. "//testing/base:gtest_main",
  464. "@googletest//:gtest",
  465. ],
  466. )
  467. cc_binary(
  468. name = "set_benchmark",
  469. testonly = 1,
  470. srcs = ["set_benchmark.cpp"],
  471. deps = [
  472. ":raw_hashtable_benchmark_helpers",
  473. ":set",
  474. "//testing/base:benchmark_main",
  475. "@abseil-cpp//absl/container:flat_hash_set",
  476. "@google_benchmark//:benchmark",
  477. "@llvm-project//llvm:Support",
  478. ],
  479. )
  480. sh_test(
  481. name = "set_benchmark_test",
  482. # The benchmark allocates a large amount of memory.
  483. size = "enormous",
  484. # We configure the test to run somewhat quickly.
  485. timeout = "moderate",
  486. srcs = [":set_benchmark"],
  487. args = [
  488. "--benchmark_min_time=1x",
  489. # The `$$` is repeated for Bazel escaping of `$`.
  490. "--benchmark_filter=^[^/]*/[1-9][0-9]{0,3}(/[0-9]+)?$$",
  491. ],
  492. )
  493. cc_library(
  494. name = "string_helpers",
  495. srcs = ["string_helpers.cpp"],
  496. hdrs = ["string_helpers.h"],
  497. deps = [
  498. ":check",
  499. ":error",
  500. "@llvm-project//llvm:Support",
  501. ],
  502. )
  503. cc_test(
  504. name = "string_helpers_test",
  505. size = "small",
  506. srcs = ["string_helpers_test.cpp"],
  507. deps = [
  508. ":string_helpers",
  509. "//testing/base:gtest_main",
  510. "@googletest//:gtest",
  511. "@llvm-project//llvm:Support",
  512. ],
  513. )
  514. cc_library(
  515. name = "struct_reflection",
  516. hdrs = ["struct_reflection.h"],
  517. )
  518. cc_test(
  519. name = "struct_reflection_test",
  520. size = "small",
  521. srcs = ["struct_reflection_test.cpp"],
  522. deps = [
  523. ":struct_reflection",
  524. "//testing/base:gtest_main",
  525. "@googletest//:gtest",
  526. ],
  527. )
  528. cc_library(
  529. name = "template_string",
  530. hdrs = ["template_string.h"],
  531. deps = [
  532. "@llvm-project//llvm:Support",
  533. ],
  534. )
  535. cc_test(
  536. name = "template_string_test",
  537. size = "small",
  538. srcs = ["template_string_test.cpp"],
  539. deps = [
  540. ":template_string",
  541. "//testing/base:gtest_main",
  542. "@googletest//:gtest",
  543. ],
  544. )
  545. cc_library(
  546. name = "type_enum",
  547. hdrs = ["type_enum.h"],
  548. deps = [":ostream"],
  549. )
  550. # The base version source file only uses non-stamped parts of the version
  551. # information so we expand it once here without any stamping.
  552. expand_version_build_info(
  553. name = "version_cpp_gen",
  554. out = "version.cpp",
  555. stamp = 0,
  556. template = "version.tmpl.cpp",
  557. )
  558. # Build a nostamp version of the stamp source, but mark its definitions as weak.
  559. # We'll include this in the library to satisfy definitions of library and test
  560. # users, but still allow binaries that want full build stamping to depend on the
  561. # stamp library below to override with strong, stamped definitions.
  562. expand_version_build_info(
  563. name = "version_nostamp_cpp_gen",
  564. out = "version_nostamp.cpp",
  565. stamp = 0,
  566. substitutions = {"MAKE_WEAK": "1"},
  567. template = "version_stamp.tmpl.cpp",
  568. )
  569. # Provides APIs for accessing Carbon version information.
  570. #
  571. # These provide full access to the major, minor, and patch version. It also
  572. # provides an API for querying version strings that may contain detailed build
  573. # information such as the commit SHA.
  574. #
  575. # By default, this provides the API and an *unstamped* implementations of
  576. # version strings. As a consequence, depending on this library doesn't introduce
  577. # any dependency on the commit SHA or loss of build caching.
  578. #
  579. # Targets that want full build info stamping in the data produced by these APIs
  580. # should additionally depend on `:version_stamp` below -- the data these APIs
  581. # return will be overridden in any binaries depending on that rule with the
  582. # fully stamped details.
  583. cc_library(
  584. name = "version",
  585. srcs = [
  586. "version.cpp",
  587. "version_nostamp.cpp",
  588. ],
  589. hdrs = ["version.h"],
  590. deps = [
  591. "@llvm-project//llvm:Support",
  592. ],
  593. )
  594. # Generate the fully stamped sourcefile if stamping is enabled in the build.
  595. expand_version_build_info(
  596. name = "version_stamp_cpp_gen",
  597. out = "version_stamp.cpp",
  598. template = "version_stamp.tmpl.cpp",
  599. )
  600. # Depend on this library to enable fully-stamped build information in the
  601. # version API provided by `:version`. This doesn't provide the API, it injects
  602. # an override of stamped versions of the data.
  603. #
  604. # Note that depending on this will significantly reduce build caching with
  605. # `--stamp` builds. It should be used sparingly, typically in user-facing
  606. # binaries or systems that need to render a maximally detailed version string
  607. # with build information stamped into it.
  608. cc_library(
  609. name = "version_stamp",
  610. srcs = ["version_stamp.cpp"],
  611. deps = [
  612. ":version",
  613. "@llvm-project//llvm:Support",
  614. ],
  615. )
  616. cc_library(
  617. name = "vlog",
  618. hdrs = ["vlog.h"],
  619. deps = [
  620. ":ostream",
  621. ":template_string",
  622. "@llvm-project//llvm:Support",
  623. ],
  624. )
  625. cc_test(
  626. name = "vlog_test",
  627. size = "small",
  628. srcs = ["vlog_test.cpp"],
  629. deps = [
  630. ":raw_string_ostream",
  631. ":vlog",
  632. "//testing/base:gtest_main",
  633. "@googletest//:gtest",
  634. ],
  635. )