xmake.lua 8.2 KB

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