xmake.lua 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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.git")
  6. add_versions("v1.16.1", "baecbb95bd63df53e0af16e87bc683967962c5f8")
  7. add_configs("otlp_grpc", {description = "Whether to include the OTLP gRPC exporter in the SDK.", default = false, type = "boolean"})
  8. add_configs("otlp_http", {description = "Whether to include the OTLP http exporter in the SDK.", default = false, type = "boolean"})
  9. add_configs("otlp_file", {description = "Whether to include the OTLP file exporter in the SDK.", default = false, type = "boolean"})
  10. add_configs("prometheus", {description = "Enable building prometheus exporter.", default = false, type = "boolean"})
  11. 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"})
  12. 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"}})
  13. add_configs("abseil", {description = "Whether to use Abseil for C++latest features.", default = false, type = "boolean"})
  14. if is_host("windows") then
  15. set_policy("platform.longpaths", true)
  16. end
  17. add_deps("cmake")
  18. add_links(
  19. "opentelemetry_exporter_otlp_http_metric",
  20. "opentelemetry_exporter_otlp_http_log",
  21. "opentelemetry_exporter_otlp_http",
  22. "opentelemetry_exporter_otlp_http_client",
  23. "opentelemetry_exporter_otlp_grpc_log",
  24. "opentelemetry_exporter_otlp_grpc_metrics",
  25. "opentelemetry_exporter_otlp_grpc",
  26. "opentelemetry_exporter_otlp_grpc_client",
  27. "opentelemetry_exporter_otlp_file_metric",
  28. "opentelemetry_exporter_otlp_file_log",
  29. "opentelemetry_exporter_otlp_file",
  30. "opentelemetry_exporter_otlp_file_client",
  31. "opentelemetry_exporter_prometheus",
  32. "opentelemetry_exporter_ostream_logs",
  33. "opentelemetry_exporter_ostream_span",
  34. "opentelemetry_exporter_ostream_metrics",
  35. "opentelemetry_exporter_in_memory",
  36. "opentelemetry_http_client_curl",
  37. "opentelemetry_proto_grpc",
  38. "opentelemetry_otlp_recordable",
  39. "opentelemetry_proto",
  40. "opentelemetry_logs",
  41. "opentelemetry_trace",
  42. "opentelemetry_metrics",
  43. "prometheus-cpp-pull",
  44. "prometheus-cpp-push",
  45. "prometheus-cpp-core",
  46. "opentelemetry_resources",
  47. "opentelemetry_common",
  48. "opentelemetry_version",
  49. "opentelemetry_cpp"
  50. )
  51. on_load(function (package)
  52. if package:config("otlp_grpc") then
  53. package:add("deps", "grpc")
  54. elseif package:config("otlp_http") or package:config("otlp_file") then
  55. package:add("deps", "protobuf-cpp")
  56. elseif package:config("abseil") then
  57. package:add("deps", "abseil")
  58. end
  59. if package:config("shared") and package:is_plat("windows") then
  60. package:add("defines", "OPENTELEMETRY_BUILD_IMPORT_DLL")
  61. end
  62. end)
  63. on_install("!iphoneos and !cross|!aarch64", function (package)
  64. local configs = {
  65. "-DBUILD_TESTING=OFF",
  66. "-DWITH_EXAMPLES=OFF",
  67. "-DWITH_BENCHMARK=OFF",
  68. "-DWITH_FUNC_TESTS=OFF",
  69. "-DCMAKE_CXX_STANDARD=14"
  70. }
  71. if package:has_tool("cxx", "clang", "clangxx", "emcc", "emxx") then
  72. package:add("cxxflags", "-Wno-missing-template-arg-list-after-template-kw")
  73. table.insert(configs, "-DCMAKE_CXX_FLAGS=-Wno-missing-template-arg-list-after-template-kw")
  74. end
  75. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
  76. table.insert(configs, "-DCMAKE_POSITION_INDEPENDENT_CODE=" .. (package:config("pic") and "ON" or "OFF"))
  77. if package:config("shared") then
  78. if package:is_plat("windows") then
  79. table.insert(configs, "-DOPENTELEMETRY_BUILD_DLL=ON")
  80. else
  81. table.insert(configs, "-DBUILD_SHARED_LIBS=ON")
  82. end
  83. else
  84. table.insert(configs, "-DBUILD_SHARED_LIBS=OFF")
  85. end
  86. table.insert(configs, "-DWITH_OTLP_GRPC=" .. (package:config("otlp_grpc") and "ON" or "OFF"))
  87. table.insert(configs, "-DWITH_OTLP_HTTP=" .. (package:config("otlp_http") and "ON" or "OFF"))
  88. table.insert(configs, "-DWITH_OTLP_FILE=" .. (package:config("otlp_file") and "ON" or "OFF"))
  89. table.insert(configs, "-DWITH_PROMETHEUS=" .. (package:config("prometheus") and "ON" or "OFF"))
  90. table.insert(configs, "-DWITH_API_ONLY=" .. (package:config("api_only") and "ON" or "OFF"))
  91. local stl = package:config("stl")
  92. if stl == "true" then
  93. stl = "on"
  94. elseif stl == "false" then
  95. stl = "off"
  96. end
  97. stl = string.upper(stl)
  98. table.insert(configs, "-DWITH_STL=" .. stl)
  99. local abseil = (package:config("abseil") or package:config("otlp_grpc") or package:config("otlp_http") or package:config("otlp_file")) and "ON" or "OFF"
  100. table.insert(configs, "-DWITH_ABSEIL=" .. abseil)
  101. import("package.tools.cmake").install(package, configs)
  102. end)
  103. on_test(function (package)
  104. assert(package:has_cxxfuncs("opentelemetry::exporter::trace::OStreamSpanExporterFactory::Create()", {configs = {languages = "c++17"}, includes = "opentelemetry/exporters/ostream/span_exporter_factory.h"}))
  105. end)