gitlab.com/aquachain/aquachain@v1.17.16-rc3.0.20221018032414-e3ddf1e1c055/Makefile (about)

     1  GOCMD ?= go # the go program
     2  GOOS ?= $(shell ${GOCMD} env GOOS)
     3  GOARCH ?= $(shell ${GOCMD} env GOARCH)
     4  PREFIX ?= /usr/local
     5  GOPATH ?= $(shell go env GOPATH)
     6  GOTAGS ?= netgo osusergo static
     7  
     8  export GOPATH
     9  define LOGO
    10                                _           _
    11    __ _  __ _ _   _  __ _  ___| |__   __ _(_)_ __
    12   / _ '|/ _' | | | |/ _' |/ __| '_ \ / _' | | '_ \ 
    13  | (_| | (_| | |_| | (_| | (__| | | | (_| | | | | |
    14   \__,_|\__, |\__,_|\__,_|\___|_| |_|\__,_|_|_| |_|
    15            |_|
    16  endef
    17  $(info $(LOGO))
    18  aquachain_cmd=./cmd/aquachain
    19  version != cat VERSION
    20  COMMITHASH != git rev-parse --short HEAD
    21  winextension :=
    22  ifeq (windows,$(GOOS))
    23  winextension = .exe
    24  endif
    25  maincmd_name := aquachain-$(version)-$(COMMITHASH)$(winextension)
    26  PWD != pwd
    27  build_dir ?= ./bin
    28  default_target=$(build_dir)/aquachain$(winextension)
    29  INSTALL_DIR ?= $(PREFIX)/bin
    30  release_dir=release
    31  hashfn := sha384sum
    32  golangci_linter_version := v1.24.0
    33  main_deps := $(filter %.go,$(wildcard *.go */*.go */*/*.go */*/*/*.go */*/*/*/*.g))
    34  cgo=$(CGO_ENABLED)
    35  
    36  # disable cgo by default
    37  CGO_ENABLED ?= 0
    38  ifeq (1,$(cgo))
    39  CGO_ENABLED = 1
    40  endif
    41  
    42  # change ${GOCMD} build flags
    43  GO_FLAGS ?= 
    44  
    45  ifeq (1,$(verbose))
    46  GO_FLAGS += -v 
    47  endif
    48  
    49  ifeq (all,$(cmds))
    50  aquachain_cmd=./cmd/...
    51  endif
    52  
    53  
    54  
    55  # use ${GOCMD} for "net" and "os/user" packages (cgo by default)
    56  #GO_TAGS := static
    57  
    58  TAGS64 := $(shell printf "$(GOTAGS) $(tags)"|base64 -w 0)
    59  ifneq (1,$(cgo))
    60  #GO_FLAGS += -tags 'netgo osusergo static $(GO_TAGS)'
    61  else
    62  GO_FLAGS += -installsuffix cgo
    63  LD_FLAGS += -linkmode external -extldflags -static
    64  endif
    65  
    66  LD_FLAGS := -X main.gitCommit=${COMMITHASH} -X main.buildDate=${shell date -u +%s} -s -w 
    67  LD_FLAGS += -X gitlab.com/aquachain/aquachain/params.buildTags=${TAGS64}
    68  
    69  ## if release=1, rebuild all sources
    70  ifeq (1,$(release))
    71  codename = $(shell echo "${version}" | grep "-" | cut -d- -f2)
    72  GO_FLAGS += -a
    73  ifeq (,$(codename))
    74  codename=release
    75  endif
    76  endif
    77  
    78  # still x.x.x from previous release, no dash
    79  ifeq (,$(codename))
    80  codename=dev-${COMMITHASH}
    81  endif
    82  
    83  LD_FLAGS += -X gitlab.com/aquachain/aquachain/params.VersionMeta=${codename}
    84  GO_FLAGS += -ldflags '$(LD_FLAGS)'
    85  
    86  export GOFILES=$(shell find . -iname '*.go' -type f | grep -v /vendor/ | grep -v /build/)
    87  # build default target, aquachain for host OS/ARCH
    88  #bin/aquachain:
    89  $(default_target): $(GOFILES)
    90  	CGO_ENABLED=$(CGO_ENABLED) $(GOCMD) build -tags '$(GOTAGS) $(tags)' $(GO_FLAGS) -o $@ $(aquachain_cmd)
    91  	@echo compiled: $(default_target)
    92  	@sha256sum $(default_target) 2>/dev/null || true
    93  	@file $(default_target) 2>/dev/null || true
    94  default: $(build_dir)/$(maincmd_name)-$(GOOS)-$(GOARCH)$(winextension)
    95  bootnode: bin/aquabootnode
    96  bin/aquabootnode: $(GOFILES)
    97  	CGO_ENABLED=$(CGO_ENABLED) $(GOCMD) build -tags '$(GOTAGS) $(tags)' $(GO_FLAGS) -o bin/aquabootnode ./cmd/aquabootnode
    98  
    99  .PHONY += default hash
   100  echoflags:
   101  	@echo "CGO_ENABLED=$(CGO_ENABLED) $(GOCMD) build $(GO_FLAGS) -o $@ $(aquachain_cmd)"
   102  
   103  .PHONY += install
   104  install:
   105  	install -v $(build_dir)/aquachain $(INSTALL_DIR)/
   106  
   107  all:
   108  	mkdir -p $(build_dir)
   109  	cd $(build_dir) && \
   110  		CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build -o . $(GO_FLAGS) ../cmd/...
   111  
   112  cross:
   113  	@echo to build a release, use "make clean release release=1"
   114  	mkdir -p $(build_dir)
   115  	cd $(build_dir) && mkdir -p linux freebsd osx windows
   116  	cd $(build_dir)/linux && GOOS=linux \
   117  		CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build -o . $(GO_FLAGS) ../.${aquachain_cmd}
   118  	cd $(build_dir)/freebsd && GOOS=freebsd \
   119  		CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build -o . $(GO_FLAGS) ../.${aquachain_cmd}
   120  	cd $(build_dir)/osx && GOOS=darwin \
   121  		CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build -o . $(GO_FLAGS) ../.${aquachain_cmd}
   122  	cd $(build_dir)/windows && GOOS=windows \
   123  		CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build -o . $(GO_FLAGS) ../.${aquachain_cmd}
   124  
   125  
   126  help:
   127  	@echo
   128  	@echo default target is: "$(default_target)"
   129  	@echo 'make install' target is: "$(INSTALL_DIR)/"
   130  	@echo using go flags: "$(GO_FLAGS)"
   131  	@echo
   132  	@echo to compile quickly, run \'make\' and then \'$(default_target) help\'
   133  	@echo to install system-wide, run something like \'sudo make install\'
   134  	@echo
   135  	@echo "to cross-compile, try 'make cross' or 'make GOOS=windows'"
   136  	@echo "to add things left out by default, use tags: 'make cgo=1'"
   137  	@echo
   138  	@echo "cross-compile release: 'make clean cross release=1'"
   139  	@echo "clean compile package release: 'make clean release release=1'"
   140  	@echo "cross-compile all tools: 'make clean cross release=1 cmds=all'"
   141  	@echo "compile with cgo and usb support: make cgo=1 tags=usb'"
   142  	@echo
   143  	@echo note: this help response is dynamic and reacts to environmental variables.
   144  
   145  test:
   146  	CGO_ENABLED=0 bash testing/test-short-only.bash $(args)
   147  race:
   148  	CGO_ENABLED=1 bash testing/test-short-only.bash -race
   149  
   150  
   151  checkrelease:
   152  ifneq (1,$(release))
   153  	echo "use make release release=1"
   154  	exit 1
   155  endif
   156  release: checkrelease package hash
   157  clean:
   158  	rm -rf $(build_dir) release docs
   159  hash: release/SHA384.txt
   160  release/SHA384.txt:
   161  	$(hashfn) release/*.tar.gz release/*.zip | tee $@
   162  
   163  release_files := \
   164  	$(maincmd_name)-linux-amd64 \
   165  	$(maincmd_name)-linux-arm \
   166  	$(maincmd_name)-windows-amd64.exe \
   167  	$(maincmd_name)-freebsd-amd64 \
   168  	$(maincmd_name)-openbsd-amd64 \
   169  	$(maincmd_name)-netbsd-amd64 \
   170  	$(maincmd_name)-osx-amd64
   171  
   172  # cross compile for each target OS/ARCH
   173  crossold:	$(addprefix $(build_dir)/, $(release_files))
   174  .PHONY += cross
   175  
   176  
   177  ## build binaries for each OS
   178  $(build_dir)/$(maincmd_name)-linux-amd64: $(main_deps)
   179  	GOOS=linux \
   180  	GOARCH=amd64 \
   181  	CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build $(GO_FLAGS) -o $@ $(aquachain_cmd)
   182  $(build_dir)/$(maincmd_name)-linux-arm: $(main_deps)
   183  	GOOS=linux \
   184  	GOARCH=arm \
   185  	CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build $(GO_FLAGS) -o $@ $(aquachain_cmd)
   186  $(build_dir)/$(maincmd_name)-windows-amd64.exe: $(main_deps)
   187  	GOOS=windows \
   188  	GOARCH=amd64 \
   189  	CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build $(GO_FLAGS) -o $@ $(aquachain_cmd)
   190  $(build_dir)/$(maincmd_name)-osx-amd64: $(main_deps)
   191  	GOOS=darwin \
   192  	GOARCH=amd64 \
   193  	CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build $(GO_FLAGS) -o $@ $(aquachain_cmd)
   194  $(build_dir)/$(maincmd_name)-openbsd-amd64: $(main_deps)
   195  	GOOS=openbsd \
   196  	GOARCH=amd64 \
   197  	CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build $(GO_FLAGS) -o $@ $(aquachain_cmd)
   198  $(build_dir)/$(maincmd_name)-netbsd-amd64: $(main_deps)
   199  	GOOS=netbsd \
   200  	GOARCH=amd64 \
   201  	CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build $(GO_FLAGS) -o $@ $(aquachain_cmd)
   202  $(build_dir)/$(maincmd_name)-freebsd-amd64: $(main_deps)
   203  	GOOS=freebsd \
   204  	GOARCH=amd64 \
   205  	CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} build $(GO_FLAGS) -o $@ $(aquachain_cmd)
   206  
   207  
   208  ## package above binaries 
   209  package: $(release_dir)/$(maincmd_name)-windows-amd64.zip \
   210  	$(release_dir)/$(maincmd_name)-osx-amd64.zip \
   211  	$(release_dir)/$(maincmd_name)-linux-amd64.tar.gz \
   212  	$(release_dir)/$(maincmd_name)-linux-arm.tar.gz \
   213  	$(release_dir)/$(maincmd_name)-freebsd-amd64.tar.gz \
   214  	$(release_dir)/$(maincmd_name)-openbsd-amd64.tar.gz \
   215  	$(release_dir)/$(maincmd_name)-netbsd-amd64.tar.gz \
   216  
   217  
   218  
   219  releasetexts := README.md COPYING AUTHORS
   220  $(release_dir)/$(maincmd_name)-windows-amd64.zip: $(build_dir)/$(maincmd_name)-windows-amd64.exe
   221  	mkdir -p $(release_dir)
   222  	mkdir -p tmp/${maincmd_name}-windows-${version}
   223  	cp -t tmp/${maincmd_name}-windows-${version}/ $^ ${releasetexts}
   224  	cd tmp && zip -r ../$@ ${maincmd_name}-windows-${version}
   225  $(release_dir)/$(maincmd_name)-osx-amd64.zip: $(build_dir)/$(maincmd_name)-osx-amd64
   226  	mkdir -p $(release_dir)
   227  	mkdir -p tmp/${maincmd_name}-osx-${version}
   228  	cp -t tmp/${maincmd_name}-osx-${version}/ $^ ${releasetexts}
   229  	cd tmp && zip -r ../$@ ${maincmd_name}-osx-${version}
   230  $(release_dir)/$(maincmd_name)-linux-amd64.tar.gz: $(build_dir)/$(maincmd_name)-linux-amd64
   231  	mkdir -p $(release_dir)
   232  	mkdir -p tmp/${maincmd_name}-linux-${version}
   233  	cp -t tmp/${maincmd_name}-linux-${version}/ $^ ${releasetexts}
   234  	cd tmp && tar czf ../$@ ${maincmd_name}-linux-${version}
   235  $(release_dir)/$(maincmd_name)-linux-arm.tar.gz: $(build_dir)/$(maincmd_name)-linux-arm
   236  	mkdir -p $(release_dir)
   237  	mkdir -p tmp/${maincmd_name}-linux-arm-${version}
   238  	cp -t tmp/${maincmd_name}-linux-arm-${version}/ $^ ${releasetexts}
   239  	cd tmp && tar czf ../$@ ${maincmd_name}-linux-arm-${version}
   240  $(release_dir)/$(maincmd_name)-freebsd-amd64.tar.gz: $(build_dir)/$(maincmd_name)-freebsd-amd64
   241  	mkdir -p $(release_dir)
   242  	mkdir -p tmp/${maincmd_name}-freebsd-${version}
   243  	cp -t tmp/${maincmd_name}-freebsd-${version}/ $^ ${releasetexts}
   244  	cd tmp && tar czf ../$@ ${maincmd_name}-freebsd-${version}
   245  $(release_dir)/$(maincmd_name)-openbsd-amd64.tar.gz: $(build_dir)/$(maincmd_name)-openbsd-amd64
   246  	mkdir -p $(release_dir)
   247  	mkdir -p tmp/${maincmd_name}-openbsd-${version}
   248  	cp -t tmp/${maincmd_name}-openbsd-${version}/ $^ ${releasetexts}
   249  	cd tmp && tar czf ../$@ ${maincmd_name}-openbsd-${version}
   250  $(release_dir)/$(maincmd_name)-netbsd-amd64.tar.gz: $(build_dir)/$(maincmd_name)-netbsd-amd64
   251  	mkdir -p $(release_dir)
   252  	mkdir -p tmp/${maincmd_name}-netbsd-${version}
   253  	cp -t tmp/${maincmd_name}-netbsd-${version}/ $^ ${releasetexts}
   254  	cd tmp && tar czf ../$@ ${maincmd_name}-netbsd-${version}
   255  
   256  .PHONY += hash
   257  
   258  
   259  devtools:
   260  	env GOBIN= ${GOCMD} get golang.org/x/tools/cmd/stringer
   261  	env GOBIN= ${GOCMD} get github.com/kevinburke/go-bindata/go-bindata
   262  	env GOBIN= ${GOCMD} get github.com/fjl/gencodec
   263  	env GOBIN= ${GOCMD} get github.com/golang/protobuf/protoc-gen-go
   264  	env GOBIN= ${GOCMD} install gitlab.com/aquachain/x/cmd/abigen
   265  	@type "npm" 2> /dev/null || echo 'Please install node.js and npm'
   266  	@type "solc" 2> /dev/null || echo 'Please install solc'
   267  	@type "protoc" 2> /dev/null || echo 'Please install protoc'
   268  
   269  generate: devtools
   270  	${GOCMD} generate ./...
   271  
   272  goget:
   273  	CGO_ENABLED=$(CGO_ENABLED) ${GOCMD} get -v -t -d ./...
   274  
   275  linter: bin/golangci-lint
   276  	CGO_ENABLED=0 ./bin/golangci-lint -v run \
   277  	  --deadline 20m \
   278  	  --config .golangci.yml \
   279  	  --build-tags static,netgo,osusergo \
   280  	  -v
   281  
   282  bin/golangci-lint:
   283  	curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s $(golangci_linter_version)
   284  
   285  docs: mkdocs.yml Documentation/*/*
   286  	@echo building docs
   287  	mkdocs build
   288