From 765f041ccbaa0274893f22e79c0339ef6d3233cd Mon Sep 17 00:00:00 2001 From: Liu-Cheng Xu Date: Thu, 1 Mar 2018 17:19:09 +0800 Subject: [PATCH] Automize the compilation of cross platform binary application (#387) * Automize the compilation of cross platform binary application * Add the default target * Add phony * Ingore target * Refactor release target --- .gitignore | 2 + Makefile | 159 ++++++++++++++++++++++++++++++----------------------- version/version.go | 6 +- 3 files changed, 93 insertions(+), 74 deletions(-) diff --git a/.gitignore b/.gitignore index 3e1dc083..3c4bf121 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,8 @@ cmd/bytomcli/bytomcli cmd/bytom/.bytom .bytomd +target + *.exe # vim diff --git a/Makefile b/Makefile index b7ac1f2c..076fbf77 100644 --- a/Makefile +++ b/Makefile @@ -1,71 +1,92 @@ -PACKAGES = $(shell go list ./... | grep -v '/vendor/') - -all: bytomd bytomcli miner test - -bytomd: - @echo "Building bytomd to cmd/bytomd/bytomd" - @go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/bytomd/bytomd cmd/bytomd/main.go - -bytomcli: - @echo "Building bytomcli to cmd/bytomcli/bytomcli" - @go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/bytomcli/bytomcli cmd/bytomcli/main.go - -miner: - @echo "Building miner to cmd/miner/miner" - @go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/miner/miner cmd/miner/main.go - -multi_platform: - @echo "Building multi platform binary" - CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/darwin/bytomcli cmd/bytomcli/main.go - @echo "Building bytomd to cmd/bytomd/bytomd" - CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/darwin/bytomd cmd/bytomd/main.go - @echo "Building miner to cmd/miner/miner" - CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/darwin/miner cmd/miner/main.go - - CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/windows/bytomcli cmd/bytomcli/main.go - CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/windows/bytomd cmd/bytomd/main.go - CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/windows/miner cmd/miner/main.go - - go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/ubuntu64/bytomcli cmd/bytomcli/main.go - go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/ubuntu64/bytomd cmd/bytomd/main.go - go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/ubuntu64/miner cmd/miner/main.go - -386_multi_platform: - @echo "Building multi platform binary" - CGO_ENABLED=0 GOOS=darwin GOARCH=386 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/darwin386/bytomcli cmd/bytomcli/main.go - @echo "Building bytomd to cmd/bytomd/bytomd" - CGO_ENABLED=0 GOOS=darwin GOARCH=386 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/darwin386/bytomd cmd/bytomd/main.go - @echo "Building miner to cmd/miner/miner" - CGO_ENABLED=0 GOOS=darwin GOARCH=386 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/darwin386/miner cmd/miner/main.go - - CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/windows386/bytomcli cmd/bytomcli/main.go - CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/windows386/bytomd cmd/bytomd/main.go - CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/windows386/miner cmd/miner/main.go - - GOOS=linux GOARCH=386 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/linux386/bytomcli cmd/bytomcli/main.go - GOOS=linux GOARCH=386 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/linux386/bytomd cmd/bytomd/main.go - GOOS=linux GOARCH=386 go build -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" \ - -o cmd/linux386/miner cmd/miner/main.go +ifndef GOOS +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Darwin) + GOOS := darwin +else ifeq ($(UNAME_S),Linux) + GOOS := linux +else +$(error "$$GOOS is not defined.") +endif +endif + +PACKAGES := $(shell go list ./... | grep -v '/vendor/') +BUILD_FLAGS := -ldflags "-X github.com/bytom/version.GitCommit=`git rev-parse HEAD`" + +MINER_BINARY32 := miner-$(GOOS)_386 +MINER_BINARY64 := miner-$(GOOS)_amd64 + +BYTOMD_BINARY32 := bytomd-$(GOOS)_386 +BYTOMD_BINARY64 := bytomd-$(GOOS)_amd64 + +BYTOMCLI_BINARY32 := bytomcli-$(GOOS)_386 +BYTOMCLI_BINARY64 := bytomcli-$(GOOS)_amd64 + +VERSION := $(shell awk -F= '/Version =/ {print $$2}' version/version.go | tr -d "\" ") + +MINER_RELEASE32 := miner-$(VERSION)-$(GOOS)_386 +MINER_RELEASE64 := miner-$(VERSION)-$(GOOS)_amd64 + +BYTOMD_RELEASE32 := bytomd-$(VERSION)-$(GOOS)_386 +BYTOMD_RELEASE64 := bytomd-$(VERSION)-$(GOOS)_amd64 + +BYTOMCLI_RELEASE32 := bytomcli-$(VERSION)-$(GOOS)_386 +BYTOMCLI_RELEASE64 := bytomcli-$(VERSION)-$(GOOS)_amd64 + +BYTOM_RELEASE32 := bytom-$(VERSION)-$(GOOS)_386 +BYTOM_RELEASE64 := bytom-$(VERSION)-$(GOOS)_amd64 + +all: test target release-all + +target: + mkdir -p $@ + +binary: target/$(BYTOMD_BINARY32) target/$(BYTOMD_BINARY64) target/$(BYTOMCLI_BINARY32) target/$(BYTOMCLI_BINARY64) target/$(MINER_BINARY32) target/$(MINER_BINARY64) + +ifeq ($(GOOS),windows) +release: binary + cd target && cp -f $(MINER_BINARY32) $(MINER_BINARY32).exe + cd target && cp -f $(BYTOMD_BINARY32) $(BYTOMD_BINARY32).exe + cd target && cp -f $(BYTOMCLI_BINARY32) $(BYTOMCLI_BINARY32).exe + cd target && zip $(BYTOM_RELEASE32).zip $(MINER_BINARY32).exe $(BYTOMD_BINARY32).exe $(BYTOMCLI_BINARY32).exe + cd target && rm -f $(MINER_BINARY32) $(BYTOMD_BINARY32) $(BYTOMCLI_BINARY32) $(MINER_BINARY32).exe $(BYTOMD_BINARY32).exe $(BYTOMCLI_BINARY32).exe + cd target && cp -f $(MINER_BINARY64) $(MINER_BINARY64).exe + cd target && cp -f $(BYTOMD_BINARY64) $(BYTOMD_BINARY64).exe + cd target && cp -f $(BYTOMCLI_BINARY64) $(BYTOMCLI_BINARY64).exe + cd target && zip $(BYTOM_RELEASE64).zip $(MINER_BINARY64).exe $(BYTOMD_BINARY64).exe $(BYTOMCLI_BINARY64).exe + cd target && rm -f $(MINER_BINARY64) $(BYTOMD_BINARY64) $(BYTOMCLI_BINARY64) $(MINER_BINARY64).exe $(BYTOMD_BINARY64).exe $(BYTOMCLI_BINARY64).exe +else +release: binary + cd target && tar -czf $(BYTOM_RELEASE32).tgz $(MINER_BINARY32) $(BYTOMD_BINARY32) $(BYTOMCLI_BINARY32) + cd target && rm -f $(MINER_BINARY32) $(BYTOMD_BINARY32) $(BYTOMCLI_BINARY32) + cd target && tar -czf $(BYTOM_RELEASE64).tgz $(MINER_BINARY64) $(BYTOMD_BINARY64) $(BYTOMCLI_BINARY64) + cd target && rm -f $(MINER_BINARY64) $(BYTOMD_BINARY64) $(BYTOMCLI_BINARY64) +endif + +release-all: clean + GOOS=darwin make release + GOOS=linux make release + GOOS=windows make release + +clean: + rm -rf target + +target/$(BYTOMD_BINARY32): + CGO_ENABLED=0 GOARCH=386 go build $(BUILD_FLAGS) -o $@ cmd/bytomd/main.go + +target/$(BYTOMD_BINARY64): + CGO_ENABLED=0 GOARCH=amd64 go build $(BUILD_FLAGS) -o $@ cmd/bytomd/main.go + +target/$(BYTOMCLI_BINARY32): + CGO_ENABLED=0 GOARCH=386 go build $(BUILD_FLAGS) -o $@ cmd/bytomcli/main.go + +target/$(BYTOMCLI_BINARY64): + CGO_ENABLED=0 GOARCH=amd64 go build $(BUILD_FLAGS) -o $@ cmd/bytomcli/main.go + +target/$(MINER_BINARY32): + CGO_ENABLED=0 GOARCH=386 go build $(BUILD_FLAGS) -o $@ cmd/miner/main.go + +target/$(MINER_BINARY64): + CGO_ENABLED=0 GOARCH=amd64 go build $(BUILD_FLAGS) -o $@ cmd/miner/main.go test: @echo "====> Running go test" @@ -74,4 +95,4 @@ test: benchmark: go test -bench $(PACKAGES) -.PHONY: test +.PHONY: all target release-all clean test benchmark diff --git a/version/version.go b/version/version.go index 8602d601..ebef40f0 100644 --- a/version/version.go +++ b/version/version.go @@ -1,12 +1,8 @@ package version -const Maj = "0" -const Min = "4" -const Fix = "0" - var ( // The full version string - Version = "0.4.0" + Version = "0.4.0" // GitCommit is set with --ldflags "-X main.gitCommit=$(git rev-parse HEAD)" GitCommit string ) -- 2.11.0