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