VOL-4883 - Publish a new bbsim release

https://github.com/opencord/bbsim/releases/tag/untagged-6d947de2a6078a1fe175
----------------------------------------------------------------------------
  o Draft bbsim release v2.96.8572 created by this patch set.
  o All 6cross-compile binaries are now included.
  o Change ID + commit message document the release.
  o Binaries downloaded/tested using {bbr,bbsim,bbsimctl} --help

Makefile
--------
  o Makefile release target is now able to cross compile all binaries:
    - bbsimctl cross compiled to arm, darwin, linux and windows.
    - release-{bbr, bbsim} only built *-linux-amd64
  o Refactor targets into a more modular and hierarchial setup.
  o Be sure to create RELEASE_DIR early on localhost so docker
    container can create a volume (NFS mount) for building into.
  o Display banners when building targets to improve log readability.
  o Clean targets updated to remove everything generated.
  o Help targets added to document indvidual target logic.
  o Makefile logic heavily commented.

makefiles/release/bbr.mk
makefiles/release/bbsim.mk
makefiles/release/bbsimctl.mk
-----------------------------
  o Relocate build-* and release-* target logic into named makefiles.
  o Update SHELL to set -euo pipefail to detect uninit shell vars.
  o Replaced shell/looping logic with true makefile target dependencies:
    - shell/loop replaced with a target rule that builds one platform binary.
    - Derive a list of targets release/{bbr,bbsim,bbsimctl}-{os}-{arch}
    - release: depends on all buildable targets
    - release rule can extract arch= and os= from target path being built.
    - To simplify logic construct env vars separately into a response file.
    - passed as "docker --env-file [x]" VS appending to an ever growing command line.
  o Marked more targets as .PHONY so they will always build.
  o Added helper target 'onf-publish' for exercising changes in the github-release script.

makefiles/include.mk
--------------------
  o Single include for importing all library makefiles.

makefiles/consts.mk
-------------------
  o Include fixed values, esp $(quote-single) which is now used to document
  o Refactor duplication in GO_* macros into named/reused values to shorten lines.

makefiles/lint
--------------
  o Moved lint::docker (hadolint target) into makefiles/lint/docker/*.mk.
  o Added makefiles/lint library targets for ability to lint more sources.

makefiles/tools.mk
------------------
  o Refactor DOCKER_* and GO_* macros into a named includable makefile.q

Change-Id: I8791317ba0c3f01d047f363e69f8885a03f1a1a1
diff --git a/makefiles/release/bbsimctl.mk b/makefiles/release/bbsimctl.mk
new file mode 100644
index 0000000..550cd20
--- /dev/null
+++ b/makefiles/release/bbsimctl.mk
@@ -0,0 +1,124 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2017-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.
+# -----------------------------------------------------------------------
+
+$(if $(DEBUG),$(warning ENTER))
+
+##-------------------##
+##---]  GLOBALS  [---##
+##-------------------##
+RELEASE_BBSIMCTL_NAME ?= bbsimctl
+
+bbsimctl-config := github.com/opencord/bbsim/internal/bbsimctl/config
+
+# release-target-deps += release-bbsimctl
+
+# -----------------------------
+# release/bbsimctl-darwin-amd64
+# release/bbsimctl-linux-amd64
+# release/bbsimctl-windows-amd64
+# -----------------------------
+release-bbsimctl-deps :=\
+  $(call release-gen-deps,RELEASE_BBSIMCTL_NAME,RELEASE_OS_ARCH,RELEASE_DIR)
+
+## -----------------------------------------------------------------------
+## Intent: Cross-compile bbsimctl binaries as dependency targets
+##   o target: release/bbsimctl-linux-amd64
+##   o create release/ for VOLUME mounting by docker container
+##   o create a response file for passing docker env vars
+##   o cross-compile: GOOS= GOARCH= go build
+## -----------------------------------------------------------------------
+release-bbsimctl: $(release-bbsimctl-deps)
+
+.PHONY: $(release-bbsimctl-deps)
+$(release-bbsimctl-deps):
+
+	@echo
+	@echo "** -----------------------------------------------------------------------"
+	@echo "** $(MAKE): processing target [$@]"
+	@echo "** -----------------------------------------------------------------------"
+
+        # Docker container is responsible for compiling
+        # Release target will publish from localhost:release/
+        # Binaries are built into mounted docker volume /app/release=> localhost:release/
+	$(HIDE)mkdir -vp "$(RELEASE_DIR)"
+	$(HIDE)umask 000 && chmod 777 "$(RELEASE_DIR)"
+
+        # -----------------------------------------------------------------------
+        # Create a response file for passing environment vars to docker
+        # -----------------------------------------------------------------------
+	$(HIDE)$(RM) $(notdir $@).env
+	$(HIDE)echo -e '#!/bin/bash\n' \
+	  'GOOS=$(call get-hyphen-field,2,$@)\n' \
+	  'GOARCH=$(call get-hyphen-field,3,$@)\n' \
+	  >> "$(notdir $@).env"
+
+        # -----------------------------------------------------------------------
+        # Compile a platform binary
+        # -----------------------------------------------------------------------
+	$(HIDE) \
+	umask 022 \
+\
+	&& echo "** Building: $@" \
+	&& set -x \
+	&& $(call my-go-sh,$(notdir $@).env) \
+    $(quote-single) \
+      go build -mod vendor \
+	 -ldflags "-w -X $(bbsimctl-config).BuildTime=$(shell date +%Y/%m/%d-%H:%M:%S) \
+	    -X $(bbsimctl-config).CommitHash=$(shell git log --pretty=format:%H -n 1) \
+	    -X $(bbsimctl-config).GitStatus=${GIT_STATUS} \
+	    -X $(bbsimctl-config).Version=${VERSION}" \
+	  -o "$@" ./cmd/bbsimctl \
+    $(quote-single)
+
+        # -----------------------------------------------------------------------
+        # Cleanup and display results
+        # -----------------------------------------------------------------------
+	@$(RM) $(notdir $@).env
+	$(HIDE)umask 000 && chmod 755 "$(RELEASE_DIR)"
+	$(HIDE)file "$@"
+
+## -----------------------------------------------------------------------
+## Intent: Build bbsimctl on localhost
+## -----------------------------------------------------------------------
+build-bbsimctl:
+	@go build -mod vendor \
+	  -ldflags "-w -X github.com/opencord/bbsim/internal/bbsimctl/config.BuildTime=$(shell date +%Y/%m/%d-%H:%M:%S) \
+	    -X github.com/opencord/bbsim/internal/bbsimctl/config.CommitHash=$(shell git log --pretty=format:%H -n 1) \
+	    -X github.com/opencord/bbsim/internal/bbsimctl/config.GitStatus=${GIT_STATUS} \
+	    -X github.com/opencord/bbsim/internal/bbsimctl/config.Version=${VERSION}" \
+	  ./cmd/bbsimctl
+
+## -----------------------------------------------------------------------
+## Intent: Remove generated targets
+## -----------------------------------------------------------------------
+clean ::
+	$(RM) $(release-bbsimctl-deps)
+	$(RM) *.env
+	$(RM) bbsimclt
+
+## -----------------------------------------------------------------------
+## Intent: Display target help#
+# -----------------------------------------------------------------------
+help ::
+	@echo
+	@echo '[bbsimctl]'
+	@echo '  build-bbsimctl      Compile bbsimctl on localhost'
+	@echo '  release-bbsimctl    Cross-compile bbsimctl binaries into a docker mounted filesystem'
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]