| # -*- mode: makefile; -*- |
| # Copyright The OpenTelemetry Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| # This Makefile.proto has rules to generate *.pb.go files in |
| # `exporters/otlp/internal/opentelemetry-proto-gen` from the .proto files in |
| # `exporters/otlp/internal/opentelemetry-proto` using protoc with a go plugin. |
| # |
| # The protoc binary and other tools are sourced from a docker image |
| # `PROTOC_IMAGE`. |
| # |
| # Prereqs: The archiving utility `pax` is installed. |
| |
| PROTOC_IMAGE := namely/protoc-all:1.29_2 |
| PROTOBUF_VERSION := v1 |
| OTEL_PROTO_SUBMODULE := exporters/otlp/internal/opentelemetry-proto |
| PROTOBUF_GEN_DIR := exporters/otlp/internal/opentelemetry-proto-gen |
| PROTOBUF_TEMP_DIR := gen/pb-go |
| PROTO_SOURCE_DIR := gen/proto |
| SUBMODULE_PROTO_FILES := $(wildcard $(OTEL_PROTO_SUBMODULE)/opentelemetry/proto/*/$(PROTOBUF_VERSION)/*.proto \ |
| $(OTEL_PROTO_SUBMODULE)/opentelemetry/proto/collector/*/$(PROTOBUF_VERSION)/*.proto) |
| SOURCE_PROTO_FILES := $(subst $(OTEL_PROTO_SUBMODULE),$(PROTO_SOURCE_DIR),$(SUBMODULE_PROTO_FILES)) |
| |
| default: protobuf |
| |
| .PHONY: protobuf protobuf-source gen-protobuf copy-protobufs |
| protobuf: protobuf-source gen-protobuf copy-protobufs |
| |
| protobuf-source: $(SOURCE_PROTO_FILES) | $(PROTO_SOURCE_DIR)/ |
| |
| # Changes go_package in .proto file to point to repo-local location |
| define exec-replace-pkgname |
| sed 's,go_package = "github.com/open-telemetry/opentelemetry-proto/gen/go,go_package = "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen,' < $(1) > $(2) |
| |
| endef |
| |
| # replace opentelemetry-proto package name by go.opentelemetry.io/otel specific version |
| $(SOURCE_PROTO_FILES): $(PROTO_SOURCE_DIR)/%.proto: $(OTEL_PROTO_SUBMODULE)/%.proto |
| @mkdir -p $(@D) |
| $(call exec-replace-pkgname,$<,$@) |
| |
| # Command to run protoc using docker image |
| define exec-protoc-all |
| docker run -v `pwd`:/defs $(PROTOC_IMAGE) $(1) |
| |
| endef |
| |
| gen-protobuf: $(SOURCE_PROTO_FILES) | $(PROTOBUF_GEN_DIR)/ |
| $(foreach file,$(subst ${PROTO_SOURCE_DIR}/,,$(SOURCE_PROTO_FILES)),$(call exec-protoc-all, -i $(PROTO_SOURCE_DIR) -f ${file} -l gogo -o ${PROTOBUF_TEMP_DIR})) |
| |
| # requires `pax` to be installed, as it has consistent options for both BSD (Darwin) and Linux |
| copy-protobufs: | $(PROTOBUF_GEN_DIR)/ |
| find ./$(PROTOBUF_TEMP_DIR)/go.opentelemetry.io/otel/$(PROTOBUF_GEN_DIR) -type f -print0 | \ |
| pax -0 -s ',^./$(PROTOBUF_TEMP_DIR)/go.opentelemetry.io/otel/$(PROTOBUF_GEN_DIR),,' -rw ./$(PROTOBUF_GEN_DIR) |
| |
| $(PROTO_SOURCE_DIR)/ $(PROTOBUF_GEN_DIR)/: |
| mkdir -p $@ |
| |
| .PHONY: clean |
| clean: |
| rm -rf ./gen |