summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/fluent-otel-proto/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/fluent-otel-proto/CMakeLists.txt')
-rw-r--r--fluent-bit/lib/fluent-otel-proto/CMakeLists.txt133
1 files changed, 133 insertions, 0 deletions
diff --git a/fluent-bit/lib/fluent-otel-proto/CMakeLists.txt b/fluent-bit/lib/fluent-otel-proto/CMakeLists.txt
new file mode 100644
index 00000000..aae43bc0
--- /dev/null
+++ b/fluent-bit/lib/fluent-otel-proto/CMakeLists.txt
@@ -0,0 +1,133 @@
+cmake_minimum_required(VERSION 3.0)
+project(fluent-opentelemetry-proto C)
+
+# Include helpers
+include(cmake/macros.cmake)
+
+# We only regenerate files if it has been enabled
+option(FLUENT_PROTO_REGENERATE "Regenerate .[ch] files only" "No")
+
+# build options for files generation
+option(FLUENT_PROTO_COMMON "Include common.proto" "Yes")
+option(FLUENT_PROTO_RESOURCE "Include resource.proto" "Yes")
+option(FLUENT_PROTO_TRACE "Include trace.proto" "Yes")
+option(FLUENT_PROTO_LOGS "Include logs.proto" "Yes")
+option(FLUENT_PROTO_METRICS "Inlcude metrics.proto" "No")
+option(FLUENT_PROTO_EXAMPLES "Add example programs" "Yes")
+
+if(FLUENT_PROTO_REGENERATE AND (NOT PROTOBUF_C_SOURCE_DIR OR NOT OTEL_PROTO_DIR))
+ if (NOT PROTOBUF_C_SOURCE_DIR)
+ message(FATAL_ERROR
+ "\n"
+ "The variable PROTOBUF_C_SOURCE_DIR has not been defined. "
+ "You have to specify which directory contains the source code "
+ "of the repository https://github.com/fluent/protobuf-c\n"
+ "Define the path with: -DPROTOBUF_C_SOURCE_DIR=/path/to/protobuf-c")
+ endif()
+
+ if (NOT OTEL_PROTO_DIR)
+ message(FATAL_ERROR
+ "\n"
+ "The variable OTEL_PROTO_DIR has not been defined. "
+ "You have to specify which directory contains the source code "
+ "of the repository https://github.com/open-telemetry/opentelemetry-proto\n"
+ "Define the path with: -DOTEL_PROTO_DIR=/path/to/opentelemetry-proto")
+ endif()
+else()
+ if (FLUENT_PROTO_REGENERATE)
+ message(STATUS "protobuf-c directory: ${PROTOBUF_C_SOURCE_DIR}")
+ endif()
+endif()
+
+# Paths
+set(PROTOC_BIN "/opt/protobuf-c/bin/protoc-c")
+set(PROTOC_ARG_OUT "--c_out=${PROJECT_SOURCE_DIR}/proto_c/")
+set(PROTOC_ARG_PATH "--proto_path=${OTEL_PROTO_DIR}/")
+
+if (FLUENT_PROTO_REGENERATE)
+ # final protoc base command
+ message(STATUS "base command: ${PROTOC_BIN} ${PROTOC_ARG_OUT} ${PROTOC_ARG_PATH}")
+
+ # Protobuf-c headers (this is not working, I ended up copying protobuf-c headers inside include/)
+ set(PROTOC_HEADERS "/opt/protobuf-c/include/")
+ include_directories(PROTOC_HEADERS)
+
+ if (FLUENT_PROTO_COMMON)
+ message(STATUS "processing common.proto")
+ set(proto_file ${OTEL_PROTO_DIR}/opentelemetry/proto/common/v1/common.proto)
+ execute_process(COMMAND ${PROTOC_BIN} ${PROTOC_ARG_OUT} ${PROTOC_ARG_PATH} ${proto_file})
+ include_directories(${PROJECT_BINARY_DIR}/opentelemetry/proto/common/v1/)
+ FLUENT_OTEL_DEFINITION(FLUENT_OTEL_HAVE_COMMON)
+ endif()
+
+ if (FLUENT_PROTO_RESOURCE)
+ message(STATUS "processing resource.proto")
+ set(proto_file "${OTEL_PROTO_DIR}/opentelemetry/proto/resource/v1/resource.proto")
+ execute_process(COMMAND ${PROTOC_BIN} ${PROTOC_ARG_OUT} ${PROTOC_ARG_PATH} ${proto_file})
+ include_directories(${PROJECT_BINARY_DIR}/opentelemetry/proto/resource/v1/)
+ FLUENT_OTEL_DEFINITION(FLUENT_OTEL_HAVE_RESOURCE)
+ endif()
+
+ if (FLUENT_PROTO_TRACE)
+ message(STATUS "processing trace.proto")
+ set(proto_file "${OTEL_PROTO_DIR}/opentelemetry/proto/trace/v1/trace.proto")
+ execute_process(COMMAND ${PROTOC_BIN} ${PROTOC_ARG_OUT} ${PROTOC_ARG_PATH} ${proto_file})
+ include_directories(${PROJECT_BINARY_DIR}/opentelemetry/proto/trace/v1/)
+
+ message(STATUS "processing trace_service.proto")
+ set(proto_file "${OTEL_PROTO_DIR}/opentelemetry/proto/collector/trace/v1/trace_service.proto")
+ execute_process(COMMAND ${PROTOC_BIN} ${PROTOC_ARG_OUT} ${PROTOC_ARG_PATH} ${proto_file})
+ include_directories(${PROJECT_BINARY_DIR}/opentelemetry/proto/collector/trace/v1)
+ FLUENT_OTEL_DEFINITION(FLUENT_OTEL_HAVE_TRACE)
+ endif()
+
+ if (FLUENT_PROTO_LOGS)
+ message(STATUS "processing logs.proto")
+ set(proto_file "${OTEL_PROTO_DIR}/opentelemetry/proto/logs/v1/logs.proto")
+ execute_process(COMMAND ${PROTOC_BIN} ${PROTOC_ARG_OUT} ${PROTOC_ARG_PATH} ${proto_file})
+ include_directories(${PROJECT_BINARY_DIR}/opentelemetry/proto/logs/v1/)
+ FLUENT_OTEL_DEFINITION(FLUENT_OTEL_HAVE_LOGS)
+
+ message(STATUS "processing logs_service.proto")
+ set(proto_file "${OTEL_PROTO_DIR}/opentelemetry/proto/collector/logs/v1/logs_service.proto")
+ execute_process(COMMAND ${PROTOC_BIN} ${PROTOC_ARG_OUT} ${PROTOC_ARG_PATH} ${proto_file})
+ include_directories(${PROJECT_BINARY_DIR}/opentelemetry/proto/collector/logs/v1/)
+ FLUENT_OTEL_DEFINITION(FLUENT_OTEL_HAVE_LOGS)
+ endif()
+
+ if (FLUENT_PROTO_METRICS)
+ message(STATUS "processing metrics.proto")
+ set(proto_file "${OTEL_PROTO_DIR}/opentelemetry/proto/metrics/v1/metrics.proto")
+ execute_process(COMMAND ${PROTOC_BIN} ${PROTOC_ARG_OUT} ${PROTOC_ARG_PATH} ${proto_file})
+ include_directories(${PROJECT_BINARY_DIR}/opentelemetry/proto/metrics/v1/)
+
+ message(STATUS "processing metrics_service.proto")
+ set(proto_file "${OTEL_PROTO_DIR}/opentelemetry/proto/collector/metrics/v1/metrics_service.proto")
+ execute_process(COMMAND ${PROTOC_BIN} ${PROTOC_ARG_OUT} ${PROTOC_ARG_PATH} ${proto_file})
+ include_directories(${PROJECT_BINARY_DIR}/opentelemetry/proto/collector/logs/v1/)
+ FLUENT_OTEL_DEFINITION(FLUENT_OTEL_HAVE_METRICS)
+ endif()
+
+ configure_file(
+ "${PROJECT_SOURCE_DIR}/include/fluent-otel-proto/fluent-otel-info.h.in"
+ "${PROJECT_SOURCE_DIR}/include/fluent-otel-proto/fluent-otel-info.h"
+ )
+
+ # protobuf-c dependency
+ configure_file(
+ "${PROTOBUF_C_SOURCE_DIR}/protobuf-c/protobuf-c.c"
+ "${PROJECT_SOURCE_DIR}/proto_c/protobuf-c/protobuf-c.c" COPYONLY)
+
+ configure_file(
+ "${PROTOBUF_C_SOURCE_DIR}/protobuf-c/protobuf-c.h"
+ "${PROJECT_SOURCE_DIR}/proto_c/protobuf-c/protobuf-c.h" COPYONLY)
+
+endif()
+
+# build library
+add_subdirectory(src)
+
+# build example
+if (FLUENT_PROTO_EXAMPLES)
+ add_subdirectory(examples)
+endif()