obrimbaseapi/Makefile

284 lines
7.3 KiB
Makefile

# =========================================================
# Variable
# =========================================================
# Framework
# Identity and metadata of framework. Human-readable name, machine-readable names(lower and upper), and semantic version.
FRAMEWORK_REGULAR=Framework Regular
FRAMEWORK_LOWER=frameworklower
FRAMEWORK_UPPER=FRAMEWORKUPPER
FRAMEWORK_VERSION=0.0.0
# Software
# Identity and metadata of software. Human-readable name, machine-readable names(lower and upper), and semantic version.
SOFTWARE_REGULAR=Software Regular
SOFTWARE_LOWER=softwarelower
SOFTWARE_UPPER=SOFTWAREUPPER
SOFTWARE_VERSION=0.0.0
# Go Module
# App module and import path used by go.mod and source imports. Valid Go module path.
GO_MODULE=go/module
# Directory
# Locations used by build and management commands. Relative or absolute paths.
SOURCE_DIR=./run/main
RELEASE_DIR=./release
FRAMEWORK_METADATA_DIR=./data/framework/metadata
SOFTWARE_METADATA_DIR=./data/software/metadata
# File
# Metadata file names without extension. File name only.
FRAMEWORK_METADATA_FLE=resource
SOFTWARE_METADATA_FLE=resource
# Derived Path
# Automatically generated from directory and file variables. Do not edit.
FRAMEWORK_METADATA_PATH=$(FRAMEWORK_METADATA_DIR)/$(FRAMEWORK_METADATA_FLE)
SOFTWARE_METADATA_PATH=$(SOFTWARE_METADATA_DIR)/$(SOFTWARE_METADATA_FLE)
# Target File Type
# File types scanned by update commands. Valid find expression.
TARGET_FILE_TYPE=\
-name "*.go" \
-o -name "*.json" \
-o -name "*.yaml" \
-o -name "*.yml"
# Go Module Placeholder
# Replacement rules applied by upd-gm-ph. Valid sed replacement expressions.
GO_MODULE_REPLACEMENT=\
-e 's|gomodule|$(GO_MODULE)|g' \
-e 's|go/module|$(GO_MODULE)|g' \
-e 's|go-module|$(GO_MODULE)|g' \
-e 's|go_module|$(GO_MODULE)|g'
# =========================================================
# Command
# =========================================================
# PHONY Target
.PHONY: \
help \
upd-gm-ph \
upd-fw-md \
upd-sw-md \
go-ini \
go-tid \
go-stp \
pre-rel \
go-bld \
go-bld-lin \
go-bld-win \
go-bld-mac \
bld-lin-amd \
bld-lin-arm \
bld-win-amd \
bld-win-arm \
bld-mac-amd \
bld-mac-arm
# Default Command
.DEFAULT_GOAL := help
# =========================================================
# Help
# =========================================================
help:
@echo ""
@echo "Available Commands:"
@echo ""
@printf " %-18s %s\n" "upd-gm-ph" "Update Go module placeholder"
@printf " %-18s %s\n" "upd-fw-md" "Update framework metadata"
@printf " %-18s %s\n" "upd-sw-md" "Update software metadata"
@echo ""
@printf " %-18s %s\n" "go-ini" "Initialize Go module"
@printf " %-18s %s\n" "go-tid" "Tidy Go module dependencies"
@printf " %-18s %s\n" "go-stp" "Initialize Go module and tidy dependencies"
@echo ""
@printf " %-18s %s\n" "go-bld" "Build all platform binaries"
@printf " %-18s %s\n" "go-bld-lin" "Build all Linux binaries"
@printf " %-18s %s\n" "go-bld-win" "Build all Windows binaries"
@printf " %-18s %s\n" "go-bld-mac" "Build all macOS binaries"
@echo ""
@printf " %-18s %s\n" "bld-lin-amd" "Build Linux AMD64 binary"
@printf " %-18s %s\n" "bld-lin-arm" "Build Linux ARM64 binary"
@echo ""
@printf " %-18s %s\n" "bld-win-amd" "Build Windows AMD64 binary"
@printf " %-18s %s\n" "bld-win-arm" "Build Windows ARM64 binary"
@echo ""
@printf " %-18s %s\n" "bld-mac-amd" "Build macOS AMD64 binary"
@printf " %-18s %s\n" "bld-mac-arm" "Build macOS ARM64 binary"
@echo ""
# =========================================================
# Update
# =========================================================
upd-gm-ph:
@find . -type f \
\( $(TARGET_FILE_TYPE) \) \
-exec sed -i \
$(GO_MODULE_REPLACEMENT) \
{} +
@if [ -f go.mod ]; then \
sed -i \
$(GO_MODULE_REPLACEMENT) \
go.mod; \
fi
@go mod tidy
@echo "Go Module Updated!"
upd-fw-md:
@jq \
--arg framework_regular "$(FRAMEWORK_REGULAR)" \
--arg framework_lower "$(FRAMEWORK_LOWER)" \
--arg framework_upper "$(FRAMEWORK_UPPER)" \
--arg framework_version "$(FRAMEWORK_VERSION)" \
'.framework.regular=$$framework_regular|.framework.lower=$$framework_lower|.framework.upper=$$framework_upper|.framework.version=$$framework_version' \
$(FRAMEWORK_METADATA_PATH).json \
> $(FRAMEWORK_METADATA_PATH).json.tmp
@mv $(FRAMEWORK_METADATA_PATH).json.tmp $(FRAMEWORK_METADATA_PATH).json
@echo "Framework Metadata Updated!"
upd-sw-md:
@jq \
--arg software_regular "$(SOFTWARE_REGULAR)" \
--arg software_lower "$(SOFTWARE_LOWER)" \
--arg software_upper "$(SOFTWARE_UPPER)" \
--arg software_version "$(SOFTWARE_VERSION)" \
'.software.regular=$$software_regular|.software.lower=$$software_lower|.software.upper=$$software_upper|.software.version=$$software_version' \
$(SOFTWARE_METADATA_PATH).json \
> $(SOFTWARE_METADATA_PATH).json.tmp
@mv $(SOFTWARE_METADATA_PATH).json.tmp $(SOFTWARE_METADATA_PATH).json
@echo "Software Metadata Updated!"
# =========================================================
# Release
# =========================================================
pre-rel:
@test -n "$(RELEASE_DIR)"
@mkdir -p "$(RELEASE_DIR)"
@find "$(RELEASE_DIR)" -mindepth 1 -delete
# =========================================================
# Initialize
# =========================================================
go-ini:
@test -f go.mod || go mod init $(GO_MODULE)
go-tid:
go mod tidy
go-stp: \
go-ini \
go-tid
# =========================================================
# Build Group
# =========================================================
go-bld: \
pre-rel \
go-tid \
bld-lin-amd \
bld-lin-arm \
bld-win-amd \
bld-win-arm \
bld-mac-amd \
bld-mac-arm
go-bld-lin: \
pre-rel \
go-tid \
bld-lin-amd \
bld-lin-arm
go-bld-win: \
pre-rel \
go-tid \
bld-win-amd \
bld-win-arm
go-bld-mac: \
pre-rel \
go-tid \
bld-mac-amd \
bld-mac-arm
# =========================================================
# Build Target
# =========================================================
# Linux AMD64
bld-lin-amd:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build \
-trimpath \
-buildvcs=false \
-ldflags="-s -w" \
-o $(RELEASE_DIR)/$(SOFTWARE_LOWER)-v$(SOFTWARE_VERSION)-linux-amd64 \
$(SOURCE_DIR)
# Linux ARM64
bld-lin-arm:
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 \
go build \
-trimpath \
-buildvcs=false \
-ldflags="-s -w" \
-o $(RELEASE_DIR)/$(SOFTWARE_LOWER)-v$(SOFTWARE_VERSION)-linux-arm64 \
$(SOURCE_DIR)
# Windows AMD64
bld-win-amd:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 \
go build \
-trimpath \
-buildvcs=false \
-ldflags="-s -w" \
-o $(RELEASE_DIR)/$(SOFTWARE_LOWER)-v$(SOFTWARE_VERSION)-windows-amd64.exe \
$(SOURCE_DIR)
# Windows ARM64
bld-win-arm:
CGO_ENABLED=0 GOOS=windows GOARCH=arm64 \
go build \
-trimpath \
-buildvcs=false \
-ldflags="-s -w" \
-o $(RELEASE_DIR)/$(SOFTWARE_LOWER)-v$(SOFTWARE_VERSION)-windows-arm64.exe \
$(SOURCE_DIR)
# macOS AMD64
bld-mac-amd:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 \
go build \
-trimpath \
-buildvcs=false \
-ldflags="-s -w" \
-o $(RELEASE_DIR)/$(SOFTWARE_LOWER)-v$(SOFTWARE_VERSION)-macos-amd64 \
$(SOURCE_DIR)
# macOS ARM64
bld-mac-arm:
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 \
go build \
-trimpath \
-buildvcs=false \
-ldflags="-s -w" \
-o $(RELEASE_DIR)/$(SOFTWARE_LOWER)-v$(SOFTWARE_VERSION)-macos-arm64 \
$(SOURCE_DIR)