blob: 09c25312e25d7cf37b0f962189164f919fe56638 [file] [log] [blame]
# -*- makefile -*-
# -----------------------------------------------------------------------
# Copyright 2019-2023 Open Networking Foundation (ONF) and the ONF Contributors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# -----------------------------------------------------------------------
.PHONY: test
.DEFAULT_GOAL := test
##-------------------##
##---] GLOBALS [---##
##-------------------##
TOP ?= .
MAKEDIR ?= $(TOP)/makefiles
$(if $(VERBOSE),$(eval export VERBOSE=$(VERBOSE))) # visible to include(s)
##--------------------------
## Enable setup.py debugging
##--------------------------
# https://docs.python.org/3/distutils/setupscript.html#debugging-the-setup-script
export DISTUTILS_DEBUG := 1
# Makefile for voltha-protos
default: test
## Library linting
# NO-LINT-MAKEFILE := true # cleanup needed
NO-LINT-SHELL := true # cleanup needed
##--------------------##
##---] INCLUDES [---##
##--------------------##
include $(MAKEDIR)/include.mk
# Function to extract the last path component from go_package line in .proto files
define go_package_path
$(shell grep go_package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
endef
# Function to extract the last path component from package line in .proto files
define java_package_path
$(shell grep package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
endef
# Variables
PROTO_FILES := $(sort $(wildcard protos/voltha_protos/*.proto))
PROTO_PYTHON_DEST_DIR := python/voltha_protos
PROTO_PYTHON_PB2 := $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_PYTHON_DEST_DIR)/%_pb2.py,$(f)))
PROTO_PYTHON_PB2_GRPC := $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_PYTHON_DEST_DIR)/%_pb2_grpc.py,$(f)))
PROTO_GO_DEST_DIR := go
PROTO_GO_PB:= $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_GO_DEST_DIR)/$(call go_package_path,$(f))/%.pb.go,$(f)))
PROTO_JAVA_DEST_DIR := java
PROTO_JAVA_PB := $(foreach f, $(PROTO_FILES), $(patsubst protos/voltha_protos/%.proto,$(PROTO_JAVA_DEST_DIR)/$(call java_package_path,$(f))/%.pb.java,$(f)))
# Force pb file to be regenrated every time. Otherwise the make process assumes generated version is still valid
.PHONY: voltha.pb
print:
@echo "Proto files: $(PROTO_FILES)"
@echo "Python PB2 files: $(PROTO_PYTHON_PB2)"
@echo "Go PB files: $(PROTO_GO_PB)"
@echo "JAVA PB files: $(PROTO_JAVA_PB)"
# Generic targets
protos: python-protos go-protos java-protos
build: protos python-build go-protos java-protos
test: python-test go-test java-test
clean :: python-clean java-clean go-clean
sterile :: clean
# Python targets
python-protos: $(PROTO_PYTHON_PB2)
## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
$(PROTO_PYTHON_DEST_DIR)/%_pb2.py: \
protos/voltha_protos/%.proto \
Makefile \
$(venv-activate-script)
$(activate) \
&& python -m grpc_tools.protoc \
-I protos \
--python_out=python \
--grpc_python_out=python \
--descriptor_set_out=$(PROTO_PYTHON_DEST_DIR)/$(basename $(notdir $<)).desc \
--include_imports \
--include_source_info \
$<
python-build: setup.py python-protos
$(RM) -r dist/
python ./setup.py sdist
python-test: tox.ini setup.py python-protos
tox
python-clean:
find python -name '__pycache__' -type d -print0 \
| xargs -0 --no-run-if-empty $(RM) -r
find python -name '*.pyc' -type f -print0 \
| xargs -0 --no-run-if-empty $(RM)
$(RM) -r \
.coverage \
.tox \
coverage.xml \
dist \
nose2-results.xml \
python/__pycache__ \
python/test/__pycache__ \
python/voltha_protos.egg-info \
"$(venv-abs-path)" \
$(PROTO_PYTHON_DEST_DIR)/*.desc \
$(PROTO_PYTHON_PB2) \
$(PROTO_PYTHON_PB2_GRPC)
## -----------------------------------------------------------------------
## Intent: Revert go to a clean state.
## o TODO - go/ directory should not be placed under revision control.
## o Build should retrieve versioned sources from a central repo.
## -----------------------------------------------------------------------
go-clean:
$(RM) -r go/*
$(HIDE)$(MAKE) repair
## -----------------------------------------------------------------------
## Intent: Recover from a fatal failed build state:
## o build removes go/ while regenerating prototypes.
## o chicken-n-egg: make becomes fatal when go/ is removed and proten fails.
## -----------------------------------------------------------------------
repair:
/usr/bin/env git checkout go
# Go targets
go-protos: voltha.pb
@echo "Creating *.go.pb files"
@echo "PROTO_FILES=$(PROTO_FILES)" | tr ' ' '\n'
${PROTOC_SH} $(quote-double)\
set -e -o pipefail; \
for x in ${PROTO_FILES}; do \
echo \$$x; \
protoc --go_out=plugins=grpc:/go/src -I protos \$$x; \
done$(quote-double)
voltha.pb:
@echo "Creating $@"
$(HIDE)${PROTOC} -I protos -I protos/google/api \
--include_imports --include_source_info \
--descriptor_set_out=$@ \
${PROTO_FILES}
go-test:
test/test-go-proto-consistency.sh
${GO} mod verify
# Java targets
java-protos: voltha.pb
@echo "Creating java files"
@mkdir -p java_temp/src/main/java
@${PROTOC_SH} $(quote-double) \
set -e -o pipefail; \
for x in ${PROTO_FILES}; do \
echo \$$x; \
protoc --java_out=java_temp/src/main/java -I protos \$$x; \
done$(quote-double)
#TODO: generate directly to the final location
@mkdir -p java
cp -r java_temp/src/main/java/* java/
# Tests if the generated java classes are compilable
java-test: java-protos
cp test/pom.xml java_temp
cd java_temp && mvn compile
java-clean:
$(RM) -r java
$(RM) -r java_temp
# placeholder for library targets
lint :
# [EOF]