82 строки
2.5 KiB
Makefile
82 строки
2.5 KiB
Makefile
PACKAGE := github.com/github/git-sizer
|
|
GO111MODULES := 1
|
|
export GO111MODULES
|
|
|
|
GO := $(CURDIR)/script/go
|
|
|
|
GO_LDFLAGS := -X main.BuildVersion=$(shell git describe --tags --always --dirty || echo unknown)
|
|
GOFLAGS := -mod=readonly -ldflags "$(GO_LDFLAGS)"
|
|
|
|
ifdef USE_ISATTY
|
|
GOFLAGS := $(GOFLAGS) --tags isatty
|
|
endif
|
|
|
|
.PHONY: all
|
|
all: bin/git-sizer
|
|
|
|
.PHONY: bin/git-sizer
|
|
bin/git-sizer:
|
|
mkdir -p bin
|
|
$(GO) build $(GOFLAGS) -o $@ .
|
|
|
|
# Cross-compile for a bunch of common platforms. Note that this
|
|
# doesn't work with USE_ISATTY:
|
|
.PHONY: common-platforms
|
|
common-platforms:
|
|
|
|
# Create releases for a bunch of common platforms. Note that this
|
|
# doesn't work with USE_ISATTY, and VERSION must be set on the command
|
|
# line; e.g.,
|
|
#
|
|
# make releases VERSION=1.2.3
|
|
.PHONY: releases
|
|
releases:
|
|
|
|
# Define rules for a bunch of common platforms that are supported by go; see
|
|
# https://golang.org/doc/install/source#environment
|
|
# You can compile for any other platform in that list by running
|
|
# make GOOS=foo GOARCH=bar
|
|
|
|
define PLATFORM_template =
|
|
.PHONY: bin/git-sizer-$(1)-$(2)$(3)
|
|
bin/git-sizer-$(1)-$(2)$(3):
|
|
mkdir -p bin
|
|
GOOS=$(1) GOARCH=$(2) $$(GO) build $$(GOFLAGS) -ldflags "-X main.ReleaseVersion=$$(VERSION)" -o $$@ .
|
|
common-platforms: bin/git-sizer-$(1)-$(2)$(3)
|
|
|
|
# Note that releases don't include code from vendor (they're only used
|
|
# for testing), so no license info is needed from those projects.
|
|
.PHONY: releases/git-sizer-$$(VERSION)-$(1)-$(2).zip
|
|
releases/git-sizer-$$(VERSION)-$(1)-$(2).zip: bin/git-sizer-$(1)-$(2)$(3)
|
|
if test -z "$$(VERSION)"; then echo "Please set VERSION to make releases"; exit 1; fi
|
|
mkdir -p releases/tmp-$$(VERSION)-$(1)-$(2)
|
|
cp README.md LICENSE.md releases/tmp-$$(VERSION)-$(1)-$(2)
|
|
cp bin/git-sizer-$(1)-$(2)$(3) releases/tmp-$$(VERSION)-$(1)-$(2)/git-sizer$(3)
|
|
cp $$$$($$(GO) list -f '{{.Dir}}' github.com/spf13/pflag)/LICENSE \
|
|
releases/tmp-$$(VERSION)-$(1)-$(2)/LICENSE-spf13-pflag
|
|
rm -f $$@
|
|
zip -j $$@ releases/tmp-$$(VERSION)-$(1)-$(2)/*
|
|
rm -rf releases/tmp-$$(VERSION)-$(1)-$(2)
|
|
releases: releases/git-sizer-$$(VERSION)-$(1)-$(2).zip
|
|
endef
|
|
|
|
$(eval $(call PLATFORM_template,linux,amd64))
|
|
$(eval $(call PLATFORM_template,linux,386))
|
|
|
|
$(eval $(call PLATFORM_template,darwin,amd64))
|
|
$(eval $(call PLATFORM_template,darwin,arm64))
|
|
|
|
$(eval $(call PLATFORM_template,windows,amd64,.exe))
|
|
$(eval $(call PLATFORM_template,windows,386,.exe))
|
|
|
|
.PHONY: test
|
|
test: bin/git-sizer gotest
|
|
|
|
.PHONY: gotest
|
|
gotest:
|
|
$(GO) test -timeout 60s $(GOFLAGS) ./...
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf bin
|