BUILD.bazel 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  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(default_visibility = ["//visibility:public"])
  23. licenses(["notice"])
  24. cc_library(
  25. name = "path_util",
  26. hdrs = [
  27. "internal/path_util.h",
  28. ],
  29. copts = ABSL_DEFAULT_COPTS,
  30. linkopts = ABSL_DEFAULT_LINKOPTS,
  31. visibility = [
  32. "//absl/flags:__pkg__",
  33. ],
  34. deps = [
  35. "//absl/base:config",
  36. "//absl/strings",
  37. ],
  38. )
  39. cc_library(
  40. name = "program_name",
  41. srcs = [
  42. "internal/program_name.cc",
  43. ],
  44. hdrs = [
  45. "internal/program_name.h",
  46. ],
  47. copts = ABSL_DEFAULT_COPTS,
  48. linkopts = ABSL_DEFAULT_LINKOPTS,
  49. visibility = [
  50. "//absl/flags:__pkg__",
  51. ],
  52. deps = [
  53. ":path_util",
  54. "//absl/base:config",
  55. "//absl/base:core_headers",
  56. "//absl/strings",
  57. "//absl/synchronization",
  58. ],
  59. )
  60. cc_library(
  61. name = "config",
  62. srcs = [
  63. "usage_config.cc",
  64. ],
  65. hdrs = [
  66. "config.h",
  67. "usage_config.h",
  68. ],
  69. copts = ABSL_DEFAULT_COPTS,
  70. linkopts = ABSL_DEFAULT_LINKOPTS,
  71. deps = [
  72. ":path_util",
  73. ":program_name",
  74. "//absl/base:config",
  75. "//absl/base:core_headers",
  76. "//absl/strings",
  77. "//absl/synchronization",
  78. ],
  79. )
  80. cc_library(
  81. name = "marshalling",
  82. srcs = [
  83. "marshalling.cc",
  84. ],
  85. hdrs = [
  86. "marshalling.h",
  87. ],
  88. copts = ABSL_DEFAULT_COPTS,
  89. linkopts = ABSL_DEFAULT_LINKOPTS,
  90. deps = [
  91. "//absl/base:config",
  92. "//absl/base:core_headers",
  93. "//absl/base:log_severity",
  94. "//absl/strings",
  95. "//absl/strings:str_format",
  96. ],
  97. )
  98. cc_library(
  99. name = "commandlineflag_internal",
  100. srcs = [
  101. "internal/commandlineflag.cc",
  102. ],
  103. hdrs = [
  104. "internal/commandlineflag.h",
  105. ],
  106. copts = ABSL_DEFAULT_COPTS,
  107. linkopts = ABSL_DEFAULT_LINKOPTS,
  108. deps = [
  109. "//absl/base:config",
  110. "//absl/base:fast_type_id",
  111. ],
  112. )
  113. cc_library(
  114. name = "commandlineflag",
  115. srcs = [
  116. "commandlineflag.cc",
  117. ],
  118. hdrs = [
  119. "commandlineflag.h",
  120. ],
  121. copts = ABSL_DEFAULT_COPTS,
  122. linkopts = ABSL_DEFAULT_LINKOPTS,
  123. deps = [
  124. ":commandlineflag_internal",
  125. "//absl/base:config",
  126. "//absl/base:fast_type_id",
  127. "//absl/strings",
  128. "//absl/types:optional",
  129. ],
  130. )
  131. cc_library(
  132. name = "private_handle_accessor",
  133. srcs = [
  134. "internal/private_handle_accessor.cc",
  135. ],
  136. hdrs = [
  137. "internal/private_handle_accessor.h",
  138. ],
  139. copts = ABSL_DEFAULT_COPTS,
  140. linkopts = ABSL_DEFAULT_LINKOPTS,
  141. visibility = [
  142. "//absl/flags:__pkg__",
  143. ],
  144. deps = [
  145. ":commandlineflag",
  146. ":commandlineflag_internal",
  147. "//absl/base:config",
  148. "//absl/strings",
  149. ],
  150. )
  151. cc_library(
  152. name = "reflection",
  153. srcs = [
  154. "reflection.cc",
  155. ],
  156. hdrs = [
  157. "internal/registry.h",
  158. "reflection.h",
  159. ],
  160. copts = ABSL_DEFAULT_COPTS,
  161. linkopts = ABSL_DEFAULT_LINKOPTS,
  162. deps = [
  163. ":commandlineflag",
  164. ":commandlineflag_internal",
  165. ":config",
  166. ":private_handle_accessor",
  167. "//absl/base:config",
  168. "//absl/base:core_headers",
  169. "//absl/container:flat_hash_map",
  170. "//absl/strings",
  171. "//absl/synchronization",
  172. ],
  173. )
  174. cc_library(
  175. name = "flag_internal",
  176. srcs = [
  177. "internal/flag.cc",
  178. ],
  179. hdrs = [
  180. "internal/flag.h",
  181. "internal/sequence_lock.h",
  182. ],
  183. copts = ABSL_DEFAULT_COPTS,
  184. linkopts = ABSL_DEFAULT_LINKOPTS,
  185. visibility = ["//absl/base:__subpackages__"],
  186. deps = [
  187. ":commandlineflag",
  188. ":commandlineflag_internal",
  189. ":config",
  190. ":marshalling",
  191. ":reflection",
  192. "//absl/base",
  193. "//absl/base:config",
  194. "//absl/base:core_headers",
  195. "//absl/memory",
  196. "//absl/meta:type_traits",
  197. "//absl/strings",
  198. "//absl/synchronization",
  199. "//absl/utility",
  200. ],
  201. )
  202. cc_library(
  203. name = "flag",
  204. srcs = [
  205. "flag.cc",
  206. "internal/flag_msvc.inc",
  207. ],
  208. hdrs = [
  209. "declare.h",
  210. "flag.h",
  211. ],
  212. copts = ABSL_DEFAULT_COPTS,
  213. linkopts = ABSL_DEFAULT_LINKOPTS,
  214. deps = [
  215. ":config",
  216. ":flag_internal",
  217. ":reflection",
  218. "//absl/base",
  219. "//absl/base:config",
  220. "//absl/base:core_headers",
  221. "//absl/strings",
  222. ],
  223. )
  224. cc_library(
  225. name = "usage_internal",
  226. srcs = [
  227. "internal/usage.cc",
  228. ],
  229. hdrs = [
  230. "internal/usage.h",
  231. ],
  232. copts = ABSL_DEFAULT_COPTS,
  233. linkopts = ABSL_DEFAULT_LINKOPTS,
  234. visibility = [
  235. "//absl/flags:__pkg__",
  236. ],
  237. deps = [
  238. ":commandlineflag",
  239. ":config",
  240. ":flag",
  241. ":flag_internal",
  242. ":path_util",
  243. ":private_handle_accessor",
  244. ":program_name",
  245. ":reflection",
  246. "//absl/base:config",
  247. "//absl/base:core_headers",
  248. "//absl/container:flat_hash_map",
  249. "//absl/strings",
  250. ],
  251. )
  252. cc_library(
  253. name = "usage",
  254. srcs = [
  255. "usage.cc",
  256. ],
  257. hdrs = [
  258. "usage.h",
  259. ],
  260. copts = ABSL_DEFAULT_COPTS,
  261. linkopts = ABSL_DEFAULT_LINKOPTS,
  262. deps = [
  263. ":usage_internal",
  264. "//absl/base:config",
  265. "//absl/base:core_headers",
  266. "//absl/strings",
  267. "//absl/synchronization",
  268. ],
  269. )
  270. cc_library(
  271. name = "parse",
  272. srcs = ["parse.cc"],
  273. hdrs = [
  274. "internal/parse.h",
  275. "parse.h",
  276. ],
  277. copts = ABSL_DEFAULT_COPTS,
  278. linkopts = ABSL_DEFAULT_LINKOPTS,
  279. deps = [
  280. ":commandlineflag",
  281. ":commandlineflag_internal",
  282. ":config",
  283. ":flag",
  284. ":flag_internal",
  285. ":private_handle_accessor",
  286. ":program_name",
  287. ":reflection",
  288. ":usage",
  289. ":usage_internal",
  290. "//absl/base:config",
  291. "//absl/base:core_headers",
  292. "//absl/strings",
  293. "//absl/synchronization",
  294. ],
  295. )
  296. ############################################################################
  297. # Unit tests in alphabetical order.
  298. cc_test(
  299. name = "commandlineflag_test",
  300. size = "small",
  301. srcs = [
  302. "commandlineflag_test.cc",
  303. ],
  304. copts = ABSL_TEST_COPTS,
  305. linkopts = ABSL_DEFAULT_LINKOPTS,
  306. deps = [
  307. ":commandlineflag",
  308. ":commandlineflag_internal",
  309. ":config",
  310. ":flag",
  311. ":private_handle_accessor",
  312. ":reflection",
  313. "//absl/memory",
  314. "//absl/strings",
  315. "@com_google_googletest//:gtest_main",
  316. ],
  317. )
  318. cc_test(
  319. name = "config_test",
  320. size = "small",
  321. srcs = [
  322. "config_test.cc",
  323. ],
  324. copts = ABSL_TEST_COPTS,
  325. linkopts = ABSL_DEFAULT_LINKOPTS,
  326. deps = [
  327. ":config",
  328. "@com_google_googletest//:gtest_main",
  329. ],
  330. )
  331. cc_test(
  332. name = "flag_test",
  333. size = "small",
  334. srcs = [
  335. "flag_test.cc",
  336. "flag_test_defs.cc",
  337. ],
  338. copts = ABSL_TEST_COPTS,
  339. linkopts = ABSL_DEFAULT_LINKOPTS,
  340. deps = [
  341. ":config",
  342. ":flag",
  343. ":flag_internal",
  344. ":marshalling",
  345. ":reflection",
  346. "//absl/base:core_headers",
  347. "//absl/base:malloc_internal",
  348. "//absl/strings",
  349. "//absl/time",
  350. "@com_google_googletest//:gtest_main",
  351. ],
  352. )
  353. cc_binary(
  354. name = "flag_benchmark",
  355. testonly = 1,
  356. srcs = [
  357. "flag_benchmark.cc",
  358. ],
  359. copts = ABSL_TEST_COPTS,
  360. linkopts = select({
  361. "//conditions:default": [],
  362. }) + ABSL_DEFAULT_LINKOPTS,
  363. tags = ["benchmark"],
  364. visibility = ["//visibility:private"],
  365. deps = [
  366. "flag_benchmark.lds",
  367. ":flag",
  368. ":marshalling",
  369. ":parse",
  370. ":reflection",
  371. "//absl/strings",
  372. "//absl/time",
  373. "//absl/types:optional",
  374. "@com_github_google_benchmark//:benchmark_main",
  375. ],
  376. )
  377. cc_test(
  378. name = "marshalling_test",
  379. size = "small",
  380. srcs = [
  381. "marshalling_test.cc",
  382. ],
  383. copts = ABSL_TEST_COPTS,
  384. linkopts = ABSL_DEFAULT_LINKOPTS,
  385. deps = [
  386. ":marshalling",
  387. "@com_google_googletest//:gtest_main",
  388. ],
  389. )
  390. cc_test(
  391. name = "parse_test",
  392. size = "small",
  393. srcs = [
  394. "parse_test.cc",
  395. ],
  396. copts = ABSL_TEST_COPTS,
  397. linkopts = ABSL_DEFAULT_LINKOPTS,
  398. deps = [
  399. ":flag",
  400. ":parse",
  401. ":reflection",
  402. ":usage_internal",
  403. "//absl/base:raw_logging_internal",
  404. "//absl/base:scoped_set_env",
  405. "//absl/strings",
  406. "//absl/types:span",
  407. "@com_google_googletest//:gtest_main",
  408. ],
  409. )
  410. cc_test(
  411. name = "path_util_test",
  412. size = "small",
  413. srcs = [
  414. "internal/path_util_test.cc",
  415. ],
  416. copts = ABSL_TEST_COPTS,
  417. linkopts = ABSL_DEFAULT_LINKOPTS,
  418. deps = [
  419. ":path_util",
  420. "@com_google_googletest//:gtest_main",
  421. ],
  422. )
  423. cc_test(
  424. name = "program_name_test",
  425. size = "small",
  426. srcs = [
  427. "internal/program_name_test.cc",
  428. ],
  429. copts = ABSL_TEST_COPTS,
  430. linkopts = ABSL_DEFAULT_LINKOPTS,
  431. deps = [
  432. ":program_name",
  433. "//absl/strings",
  434. "@com_google_googletest//:gtest_main",
  435. ],
  436. )
  437. cc_test(
  438. name = "reflection_test",
  439. size = "small",
  440. srcs = [
  441. "reflection_test.cc",
  442. ],
  443. copts = ABSL_TEST_COPTS,
  444. linkopts = ABSL_DEFAULT_LINKOPTS,
  445. deps = [
  446. ":commandlineflag_internal",
  447. ":flag",
  448. ":marshalling",
  449. ":reflection",
  450. ":usage_internal",
  451. "//absl/memory",
  452. "//absl/strings",
  453. "@com_google_googletest//:gtest_main",
  454. ],
  455. )
  456. cc_test(
  457. name = "sequence_lock_test",
  458. size = "small",
  459. timeout = "moderate",
  460. srcs = [
  461. "internal/sequence_lock_test.cc",
  462. ],
  463. copts = ABSL_TEST_COPTS,
  464. linkopts = ABSL_DEFAULT_LINKOPTS,
  465. shard_count = 31,
  466. deps = [
  467. ":flag_internal",
  468. "//absl/base",
  469. "//absl/container:fixed_array",
  470. "//absl/time",
  471. "@com_google_googletest//:gtest_main",
  472. ],
  473. )
  474. cc_test(
  475. name = "usage_config_test",
  476. size = "small",
  477. srcs = [
  478. "usage_config_test.cc",
  479. ],
  480. copts = ABSL_TEST_COPTS,
  481. linkopts = ABSL_DEFAULT_LINKOPTS,
  482. deps = [
  483. ":config",
  484. ":path_util",
  485. ":program_name",
  486. "//absl/strings",
  487. "@com_google_googletest//:gtest_main",
  488. ],
  489. )
  490. cc_test(
  491. name = "usage_test",
  492. size = "small",
  493. srcs = [
  494. "internal/usage_test.cc",
  495. ],
  496. copts = ABSL_TEST_COPTS,
  497. linkopts = ABSL_DEFAULT_LINKOPTS,
  498. deps = [
  499. ":config",
  500. ":flag",
  501. ":parse",
  502. ":path_util",
  503. ":program_name",
  504. ":reflection",
  505. ":usage",
  506. ":usage_internal",
  507. "//absl/strings",
  508. "@com_google_googletest//:gtest",
  509. ],
  510. )