blob: 56f1317310a51b635e2411e8b4b81690ca2e13df [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
27$(if $(VERBOSE),$(eval export VERBOSE=$(VERBOSE))) # visible to include(s)
28
Joey Armstrong761579c2023-05-08 11:59:57 -040029##--------------------------
30## Enable setup.py debugging
31##--------------------------
32# https://docs.python.org/3/distutils/setupscript.html#debugging-the-setup-script
Joey Armstrong56b36782023-05-30 17:30:11 -040033# export DISTUTILS_DEBUG := 1 # verbose: pip
34export DOCKER_DEBUG := 1 # verbose: docker
Joey Armstrong761579c2023-05-08 11:59:57 -040035
Joey Armstrongc2277652023-01-11 17:41:36 -050036# Makefile for voltha-protos
37default: test
38
Joey Armstronge66eaaf2023-01-15 18:58:52 -050039## Library linting
40# NO-LINT-MAKEFILE := true # cleanup needed
41NO-LINT-SHELL := true # cleanup needed
42
Joey Armstronge6cdd8e2022-12-29 11:58:15 -050043##--------------------##
44##---] INCLUDES [---##
45##--------------------##
Joey Armstronge66eaaf2023-01-15 18:58:52 -050046include $(MAKEDIR)/include.mk
Zack Williams52209662019-02-07 10:15:31 -070047
Zack Williams43bfd9e2019-04-12 13:09:31 -070048# Function to extract the last path component from go_package line in .proto files
49define go_package_path
50$(shell grep go_package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
51endef
52
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030053# Function to extract the last path component from package line in .proto files
Joey Armstrong56b36782023-05-30 17:30:11 -040054# protos/voltha_protos/common.proto => common
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +030055define java_package_path
56$(shell grep package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
57endef
58
Zack Williams52209662019-02-07 10:15:31 -070059# Variables
Zack Williams43bfd9e2019-04-12 13:09:31 -070060PROTO_FILES := $(sort $(wildcard protos/voltha_protos/*.proto))
61
Zack Williams52209662019-02-07 10:15:31 -070062PROTO_PYTHON_DEST_DIR := python/voltha_protos
63PROTO_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 -050064PROTO_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 -070065PROTO_GO_DEST_DIR := go
66PROTO_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 +030067PROTO_JAVA_DEST_DIR := java
Joey Armstrong670d40c2023-05-11 20:49:26 -040068PROTO_JAVA_PB := $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_JAVA_DEST_DIR)/$(call java_package_path,$(f))/%.pb.java,$(f)))
Joey Armstrong761579c2023-05-08 11:59:57 -040069
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 Armstrong761579c2023-05-08 11:59:57 -040086clean :: python-clean java-clean go-clean
Zack Williams52209662019-02-07 10:15:31 -070087
Joey Armstrong761579c2023-05-08 11:59:57 -040088sterile :: clean
Joey Armstrong56b36782023-05-30 17:30:11 -040089 $(RM) -r java_temp
Joey Armstrongc2277652023-01-11 17:41:36 -050090
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
Joey Armstrong56b36782023-05-30 17:30:11 -040094show-pb2:
95 @echo $(PROTO_PYTHON_PB2) | tr ' ' '\n'
96
Joey Armstrong761579c2023-05-08 11:59:57 -040097## -----------------------------------------------------------------------
98## -----------------------------------------------------------------------
99$(PROTO_PYTHON_DEST_DIR)/%_pb2.py: \
100 protos/voltha_protos/%.proto \
101 Makefile \
102 $(venv-activate-script)
Joey Armstrong670d40c2023-05-11 20:49:26 -0400103
104 @echo
105 @echo "** -----------------------------------------------------------------------"
106 @echo "** $(MAKE): processing target [$@]"
107 @echo "** -----------------------------------------------------------------------"
108
109 $(activate) && python -m grpc_tools.protoc \
Zack Williams43bfd9e2019-04-12 13:09:31 -0700110 -I protos \
111 --python_out=python \
112 --grpc_python_out=python \
113 --descriptor_set_out=$(PROTO_PYTHON_DEST_DIR)/$(basename $(notdir $<)).desc \
114 --include_imports \
115 --include_source_info \
116 $<
Zack Williams52209662019-02-07 10:15:31 -0700117
Joey Armstrong670d40c2023-05-11 20:49:26 -0400118## -----------------------------------------------------------------------
119## Intent:
120## -----------------------------------------------------------------------
121show:
122 $(call banner-enter,target $@)
123 @echo
124 $(call banner-leave,target $@)
125
126## -----------------------------------------------------------------------
127## Intent:
128## -----------------------------------------------------------------------
129python-build: setup.py python-protos
130
131 $(call banner-enter,target $@)
132
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500133 $(RM) -r dist/
Zack Williams52209662019-02-07 10:15:31 -0700134 python ./setup.py sdist
135
Joey Armstrong670d40c2023-05-11 20:49:26 -0400136 $(call banner-leave,target $@)
137
138## -----------------------------------------------------------------------
139## Intent:
140## -----------------------------------------------------------------------
Zack Williams52209662019-02-07 10:15:31 -0700141python-test: tox.ini setup.py python-protos
Joey Armstrong670d40c2023-05-11 20:49:26 -0400142 $(call banner-enter,target $@)
143
144 $(activate) && python --version
Zack Williams52209662019-02-07 10:15:31 -0700145 tox
146
Joey Armstrong670d40c2023-05-11 20:49:26 -0400147 $(call banner-leave,target $@)
148
149## -----------------------------------------------------------------------
150## Intent:
151## -----------------------------------------------------------------------
Zack Williams52209662019-02-07 10:15:31 -0700152python-clean:
Joey Armstronge66eaaf2023-01-15 18:58:52 -0500153 find python -name '__pycache__' -type d -print0 \
154 | xargs -0 --no-run-if-empty $(RM) -r
Joey Armstrongc2277652023-01-11 17:41:36 -0500155 find python -name '*.pyc' -type f -print0 \
156 | xargs -0 --no-run-if-empty $(RM)
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500157 $(RM) -r \
Zack Williams43bfd9e2019-04-12 13:09:31 -0700158 .coverage \
159 .tox \
160 coverage.xml \
161 dist \
162 nose2-results.xml \
163 python/__pycache__ \
164 python/test/__pycache__ \
165 python/voltha_protos.egg-info \
Joey Armstrong761579c2023-05-08 11:59:57 -0400166 "$(venv-abs-path)" \
Zack Williams43bfd9e2019-04-12 13:09:31 -0700167 $(PROTO_PYTHON_DEST_DIR)/*.desc \
168 $(PROTO_PYTHON_PB2) \
169 $(PROTO_PYTHON_PB2_GRPC)
Zack Williams52209662019-02-07 10:15:31 -0700170
Joey Armstrong761579c2023-05-08 11:59:57 -0400171## -----------------------------------------------------------------------
172## Intent: Revert go to a clean state.
173## o TODO - go/ directory should not be placed under revision control.
174## o Build should retrieve versioned sources from a central repo.
175## -----------------------------------------------------------------------
khenaidoo5fc5cea2021-08-11 17:39:16 -0400176go-clean:
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500177 $(RM) -r go/*
Joey Armstrong761579c2023-05-08 11:59:57 -0400178 $(HIDE)$(MAKE) repair
179
180## -----------------------------------------------------------------------
181## Intent: Recover from a fatal failed build state:
182## o build removes go/ while regenerating prototypes.
183## o chicken-n-egg: make becomes fatal when go/ is removed and proten fails.
184## -----------------------------------------------------------------------
185repair:
186 /usr/bin/env git checkout go
187
Joey Armstrong670d40c2023-05-11 20:49:26 -0400188## -----------------------------------------------------------------------
189## Intent: Go targets
190## -----------------------------------------------------------------------
Kent Hagerman868dc382020-01-20 11:24:09 -0500191go-protos: voltha.pb
Joey Armstrong670d40c2023-05-11 20:49:26 -0400192
193 @echo
194 @echo "** -----------------------------------------------------------------------"
195 @echo "** $(MAKE): processing target [$@]"
196 @echo "** Creating *.go.pb files"
197 @echo "** -----------------------------------------------------------------------"
198
Joey Armstrong56b36782023-05-30 17:30:11 -0400199 $(docker-sh) $(quote-double) /bin/ls -ld /go/src $(quote-double)
Joey Armstrong670d40c2023-05-11 20:49:26 -0400200
Joey Armstrong56b36782023-05-30 17:30:11 -0400201 ${PROTOC_SH} $(quote-double) \
202 find /go/src -print0 | xargs -0 /bin/ls -ld \
203 $(quote-double)
204
205 $(call banner-enter,target $@)
206
Joey Armstrong761579c2023-05-08 11:59:57 -0400207 ${PROTOC_SH} $(quote-double)\
Kent Hagerman868dc382020-01-20 11:24:09 -0500208 set -e -o pipefail; \
209 for x in ${PROTO_FILES}; do \
210 echo \$$x; \
211 protoc --go_out=plugins=grpc:/go/src -I protos \$$x; \
Joey Armstrong56b36782023-05-30 17:30:11 -0400212 done\
213 $(quote-double)
214
215 $(call banner-leave,target $@)
Zack Williams43bfd9e2019-04-12 13:09:31 -0700216
Joey Armstrong670d40c2023-05-11 20:49:26 -0400217## -----------------------------------------------------------------------
218## Intent:
Joey Armstrong56b36782023-05-30 17:30:11 -0400219## ----------------------------------------------------------------------
220voltha.pb: show-proto-files
Joey Armstrong670d40c2023-05-11 20:49:26 -0400221 $(call banner-enter,target $@)
222
223 ${PROTOC} \
224 -I protos \
225 -I protos/google/api \
226 --include_imports \
227 --include_source_info \
Kent Hagerman868dc382020-01-20 11:24:09 -0500228 --descriptor_set_out=$@ \
229 ${PROTO_FILES}
Zack Williams43bfd9e2019-04-12 13:09:31 -0700230
Joey Armstrong670d40c2023-05-11 20:49:26 -0400231 $(call banner-leave,target $@)
232
233## -----------------------------------------------------------------------
234## Intent:
235## -----------------------------------------------------------------------
Kent Hagerman868dc382020-01-20 11:24:09 -0500236go-test:
Joey Armstrong670d40c2023-05-11 20:49:26 -0400237 $(call banner-enter,target $@)
238
William Kurkianad745652019-03-20 08:45:51 -0400239 test/test-go-proto-consistency.sh
Kent Hagerman868dc382020-01-20 11:24:09 -0500240 ${GO} mod verify
Zack Williams52209662019-02-07 10:15:31 -0700241
Joey Armstrong670d40c2023-05-11 20:49:26 -0400242 $(call banner-leave,target $@)
243
244## -----------------------------------------------------------------------
245## Intent: Java targets
246## -----------------------------------------------------------------------
Joey Armstrong56b36782023-05-30 17:30:11 -0400247
248java-protos-dirs += java_temp/src/main/java
249java-protos-dirs += java_temp/src/main/java/org
250# local docker problem
251java-protos-dirs += java_temp/src/main/java/org/opencord/voltha/adapter
252java-protos-dirs += java_temp/src/main/java/org/opencord/voltha/adapter_service
253
254mkdir-args += -vp
255mkdir-args += --mode=0777
256
Kent Hagerman868dc382020-01-20 11:24:09 -0500257java-protos: voltha.pb
Joey Armstrong56b36782023-05-30 17:30:11 -0400258
Joey Armstrong670d40c2023-05-11 20:49:26 -0400259 $(call banner-enter,target $@)
260
Joey Armstrong56b36782023-05-30 17:30:11 -0400261# $(RM) -fr java_temp
262 mkdir $(mkdir-args) $(java-protos-dirs)
263 $(docker-sh) $(quote-double) find $(java-protos-dirs) -print0 \
264 | xargs -0 -n1 /bin/ls -ld $(quote-double)
265
Joey Armstrong761579c2023-05-08 11:59:57 -0400266 @${PROTOC_SH} $(quote-double) \
Kent Hagerman868dc382020-01-20 11:24:09 -0500267 set -e -o pipefail; \
268 for x in ${PROTO_FILES}; do \
269 echo \$$x; \
270 protoc --java_out=java_temp/src/main/java -I protos \$$x; \
Joey Armstrong56b36782023-05-30 17:30:11 -0400271 done\
272 $(quote-double)
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +0300273
Joey Armstrong670d40c2023-05-11 20:49:26 -0400274 # Move files into place after all prototypes have generated.
275 # TODO: Remove the extra step, use makefile deps and
276 # generate in-place as needed.
277 @mkdir -p java
278 cp -r java_temp/src/main/java/* java
279
280 $(call banner-leave,target $@)
281
282## -----------------------------------------------------------------------
283## Intent: Tests if the generated java classes are compilable
284## -----------------------------------------------------------------------
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +0300285java-test: java-protos
286 cp test/pom.xml java_temp
287 cd java_temp && mvn compile
288
Joey Armstrong670d40c2023-05-11 20:49:26 -0400289## -----------------------------------------------------------------------
290## Intent: Custodial service
291## -----------------------------------------------------------------------
Serkant Uluderyacbcfaa42019-10-18 13:25:08 +0300292java-clean:
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500293 $(RM) -r java
294 $(RM) -r java_temp
295
Joey Armstrong56b36782023-05-30 17:30:11 -0400296## -----------------------------------------------------------------------
297## Intent: Placeholder for library targets
298## -----------------------------------------------------------------------
Joey Armstronge66eaaf2023-01-15 18:58:52 -0500299lint :
300
Joey Armstrong56b36782023-05-30 17:30:11 -0400301## -----------------------------------------------------------------------
302## Intent: Display/debug targets
303## -----------------------------------------------------------------------
304.PHONY: show-proto-files
305show-proto-files:
306 echo -e "PROTO_FILES:\n$(PROTO_FILES)" | tr ' ' '\n'
307
Joey Armstronge6cdd8e2022-12-29 11:58:15 -0500308# [EOF]
Joey Armstrong56b36782023-05-30 17:30:11 -0400309