blob: cb7a8cd3c9ded60a7ff45e8fe72fde111acc0e48 [file] [log] [blame]
Joey Armstronge6cdd8e2022-12-29 11:58:15 -05001# -*- makefile -*-
2# -----------------------------------------------------------------------
Joey Armstronge66eaaf2023-01-15 18:58:52 -05003# 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
Joey Armstronge66eaaf2023-01-15 18:58:52 -050018.PHONY: test
Joey Armstronge6cdd8e2022-12-29 11:58:15 -050019.DEFAULT_GOAL := test
20
Joey Armstronge66eaaf2023-01-15 18:58:52 -050021##-------------------##
22##---] GLOBALS [---##
23##-------------------##
Joey Armstronge6cdd8e2022-12-29 11:58:15 -050024TOP ?= .
25MAKEDIR ?= $(TOP)/makefiles
26
Joey Armstronge66eaaf2023-01-15 18:58:52 -050027export SHELL := bash -e -o pipefail
28
Joey Armstronge6cdd8e2022-12-29 11:58:15 -050029$(if $(VERBOSE),$(eval export VERBOSE=$(VERBOSE))) # visible to include(s)
30
Joey Armstrongc2277652023-01-11 17:41:36 -050031# Makefile for voltha-protos
32default: test
33
Joey Armstronge66eaaf2023-01-15 18:58:52 -050034## Library linting
35# NO-LINT-MAKEFILE := true # cleanup needed
36NO-LINT-SHELL := true # cleanup needed
37
Joey Armstronge6cdd8e2022-12-29 11:58:15 -050038##--------------------##
39##---] INCLUDES [---##
40##--------------------##
Joey Armstronge66eaaf2023-01-15 18:58:52 -050041include $(MAKEDIR)/include.mk
Zack Williams52209662019-02-07 10:15:31 -070042
Kent Hagerman868dc382020-01-20 11:24:09 -050043# tool containers
David K. Bainbridgec4bf5382021-04-08 16:06:54 +000044VOLTHA_TOOLS_VERSION ?= 2.4.0
Kent Hagerman868dc382020-01-20 11:24:09 -050045
Kent Hagermanea09e422020-02-20 18:56:54 -050046PROTOC = 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 -040047PROTOC_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 -050048GO = 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 -050049
Zack Williams43bfd9e2019-04-12 13:09:31 -070050# Function to extract the last path component from go_package line in .proto files
51define go_package_path
52$(shell grep go_package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
53endef
54
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030055# Function to extract the last path component from package line in .proto files
56define java_package_path
57$(shell grep package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
58endef
59
Zack Williams52209662019-02-07 10:15:31 -070060# Variables
Zack Williams43bfd9e2019-04-12 13:09:31 -070061PROTO_FILES := $(sort $(wildcard protos/voltha_protos/*.proto))
62
Zack Williams52209662019-02-07 10:15:31 -070063PROTO_PYTHON_DEST_DIR := python/voltha_protos
64PROTO_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 -050065PROTO_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 -070066PROTO_GO_DEST_DIR := go
67PROTO_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 +030068PROTO_JAVA_DEST_DIR := java
69PROTO_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 -070070# 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 -050071.PHONY: voltha.pb
Matt Jeanneret15249fa2019-04-12 20:25:31 -040072
Zack Williams52209662019-02-07 10:15:31 -070073print:
Zack Williams43bfd9e2019-04-12 13:09:31 -070074 @echo "Proto files: $(PROTO_FILES)"
75 @echo "Python PB2 files: $(PROTO_PYTHON_PB2)"
76 @echo "Go PB files: $(PROTO_GO_PB)"
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030077 @echo "JAVA PB files: $(PROTO_JAVA_PB)"
Zack Williams52209662019-02-07 10:15:31 -070078
79# Generic targets
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030080protos: python-protos go-protos java-protos
Zack Williams52209662019-02-07 10:15:31 -070081
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030082build: protos python-build go-protos java-protos
Zack Williams52209662019-02-07 10:15:31 -070083
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030084test: python-test go-test java-test
Zack Williams52209662019-02-07 10:15:31 -070085
Joey Armstrongc2277652023-01-11 17:41:36 -050086clean: python-clean java-clean go-clean
Zack Williams52209662019-02-07 10:15:31 -070087
Joey Armstrongc2277652023-01-11 17:41:36 -050088sterile: clean
89 $(RM) -r venv_protos
90
Zack Williams52209662019-02-07 10:15:31 -070091# Python targets
Kent Hagerman868dc382020-01-20 11:24:09 -050092python-protos: $(PROTO_PYTHON_PB2)
Zack Williams52209662019-02-07 10:15:31 -070093
94venv_protos:
Dinesh Belwalkared6da5e2020-02-25 11:23:57 -080095 virtualenv -p python3 $@;\
Zack Williams52209662019-02-07 10:15:31 -070096 source ./$@/bin/activate ; set -u ;\
khenaidoo5fc5cea2021-08-11 17:39:16 -040097 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 -070098
99$(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 Armstronge66eaaf2023-01-15 18:58:52 -0500118 find python -name '__pycache__' -type d -print0 \
119 | xargs -0 --no-run-if-empty $(RM) -r
Joey Armstrongc2277652023-01-11 17:41:36 -0500120 find python -name '*.pyc' -type f -print0 \
121 | xargs -0 --no-run-if-empty $(RM)
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500122 $(RM) -r \
Zack Williams43bfd9e2019-04-12 13:09:31 -0700123 .coverage \
124 .tox \
125 coverage.xml \
126 dist \
127 nose2-results.xml \
128 python/__pycache__ \
129 python/test/__pycache__ \
130 python/voltha_protos.egg-info \
131 venv_protos \
132 $(PROTO_PYTHON_DEST_DIR)/*.desc \
133 $(PROTO_PYTHON_PB2) \
134 $(PROTO_PYTHON_PB2_GRPC)
Zack Williams52209662019-02-07 10:15:31 -0700135
Joey Armstrongc2277652023-01-11 17:41:36 -0500136# Why are we removing files under revision control ?
khenaidoo5fc5cea2021-08-11 17:39:16 -0400137go-clean:
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500138 $(RM) -r go/*
khenaidoo5fc5cea2021-08-11 17:39:16 -0400139
Zack Williams52209662019-02-07 10:15:31 -0700140# Go targets
Kent Hagerman868dc382020-01-20 11:24:09 -0500141go-protos: voltha.pb
142 @echo "Creating *.go.pb files"
143 @${PROTOC_SH} " \
144 set -e -o pipefail; \
145 for x in ${PROTO_FILES}; do \
146 echo \$$x; \
147 protoc --go_out=plugins=grpc:/go/src -I protos \$$x; \
148 done"
Zack Williams43bfd9e2019-04-12 13:09:31 -0700149
Kent Hagerman868dc382020-01-20 11:24:09 -0500150voltha.pb:
Zack Williams43bfd9e2019-04-12 13:09:31 -0700151 @echo "Creating $@"
Kent Hagerman868dc382020-01-20 11:24:09 -0500152 @${PROTOC} -I protos -I protos/google/api \
153 --include_imports --include_source_info \
154 --descriptor_set_out=$@ \
155 ${PROTO_FILES}
Zack Williams43bfd9e2019-04-12 13:09:31 -0700156
Kent Hagerman868dc382020-01-20 11:24:09 -0500157go-test:
William Kurkianad745652019-03-20 08:45:51 -0400158 test/test-go-proto-consistency.sh
Kent Hagerman868dc382020-01-20 11:24:09 -0500159 ${GO} mod verify
Zack Williams52209662019-02-07 10:15:31 -0700160
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +0300161# Java targets
Kent Hagerman868dc382020-01-20 11:24:09 -0500162java-protos: voltha.pb
163 @echo "Creating java files"
164 @mkdir -p java_temp/src/main/java
165 @${PROTOC_SH} " \
166 set -e -o pipefail; \
167 for x in ${PROTO_FILES}; do \
168 echo \$$x; \
169 protoc --java_out=java_temp/src/main/java -I protos \$$x; \
170 done"
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500171 #TODO: generate directly to the final location
Kent Hagerman868dc382020-01-20 11:24:09 -0500172 @mkdir -p java
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +0300173 cp -r java_temp/src/main/java/* java/
174
175# Tests if the generated java classes are compilable
176java-test: java-protos
177 cp test/pom.xml java_temp
178 cd java_temp && mvn compile
179
180java-clean:
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500181 $(RM) -r java
182 $(RM) -r java_temp
183
Joey Armstronge66eaaf2023-01-15 18:58:52 -0500184# placeholder for library targets
185lint :
186
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500187# [EOF]