2
0

xmake.lua 5.9 KB

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