__init__.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. from devtools.yamaker.modules import Library, Linkable, Switch, Words
  2. from devtools.yamaker.project import CMakeNinjaNixProject
  3. # These libraries are used to
  4. # * Fix building with ya make --checkout (see DTCC-615 for details)
  5. # * Implement unbunding of
  6. HEADER_ONLY_LIBS = {
  7. "absl/algorithm",
  8. "absl/functional",
  9. "absl/memory",
  10. "absl/meta",
  11. "absl/utility",
  12. }
  13. def post_install(self):
  14. for lib in HEADER_ONLY_LIBS:
  15. assert lib not in self.yamakes
  16. self.yamakes[lib] = self.module(
  17. Library,
  18. NO_RUNTIME=True,
  19. )
  20. with self.yamakes["absl/time"] as m:
  21. m.after(
  22. "ADDINCL",
  23. Switch(
  24. {
  25. "OS_DARWIN OR OS_IOS": Linkable(EXTRALIBS=[Words("-framework CoreFoundation")]),
  26. }
  27. ),
  28. )
  29. with self.yamakes["absl/log"] as log:
  30. log.after(
  31. "ADDINCL",
  32. Switch(
  33. OS_ANDROID=Linkable(LDFLAGS=["-llog"]),
  34. ),
  35. )
  36. # fix (not yet automatically discoverable) dependencies on header-only parts of abseil
  37. self.yamakes["absl/container"].PEERDIR |= {
  38. f"{self.arcdir}/absl/types",
  39. f"{self.arcdir}/absl/hash",
  40. f"{self.arcdir}/absl/memory",
  41. }
  42. self.yamakes["absl/meta"].PEERDIR |= {
  43. f"{self.arcdir}/absl/base",
  44. }
  45. self.yamakes["absl/memory"].PEERDIR |= {
  46. f"{self.arcdir}/absl/meta",
  47. }
  48. self.yamakes["absl/debugging"].PEERDIR -= {
  49. f"{self.arcdir}/absl/strings",
  50. f"{self.arcdir}/absl/numeric",
  51. f"{self.arcdir}/absl/demangle",
  52. }
  53. self.yamakes["absl/strings"].PEERDIR -= {
  54. f"{self.arcdir}/absl/debugging",
  55. f"{self.arcdir}/absl/demangle",
  56. f"{self.arcdir}/absl/profiling",
  57. f"{self.arcdir}/absl/status",
  58. f"{self.arcdir}/absl/synchronization",
  59. f"{self.arcdir}/absl/time",
  60. f"{self.arcdir}/absl/types",
  61. }
  62. self.yamakes["absl/hash"].PEERDIR |= {
  63. f"{self.arcdir}/absl/types",
  64. }
  65. self.yamakes["absl/flags"].PEERDIR |= {
  66. f"{self.arcdir}/absl/memory",
  67. }
  68. self.yamakes["absl/types"].PEERDIR |= {
  69. f"{self.arcdir}/absl/memory",
  70. }
  71. self.yamakes["absl/base"].PEERDIR.add("library/cpp/sanitizer/include")
  72. self.yamakes["absl/debugging"].PEERDIR.add("library/cpp/sanitizer/include")
  73. self.yamakes["absl/container"].PEERDIR.add("library/cpp/sanitizer/include")
  74. with self.yamakes["."] as m:
  75. lib = self.module(
  76. Library,
  77. PEERDIR={f"{self.arcdir}/{inc}" for inc in m.RECURSE},
  78. RECURSE=m.RECURSE,
  79. NO_RUNTIME=True,
  80. )
  81. for extra_lib in HEADER_ONLY_LIBS:
  82. lib.PEERDIR.add(f"{self.arcdir}/{extra_lib}")
  83. lib.RECURSE.add(extra_lib)
  84. self.yamakes["."] = lib
  85. abseil_cpp = CMakeNinjaNixProject(
  86. owners=["g:cpp-contrib"],
  87. arcdir="contrib/restricted/abseil-cpp",
  88. nixattr="abseil-cpp",
  89. disable_includes=[
  90. # if defined(__myriad2__)
  91. "rtems.h",
  92. # if defined(__Fuchsia__)
  93. "fuchsia/intl/cpp/fidl.h",
  94. "lib/async-loop/cpp/loop.h",
  95. "lib/fdio/directory.h",
  96. "lib/sys/cpp/component_context.h",
  97. "zircon/types.h",
  98. ],
  99. copy_sources=[
  100. "absl/base/internal/*.inc",
  101. "absl/flags/internal/*.inc",
  102. "absl/synchronization/internal/*.inc",
  103. "absl/numeric/int128_no_intrinsic.inc",
  104. "absl/debugging/internal/*.inc",
  105. "absl/debugging/*.inc",
  106. "absl/strings/internal/stl_type_traits.h",
  107. "absl/time/internal/*.inc",
  108. "absl/**/*.h",
  109. ],
  110. ignore_targets=[
  111. # these depend on gtest, ignore it.
  112. "absl_scoped_mock_log",
  113. "absl_status_matchers",
  114. ],
  115. copy_sources_except=[
  116. "absl/status/status_matchers.h",
  117. ],
  118. put={
  119. "absl_bad_any_cast_impl": "absl/types",
  120. "absl_base": "absl/base",
  121. "absl_debugging_internal": "absl/debugging",
  122. "absl_flags_internal": "absl/flags",
  123. "absl_hash": "absl/hash",
  124. "absl_int128": "absl/numeric",
  125. "absl_log_entry": "absl/log",
  126. "absl_periodic_sampler": "absl/profiling",
  127. "absl_random_distributions": "absl/random",
  128. "absl_raw_hash_set": "absl/container",
  129. "absl_status": "absl/status",
  130. "absl_strings": "absl/strings",
  131. "absl_synchronization": "absl/synchronization",
  132. "absl_time": "absl/time",
  133. },
  134. put_with={
  135. "absl_bad_any_cast_impl": [
  136. "absl_bad_optional_access",
  137. "absl_bad_variant_access",
  138. ],
  139. "absl_base": [
  140. "absl_log_severity",
  141. "absl_malloc_internal",
  142. "absl_poison",
  143. "absl_raw_logging_internal",
  144. "absl_scoped_set_env",
  145. "absl_spinlock_wait",
  146. "absl_strerror",
  147. "absl_throw_delegate",
  148. ],
  149. "absl_debugging_internal": [
  150. "absl_decode_rust_punycode",
  151. "absl_demangle_internal",
  152. "absl_demangle_rust",
  153. "absl_examine_stack",
  154. "absl_failure_signal_handler",
  155. "absl_leak_check",
  156. "absl_stacktrace",
  157. "absl_symbolize",
  158. "absl_utf8_for_code_point",
  159. ],
  160. "absl_flags_internal": [
  161. "absl_flags_commandlineflag",
  162. "absl_flags_commandlineflag_internal",
  163. "absl_flags_config",
  164. "absl_flags_marshalling",
  165. "absl_flags_parse",
  166. "absl_flags_private_handle_accessor",
  167. "absl_flags_program_name",
  168. "absl_flags_reflection",
  169. "absl_flags_usage",
  170. "absl_flags_usage_internal",
  171. ],
  172. "absl_hash": [
  173. "absl_low_level_hash",
  174. "absl_city",
  175. ],
  176. "absl_log_entry": [
  177. "absl_die_if_null",
  178. "absl_log_flags",
  179. "absl_log_globals",
  180. "absl_log_initialize",
  181. "absl_log_internal_check_op",
  182. "absl_log_internal_conditions",
  183. "absl_log_internal_fnmatch",
  184. "absl_log_internal_format",
  185. "absl_log_internal_globals",
  186. "absl_log_internal_log_sink_set",
  187. "absl_log_internal_message",
  188. "absl_log_internal_nullguard",
  189. "absl_log_internal_proto",
  190. "absl_log_sink",
  191. "absl_vlog_config_internal",
  192. ],
  193. "absl_periodic_sampler": [
  194. "absl_exponential_biased",
  195. ],
  196. "absl_random_distributions": [
  197. "absl_random_internal_distribution_test_util",
  198. "absl_random_internal_platform",
  199. "absl_random_internal_pool_urbg",
  200. "absl_random_internal_randen",
  201. "absl_random_internal_randen_hwaes",
  202. "absl_random_internal_randen_hwaes_impl",
  203. "absl_random_internal_randen_slow",
  204. "absl_random_internal_seed_material",
  205. "absl_random_seed_gen_exception",
  206. "absl_random_seed_sequences",
  207. ],
  208. "absl_raw_hash_set": [
  209. "absl_hashtablez_sampler",
  210. ],
  211. "absl_strings": [
  212. # FIXME thegeorg@:
  213. # put crc libraries together with strings libraries
  214. # to resolve dependency loop around absl_crc_cor
  215. "absl_crc32c",
  216. "absl_crc_cpu_detect",
  217. "absl_crc_internal",
  218. "absl_crc_cord_state",
  219. "absl_cord",
  220. "absl_cord_internal",
  221. "absl_cordz_functions",
  222. "absl_cordz_handle",
  223. "absl_cordz_info",
  224. "absl_cordz_sample_token",
  225. "absl_statusor",
  226. "absl_string_view",
  227. "absl_strings_internal",
  228. "absl_str_format_internal",
  229. ],
  230. "absl_synchronization": [
  231. "absl_graphcycles_internal",
  232. "absl_kernel_timeout_internal",
  233. ],
  234. "absl_time": [
  235. "absl_civil_time",
  236. "absl_time_zone",
  237. ],
  238. },
  239. post_install=post_install,
  240. )