github.com/lzy4123/fabric@v2.1.1+incompatible/Makefile (about) 1 # Copyright IBM Corp All Rights Reserved. 2 # Copyright London Stock Exchange Group All Rights Reserved. 3 # 4 # SPDX-License-Identifier: Apache-2.0 5 # 6 # ------------------------------------------------------------- 7 # This makefile defines the following targets 8 # 9 # - all (default) - builds all targets and runs all non-integration tests/checks 10 # - checks - runs all non-integration tests/checks 11 # - desk-check - runs linters and verify to test changed packages 12 # - configtxgen - builds a native configtxgen binary 13 # - configtxlator - builds a native configtxlator binary 14 # - cryptogen - builds a native cryptogen binary 15 # - idemixgen - builds a native idemixgen binary 16 # - peer - builds a native fabric peer binary 17 # - orderer - builds a native fabric orderer binary 18 # - release - builds release packages for the host platform 19 # - release-all - builds release packages for all target platforms 20 # - publish-images - publishes release docker images to nexus3 or docker hub. 21 # - unit-test - runs the go-test based unit tests 22 # - verify - runs unit tests for only the changed package tree 23 # - profile - runs unit tests for all packages in coverprofile mode (slow) 24 # - gotools - installs go tools like golint 25 # - linter - runs all code checks 26 # - check-deps - check for vendored dependencies that are no longer used 27 # - license - checks go source files for Apache license header 28 # - native - ensures all native binaries are available 29 # - docker[-clean] - ensures all docker images are available[/cleaned] 30 # - docker-list - generates a list of docker images that 'make docker' produces 31 # - peer-docker[-clean] - ensures the peer container is available[/cleaned] 32 # - orderer-docker[-clean] - ensures the orderer container is available[/cleaned] 33 # - tools-docker[-clean] - ensures the tools container is available[/cleaned] 34 # - protos - generate all protobuf artifacts based on .proto files 35 # - clean - cleans the build area 36 # - clean-all - superset of 'clean' that also removes persistent state 37 # - dist-clean - clean release packages for all target platforms 38 # - unit-test-clean - cleans unit test state (particularly from docker) 39 # - basic-checks - performs basic checks like license, spelling, trailing spaces and linter 40 # - docker-thirdparty - pulls thirdparty images (kafka,zookeeper,couchdb) 41 # - docker-tag-latest - re-tags the images made by 'make docker' with the :latest tag 42 # - docker-tag-stable - re-tags the images made by 'make docker' with the :stable tag 43 # - help-docs - generate the command reference docs 44 45 ALPINE_VER ?= 3.11 46 BASE_VERSION = 2.1.1 47 48 # 3rd party image version 49 # These versions are also set in the runners in ./integration/runners/ 50 COUCHDB_VER ?= 2.3 51 KAFKA_VER ?= 5.3.1 52 ZOOKEEPER_VER ?= 5.3.1 53 54 # Disable implicit rules 55 .SUFFIXES: 56 MAKEFLAGS += --no-builtin-rules 57 58 BUILD_DIR ?= build 59 60 EXTRA_VERSION ?= $(shell git rev-parse --short HEAD) 61 PROJECT_VERSION=$(BASE_VERSION)-snapshot-$(EXTRA_VERSION) 62 63 #TWO_DIGIT_VERSION is derived, e.g. "2.0", especially useful as a local tag for two digit references to most recent baseos and ccenv patch releases 64 TWO_DIGIT_VERSION = $(shell echo $(BASE_VERSION) | cut -d'.' -f1,2) 65 66 PKGNAME = github.com/hyperledger/fabric 67 ARCH=$(shell go env GOARCH) 68 MARCH=$(shell go env GOOS)-$(shell go env GOARCH) 69 70 # defined in common/metadata/metadata.go 71 METADATA_VAR = Version=$(BASE_VERSION) 72 METADATA_VAR += CommitSHA=$(EXTRA_VERSION) 73 METADATA_VAR += BaseDockerLabel=$(BASE_DOCKER_LABEL) 74 METADATA_VAR += DockerNamespace=$(DOCKER_NS) 75 76 GO_VER = 1.14.1 77 GO_TAGS ?= 78 79 RELEASE_EXES = orderer $(TOOLS_EXES) 80 RELEASE_IMAGES = baseos ccenv orderer peer tools 81 RELEASE_PLATFORMS = darwin-amd64 linux-amd64 linux-ppc64le linux-s390x windows-amd64 82 TOOLS_EXES = configtxgen configtxlator cryptogen discover idemixgen peer 83 84 pkgmap.configtxgen := $(PKGNAME)/cmd/configtxgen 85 pkgmap.configtxlator := $(PKGNAME)/cmd/configtxlator 86 pkgmap.cryptogen := $(PKGNAME)/cmd/cryptogen 87 pkgmap.discover := $(PKGNAME)/cmd/discover 88 pkgmap.idemixgen := $(PKGNAME)/cmd/idemixgen 89 pkgmap.orderer := $(PKGNAME)/cmd/orderer 90 pkgmap.peer := $(PKGNAME)/cmd/peer 91 92 .DEFAULT_GOAL := all 93 94 include docker-env.mk 95 include gotools.mk 96 97 .PHONY: all 98 all: check-go-version native docker checks 99 100 .PHONY: checks 101 checks: basic-checks unit-test integration-test 102 103 .PHONY: basic-checks 104 basic-checks: check-go-version license spelling references trailing-spaces linter check-metrics-doc filename-spaces 105 106 .PHONY: desk-checks 107 desk-check: checks verify 108 109 .PHONY: help-docs 110 help-docs: native 111 @scripts/generateHelpDocs.sh 112 113 .PHONY: spelling 114 spelling: 115 @scripts/check_spelling.sh 116 117 .PHONY: references 118 references: 119 @scripts/check_references.sh 120 121 .PHONY: license 122 license: 123 @scripts/check_license.sh 124 125 .PHONY: trailing-spaces 126 trailing-spaces: 127 @scripts/check_trailingspaces.sh 128 129 .PHONY: gotools 130 gotools: gotools-install 131 132 .PHONY: check-go-version 133 check-go-version: 134 @scripts/check_go_version.sh $(GO_VER) 135 136 .PHONY: integration-test 137 integration-test: gotool.ginkgo ccenv-docker baseos-docker docker-thirdparty 138 ./scripts/run-integration-tests.sh 139 140 .PHONY: unit-test 141 unit-test: unit-test-clean docker-thirdparty ccenv-docker baseos-docker 142 ./scripts/run-unit-tests.sh 143 144 .PHONY: unit-tests 145 unit-tests: unit-test 146 147 # Pull thirdparty docker images based on the latest baseimage release version 148 # Also pull ccenv-1.4 for compatibility test to ensure pre-2.0 installed chaincodes 149 # can be built by a peer configured to use the ccenv-1.4 as the builder image. 150 .PHONY: docker-thirdparty 151 docker-thirdparty: 152 docker pull couchdb:${COUCHDB_VER} 153 docker pull confluentinc/cp-zookeeper:${ZOOKEEPER_VER} 154 docker pull confluentinc/cp-kafka:${KAFKA_VER} 155 docker pull hyperledger/fabric-ccenv:1.4 156 157 .PHONY: verify 158 verify: export JOB_TYPE=VERIFY 159 verify: unit-test 160 161 .PHONY: profile 162 profile: export JOB_TYPE=PROFILE 163 profile: unit-test 164 165 .PHONY: linter 166 linter: check-deps gotools 167 @echo "LINT: Running code checks.." 168 ./scripts/golinter.sh 169 170 .PHONY: check-deps 171 check-deps: gotools 172 @echo "DEP: Checking for dependency issues.." 173 ./scripts/check_deps.sh 174 175 .PHONY: check-metrics-docs 176 check-metrics-doc: gotools 177 @echo "METRICS: Checking for outdated reference documentation.." 178 ./scripts/metrics_doc.sh check 179 180 .PHONY: generate-metrics-docs 181 generate-metrics-doc: gotools 182 @echo "Generating metrics reference documentation..." 183 ./scripts/metrics_doc.sh generate 184 185 .PHONY: protos 186 protos: gotools 187 @echo "Compiling non-API protos..." 188 ./scripts/compile_protos.sh 189 190 .PHONY: native 191 native: $(RELEASE_EXES) 192 193 .PHONY: $(RELEASE_EXES) 194 $(RELEASE_EXES): %: $(BUILD_DIR)/bin/% 195 196 $(BUILD_DIR)/bin/%: GO_LDFLAGS = $(METADATA_VAR:%=-X $(PKGNAME)/common/metadata.%) 197 $(BUILD_DIR)/bin/%: 198 @echo "Building $@" 199 @mkdir -p $(@D) 200 GOBIN=$(abspath $(@D)) go install -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 201 @touch $@ 202 203 .PHONY: docker 204 docker: $(RELEASE_IMAGES:%=%-docker) 205 206 .PHONY: $(RELEASE_IMAGES:%=%-docker) 207 $(RELEASE_IMAGES:%=%-docker): %-docker: $(BUILD_DIR)/images/%/$(DUMMY) 208 209 $(BUILD_DIR)/images/ccenv/$(DUMMY): BUILD_CONTEXT=images/ccenv 210 $(BUILD_DIR)/images/baseos/$(DUMMY): BUILD_CONTEXT=images/baseos 211 $(BUILD_DIR)/images/peer/$(DUMMY): BUILD_ARGS=--build-arg GO_TAGS=${GO_TAGS} 212 $(BUILD_DIR)/images/orderer/$(DUMMY): BUILD_ARGS=--build-arg GO_TAGS=${GO_TAGS} 213 214 $(BUILD_DIR)/images/%/$(DUMMY): 215 @echo "Building Docker image $(DOCKER_NS)/fabric-$*" 216 @mkdir -p $(@D) 217 $(DBUILD) -f images/$*/Dockerfile \ 218 --build-arg GO_VER=$(GO_VER) \ 219 --build-arg ALPINE_VER=$(ALPINE_VER) \ 220 $(BUILD_ARGS) \ 221 -t $(DOCKER_NS)/fabric-$* ./$(BUILD_CONTEXT) 222 docker tag $(DOCKER_NS)/fabric-$* $(DOCKER_NS)/fabric-$*:$(BASE_VERSION) 223 docker tag $(DOCKER_NS)/fabric-$* $(DOCKER_NS)/fabric-$*:$(TWO_DIGIT_VERSION) 224 docker tag $(DOCKER_NS)/fabric-$* $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) 225 @touch $@ 226 227 # builds release packages for the host platform 228 .PHONY: release 229 release: check-go-version $(MARCH:%=release/%) 230 231 # builds release packages for all target platforms 232 .PHONY: release-all 233 release-all: check-go-version $(RELEASE_PLATFORMS:%=release/%) 234 235 .PHONY: $(RELEASE_PLATFORMS:%=release/%) 236 $(RELEASE_PLATFORMS:%=release/%): GO_LDFLAGS = $(METADATA_VAR:%=-X $(PKGNAME)/common/metadata.%) 237 $(RELEASE_PLATFORMS:%=release/%): release/%: $(foreach exe,$(RELEASE_EXES),release/%/bin/$(exe)) 238 239 # explicit targets for all platform executables 240 $(foreach platform, $(RELEASE_PLATFORMS), $(RELEASE_EXES:%=release/$(platform)/bin/%)): 241 $(eval platform = $(patsubst release/%/bin,%,$(@D))) 242 $(eval GOOS = $(word 1,$(subst -, ,$(platform)))) 243 $(eval GOARCH = $(word 2,$(subst -, ,$(platform)))) 244 @echo "Building $@ for $(GOOS)-$(GOARCH)" 245 mkdir -p $(@D) 246 GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $@ -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F)) 247 248 .PHONY: dist 249 dist: dist-clean dist/$(MARCH) 250 251 .PHONY: dist-all 252 dist-all: dist-clean $(RELEASE_PLATFORMS:%=dist/%) 253 dist/%: release/% 254 mkdir -p release/$(@F)/config 255 cp -r sampleconfig/*.yaml release/$(@F)/config 256 cd release/$(@F) && tar -czvf hyperledger-fabric-$(@F).$(PROJECT_VERSION).tar.gz * 257 258 .PHONY: docker-list 259 docker-list: $(RELEASE_IMAGES:%=%-docker-list) 260 %-docker-list: 261 @echo $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) 262 263 .PHONY: docker-clean 264 docker-clean: $(RELEASE_IMAGES:%=%-docker-clean) 265 %-docker-clean: 266 -@for image in "$$(docker images --quiet --filter=reference='$(DOCKER_NS)/fabric-$*:$(DOCKER_TAG)')"; do \ 267 [ -z "$$image" ] || docker rmi -f $$image; \ 268 done 269 -@rm -rf $(BUILD_DIR)/images/$* || true 270 271 .PHONY: docker-tag-latest 272 docker-tag-latest: $(RELEASE_IMAGES:%=%-docker-tag-latest) 273 %-docker-tag-latest: 274 docker tag $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) $(DOCKER_NS)/fabric-$*:latest 275 276 .PHONY: docker-tag-stable 277 docker-tag-stable: $(RELEASE_IMAGES:%=%-docker-tag-stable) 278 %-docker-tag-stable: 279 docker tag $(DOCKER_NS)/fabric-$*:$(DOCKER_TAG) $(DOCKER_NS)/fabric-$*:stable 280 281 .PHONY: publish-images 282 publish-images: $(RELEASE_IMAGES:%=%-publish-images) 283 %-publish-images: 284 @docker login $(DOCKER_HUB_USERNAME) $(DOCKER_HUB_PASSWORD) 285 @docker push $(DOCKER_NS)/fabric-$*:$(PROJECT_VERSION) 286 287 .PHONY: clean 288 clean: docker-clean unit-test-clean release-clean 289 -@rm -rf $(BUILD_DIR) 290 291 .PHONY: clean-all 292 clean-all: clean gotools-clean dist-clean 293 -@rm -rf /var/hyperledger/* 294 -@rm -rf docs/build/ 295 296 .PHONY: dist-clean 297 dist-clean: 298 -@for platform in $(RELEASE_PLATFORMS) ""; do \ 299 [ -z "$$platform" ] || rm -rf release/$${platform}/hyperledger-fabric-$${platform}.$(PROJECT_VERSION).tar.gz; \ 300 done 301 302 .PHONY: release-clean 303 release-clean: $(RELEASE_PLATFORMS:%=%-release-clean) 304 %-release-clean: 305 -@rm -rf release/$* 306 307 .PHONY: unit-test-clean 308 unit-test-clean: 309 310 .PHONY: filename-spaces 311 spaces: 312 @scripts/check_file_name_spaces.sh