|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
|
|
2
|
+IMAGE_NAME := mtg
|
|
|
3
|
+APP_NAME := $(IMAGE_NAME)
|
|
|
4
|
+GOMETALINTER := gometalinter.v2
|
|
|
5
|
+
|
|
|
6
|
+VENDOR_FILES := $(shell find "$(ROOT_DIR)/vendor" 2>/dev/null || echo -n "vendor")
|
|
|
7
|
+CC_BINARIES := $(shell bash -c "echo -n $(APP_NAME)-{linux,windows,darwin,freebsd,openbsd}-{386,amd64} $(APP_NAME)-linux-{arm,arm64}")
|
|
|
8
|
+APP_DEPS := version.go $(VENDOR_FILES)
|
|
|
9
|
+
|
|
|
10
|
+COMMON_BUILD_FLAGS := -ldflags="-s -w"
|
|
|
11
|
+
|
|
|
12
|
+# -----------------------------------------------------------------------------
|
|
|
13
|
+
|
|
|
14
|
+$(APP_NAME): $(APP_DEPS)
|
|
|
15
|
+ @go build $(COMMON_BUILD_FLAGS) -o "$(APP_NAME)"
|
|
|
16
|
+
|
|
|
17
|
+static-$(APP_NAME): $(APP_DEPS)
|
|
|
18
|
+ @env CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo $(COMMON_BUILD_FLAGS) -o "$(APP_NAME)"
|
|
|
19
|
+
|
|
|
20
|
+$(APP_NAME)-%: GOOS=$(shell echo -n "$@" | sed 's?$(APP_NAME)-??' | cut -f1 -d-)
|
|
|
21
|
+$(APP_NAME)-%: GOARCH=$(shell echo -n "$@" | sed 's?$(APP_NAME)-??' | cut -f2 -d-)
|
|
|
22
|
+$(APP_NAME)-%: $(APP_DEPS) ccbuilds
|
|
|
23
|
+ @env "GOOS=$(GOOS)" "GOARCH=$(GOARCH)" \
|
|
|
24
|
+ go build \
|
|
|
25
|
+ $(COMMON_BUILD_FLAGS) \
|
|
|
26
|
+ -o "./ccbuilds/$(APP_NAME)-$(GOOS)-$(GOARCH)"
|
|
|
27
|
+
|
|
|
28
|
+ccbuilds:
|
|
|
29
|
+ @rm -rf ./ccbuilds && mkdir -p ./ccbuilds
|
|
|
30
|
+
|
|
|
31
|
+version.go:
|
|
|
32
|
+ @go generate main.go
|
|
|
33
|
+
|
|
|
34
|
+vendor: Gopkg.lock Gopkg.toml install-cli
|
|
|
35
|
+ @dep ensure
|
|
|
36
|
+
|
|
|
37
|
+# -----------------------------------------------------------------------------
|
|
|
38
|
+
|
|
|
39
|
+.PHONY: all
|
|
|
40
|
+all: $(APP_NAME)
|
|
|
41
|
+
|
|
|
42
|
+.PHONY: static
|
|
|
43
|
+static: static-$(APP_NAME)
|
|
|
44
|
+
|
|
|
45
|
+.PHONY: crosscompile
|
|
|
46
|
+crosscompile: $(CC_BINARIES)
|
|
|
47
|
+
|
|
|
48
|
+.PHONY: crosscompile-dir
|
|
|
49
|
+crosscompile-dir:
|
|
|
50
|
+ @rm -rf "$(CC_DIR)" && mkdir -p "$(CC_DIR)"
|
|
|
51
|
+
|
|
|
52
|
+.PHONY: test
|
|
|
53
|
+test: vendor install-cli
|
|
|
54
|
+ @go test -v ./...
|
|
|
55
|
+
|
|
|
56
|
+.PHONY: lint
|
|
|
57
|
+lint: vendor install-cli
|
|
|
58
|
+ @$(GOMETALINTER) --deadline=2m ./...
|
|
|
59
|
+
|
|
|
60
|
+.PHONY: clean
|
|
|
61
|
+clean:
|
|
|
62
|
+ @git clean -xfd && \
|
|
|
63
|
+ git reset --hard >/dev/null && \
|
|
|
64
|
+ git submodule foreach --recursive sh -c 'git clean -xfd && git reset --hard' >/dev/null
|
|
|
65
|
+
|
|
|
66
|
+.PHONY: docker
|
|
|
67
|
+docker:
|
|
|
68
|
+ @docker build --pull -t "$(IMAGE_NAME)" "$(ROOT_DIR)"
|
|
|
69
|
+
|
|
|
70
|
+.PHONY: install-cli
|
|
|
71
|
+install-cli: install-dep install-lint
|
|
|
72
|
+
|
|
|
73
|
+.PHONY: install-dep
|
|
|
74
|
+install-dep:
|
|
|
75
|
+ @go get github.com/golang/dep/cmd/dep
|
|
|
76
|
+
|
|
|
77
|
+.PHONY: install-lint
|
|
|
78
|
+install-lint:
|
|
|
79
|
+ @go get gopkg.in/alecthomas/gometalinter.v2 && \
|
|
|
80
|
+ $(GOMETALINTER) --install >/dev/null
|