diff --git a/.gitignore b/.gitignore index ba077a4..e493dd6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ bin +dist diff --git a/Makefile b/Makefile index 0136704..5a9371e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,8 @@ BINNAME = gomonop BINDIR = $(CURDIR)/bin +DISTDIR = $(CURDIR)/dist TARGETS = linux/amd64 linux/386 linux/arm linux/arm64 +STATICFILES = README.md SRC := $(shell find . -type f -name '*.go' -print) go.mod go.sum GOHOSTOS = $(shell go env GOHOSTOS) @@ -26,6 +28,9 @@ LDFLAGS += -X nocternity.net/gomonop/pkg/version.status=${GIT_STATUS} .PHONY: all all: build +# --------------- +# Basic building + .PHONY: build build: GOOS=$(GOHOSTOS) build: GOARCH=$(GOHOSTARCH) @@ -47,12 +52,47 @@ $(BINDIR)/$(GOOS)-$(GOARCH)/$(BINNAME): $(SRC) test: build @go test -v ./... +# ---------------- +# Cross compiling + .PHONY: build-cross build-cross: @for target in $(TARGETS); do \ $(MAKE) build-target GOOS=`echo $$target | cut -d / -f 1` GOARCH=`echo $$target | cut -d / -f 2`; \ done +# ---------- +# Packaging + +.PHONY: dist +dist: GOOS=$(GOHOSTOS) +dist: GOARCH=$(GOHOSTARCH) +dist: dist-target + +.PHONY: dist-all +dist-all: + @for target in $(TARGETS); do \ + $(MAKE) dist-target GOOS=`echo $$target | cut -d / -f 1` GOARCH=`echo $$target | cut -d / -f 2`; \ + done + +.PHONY: dist-target +dist-target: build-target + @set -e; \ + if [ -z "$(BINARY_VERSION)" ]; then \ + echo "No version set"; \ + exit 1; \ + fi; \ + mkdir -p $(DISTDIR)/$(BINNAME)-$(BINARY_VERSION)-$(GOOS)-$(GOARCH); \ + cp $(BINDIR)/$(GOOS)-$(GOARCH)/$(BINNAME) $(DISTDIR)/$(BINNAME)-$(BINARY_VERSION)-$(GOOS)-$(GOARCH); \ + for f in $(STATICFILES); do \ + cp $$f $(DISTDIR)/$(BINNAME)-$(BINARY_VERSION)-$(GOOS)-$(GOARCH); \ + done; \ + cd $(DISTDIR); \ + tar cJf $(BINNAME)-$(BINARY_VERSION)-$(GOOS)-$(GOARCH).tar.xz $(BINNAME)-$(BINARY_VERSION)-$(GOOS)-$(GOARCH) + +# -------- +# Cleanup + .PHONY: clean clean: - @rm -rf $(BINDIR) + @rm -rf $(BINDIR) $(DISTDIR)