blob: 4799a7829704067b1a40380b065e2ed523911a09 [file] [log] [blame]
William Kurkian6f436d02019-02-06 16:25:01 -05001#
2# Copyright 2018 the original author or authors.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
William Kurkian6f436d02019-02-06 16:25:01 -050017ifeq ($(TAG),)
18TAG := latest
19endif
20
21ifeq ($(TARGET_TAG),)
22TARGET_TAG := latest
23endif
24
William Kurkian6f436d02019-02-06 16:25:01 -050025ifneq ($(http_proxy)$(https_proxy),)
26# Include proxies from the environment
27DOCKER_PROXY_ARGS = \
28 --build-arg http_proxy=$(http_proxy) \
29 --build-arg https_proxy=$(https_proxy) \
30 --build-arg ftp_proxy=$(ftp_proxy) \
31 --build-arg no_proxy=$(no_proxy) \
32 --build-arg HTTP_PROXY=$(HTTP_PROXY) \
33 --build-arg HTTPS_PROXY=$(HTTPS_PROXY) \
34 --build-arg FTP_PROXY=$(FTP_PROXY) \
35 --build-arg NO_PROXY=$(NO_PROXY)
36endif
37
38DOCKER_BUILD_ARGS = \
39 --build-arg TAG=$(TAG) \
40 --build-arg REGISTRY=$(REGISTRY) \
41 --build-arg REPOSITORY=$(REPOSITORY) \
42 $(DOCKER_PROXY_ARGS) $(DOCKER_CACHE_ARG) \
43 --rm --force-rm \
44 $(DOCKER_BUILD_EXTRA_ARGS)
45
Matt Jeanneretf35be112019-03-05 10:58:57 -050046DOCKER_IMAGE_LIST = \
47 voltha-openolt-adapter-base \
48 voltha-openolt-adapter
49
William Kurkian6f436d02019-02-06 16:25:01 -050050VENVDIR := venv-$(shell uname -s | tr '[:upper:]' '[:lower:]')
51
Matt Jeanneretf35be112019-03-05 10:58:57 -050052.PHONY: $(DIRS) $(DIRS_CLEAN) base openolt_adapter
William Kurkian6f436d02019-02-06 16:25:01 -050053
54# This should to be the first and default target in this Makefile
55help:
56 @echo "Usage: make [<target>]"
57 @echo "where available targets are:"
58 @echo
Matt Jeanneretf35be112019-03-05 10:58:57 -050059 @echo "build : Build the adapter."
60 @echo "clean : Remove files created by the build and tests"
61 @echo "distclean : Remove venv directory"
62 @echo "help : Print this help"
63 @echo "rebuild-venv : Rebuild local Python virtualenv from scratch"
64 @echo "venv : Build local Python virtualenv if did not exist yet"
65 @echo "containers : Build all the docker containers"
66 @echo "base : Build a base docker image with a modern version of pip and requirements.txt installed"
67 @echo "openolt_adapter : Build the openolt adapter docker container"
68 @echo "tag : Tag a set of images"
69 @echo "push : Push the docker images to an external repository"
70 @echo "pull : Pull the docker images from a repository"
William Kurkian6f436d02019-02-06 16:25:01 -050071 @echo
72
William Kurkian44cd7bb2019-02-11 16:39:12 -050073build: containers
William Kurkian6f436d02019-02-06 16:25:01 -050074
Matt Jeanneretf35be112019-03-05 10:58:57 -050075containers: base openolt_adapter
William Kurkian44cd7bb2019-02-11 16:39:12 -050076
77base:
78ifdef LOCAL_PYVOLTHA
79 mkdir -p pyvoltha/dist
80 cp ../../pyvoltha/dist/*.tar.gz pyvoltha/dist/
William Kurkian8b1690c2019-03-04 16:53:22 -050081 mkdir -p voltha-protos/dist
82 cp ../../voltha-protos/dist/*.tar.gz voltha-protos/dist/
William Kurkian44cd7bb2019-02-11 16:39:12 -050083 docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-openolt-adapter-base:${TAG} -f docker/Dockerfile.base_local .
84else
Matt Jeanneretf35be112019-03-05 10:58:57 -050085 docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-openolt-adapter-base:${TAG} -f docker/Dockerfile.base .
William Kurkian44cd7bb2019-02-11 16:39:12 -050086endif
87
Matt Jeanneretf35be112019-03-05 10:58:57 -050088openolt_adapter: base
William Kurkian44cd7bb2019-02-11 16:39:12 -050089 docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-openolt-adapter:${TAG} -f docker/Dockerfile.openolt_adapter .
William Kurkian6f436d02019-02-06 16:25:01 -050090
91tag: $(patsubst %,%.tag,$(DOCKER_IMAGE_LIST))
92
93push: tag $(patsubst %,%.push,$(DOCKER_IMAGE_LIST))
94
95pull: $(patsubst %,%.pull,$(DOCKER_IMAGE_LIST))
96
97%.tag:
98 docker tag ${REGISTRY}${REPOSITORY}voltha-$(subst .tag,,$@):${TAG} ${TARGET_REGISTRY}${TARGET_REPOSITORY}voltha-$(subst .tag,,$@):${TARGET_TAG}
99
100%.push:
101 docker push ${TARGET_REGISTRY}${TARGET_REPOSITORY}voltha-$(subst .push,,$@):${TARGET_TAG}
102
103%.pull:
104 docker pull ${REGISTRY}${REPOSITORY}voltha-$(subst .pull,,$@):${TAG}
105
William Kurkian6f436d02019-02-06 16:25:01 -0500106clean:
Matt Jeanneret5e807e52019-02-12 15:19:42 -0500107 rm -rf pyvoltha
William Kurkian8b1690c2019-03-04 16:53:22 -0500108 rm -rf voltha-protos
William Kurkian6f436d02019-02-06 16:25:01 -0500109 find . -name '*.pyc' | xargs rm -f
William Kurkian6f436d02019-02-06 16:25:01 -0500110
111distclean: clean
112 rm -rf ${VENVDIR}
113
William Kurkian6f436d02019-02-06 16:25:01 -0500114purge-venv:
115 rm -fr ${VENVDIR}
116
117rebuild-venv: purge-venv venv
118
William Kurkian6f436d02019-02-06 16:25:01 -0500119venv: ${VENVDIR}/.built
William Kurkian6f436d02019-02-06 16:25:01 -0500120
121${VENVDIR}/.built:
Matt Jeanneretb428b952019-03-07 05:14:17 -0500122 virtualenv -v ${VENVDIR}
123 # these are just symlinks to the other folders in the venv. this makes it appear as if there are duplicate definitions in PYTHONPATH. venv bug?
124 rm ${VENVDIR}/local/bin ${VENVDIR}/local/lib ${VENVDIR}/local/include
125 . ${VENVDIR}/bin/activate && \
William Kurkian6f436d02019-02-06 16:25:01 -0500126 pip install --upgrade pip; \
127 if ! pip install -r requirements.txt; \
128 then \
129 echo "On MAC OS X, if the installation failed with an error \n'<openssl/opensslv.h>': file not found,"; \
130 echo "see the BUILD.md file for a workaround"; \
131 else \
132 uname -s > ${VENVDIR}/.built; \
133 fi
134
William Kurkian44cd7bb2019-02-11 16:39:12 -0500135ifdef LOCAL_PYVOLTHA
136 mkdir -p pyvoltha/dist
137 cp ../../pyvoltha/dist/*.tar.gz pyvoltha/dist/
William Kurkian8b1690c2019-03-04 16:53:22 -0500138 mkdir -p voltha-protos/dist
139 cp ../../voltha-protos/dist/*.tar.gz voltha-protos/dist/
Matt Jeanneretb428b952019-03-07 05:14:17 -0500140 . ${VENVDIR}/bin/activate && \
Matt Jeanneret276bc422019-03-07 12:34:57 -0500141 pip install pyvoltha/dist/*.tar.gz && \
William Kurkian8b1690c2019-03-04 16:53:22 -0500142 pip install voltha-protos/dist/*.tar.gz
William Kurkian44cd7bb2019-02-11 16:39:12 -0500143endif
144
William Kurkian6f436d02019-02-06 16:25:01 -0500145# end file