__init__.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. from devtools.yamaker import fileutil
  2. from devtools.yamaker.modules import GLOBAL, Linkable, Py3Program, Recursable, Recurse, Switch
  3. from devtools.yamaker.project import CMakeNinjaNixProject
  4. def post_install(self):
  5. fileutil.re_sub_dir(f"{self.dstdir}/test", "TEST_BENCHMARK_LIBRARY_HAS_NO_ASSERTIONS", "NDEBUG")
  6. fileutil.copy([f"{self.srcdir}/tools/compare.py", f"{self.srcdir}/tools/gbench"], f"{self.dstdir}/tools/compare")
  7. with self.yamakes["."] as benchmark:
  8. idx = benchmark.CFLAGS.index("-DBENCHMARK_STATIC_DEFINE")
  9. benchmark.CFLAGS[idx] = GLOBAL("-DBENCHMARK_STATIC_DEFINE")
  10. benchmark.CFLAGS.remove("-DBENCHMARK_HAS_PTHREAD_AFFINITY")
  11. benchmark.after(
  12. "CFLAGS",
  13. Switch(
  14. OS_LINUX=Linkable(CFLAGS=["-DBENCHMARK_HAS_PTHREAD_AFFINITY"]),
  15. ),
  16. )
  17. benchmark.RECURSE.add("tools")
  18. with self.yamakes["test"] as benchmark_gtest:
  19. benchmark_gtest.module = "GTEST"
  20. # fmt: off
  21. benchmark_gtest.PEERDIR = [
  22. peerdir
  23. for peerdir in benchmark_gtest.PEERDIR
  24. if not peerdir.startswith("contrib/restricted/googletest")
  25. ]
  26. # fmt: on
  27. self.yamakes["tools"] = Recurse()
  28. with self.yamakes["tools"] as tools:
  29. # google/benchmark contrib is built for wide range of platforms by devtools checks
  30. # but python/numpy/scipy are supported only for subset of platforms.
  31. # So here we have such complex condition to enable recurse only for supported platforms.
  32. tools.after(
  33. "RECURSE",
  34. Switch(
  35. {
  36. "NOT USE_STL_SYSTEM": Switch(
  37. {
  38. "NOT USE_SYSTEM_PYTHON OR NOT _SYSTEM_PYTHON27": Switch(
  39. {
  40. "OS_LINIX OR OS_DARWIN OR OS_WINDOWS": Switch(
  41. {"ARCH_X86_64 OR ARCH_ARM64": Recursable(RECURSE={"compare"})}
  42. )
  43. }
  44. )
  45. }
  46. )
  47. }
  48. ),
  49. )
  50. self.yamakes["tools/compare"] = self.module(
  51. Py3Program,
  52. LICENSE=[self.license],
  53. PY_SRCS=[
  54. "TOP_LEVEL",
  55. "compare.py",
  56. "gbench/__init__.py",
  57. "gbench/report.py",
  58. "gbench/util.py",
  59. ],
  60. PY_MAIN="compare",
  61. PEERDIR=["contrib/python/numpy", "contrib/python/scipy"],
  62. NO_LINT=True,
  63. )
  64. benchmark = CMakeNinjaNixProject(
  65. owners=["bulatman", "g:cpp-contrib"],
  66. arcdir="contrib/restricted/google/benchmark",
  67. license="Apache-2.0",
  68. nixattr="gbenchmark",
  69. addincl_global={".": {"./include"}},
  70. disable_includes=[
  71. "emscripten.h",
  72. "kstat.h",
  73. "qurt.h",
  74. "perfmon/",
  75. "sys/syspage.h",
  76. ],
  77. flags=[
  78. # Adds -DBENCHMARK_STATIC_DEFINE preprocessor flag which fixed MSVC build
  79. "-DBUILD_SHARED_LIBS=OFF",
  80. # Otherwise the tests do not use assert.
  81. "-DCMAKE_BUILD_TYPE=Debug",
  82. "-DBENCHMARK_HAS_CXX03_FLAG=NO",
  83. "-DBENCHMARK_USE_BUNDLED_GTEST=OFF",
  84. ],
  85. install_targets={
  86. "benchmark",
  87. "benchmark_gtest",
  88. "benchmark_name_gtest",
  89. "commandlineflags_gtest",
  90. "statistics_gtest",
  91. "string_util_gtest",
  92. },
  93. put={
  94. "benchmark": ".",
  95. "benchmark_gtest": "test",
  96. },
  97. put_with={
  98. "benchmark_gtest": [
  99. "benchmark_name_gtest",
  100. "commandlineflags_gtest",
  101. "statistics_gtest",
  102. "string_util_gtest",
  103. ]
  104. },
  105. post_install=post_install,
  106. )