blob: a0f1ad6244de415d14b240afb463fa66cb0c992f [file] [log] [blame]
Zack Williams52209662019-02-07 10:15:31 -07001# Copyright 2019-present Open Networking Foundation
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15# Makefile for voltha-protos
16default: test
17
Zack Williams43bfd9e2019-04-12 13:09:31 -070018# set default shell options
19SHELL = bash -e -o pipefail
20
21# Function to extract the last path component from go_package line in .proto files
22define go_package_path
23$(shell grep go_package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
24endef
25
Zack Williams52209662019-02-07 10:15:31 -070026# Variables
Zack Williams43bfd9e2019-04-12 13:09:31 -070027PROTO_FILES := $(sort $(wildcard protos/voltha_protos/*.proto))
28
Zack Williams52209662019-02-07 10:15:31 -070029PROTO_PYTHON_DEST_DIR := python/voltha_protos
30PROTO_PYTHON_PB2 := $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_PYTHON_DEST_DIR)/%_pb2.py,$(f)))
Matt Jeanneret37e0fc62019-03-07 12:33:21 -050031PROTO_PYTHON_PB2_GRPC := $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_PYTHON_DEST_DIR)/%_pb2_grpc.py,$(f)))
Zack Williams43bfd9e2019-04-12 13:09:31 -070032PROTO_GO_DEST_DIR := go
33PROTO_GO_PB:= $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_GO_DEST_DIR)/$(call go_package_path,$(f))/%.pb.go,$(f)))
Zack Williams52209662019-02-07 10:15:31 -070034
William Kurkian6ea97f82019-03-13 15:51:55 -040035PROTOC_PREFIX := /usr/local
36PROTOC_VERSION := "3.7.0"
37PROTOC_DOWNLOAD_PREFIX := "https://github.com/google/protobuf/releases/download"
38PROTOC_DIR := protobuf-$(PROTOC_VERSION)
39PROTOC_TARBALL := protobuf-python-$(PROTOC_VERSION).tar.gz
40PROTOC_DOWNLOAD_URI := $(PROTOC_DOWNLOAD_PREFIX)/v$(PROTOC_VERSION)/$(PROTOC_TARBALL)
41PROTOC_BUILD_TMP_DIR := "/tmp/protobuf-build-$(shell uname -s | tr '[:upper:]' '[:lower:]')"
42
Matt Jeanneret15249fa2019-04-12 20:25:31 -040043# Force pb file to be regenrated every time. Otherwise the make process assumes whats there is still ok
44.PHONY: go/voltha.pb
45
Zack Williams52209662019-02-07 10:15:31 -070046print:
Zack Williams43bfd9e2019-04-12 13:09:31 -070047 @echo "Proto files: $(PROTO_FILES)"
48 @echo "Python PB2 files: $(PROTO_PYTHON_PB2)"
49 @echo "Go PB files: $(PROTO_GO_PB)"
Zack Williams52209662019-02-07 10:15:31 -070050
51# Generic targets
52protos: python-protos go-protos
53
William Kurkianbd3736d2019-03-08 12:20:40 -050054build: protos python-build go-protos
Zack Williams52209662019-02-07 10:15:31 -070055
56test: python-test go-test
57
58clean: python-clean go-clean
59
60# Python targets
61python-protos: $(PROTO_PYTHON_PB2)
62
63venv_protos:
64 virtualenv $@;\
65 source ./$@/bin/activate ; set -u ;\
66 pip install grpcio-tools googleapis-common-protos
67
68$(PROTO_PYTHON_DEST_DIR)/%_pb2.py: protos/voltha_protos/%.proto Makefile venv_protos
69 source ./venv_protos/bin/activate ; set -u ;\
70 python -m grpc_tools.protoc \
Zack Williams43bfd9e2019-04-12 13:09:31 -070071 -I protos \
72 --python_out=python \
73 --grpc_python_out=python \
74 --descriptor_set_out=$(PROTO_PYTHON_DEST_DIR)/$(basename $(notdir $<)).desc \
75 --include_imports \
76 --include_source_info \
77 $<
Zack Williams52209662019-02-07 10:15:31 -070078
Zack Williams43bfd9e2019-04-12 13:09:31 -070079python-build: setup.py python-protos
Zack Williams52209662019-02-07 10:15:31 -070080 python ./setup.py sdist
81
82python-test: tox.ini setup.py python-protos
83 tox
84
85python-clean:
Matt Jeanneret37e0fc62019-03-07 12:33:21 -050086 find python/ -name '*.pyc' | xargs rm -f
Zack Williams43bfd9e2019-04-12 13:09:31 -070087 rm -rf \
88 .coverage \
89 .tox \
90 coverage.xml \
91 dist \
92 nose2-results.xml \
93 python/__pycache__ \
94 python/test/__pycache__ \
95 python/voltha_protos.egg-info \
96 venv_protos \
97 $(PROTO_PYTHON_DEST_DIR)/*.desc \
98 $(PROTO_PYTHON_PB2) \
99 $(PROTO_PYTHON_PB2_GRPC)
Zack Williams52209662019-02-07 10:15:31 -0700100
101# Go targets
Zack Williams43bfd9e2019-04-12 13:09:31 -0700102go-protos: protoc_check_version $(PROTO_GO_PB) go/voltha.pb
103
104protoc_check_version:
William Kurkianad745652019-03-20 08:45:51 -0400105ifeq ("", "$(shell which protoc)")
William Kurkian6ea97f82019-03-13 15:51:55 -0400106 @echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
William Kurkianad745652019-03-20 08:45:51 -0400107 @echo "It looks like you don't have a version of protocol buffer tools."
William Kurkian6ea97f82019-03-13 15:51:55 -0400108 @echo "To install the protocol buffer toolchain, you can run:"
109 @echo " make install-protoc"
110 @echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
Matt Jeanneret61e94872019-03-22 16:16:01 -0400111 exit 1
William Kurkian6ea97f82019-03-13 15:51:55 -0400112endif
Zack Williams43bfd9e2019-04-12 13:09:31 -0700113
114go_temp:
115 mkdir -p go_temp
116
117$(PROTO_GO_PB): $(PROTO_FILES) go_temp
118 @echo "Creating $@"
119 cd protos && protoc \
120 --go_out=MAPS=Mgoogle/protobuf/descriptor.proto=github.com/golang/protobuf/protoc-gen-go/descriptor,plugins=grpc,paths=source_relative:../go_temp \
121 -I . voltha_protos/$$(echo $@ | sed -n 's/.*\/\(.*\).pb.go/\1.proto/p' )
122 mkdir -p $(dir $@)
123 mv go_temp/voltha_protos/$(notdir $@) $@
124
125go/voltha.pb: ${PROTO_FILES}
126 @echo "Creating $@"
127 protoc -I protos -I protos/google/api \
128 --include_imports --include_source_info \
129 --descriptor_set_out=$@ \
130 ${PROTO_FILES}
Zack Williams52209662019-02-07 10:15:31 -0700131
132go-test:
William Kurkianad745652019-03-20 08:45:51 -0400133ifneq ("libprotoc 3.7.0", "$(shell protoc --version)")
134 @echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
135 @echo "It looks like you don't have protocol buffer tools ${PROTOC_VERSION} installed."
Zack Williams43bfd9e2019-04-12 13:09:31 -0700136 @echo "To install this version, you can run:"
William Kurkianad745652019-03-20 08:45:51 -0400137 @echo " make install-protoc"
138 @echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
Matt Jeanneret61e94872019-03-22 16:16:01 -0400139 exit 1
William Kurkianad745652019-03-20 08:45:51 -0400140endif
141 test/test-go-proto-consistency.sh
Zack Williams52209662019-02-07 10:15:31 -0700142
143go-clean:
Zack Williams43bfd9e2019-04-12 13:09:31 -0700144 rm -rf go_temp
Zack Williams52209662019-02-07 10:15:31 -0700145
William Kurkian6ea97f82019-03-13 15:51:55 -0400146install-protoc:
147 @echo "Downloading and installing protocol buffer support."
Matt Jeanneret61e94872019-03-22 16:16:01 -0400148 @echo "Installation will require sudo priviledges"
William Kurkian6ea97f82019-03-13 15:51:55 -0400149 @echo "This will take a few minutes."
150 mkdir -p $(PROTOC_BUILD_TMP_DIR)
151 @echo "We ask for sudo credentials now so we can install at the end"; \
152 sudo echo "Thanks"; \
Zack Williams43bfd9e2019-04-12 13:09:31 -0700153 cd $(PROTOC_BUILD_TMP_DIR); \
154 wget $(PROTOC_DOWNLOAD_URI); \
155 tar xzvf $(PROTOC_TARBALL); \
156 cd $(PROTOC_DIR); \
157 ./configure --prefix=$(PROTOC_PREFIX); \
158 make; \
159 sudo make install; \
160 sudo ldconfig