Makefile 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. GOPATH_DIR := $(GOPATH)/src/github.com/open-telemetry/opentelemetry-proto
  2. GENDIR := gen
  3. GOPATH_GENDIR := $(GOPATH_DIR)/$(GENDIR)
  4. # Find all .proto files.
  5. PROTO_FILES := $(wildcard opentelemetry/proto/*/*/*.proto opentelemetry/proto/*/*/*/*.proto)
  6. # Function to execute a command. Note the empty line before endef to make sure each command
  7. # gets executed separately instead of concatenated with previous one.
  8. # Accepts command to execute as first parameter.
  9. define exec-command
  10. $(1)
  11. endef
  12. # Generate all implementations
  13. .PHONY: gen-all
  14. gen-all: gen-cpp gen-csharp gen-go gen-java gen-objc gen-openapi gen-php gen-python gen-ruby
  15. OTEL_DOCKER_PROTOBUF ?= otel/build-protobuf:0.4.0
  16. PROTOC := docker run --rm -u ${shell id -u} -v${PWD}:${PWD} -w${PWD} ${OTEL_DOCKER_PROTOBUF} --proto_path=${PWD}
  17. PROTO_INCLUDES := -I/usr/include/github.com/gogo/protobuf
  18. PROTO_GEN_CPP_DIR ?= $(GENDIR)/cpp
  19. PROTO_GEN_CSHARP_DIR ?= $(GENDIR)/csharp
  20. PROTO_GEN_GO_DIR ?= $(GENDIR)/go
  21. PROTO_GEN_JAVA_DIR ?= $(GENDIR)/java
  22. PROTO_GEN_JS_DIR ?= $(GENDIR)/js
  23. PROTO_GEN_OBJC_DIR ?= $(GENDIR)/objc
  24. PROTO_GEN_OPENAPI_DIR ?= $(GENDIR)/openapi
  25. PROTO_GEN_PHP_DIR ?= $(GENDIR)/php
  26. PROTO_GEN_PYTHON_DIR ?= $(GENDIR)/python
  27. PROTO_GEN_RUBY_DIR ?= $(GENDIR)/ruby
  28. # Docker pull image.
  29. .PHONY: docker-pull
  30. docker-pull:
  31. docker pull $(OTEL_DOCKER_PROTOBUF)
  32. # Generate gRPC/Protobuf implementation for C++.
  33. .PHONY: gen-cpp
  34. gen-cpp:
  35. rm -rf ./$(PROTO_GEN_CPP_DIR)
  36. mkdir -p ./$(PROTO_GEN_CPP_DIR)
  37. $(foreach file,$(PROTO_FILES),$(call exec-command, $(PROTOC) --cpp_out=./$(PROTO_GEN_CPP_DIR) $(file)))
  38. $(PROTOC) --cpp_out=./$(PROTO_GEN_CPP_DIR) --grpc-cpp_out=./$(PROTO_GEN_CPP_DIR) opentelemetry/proto/collector/trace/v1/trace_service.proto
  39. $(PROTOC) --cpp_out=./$(PROTO_GEN_CPP_DIR) --grpc-cpp_out=./$(PROTO_GEN_CPP_DIR) opentelemetry/proto/collector/metrics/v1/metrics_service.proto
  40. $(PROTOC) --cpp_out=./$(PROTO_GEN_CPP_DIR) --grpc-cpp_out=./$(PROTO_GEN_CPP_DIR) opentelemetry/proto/collector/logs/v1/logs_service.proto
  41. # Generate gRPC/Protobuf implementation for C#.
  42. .PHONY: gen-csharp
  43. gen-csharp:
  44. rm -rf ./$(PROTO_GEN_CSHARP_DIR)
  45. mkdir -p ./$(PROTO_GEN_CSHARP_DIR)
  46. $(foreach file,$(PROTO_FILES),$(call exec-command, $(PROTOC) --csharp_out=./$(PROTO_GEN_CSHARP_DIR) $(file)))
  47. $(PROTOC) --csharp_out=./$(PROTO_GEN_CSHARP_DIR) --grpc-csharp_out=./$(PROTO_GEN_CSHARP_DIR) opentelemetry/proto/collector/trace/v1/trace_service.proto
  48. $(PROTOC) --csharp_out=./$(PROTO_GEN_CSHARP_DIR) --grpc-csharp_out=./$(PROTO_GEN_CSHARP_DIR) opentelemetry/proto/collector/metrics/v1/metrics_service.proto
  49. $(PROTOC) --csharp_out=./$(PROTO_GEN_CSHARP_DIR) --grpc-csharp_out=./$(PROTO_GEN_CSHARP_DIR) opentelemetry/proto/collector/logs/v1/logs_service.proto
  50. # Generate gRPC/Protobuf implementation for Go.
  51. .PHONY: gen-go
  52. gen-go:
  53. rm -rf ./$(PROTO_GEN_GO_DIR)
  54. mkdir -p ./$(PROTO_GEN_GO_DIR)
  55. $(foreach file,$(PROTO_FILES),$(call exec-command,$(PROTOC) $(PROTO_INCLUDES) --gogo_out=plugins=grpc:./$(PROTO_GEN_GO_DIR) $(file)))
  56. $(PROTOC) --grpc-gateway_out=logtostderr=true,grpc_api_configuration=opentelemetry/proto/collector/trace/v1/trace_service_http.yaml:./$(PROTO_GEN_GO_DIR) opentelemetry/proto/collector/trace/v1/trace_service.proto
  57. $(PROTOC) --grpc-gateway_out=logtostderr=true,grpc_api_configuration=opentelemetry/proto/collector/metrics/v1/metrics_service_http.yaml:./$(PROTO_GEN_GO_DIR) opentelemetry/proto/collector/metrics/v1/metrics_service.proto
  58. $(PROTOC) --grpc-gateway_out=logtostderr=true,grpc_api_configuration=opentelemetry/proto/collector/logs/v1/logs_service_http.yaml:./$(PROTO_GEN_GO_DIR) opentelemetry/proto/collector/logs/v1/logs_service.proto
  59. # Generate gRPC/Protobuf implementation for Java.
  60. .PHONY: gen-java
  61. gen-java:
  62. rm -rf ./$(PROTO_GEN_JAVA_DIR)
  63. mkdir -p ./$(PROTO_GEN_JAVA_DIR)
  64. $(foreach file,$(PROTO_FILES),$(call exec-command, $(PROTOC) --java_out=./$(PROTO_GEN_JAVA_DIR) $(file)))
  65. # Generate gRPC/Protobuf implementation for JavaScript.
  66. .PHONY: gen-js
  67. gen-js:
  68. rm -rf ./$(PROTO_GEN_JS_DIR)
  69. mkdir -p ./$(PROTO_GEN_JS_DIR)
  70. $(foreach file,$(PROTO_FILES),$(call exec-command, $(PROTOC) --js_out=import_style=commonjs:./$(PROTO_GEN_JS_DIR) $(file)))
  71. $(PROTOC) --js_out=import_style=commonjs:./$(PROTO_GEN_JS_DIR) --grpc-web_out=import_style=commonjs,mode=grpcweb:./$(PROTO_GEN_JS_DIR) opentelemetry/proto/collector/trace/v1/trace_service.proto
  72. $(PROTOC) --js_out=import_style=commonjs:./$(PROTO_GEN_JS_DIR) --grpc-web_out=import_style=commonjs,mode=grpcweb:./$(PROTO_GEN_JS_DIR) opentelemetry/proto/collector/metrics/v1/metrics_service.proto
  73. $(PROTOC) --js_out=import_style=commonjs:./$(PROTO_GEN_JS_DIR) --grpc-web_out=import_style=commonjs,mode=grpcweb:./$(PROTO_GEN_JS_DIR) opentelemetry/proto/collector/logs/v1/logs_service.proto
  74. # Generate gRPC/Protobuf implementation for Objective-C.
  75. .PHONY: gen-objc
  76. gen-objc:
  77. rm -rf ./$(PROTO_GEN_OBJC_DIR)
  78. mkdir -p ./$(PROTO_GEN_OBJC_DIR)
  79. $(foreach file,$(PROTO_FILES),$(call exec-command, $(PROTOC) --objc_out=./$(PROTO_GEN_OBJC_DIR) $(file)))
  80. $(PROTOC) --objc_out=./$(PROTO_GEN_OBJC_DIR) --grpc-objc_out=./$(PROTO_GEN_OBJC_DIR) opentelemetry/proto/collector/trace/v1/trace_service.proto
  81. $(PROTOC) --objc_out=./$(PROTO_GEN_OBJC_DIR) --grpc-objc_out=./$(PROTO_GEN_OBJC_DIR) opentelemetry/proto/collector/metrics/v1/metrics_service.proto
  82. $(PROTOC) --objc_out=./$(PROTO_GEN_OBJC_DIR) --grpc-objc_out=./$(PROTO_GEN_OBJC_DIR) opentelemetry/proto/collector/logs/v1/logs_service.proto
  83. # Generate gRPC/Protobuf for swagger
  84. .PHONY: gen-openapi
  85. gen-openapi:
  86. mkdir -p $(PROTO_GEN_OPENAPI_DIR)
  87. $(PROTOC) --swagger_out=logtostderr=true,grpc_api_configuration=opentelemetry/proto/collector/trace/v1/trace_service_http.yaml:$(PROTO_GEN_OPENAPI_DIR) opentelemetry/proto/collector/trace/v1/trace_service.proto
  88. $(PROTOC) --swagger_out=logtostderr=true,grpc_api_configuration=opentelemetry/proto/collector/metrics/v1/metrics_service_http.yaml:$(PROTO_GEN_OPENAPI_DIR) opentelemetry/proto/collector/metrics/v1/metrics_service.proto
  89. $(PROTOC) --swagger_out=logtostderr=true,grpc_api_configuration=opentelemetry/proto/collector/logs/v1/logs_service_http.yaml:$(PROTO_GEN_OPENAPI_DIR) opentelemetry/proto/collector/logs/v1/logs_service.proto
  90. # Generate gRPC/Protobuf implementation for PhP.
  91. .PHONY: gen-php
  92. gen-php:
  93. rm -rf ./$(PROTO_GEN_PHP_DIR)
  94. mkdir -p ./$(PROTO_GEN_PHP_DIR)
  95. $(foreach file,$(PROTO_FILES),$(call exec-command, $(PROTOC) --php_out=./$(PROTO_GEN_PHP_DIR) $(file)))
  96. $(PROTOC) --php_out=./$(PROTO_GEN_PHP_DIR) --grpc-php_out=./$(PROTO_GEN_PHP_DIR) opentelemetry/proto/collector/trace/v1/trace_service.proto
  97. $(PROTOC) --php_out=./$(PROTO_GEN_PHP_DIR) --grpc-php_out=./$(PROTO_GEN_PHP_DIR) opentelemetry/proto/collector/metrics/v1/metrics_service.proto
  98. $(PROTOC) --php_out=./$(PROTO_GEN_PHP_DIR) --grpc-php_out=./$(PROTO_GEN_PHP_DIR) opentelemetry/proto/collector/logs/v1/logs_service.proto
  99. # Generate gRPC/Protobuf implementation for Python.
  100. .PHONY: gen-python
  101. gen-python:
  102. rm -rf ./$(PROTO_GEN_PYTHON_DIR)
  103. mkdir -p ./$(PROTO_GEN_PYTHON_DIR)
  104. $(foreach file,$(PROTO_FILES),$(call exec-command, $(PROTOC) --python_out=./$(PROTO_GEN_PYTHON_DIR) $(file)))
  105. $(PROTOC) --python_out=./$(PROTO_GEN_PYTHON_DIR) --grpc-python_out=./$(PROTO_GEN_PYTHON_DIR) opentelemetry/proto/collector/trace/v1/trace_service.proto
  106. $(PROTOC) --python_out=./$(PROTO_GEN_PYTHON_DIR) --grpc-python_out=./$(PROTO_GEN_PYTHON_DIR) opentelemetry/proto/collector/metrics/v1/metrics_service.proto
  107. $(PROTOC) --python_out=./$(PROTO_GEN_PYTHON_DIR) --grpc-python_out=./$(PROTO_GEN_PYTHON_DIR) opentelemetry/proto/collector/logs/v1/logs_service.proto
  108. # Generate gRPC/Protobuf implementation for Ruby.
  109. .PHONY: gen-ruby
  110. gen-ruby:
  111. rm -rf ./$(PROTO_GEN_RUBY_DIR)
  112. mkdir -p ./$(PROTO_GEN_RUBY_DIR)
  113. $(foreach file,$(PROTO_FILES),$(call exec-command, $(PROTOC) --ruby_out=./$(PROTO_GEN_RUBY_DIR) $(file)))
  114. $(PROTOC) --ruby_out=./$(PROTO_GEN_RUBY_DIR) --grpc-ruby_out=./$(PROTO_GEN_RUBY_DIR) opentelemetry/proto/collector/trace/v1/trace_service.proto
  115. $(PROTOC) --ruby_out=./$(PROTO_GEN_RUBY_DIR) --grpc-ruby_out=./$(PROTO_GEN_RUBY_DIR) opentelemetry/proto/collector/metrics/v1/metrics_service.proto
  116. $(PROTOC) --ruby_out=./$(PROTO_GEN_RUBY_DIR) --grpc-ruby_out=./$(PROTO_GEN_RUBY_DIR) opentelemetry/proto/collector/logs/v1/logs_service.proto