blob: 89df9ae7c2d152d1e2a0df5db1d60600f61f6fc9 [file] [log] [blame]
Joey Armstronge6cdd8e2022-12-29 11:58:15 -05001# -*- makefile -*-
2# -----------------------------------------------------------------------
3# Copyright 2019-2023 Open Networking Foundation (ONF) and the ONF Contributors
Zack Williams52209662019-02-07 10:15:31 -07004#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
Joey Armstronge6cdd8e2022-12-29 11:58:15 -050016# -----------------------------------------------------------------------
17
18$(if $(DEBUG),$(warning ENTER))
19
20.DEFAULT_GOAL := test
21
22TOP ?= .
23MAKEDIR ?= $(TOP)/makefiles
24
25$(if $(VERBOSE),$(eval export VERBOSE=$(VERBOSE))) # visible to include(s)
26
27##--------------------##
28##---] INCLUDES [---##
29##--------------------##
30include $(MAKEDIR)/include.mk
Zack Williams52209662019-02-07 10:15:31 -070031
32# Makefile for voltha-protos
33default: test
34
Kent Hagerman868dc382020-01-20 11:24:09 -050035# tool containers
David K. Bainbridgec4bf5382021-04-08 16:06:54 +000036VOLTHA_TOOLS_VERSION ?= 2.4.0
Kent Hagerman868dc382020-01-20 11:24:09 -050037
Kent Hagermanea09e422020-02-20 18:56:54 -050038PROTOC = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/app $(shell test -t 0 && echo "-it") voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-protoc protoc
khenaidoo5fc5cea2021-08-11 17:39:16 -040039PROTOC_SH = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/go/src/github.com/opencord/voltha-protos/v5 $(shell test -t 0 && echo "-it") --workdir=/go/src/github.com/opencord/voltha-protos/v5 voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-protoc sh -c
Kent Hagermanea09e422020-02-20 18:56:54 -050040GO = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/app $(shell test -t 0 && echo "-it") -v gocache:/.cache -v gocache-${VOLTHA_TOOLS_VERSION}:/go/pkg voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-golang go
Kent Hagerman868dc382020-01-20 11:24:09 -050041
Zack Williams43bfd9e2019-04-12 13:09:31 -070042# Function to extract the last path component from go_package line in .proto files
43define go_package_path
44$(shell grep go_package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
45endef
46
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030047# Function to extract the last path component from package line in .proto files
48define java_package_path
49$(shell grep package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
50endef
51
Zack Williams52209662019-02-07 10:15:31 -070052# Variables
Zack Williams43bfd9e2019-04-12 13:09:31 -070053PROTO_FILES := $(sort $(wildcard protos/voltha_protos/*.proto))
54
Zack Williams52209662019-02-07 10:15:31 -070055PROTO_PYTHON_DEST_DIR := python/voltha_protos
56PROTO_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 -050057PROTO_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 -070058PROTO_GO_DEST_DIR := go
59PROTO_GO_PB:= $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_GO_DEST_DIR)/$(call go_package_path,$(f))/%.pb.go,$(f)))
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030060PROTO_JAVA_DEST_DIR := java
61PROTO_JAVA_PB := $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_JAVA_DEST_DIR)/$(call java_package_path,$(f))/%.pb.java,$(f)))
Zack Williams25e0a322019-06-07 14:07:21 -070062# Force pb file to be regenrated every time. Otherwise the make process assumes generated version is still valid
Kent Hagerman868dc382020-01-20 11:24:09 -050063.PHONY: voltha.pb
Matt Jeanneret15249fa2019-04-12 20:25:31 -040064
Zack Williams52209662019-02-07 10:15:31 -070065print:
Zack Williams43bfd9e2019-04-12 13:09:31 -070066 @echo "Proto files: $(PROTO_FILES)"
67 @echo "Python PB2 files: $(PROTO_PYTHON_PB2)"
68 @echo "Go PB files: $(PROTO_GO_PB)"
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030069 @echo "JAVA PB files: $(PROTO_JAVA_PB)"
Zack Williams52209662019-02-07 10:15:31 -070070
71# Generic targets
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030072protos: python-protos go-protos java-protos
Zack Williams52209662019-02-07 10:15:31 -070073
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030074build: protos python-build go-protos java-protos
Zack Williams52209662019-02-07 10:15:31 -070075
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030076test: python-test go-test java-test
Zack Williams52209662019-02-07 10:15:31 -070077
Joey Armstronge6cdd8e2022-12-29 11:58:15 -050078## -----------------------------------------------------------------------
79## Process[-all] language targets
80## -----------------------------------------------------------------------
81go-all : go-clean go-protos go-test
82java-all : java-clean java-protos java-test
83python-all : python-clean python-protos python-build python-test
Zack Williams52209662019-02-07 10:15:31 -070084
Joey Armstronge6cdd8e2022-12-29 11:58:15 -050085## -----------------------------------------------------------------------
Zack Williams52209662019-02-07 10:15:31 -070086# Python targets
Joey Armstronge6cdd8e2022-12-29 11:58:15 -050087## -----------------------------------------------------------------------
Kent Hagerman868dc382020-01-20 11:24:09 -050088python-protos: $(PROTO_PYTHON_PB2)
Zack Williams52209662019-02-07 10:15:31 -070089
Joey Armstronge6cdd8e2022-12-29 11:58:15 -050090## -----------------------------------------------------------------------
91## -----------------------------------------------------------------------
Zack Williams52209662019-02-07 10:15:31 -070092venv_protos:
Dinesh Belwalkared6da5e2020-02-25 11:23:57 -080093 virtualenv -p python3 $@;\
Zack Williams52209662019-02-07 10:15:31 -070094 source ./$@/bin/activate ; set -u ;\
khenaidoo5fc5cea2021-08-11 17:39:16 -040095 pip install grpcio==1.39.0 protobuf==3.17.3 grpcio-tools==1.39.0 googleapis-common-protos==1.52.0
Zack Williams52209662019-02-07 10:15:31 -070096
Joey Armstronge6cdd8e2022-12-29 11:58:15 -050097## -----------------------------------------------------------------------
98## -----------------------------------------------------------------------
Zack Williams52209662019-02-07 10:15:31 -070099$(PROTO_PYTHON_DEST_DIR)/%_pb2.py: protos/voltha_protos/%.proto Makefile venv_protos
100 source ./venv_protos/bin/activate ; set -u ;\
101 python -m grpc_tools.protoc \
Zack Williams43bfd9e2019-04-12 13:09:31 -0700102 -I protos \
103 --python_out=python \
104 --grpc_python_out=python \
105 --descriptor_set_out=$(PROTO_PYTHON_DEST_DIR)/$(basename $(notdir $<)).desc \
106 --include_imports \
107 --include_source_info \
108 $<
Zack Williams52209662019-02-07 10:15:31 -0700109
Zack Williams43bfd9e2019-04-12 13:09:31 -0700110python-build: setup.py python-protos
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500111 $(RM) -r dist/
Zack Williams52209662019-02-07 10:15:31 -0700112 python ./setup.py sdist
113
114python-test: tox.ini setup.py python-protos
115 tox
116
117python-clean:
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500118 find python/ -name '*.pyc' \
119 | xargs --no-run-if-empty $(RM)
120 $(RM) -r \
Zack Williams43bfd9e2019-04-12 13:09:31 -0700121 .coverage \
122 .tox \
123 coverage.xml \
124 dist \
125 nose2-results.xml \
126 python/__pycache__ \
127 python/test/__pycache__ \
128 python/voltha_protos.egg-info \
129 venv_protos \
130 $(PROTO_PYTHON_DEST_DIR)/*.desc \
131 $(PROTO_PYTHON_PB2) \
132 $(PROTO_PYTHON_PB2_GRPC)
Zack Williams52209662019-02-07 10:15:31 -0700133
khenaidoo5fc5cea2021-08-11 17:39:16 -0400134go-clean:
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500135 $(RM) -r go/*
khenaidoo5fc5cea2021-08-11 17:39:16 -0400136
Zack Williams52209662019-02-07 10:15:31 -0700137# Go targets
Kent Hagerman868dc382020-01-20 11:24:09 -0500138go-protos: voltha.pb
139 @echo "Creating *.go.pb files"
140 @${PROTOC_SH} " \
141 set -e -o pipefail; \
142 for x in ${PROTO_FILES}; do \
143 echo \$$x; \
144 protoc --go_out=plugins=grpc:/go/src -I protos \$$x; \
145 done"
Zack Williams43bfd9e2019-04-12 13:09:31 -0700146
Kent Hagerman868dc382020-01-20 11:24:09 -0500147voltha.pb:
Zack Williams43bfd9e2019-04-12 13:09:31 -0700148 @echo "Creating $@"
Kent Hagerman868dc382020-01-20 11:24:09 -0500149 @${PROTOC} -I protos -I protos/google/api \
150 --include_imports --include_source_info \
151 --descriptor_set_out=$@ \
152 ${PROTO_FILES}
Zack Williams43bfd9e2019-04-12 13:09:31 -0700153
Kent Hagerman868dc382020-01-20 11:24:09 -0500154go-test:
William Kurkianad745652019-03-20 08:45:51 -0400155 test/test-go-proto-consistency.sh
Kent Hagerman868dc382020-01-20 11:24:09 -0500156 ${GO} mod verify
Zack Williams52209662019-02-07 10:15:31 -0700157
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +0300158# Java targets
Kent Hagerman868dc382020-01-20 11:24:09 -0500159java-protos: voltha.pb
160 @echo "Creating java files"
161 @mkdir -p java_temp/src/main/java
162 @${PROTOC_SH} " \
163 set -e -o pipefail; \
164 for x in ${PROTO_FILES}; do \
165 echo \$$x; \
166 protoc --java_out=java_temp/src/main/java -I protos \$$x; \
167 done"
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500168 #TODO: generate directly to the final location
Kent Hagerman868dc382020-01-20 11:24:09 -0500169 @mkdir -p java
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +0300170 cp -r java_temp/src/main/java/* java/
171
172# Tests if the generated java classes are compilable
173java-test: java-protos
174 cp test/pom.xml java_temp
175 cd java_temp && mvn compile
176
177java-clean:
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500178 $(RM) -r java
179 $(RM) -r java_temp
180
181## -----------------------------------------------------------------------
182## -----------------------------------------------------------------------
183clean: python-clean java-clean go-clean
184
185## -----------------------------------------------------------------------
186## -----------------------------------------------------------------------
187sterile : clean
188 $(RM) -r venv_protos
189
190$(if $(DEBUG),$(warning LEAVE))
191
192# [EOF]