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/macros.mk b/makefiles/release/macros.mk
new file mode 100644
index 0000000..7a63529
--- /dev/null
+++ b/makefiles/release/macros.mk
@@ -0,0 +1,102 @@
+# -*- 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))
+
+## -----------------------------------------------------------------------
+## Intent: Given a hyphen separated list of values return item [n]
+## -----------------------------------------------------------------------
+## Usage:
+##   value    := foo-bar-tans-fans
+##   tans-val = $(call get-hyphen-field,value,3)
+## -----------------------------------------------------------------------
+get-hyphen-field = $(word $(1),$(subst -,$(space),$(notdir $(2))))
+
+## -----------------------------------------------------------------------
+## Intent: Construct a parameterized $(GO_SH) command
+## Given:
+##   argv[1] Response file containing environment vars passed to docker.
+## Usage:
+##   cmd = $(my-go-sh,./env-vars)
+## Debug: view arguments passed
+##   make DEBUG=1
+## -----------------------------------------------------------------------
+my-go-sh=$(strip                   \
+  $(docker-run-app)                \
+	$(is-stdin)                \
+	$(if $(1),--env-file $(1)) \
+	-v gocache:/.cache         \
+	$(vee-golang)              \
+	$(vee-citools)-golang      \
+	sh -c                      \
+)
+
+## -----------------------------------------------------------------------
+## Intent: Derive a list of release platform binaries by name
+## -----------------------------------------------------------------------
+## Given:
+##   $1 (scalar:name)      $(RELEASE_BBSIM_NAME)
+##   $2 (indirect:arches)  $(RELEASE_OS_ARCH)
+## -----------------------------------------------------------------------
+## Usage: deps = $(call release-gen-deps-name,tool-name,tool-arches)
+## -----------------------------------------------------------------------
+release-gen-deps-name=$(strip \
+\
+  $(if $($(1)),$(null),$(error name= is required))\
+  $(if $($(2)),$(null),$(error arches= is required))\
+\
+  $(foreach name,$($(1)),\
+     $(if $(DEBUG),$(info name=$(name)))\
+  $(foreach arches,$(2),\
+     $(if $(DEBUG),$(info arches=$(arches)))\
+     $(foreach arch,$($(arches)),\
+        $(if $(DEBUG),$(info arch=$(arch): $(name)-$(arch)))\
+        $(name)-$(arch)\
+     )\
+  ))\
+)
+
+## -----------------------------------------------------------------------
+## Intent: Derive a list of release binary dependencies
+## -----------------------------------------------------------------------
+## Returns:
+##    release/bbsim-darwin-amd64
+##    release/bbsim-linux-amd64
+##    release/bbsim-windows-amd64
+## -----------------------------------------------------------------------
+## Usage:
+##    tool-name   = bbsim
+##    tool-arches = darwin linux windows
+##    release-dir = release
+##    deps = $(call release-gen-deps,tool-name,tool-arches,release-dir)
+##    $(foreach val,$(deps),$(info ** deps=$(val)))
+## -----------------------------------------------------------------------
+release-gen-deps=$(strip \
+\
+  $(if $($(1)),$(null),$(error name= is required))\
+  $(if $($(2)),$(null),$(error arches= is required))\
+  $(if $($(3)),$(null),$(error release-dir= is required))\
+\
+  $(if $(DEBUG),$(info release-dir=$(3)))\
+  $(foreach release-dir,$($(3)),\
+    $(addprefix $(release-dir)/,$(call release-gen-deps-name,$(1),$(2)))\
+  )\
+)
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]