284 lines
7.3 KiB
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)
|