xmake.lua 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package("opentelemetry-cpp")
  2. set_homepage("https://opentelemetry.io/")
  3. set_description("OpenTelemetry is a collection of tools, APIs, and SDKs. Use it to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) to help you analyze your software’s performance and behavior.")
  4. set_license("Apache-2.0")
  5. add_urls("https://github.com/open-telemetry/opentelemetry-cpp/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/open-telemetry/opentelemetry-cpp.git", {submodules = false})
  7. add_versions("v1.23.0", "148ef298a4ef9e016228d53d7208ab9359d4fdf87f55649d60d07ffacc093b33")
  8. add_versions("v1.22.0", "3428f433f4b435ed1fad64cbdbe75b7288c06f6297786a7036d65d5b9a1d215b")
  9. add_versions("v1.21.0", "98e5546f577a11b52a57faed1f4cc60d8c1daa44760eba393f43eab5a8ec46a2")
  10. add_versions("v1.19.0", "e0330194b72f2fe4c0ce3ece06b02dc4aa0ab491eb75bf42c6f5e283912e468c")
  11. add_versions("v1.16.1", "b8a78bb2a3a78133dbb08bcd04342f4b1e03cb4a19079b8416d408d905fffc37")
  12. add_configs("abseil", {description = "Whether to use Abseil for C++latest features. (not supported for >= v1.21.0)", default = false, type = "boolean"})
  13. add_configs("api_only", {description = "Only build the API (use as a header-only library). Overrides all options to enable exporters.", default = false, type = "boolean"})
  14. add_configs("cxx_standard", {description = "Select c++ standard to build.", default = "23", type = "string", values = {"11", "14", "17", "20", "23", "26"}})
  15. add_configs("otlp_grpc", {description = "Whether to include the OTLP gRPC exporter in the SDK.", default = false, type = "boolean"})
  16. add_configs("otlp_http", {description = "Whether to include the OTLP http exporter in the SDK.", default = false, type = "boolean"})
  17. add_configs("otlp_file", {description = "Whether to include the OTLP file exporter in the SDK.", default = false, type = "boolean"})
  18. add_configs("prometheus", {description = "Enable building prometheus exporter.", default = false, type = "boolean"})
  19. add_configs("stl", {description = "Which version of the Standard Library for C++ to use. (true, false, cxx11, cxx14, cxx17, cxx20 or cxx23)", default = "false", type = "string", values = {"true", "false", "cxx11", "cxx14", "cxx17", "cxx20", "cxx23", "cxx26"}})
  20. if is_host("windows") then
  21. set_policy("platform.longpaths", true)
  22. end
  23. add_deps("cmake")
  24. add_deps("nlohmann_json", {configs = {cmake = true}})
  25. if is_plat("linux", "bsd") then
  26. add_syslinks("pthread")
  27. end
  28. add_links(
  29. "opentelemetry_exporter_otlp_http_metric",
  30. "opentelemetry_exporter_otlp_http_log",
  31. "opentelemetry_exporter_otlp_http",
  32. "opentelemetry_exporter_otlp_http_client",
  33. "opentelemetry_exporter_otlp_grpc_log",
  34. "opentelemetry_exporter_otlp_grpc_metrics",
  35. "opentelemetry_exporter_otlp_grpc",
  36. "opentelemetry_exporter_otlp_grpc_client",
  37. "opentelemetry_exporter_otlp_file_metric",
  38. "opentelemetry_exporter_otlp_file_log",
  39. "opentelemetry_exporter_otlp_file",
  40. "opentelemetry_exporter_otlp_file_client",
  41. "opentelemetry_exporter_prometheus",
  42. "opentelemetry_exporter_ostream_logs",
  43. "opentelemetry_exporter_ostream_span",
  44. "opentelemetry_exporter_ostream_metrics",
  45. "opentelemetry_exporter_in_memory",
  46. "opentelemetry_http_client_curl",
  47. "opentelemetry_proto_grpc",
  48. "opentelemetry_otlp_recordable",
  49. "opentelemetry_proto",
  50. "opentelemetry_logs",
  51. "opentelemetry_trace",
  52. "opentelemetry_metrics",
  53. "prometheus-cpp-pull",
  54. "prometheus-cpp-push",
  55. "prometheus-cpp-core",
  56. "opentelemetry_resources",
  57. "opentelemetry_common",
  58. "opentelemetry_version",
  59. "opentelemetry_cpp"
  60. )
  61. on_load(function (package)
  62. if package:config("api_only") then
  63. package:set("kind", "library", {headeronly = true})
  64. end
  65. if package:version() and package:version():ge("1.21.0") and package:config("abseil") then
  66. os.raise("abseil config is not supported for version >= 1.21.0")
  67. end
  68. if package:config("otlp_grpc") then
  69. package:add("deps", "grpc")
  70. elseif package:config("otlp_http") or package:config("otlp_file") then
  71. package:add("deps", "protobuf-cpp")
  72. elseif package:config("abseil") then
  73. package:add("deps", "abseil")
  74. end
  75. if package:config("otlp_http") then
  76. package:add("deps", "libcurl")
  77. end
  78. if package:config("shared") and package:is_plat("windows") then
  79. package:add("defines", "OPENTELEMETRY_BUILD_IMPORT_DLL")
  80. end
  81. local stl = package:config("stl")
  82. if stl ~= "false" then
  83. if stl ~= "true" then
  84. package:add("defines", "OPENTELEMETRY_STL_VERSION=20" .. stl:sub(4,5))
  85. else
  86. if package:version() and package:version():ge("1.16.1") and package:version():le("1.22.0") then
  87. package:add("defines", "OPENTELEMETRY_STL_VERSION=2023")
  88. else
  89. os.raise("Update version or define based on https://github.com/open-telemetry/opentelemetry-cpp/blob/main/api/CMakeLists.txt")
  90. end
  91. end
  92. end
  93. end)
  94. on_install("!iphoneos and !cross|!aarch64", function (package)
  95. local configs = {
  96. "-DBUILD_TESTING=OFF",
  97. "-DWITH_EXAMPLES=OFF",
  98. "-DWITH_BENCHMARK=OFF",
  99. "-DWITH_FUNC_TESTS=OFF",
  100. }
  101. if package:dep("protobuf-cpp") then
  102. local std = package:dep("abseil"):config("cxx_standard")
  103. table.insert(configs, "-DCMAKE_CXX_STANDARD=" .. std)
  104. package:data_set("cxx_standard", std)
  105. else
  106. table.insert(configs, "-DCMAKE_CXX_STANDARD=" .. package:config("cxx_standard"))
  107. package:data_set("cxx_standard", package:config("cxx_standard"))
  108. end
  109. if package:has_tool("cxx", "clang", "clangxx", "emcc", "emxx") then
  110. package:add("cxxflags", "-Wno-missing-template-arg-list-after-template-kw")
  111. table.insert(configs, "-DCMAKE_CXX_FLAGS=-Wno-missing-template-arg-list-after-template-kw")
  112. end
  113. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
  114. if package:config("shared") then
  115. if package:is_plat("windows") then
  116. -- @see https://github.com/open-telemetry/opentelemetry-cpp/issues/2477
  117. table.insert(configs, "-DOPENTELEMETRY_BUILD_DLL=ON")
  118. table.insert(configs, "-DBUILD_SHARED_LIBS=OFF")
  119. else
  120. table.insert(configs, "-DBUILD_SHARED_LIBS=ON")
  121. end
  122. else
  123. table.insert(configs, "-DBUILD_SHARED_LIBS=OFF")
  124. end
  125. table.insert(configs, "-DWITH_OTLP_GRPC=" .. (package:config("otlp_grpc") and "ON" or "OFF"))
  126. table.insert(configs, "-DWITH_OTLP_HTTP=" .. (package:config("otlp_http") and "ON" or "OFF"))
  127. table.insert(configs, "-DWITH_OTLP_FILE=" .. (package:config("otlp_file") and "ON" or "OFF"))
  128. table.insert(configs, "-DWITH_PROMETHEUS=" .. (package:config("prometheus") and "ON" or "OFF"))
  129. table.insert(configs, "-DWITH_API_ONLY=" .. (package:config("api_only") and "ON" or "OFF"))
  130. local stl = package:config("stl")
  131. if stl == "true" then
  132. stl = "on"
  133. elseif stl == "false" then
  134. stl = "off"
  135. end
  136. stl = string.upper(stl)
  137. table.insert(configs, "-DWITH_STL=" .. stl)
  138. if package:version() and package:version():lt("1.21.0") then
  139. local abseil = (package:config("abseil") or package:config("otlp_grpc") or package:config("otlp_http") or package:config("otlp_file")) and "ON" or "OFF"
  140. table.insert(configs, "-DWITH_ABSEIL=" .. abseil)
  141. end
  142. import("package.tools.cmake").install(package, configs)
  143. end)
  144. on_test(function (package)
  145. if package:config("api_only") then
  146. assert(package:has_cxxincludes("opentelemetry/version.h"))
  147. else
  148. assert(package:has_cxxfuncs("opentelemetry::exporter::trace::OStreamSpanExporterFactory::Create()", {configs = {languages = "c++" .. package:data("cxx_standard")}, includes = "opentelemetry/exporters/ostream/span_exporter_factory.h"}))
  149. end
  150. end)