BUILD.bazel 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601
  1. #
  2. # Copyright 2019 The Abseil Authors.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # https://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. #
  16. load(
  17. "//absl:copts/configure_copts.bzl",
  18. "ABSL_DEFAULT_COPTS",
  19. "ABSL_DEFAULT_LINKOPTS",
  20. "ABSL_TEST_COPTS",
  21. )
  22. package(
  23. default_visibility = ["//visibility:public"],
  24. features = [
  25. "header_modules",
  26. "layering_check",
  27. "parse_headers",
  28. ],
  29. )
  30. licenses(["notice"])
  31. cc_library(
  32. name = "path_util",
  33. hdrs = [
  34. "internal/path_util.h",
  35. ],
  36. copts = ABSL_DEFAULT_COPTS,
  37. linkopts = ABSL_DEFAULT_LINKOPTS,
  38. visibility = [
  39. "//absl/flags:__pkg__",
  40. ],
  41. deps = [
  42. "//absl/base:config",
  43. "//absl/strings",
  44. ],
  45. )
  46. cc_library(
  47. name = "program_name",
  48. srcs = [
  49. "internal/program_name.cc",
  50. ],
  51. hdrs = [
  52. "internal/program_name.h",
  53. ],
  54. copts = ABSL_DEFAULT_COPTS,
  55. linkopts = ABSL_DEFAULT_LINKOPTS,
  56. visibility = [
  57. "//absl/flags:__pkg__",
  58. "//absl/log:__pkg__",
  59. ],
  60. deps = [
  61. ":path_util",
  62. "//absl/base:config",
  63. "//absl/base:core_headers",
  64. "//absl/strings",
  65. "//absl/synchronization",
  66. ],
  67. )
  68. cc_library(
  69. name = "config",
  70. srcs = [
  71. "usage_config.cc",
  72. ],
  73. hdrs = [
  74. "config.h",
  75. "usage_config.h",
  76. ],
  77. copts = ABSL_DEFAULT_COPTS,
  78. linkopts = ABSL_DEFAULT_LINKOPTS,
  79. deps = [
  80. ":path_util",
  81. ":program_name",
  82. "//absl/base:config",
  83. "//absl/base:core_headers",
  84. "//absl/strings",
  85. "//absl/synchronization",
  86. ],
  87. )
  88. cc_library(
  89. name = "marshalling",
  90. srcs = [
  91. "marshalling.cc",
  92. ],
  93. hdrs = [
  94. "marshalling.h",
  95. ],
  96. copts = ABSL_DEFAULT_COPTS,
  97. linkopts = ABSL_DEFAULT_LINKOPTS,
  98. deps = [
  99. "//absl/base:config",
  100. "//absl/base:core_headers",
  101. "//absl/base:log_severity",
  102. "//absl/numeric:int128",
  103. "//absl/strings",
  104. "//absl/strings:str_format",
  105. "//absl/types:optional",
  106. ],
  107. )
  108. cc_library(
  109. name = "commandlineflag_internal",
  110. srcs = [
  111. "internal/commandlineflag.cc",
  112. ],
  113. hdrs = [
  114. "internal/commandlineflag.h",
  115. ],
  116. copts = ABSL_DEFAULT_COPTS,
  117. linkopts = ABSL_DEFAULT_LINKOPTS,
  118. visibility = [
  119. "//visibility:private",
  120. ],
  121. deps = [
  122. "//absl/base:config",
  123. "//absl/base:fast_type_id",
  124. ],
  125. )
  126. cc_library(
  127. name = "commandlineflag",
  128. srcs = [
  129. "commandlineflag.cc",
  130. ],
  131. hdrs = [
  132. "commandlineflag.h",
  133. ],
  134. copts = ABSL_DEFAULT_COPTS,
  135. linkopts = ABSL_DEFAULT_LINKOPTS,
  136. deps = [
  137. ":commandlineflag_internal",
  138. "//absl/base:config",
  139. "//absl/base:fast_type_id",
  140. "//absl/strings",
  141. "//absl/types:optional",
  142. ],
  143. )
  144. cc_library(
  145. name = "private_handle_accessor",
  146. srcs = [
  147. "internal/private_handle_accessor.cc",
  148. ],
  149. hdrs = [
  150. "internal/private_handle_accessor.h",
  151. ],
  152. copts = ABSL_DEFAULT_COPTS,
  153. linkopts = ABSL_DEFAULT_LINKOPTS,
  154. visibility = [
  155. "//absl/flags:__pkg__",
  156. ],
  157. deps = [
  158. ":commandlineflag",
  159. ":commandlineflag_internal",
  160. "//absl/base:config",
  161. "//absl/strings",
  162. ],
  163. )
  164. cc_library(
  165. name = "reflection",
  166. srcs = [
  167. "reflection.cc",
  168. ],
  169. hdrs = [
  170. "internal/registry.h",
  171. "reflection.h",
  172. ],
  173. copts = ABSL_DEFAULT_COPTS,
  174. linkopts = ABSL_DEFAULT_LINKOPTS,
  175. deps = [
  176. ":commandlineflag",
  177. ":commandlineflag_internal",
  178. ":config",
  179. ":private_handle_accessor",
  180. "//absl/base:config",
  181. "//absl/base:core_headers",
  182. "//absl/base:no_destructor",
  183. "//absl/container:flat_hash_map",
  184. "//absl/strings",
  185. "//absl/synchronization",
  186. ],
  187. )
  188. cc_library(
  189. name = "flag_internal",
  190. srcs = [
  191. "internal/flag.cc",
  192. ],
  193. hdrs = [
  194. "internal/flag.h",
  195. "internal/sequence_lock.h",
  196. ],
  197. copts = ABSL_DEFAULT_COPTS,
  198. linkopts = ABSL_DEFAULT_LINKOPTS,
  199. visibility = ["//absl/base:__subpackages__"],
  200. deps = [
  201. ":commandlineflag",
  202. ":commandlineflag_internal",
  203. ":config",
  204. ":marshalling",
  205. ":reflection",
  206. "//absl/base",
  207. "//absl/base:config",
  208. "//absl/base:core_headers",
  209. "//absl/base:dynamic_annotations",
  210. "//absl/memory",
  211. "//absl/meta:type_traits",
  212. "//absl/strings",
  213. "//absl/synchronization",
  214. "//absl/utility",
  215. ],
  216. )
  217. cc_library(
  218. name = "flag",
  219. hdrs = [
  220. "declare.h",
  221. "flag.h",
  222. ],
  223. copts = ABSL_DEFAULT_COPTS,
  224. linkopts = ABSL_DEFAULT_LINKOPTS,
  225. deps = [
  226. ":commandlineflag",
  227. ":config",
  228. ":flag_internal",
  229. ":reflection",
  230. "//absl/base:config",
  231. "//absl/base:core_headers",
  232. "//absl/strings",
  233. ],
  234. )
  235. cc_library(
  236. name = "usage_internal",
  237. srcs = [
  238. "internal/usage.cc",
  239. ],
  240. hdrs = [
  241. "internal/usage.h",
  242. ],
  243. copts = ABSL_DEFAULT_COPTS,
  244. linkopts = ABSL_DEFAULT_LINKOPTS,
  245. visibility = [
  246. "//absl/flags:__pkg__",
  247. ],
  248. deps = [
  249. ":commandlineflag",
  250. ":config",
  251. ":flag",
  252. ":flag_internal",
  253. ":path_util",
  254. ":private_handle_accessor",
  255. ":program_name",
  256. ":reflection",
  257. "//absl/base:config",
  258. "//absl/base:core_headers",
  259. "//absl/strings",
  260. "//absl/synchronization",
  261. ],
  262. )
  263. cc_library(
  264. name = "usage",
  265. srcs = [
  266. "usage.cc",
  267. ],
  268. hdrs = [
  269. "usage.h",
  270. ],
  271. copts = ABSL_DEFAULT_COPTS,
  272. linkopts = ABSL_DEFAULT_LINKOPTS,
  273. deps = [
  274. ":usage_internal",
  275. "//absl/base:config",
  276. "//absl/base:core_headers",
  277. "//absl/base:raw_logging_internal",
  278. "//absl/strings",
  279. "//absl/synchronization",
  280. ],
  281. )
  282. cc_library(
  283. name = "parse",
  284. srcs = ["parse.cc"],
  285. hdrs = [
  286. "internal/parse.h",
  287. "parse.h",
  288. ],
  289. copts = ABSL_DEFAULT_COPTS,
  290. linkopts = ABSL_DEFAULT_LINKOPTS,
  291. deps = [
  292. ":commandlineflag",
  293. ":commandlineflag_internal",
  294. ":config",
  295. ":flag",
  296. ":flag_internal",
  297. ":private_handle_accessor",
  298. ":program_name",
  299. ":reflection",
  300. ":usage",
  301. ":usage_internal",
  302. "//absl/algorithm:container",
  303. "//absl/base:config",
  304. "//absl/base:core_headers",
  305. "//absl/strings",
  306. "//absl/synchronization",
  307. ],
  308. )
  309. ############################################################################
  310. # Unit tests in alphabetical order.
  311. cc_test(
  312. name = "commandlineflag_test",
  313. size = "small",
  314. srcs = [
  315. "commandlineflag_test.cc",
  316. ],
  317. copts = ABSL_TEST_COPTS,
  318. linkopts = ABSL_DEFAULT_LINKOPTS,
  319. tags = [
  320. "no_test:os:android",
  321. "no_test:os:ios",
  322. "no_test_android",
  323. "no_test_ios",
  324. "no_test_wasm",
  325. ],
  326. deps = [
  327. ":commandlineflag",
  328. ":config",
  329. ":flag",
  330. ":private_handle_accessor",
  331. ":reflection",
  332. "//absl/memory",
  333. "//absl/strings",
  334. "@com_google_googletest//:gtest",
  335. "@com_google_googletest//:gtest_main",
  336. ],
  337. )
  338. cc_test(
  339. name = "config_test",
  340. size = "small",
  341. srcs = [
  342. "config_test.cc",
  343. ],
  344. copts = ABSL_TEST_COPTS,
  345. linkopts = ABSL_DEFAULT_LINKOPTS,
  346. deps = [
  347. ":config",
  348. "@com_google_googletest//:gtest",
  349. "@com_google_googletest//:gtest_main",
  350. ],
  351. )
  352. cc_test(
  353. name = "flag_test",
  354. size = "small",
  355. srcs = [
  356. "flag_test.cc",
  357. "flag_test_defs.cc",
  358. ],
  359. copts = ABSL_TEST_COPTS,
  360. linkopts = ABSL_DEFAULT_LINKOPTS,
  361. tags = [
  362. "no_test:os:android",
  363. "no_test:os:ios",
  364. "no_test_android",
  365. "no_test_ios",
  366. "no_test_wasm",
  367. ],
  368. deps = [
  369. ":config",
  370. ":flag",
  371. ":flag_internal",
  372. ":marshalling",
  373. ":reflection",
  374. "//absl/base:core_headers",
  375. "//absl/base:malloc_internal",
  376. "//absl/base:raw_logging_internal",
  377. "//absl/numeric:int128",
  378. "//absl/strings",
  379. "//absl/time",
  380. "//absl/types:optional",
  381. "@com_google_googletest//:gtest",
  382. "@com_google_googletest//:gtest_main",
  383. ],
  384. )
  385. cc_binary(
  386. name = "flag_benchmark",
  387. testonly = True,
  388. srcs = [
  389. "flag_benchmark.cc",
  390. ],
  391. copts = ABSL_TEST_COPTS,
  392. linkopts = select({
  393. "//conditions:default": [],
  394. }) + ABSL_DEFAULT_LINKOPTS,
  395. tags = ["benchmark"],
  396. visibility = ["//visibility:private"],
  397. deps = [
  398. "flag_benchmark.lds",
  399. ":flag",
  400. ":marshalling",
  401. ":parse",
  402. ":reflection",
  403. "//absl/strings",
  404. "//absl/time",
  405. "//absl/types:optional",
  406. "@com_github_google_benchmark//:benchmark_main",
  407. ],
  408. )
  409. cc_test(
  410. name = "marshalling_test",
  411. size = "small",
  412. srcs = [
  413. "marshalling_test.cc",
  414. ],
  415. copts = ABSL_TEST_COPTS,
  416. linkopts = ABSL_DEFAULT_LINKOPTS,
  417. deps = [
  418. ":marshalling",
  419. "@com_google_googletest//:gtest",
  420. "@com_google_googletest//:gtest_main",
  421. ],
  422. )
  423. cc_test(
  424. name = "parse_test",
  425. size = "small",
  426. timeout = "moderate",
  427. srcs = [
  428. "parse_test.cc",
  429. ],
  430. copts = ABSL_TEST_COPTS,
  431. linkopts = ABSL_DEFAULT_LINKOPTS,
  432. tags = [
  433. "no_test:os:android",
  434. "no_test:os:ios",
  435. "no_test_android",
  436. "no_test_ios",
  437. "no_test_wasm",
  438. ],
  439. deps = [
  440. ":config",
  441. ":flag",
  442. ":parse",
  443. ":reflection",
  444. ":usage_internal",
  445. "//absl/base:scoped_set_env",
  446. "//absl/log",
  447. "//absl/strings",
  448. "//absl/types:span",
  449. "@com_google_googletest//:gtest",
  450. "@com_google_googletest//:gtest_main",
  451. ],
  452. )
  453. cc_test(
  454. name = "path_util_test",
  455. size = "small",
  456. srcs = [
  457. "internal/path_util_test.cc",
  458. ],
  459. copts = ABSL_TEST_COPTS,
  460. linkopts = ABSL_DEFAULT_LINKOPTS,
  461. deps = [
  462. ":path_util",
  463. "@com_google_googletest//:gtest",
  464. "@com_google_googletest//:gtest_main",
  465. ],
  466. )
  467. cc_test(
  468. name = "program_name_test",
  469. size = "small",
  470. srcs = [
  471. "internal/program_name_test.cc",
  472. ],
  473. copts = ABSL_TEST_COPTS,
  474. linkopts = ABSL_DEFAULT_LINKOPTS,
  475. tags = ["no_test_wasm"],
  476. deps = [
  477. ":program_name",
  478. "//absl/strings",
  479. "@com_google_googletest//:gtest",
  480. "@com_google_googletest//:gtest_main",
  481. ],
  482. )
  483. cc_test(
  484. name = "reflection_test",
  485. size = "small",
  486. srcs = [
  487. "reflection_test.cc",
  488. ],
  489. copts = ABSL_TEST_COPTS,
  490. linkopts = ABSL_DEFAULT_LINKOPTS,
  491. tags = [
  492. "no_test:os:android",
  493. "no_test:os:ios",
  494. "no_test_android",
  495. "no_test_ios",
  496. "no_test_wasm",
  497. ],
  498. deps = [
  499. ":config",
  500. ":flag",
  501. ":reflection",
  502. "//absl/memory",
  503. "//absl/strings",
  504. "@com_google_googletest//:gtest",
  505. "@com_google_googletest//:gtest_main",
  506. ],
  507. )
  508. cc_test(
  509. name = "sequence_lock_test",
  510. size = "small",
  511. timeout = "moderate",
  512. srcs = [
  513. "internal/sequence_lock_test.cc",
  514. ],
  515. copts = ABSL_TEST_COPTS,
  516. linkopts = ABSL_DEFAULT_LINKOPTS,
  517. shard_count = 31,
  518. tags = ["no_test_wasm"],
  519. deps = [
  520. ":flag_internal",
  521. "//absl/base",
  522. "//absl/container:fixed_array",
  523. "//absl/time",
  524. "@com_google_googletest//:gtest",
  525. "@com_google_googletest//:gtest_main",
  526. ],
  527. )
  528. cc_test(
  529. name = "usage_config_test",
  530. size = "small",
  531. srcs = [
  532. "usage_config_test.cc",
  533. ],
  534. copts = ABSL_TEST_COPTS,
  535. linkopts = ABSL_DEFAULT_LINKOPTS,
  536. deps = [
  537. ":config",
  538. ":path_util",
  539. ":program_name",
  540. "//absl/strings",
  541. "@com_google_googletest//:gtest",
  542. "@com_google_googletest//:gtest_main",
  543. ],
  544. )
  545. cc_test(
  546. name = "usage_test",
  547. size = "small",
  548. srcs = [
  549. "internal/usage_test.cc",
  550. ],
  551. copts = ABSL_TEST_COPTS,
  552. linkopts = ABSL_DEFAULT_LINKOPTS,
  553. tags = [
  554. "no_test:os:android",
  555. "no_test:os:ios",
  556. "no_test_android",
  557. "no_test_ios",
  558. "no_test_wasm",
  559. ],
  560. deps = [
  561. ":config",
  562. ":flag",
  563. ":parse",
  564. ":path_util",
  565. ":program_name",
  566. ":reflection",
  567. ":usage",
  568. ":usage_internal",
  569. "//absl/strings",
  570. "@com_google_googletest//:gtest",
  571. ],
  572. )