blob: 5a50554c368954bbe13be276ad9167a06747d4cf [file] [log] [blame]
# -*- makefile -*-
# -----------------------------------------------------------------------
# Copyright 2019-2023 Open Networking Foundation
#
# 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.
# -----------------------------------------------------------------------
$(if $(DEBUG),$(warning ENTER))
## -----------------------------------------------------------------------
## Intent:
## o Generate volctl binaries in a docker container container
## o Copy container:/apps/release to localhost:{pwd}/release
## -----------------------------------------------------------------------
## [TODO] Replace ${GO_SH} $(quote-single) .. with $(call quoted,cmd-text)
## -----------------------------------------------------------------------
release-build :
@echo
@echo "** -----------------------------------------------------------------------"
@echo "** $(MAKE): processing target [$@]"
@echo "** Sandbox: $(shell /bin/pwd)"
@echo "** -----------------------------------------------------------------------"
# [DEBUG] Yes this will take a while but where-4-art-thou-golang-in-docker-image-(?)
@echo -e "\n** golang interpreter"
# find '/usr/local' '/go' '/usr/bin' '/bin' -name 'go' ! -type d -print;
# -${GO_SH} $(quote-single) find / -name 'go' ! -type d -print $(quote-single)
-$(HIDE)${GO_SH} $(call quoted,which$(space)-a$(space)go)
-$(HIDE)${GO_SH} $(call quoted,go$(space)version)
@echo -e "\n** Create filesystem target for docker volume: $(RELEASE_DIR)"
$(RM) -r "./$(RELEASE_DIR)"
mkdir -vp "$(RELEASE_DIR)"
$(MAKE) docker-debug
@echo
@echo '** -----------------------------------------------------------------------'
@echo '** Filesystem: docker-container::/app (wanted: release/)'
@echo '** -----------------------------------------------------------------------'
${GO_SH} $(quote-single)find /app \( -name ".git" -o -name "vendor" -o -name "makefiles" -o -name "internal" -o -name "pkg" \) -prune -o -print$(quote-single)
@echo
@echo '** /app/release permissions'
# ${GO_SH} $(quote-single)umask 022 && chmod 700 /app/release $(quote-single)
${GO_SH} $(quote-single)/bin/ls -ld /app/release $(quote-single)
@echo
@echo '** -----------------------------------------------------------------------'
@echo '** Docker builds bins into mounted filesystem:'
@echo '** container:/app/relase'
@echo '** localhost:{pwd}/release'
@echo '** -----------------------------------------------------------------------'
# NOTE: Use double quotes in echo strings else command breakage
${GO_SH} $(quote-single) \
echo ;\
echo "build: ENTER" ;\
set -e -o pipefail; \
set -x ; \
for x in ${RELEASE_OS_ARCH}; do \
echo ;\
echo "** RELEASE_OS_ARCH: Build arch is $$x"; \
OUT_PATH="$(RELEASE_DIR)/$(RELEASE_NAME)-$(subst -dev,_dev,$(VERSION))-$$x"; \
echo ;\
echo "** Building: $$OUT_PATH (ENTER)"; \
GOOS=$${x%-*} GOARCH=$${x#*-} go build -mod=vendor -v $(LDFLAGS) -o "$$OUT_PATH" cmd/voltctl/voltctl.go; \
echo "** Building: $$OUT_PATH (LEAVE)"; \
done ;\
echo "build: LEAVE" \
$(quote-single)
@echo
@echo "** -----------------------------------------------------------------------"
@echo '** Post-build, files to release'
@echo "** -----------------------------------------------------------------------"
-find "$(RELEASE_DIR)" ! -type d -print
@echo
## -----------------------------------------------------------------------
## Intent: Why is go not found reported after
## -----------------------------------------------------------------------
docker-debug:
@echo
@echo "** -----------------------------------------------------------------------"
@echo "** [TARGET] $@"
@echo "** -----------------------------------------------------------------------"
@echo
docker images
@echo
docker ps --all
@echo
## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
clean ::
$(RM) -r "./$(RELEASE_DIR)"
## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
help ::
@echo ' release-build Cross-compile binaries into a docker mounted filesystem'
$(if $(DEBUG),$(warning LEAVE))
# [EOF]