github.com/tw-bc-group/fabric-ca-gm@v0.0.0-20201218004200-3b690512bd5a/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 tests 10 # - license - check all go files for license headers 11 # - fabric-ca-server - builds the fabric-ca-server executable 12 # - fabric-ca-client - builds the fabric-ca-client executable 13 # - unit-tests - runs the go-test based unit tests 14 # - checks - runs all check conditions (license, format, imports, lint and vet) 15 # - docker[-clean] - ensures all docker images are available[/cleaned] 16 # - docker-fabric-ca - build the fabric-ca docker image 17 # - bench - Runs benchmarks in all the packages and stores the results in /tmp/bench.results 18 # - bench-cpu - Runs the benchmarks in the specified package with cpu profiling 19 # - bench-mem - Runs the benchmarks in the specified package with memory profiling 20 # - bench-clean - Removes all benchmark related files 21 # - benchcmp - Compares benchmarks results of current and previous release 22 # - release - builds fabric-ca-client binary for the host platform. Binary built with this target will not support pkcs11 23 # - release-all - builds fabric-ca-client binary for all target platforms. Binaries built with this target will not support pkcs11 24 # - dist - builds release package for the host platform 25 # - dist-all - builds release packages for all target platforms 26 # - clean - cleans the build area 27 # - release-clean - cleans the binaries for all target platforms 28 # - dist-clean - cleans release packages for all target platforms 29 # - clean-all - cleans the build area and release packages 30 31 PROJECT_NAME = fabric-ca-gm 32 BASE_VERSION = 1.4.2 33 PREV_VERSION = 1.4.1 34 IS_RELEASE = false 35 36 ARCH=$(shell go env GOARCH) 37 MARCH=$(shell go env GOOS)-$(shell go env GOARCH) 38 STABLE_TAG ?= $(ARCH)-$(BASE_VERSION)-stable 39 40 ifneq ($(IS_RELEASE),true) 41 EXTRA_VERSION ?= $(shell git rev-parse --short HEAD) 42 PROJECT_VERSION=$(BASE_VERSION)-$(EXTRA_VERSION) 43 FABRIC_TAG ?= latest 44 else 45 PROJECT_VERSION=$(BASE_VERSION) 46 FABRIC_TAG ?= $(ARCH)-$(BASE_VERSION) 47 endif 48 49 ifeq ($(ARCH),s390x) 50 PGVER=9.6 51 else 52 PGVER=9.5 53 endif 54 55 BASEIMAGE_RELEASE = 0.4.15 56 PKGNAME = github.com/tw-bc-group/$(PROJECT_NAME) 57 58 METADATA_VAR = Version=$(PROJECT_VERSION) 59 60 GO_SOURCE := $(shell find . -name '*.go') 61 GO_LDFLAGS = $(patsubst %,-X $(PKGNAME)/lib/metadata.%,$(METADATA_VAR)) 62 export GO_LDFLAGS 63 64 IMAGES = $(PROJECT_NAME) 65 FVTIMAGE = $(PROJECT_NAME)-fvt 66 67 RELEASE_PLATFORMS = linux-amd64 darwin-amd64 linux-ppc64le linux-s390x windows-amd64 68 RELEASE_PKGS = fabric-ca-client 69 70 path-map.fabric-ca-client := cmd/fabric-ca-client 71 path-map.fabric-ca-server := cmd/fabric-ca-server 72 path-map.fabric-ca-zh := cmd/fabric-ca-zh 73 74 include docker-env.mk 75 76 all: rename docker unit-tests 77 78 rename: .FORCE 79 @scripts/rename-repo 80 81 docker: $(patsubst %,build/image/%/$(DUMMY), $(IMAGES)) 82 83 docker-all: docker 84 85 86 docker-fabric-ca: docker 87 88 docker-fvt: $(patsubst %,build/image/%/$(DUMMY), $(FVTIMAGE)) 89 90 changelog: 91 ./scripts/changelog.sh v$(PREV_VERSION) HEAD v$(BASE_VERSION) 92 93 checks: license vet lint format imports 94 95 license: .FORCE 96 @scripts/check_license 97 98 format: .FORCE 99 @scripts/check_format 100 101 imports: .FORCE 102 @scripts/check_imports 103 104 lint: .FORCE 105 @scripts/check_lint 106 107 vet: .FORCE 108 @scripts/check_vet 109 110 docs: fabric-ca-client fabric-ca-server 111 @scripts/regenDocs 112 113 fabric-ca-client: bin/fabric-ca-client 114 fabric-ca-server: bin/fabric-ca-server 115 fabric-ca-zh: bin/fabric-ca-zh 116 117 bin/%: $(GO_SOURCE) 118 @echo "Building ${@F} in bin directory ..." 119 @mkdir -p bin && go build -o bin/${@F} -tags "pkcs11" -ldflags "$(GO_LDFLAGS)" $(PKGNAME)/$(path-map.${@F}) 120 @echo "Built bin/${@F}" 121 122 # We (re)build a package within a docker context but persist the $GOPATH/pkg 123 # directory so that subsequent builds are faster 124 build/docker/bin/%: build/docker/gocache 125 @echo "Building $@" 126 @mkdir -p $(@D) build/docker/$(@F)/pkg 127 @$(DRUN) \ 128 -e GOCACHE=/opt/gopath/gocache \ 129 -v $(abspath build/docker/gocache):/opt/gopath/gocache \ 130 -v $(abspath build/docker/bin):/opt/gopath/bin \ 131 -v $(abspath build/docker/$(@F)/pkg):/opt/gopath/pkg \ 132 $(BASE_DOCKER_NS)/fabric-baseimage:$(BASE_DOCKER_TAG) \ 133 go install -ldflags "$(DOCKER_GO_LDFLAGS)" $(PKGNAME)/$(path-map.${@F}) 134 @touch $@ 135 136 build/docker/gocache: 137 @mkdir -p build/docker/gocache 138 139 build/image/%/$(DUMMY): Makefile build/image/%/payload 140 $(eval TARGET = ${patsubst build/image/%/$(DUMMY),%,${@}}) 141 $(eval DOCKER_NAME = $(DOCKER_NS)/$(TARGET)) 142 @echo "Building docker $(TARGET) image" 143 @cat images/$(TARGET)/Dockerfile.in \ 144 | sed -e 's|_BASE_NS_|$(BASE_DOCKER_NS)|g' \ 145 | sed -e 's|_NS_|$(DOCKER_NS)|g' \ 146 | sed -e 's|_NEXUS_REPO_|$(NEXUS_URL)|g' \ 147 | sed -e 's|_BASE_TAG_|$(BASE_DOCKER_TAG)|g' \ 148 | sed -e 's|_FABRIC_TAG_|$(FABRIC_TAG)|g' \ 149 | sed -e 's|_STABLE_TAG_|$(STABLE_TAG)|g' \ 150 | sed -e 's|_TAG_|$(DOCKER_TAG)|g' \ 151 | sed -e 's|_PGVER_|$(PGVER)|g' \ 152 > $(@D)/Dockerfile 153 $(DBUILD) -t $(DOCKER_NAME) --build-arg FABRIC_CA_DYNAMIC_LINK=$(FABRIC_CA_DYNAMIC_LINK) $(@D) 154 docker tag $(DOCKER_NAME) $(DOCKER_NAME):$(DOCKER_TAG) 155 @touch $@ 156 157 build/image/fabric-ca-gm/payload: \ 158 build/docker/bin/fabric-ca-client \ 159 build/docker/bin/fabric-ca-server \ 160 build/docker/bin/fabric-ca-zh \ 161 build/fabric-ca.tar.bz2 162 build/image/fabric-ca-fvt/payload: \ 163 build/docker/bin/fabric-ca-client \ 164 build/docker/bin/fabric-ca-server \ 165 build/docker/bin/fabric-ca-zh \ 166 build/fabric-ca-fvt.tar.bz2 167 build/image/%/payload: 168 @echo "Copying $^ to $@" 169 mkdir -p $@ 170 cp $^ $@ 171 172 build/fabric-ca.tar.bz2: $(shell git ls-files images/$(PROJECT_NAME)/payload) 173 174 build/fabric-ca-fvt.tar.bz2: $(shell find images/fabric-ca-fvt/payload/ -maxdepth 1) 175 176 build/%.tar.bz2: 177 @echo "Building $@" 178 @tar -jc -C images/$*-gm/payload $(notdir $^) > $@ 179 180 all-tests: checks fabric-ca-server fabric-ca-client 181 @scripts/run_unit_tests 182 @scripts/run_integration_tests 183 184 unit-tests: fabric-ca-server fabric-ca-client 185 @scripts/run_unit_tests 186 187 unit-test: unit-tests 188 189 int-tests: checks fabric-ca-server fabric-ca-client 190 @scripts/run_integration_tests 191 192 # Runs benchmarks in all the packages and stores the benchmarks in /tmp/bench.results 193 bench: checks fabric-ca-server fabric-ca-client 194 @scripts/run_benchmarks 195 196 # Runs benchmarks in the specified package with cpu profiling 197 # e.g. make bench-cpu pkg=github.com/hyperledger/fabric-ca/lib 198 bench-cpu: checks fabric-ca-server fabric-ca-client 199 @scripts/run_benchmarks -C -P $(pkg) 200 201 # Runs benchmarks in the specified package with memory profiling 202 # e.g. make bench-mem pkg=github.com/hyperledger/fabric-ca/lib 203 bench-mem: checks fabric-ca-server fabric-ca-client 204 @scripts/run_benchmarks -M -P $(pkg) 205 206 # e.g. make benchcmp prev_rel=v1.0.0 207 benchcmp: guard-prev_rel bench 208 @scripts/compare_benchmarks $(prev_rel) 209 210 guard-%: 211 @if [ "${${*}}" = "" ]; then \ 212 echo "Environment variable $* not set"; \ 213 exit 1; \ 214 fi 215 216 217 # Removes all benchmark related files (bench, bench-cpu, bench-mem and *.test) 218 bench-clean: 219 @scripts/run_benchmarks -R 220 221 container-tests: docker 222 223 load-test: docker-clean docker-fvt 224 @docker run -p 8888:8888 -p 8054:8054 -v $(shell pwd):/opt/gopath/src/github.com/hyperledger/fabric-ca -e FABRIC_CA_SERVER_PROFILE_PORT=8054 --name loadTest -td hyperledger/fabric-ca-fvt test/fabric-ca-load-tester/launchServer.sh 3 225 @test/fabric-ca-load-tester/runLoad.sh -B 226 @docker kill loadTest 227 228 fvt-tests: 229 @scripts/run_fvt_tests 230 231 ci-tests: docker-clean all-tests docker-fvt docs 232 @docker run -v $(shell pwd):/opt/gopath/src/github.com/hyperledger/fabric-ca ${DOCKER_NS}/fabric-ca-fvt 233 234 %-docker-list: 235 $(eval TARGET = ${patsubst %-docker-list,%,${@}}) 236 @echo $(DOCKER_NS)/$(TARGET):$(DOCKER_TAG) 237 238 docker-list: $(patsubst %,%-docker-list, $(IMAGES)) 239 240 %-docker-clean: 241 $(eval TARGET = ${patsubst %-docker-clean,%,${@}}) 242 -docker images -q $(DOCKER_NS)/$(TARGET):latest | xargs -I '{}' docker rmi -f '{}' 243 -docker images -q $(DOCKER_NS)/$(TARGET):latest | xargs -I '{}' docker rmi -f '{}' 244 -docker images -q $(NEXUS_URL)/*:$(STABLE_TAG) | xargs -I '{}' docker rmi -f '{}' 245 -@rm -rf build/image/$(TARGET) ||: 246 247 docker-clean: $(patsubst %,%-docker-clean, $(IMAGES) $(PROJECT_NAME)-fvt) 248 @rm -rf build/docker/bin/* vendor ||: 249 250 native: fabric-ca-client fabric-ca-server fabric-ca-zh 251 252 release: $(patsubst %,release/%, $(MARCH)) 253 release-all: $(patsubst %,release/%, $(RELEASE_PLATFORMS)) 254 255 release/windows-amd64: GOOS=windows 256 release/windows-amd64: CC=/usr/bin/x86_64-w64-mingw32-gcc 257 release/windows-amd64: GO_TAGS+= caclient 258 release/windows-amd64: $(patsubst %,release/windows-amd64/bin/%, $(RELEASE_PKGS)) 259 260 release/darwin-amd64: GOOS=darwin 261 release/darwin-amd64: CC=/usr/bin/clang 262 release/darwin-amd64: GO_TAGS+= caclient 263 release/darwin-amd64: $(patsubst %,release/darwin-amd64/bin/%, $(RELEASE_PKGS)) 264 265 release/linux-amd64: GOOS=linux 266 release/linux-amd64: GO_TAGS+= caclient 267 release/linux-amd64: $(patsubst %,release/linux-amd64/bin/%, $(RELEASE_PKGS)) 268 269 release/%-amd64: GOARCH=amd64 270 271 release/linux-%: GOOS=linux 272 273 release/linux-ppc64le: GOARCH=ppc64le 274 release/linux-ppc64le: GO_TAGS+= caclient 275 release/linux-ppc64le: CC=/usr/bin/powerpc64le-linux-gnu-gcc 276 release/linux-ppc64le: $(patsubst %,release/linux-ppc64le/bin/%, $(RELEASE_PKGS)) 277 278 release/linux-s390x: GOARCH=s390x 279 release/linux-s390x: GO_TAGS+= caclient 280 release/linux-s390x: $(patsubst %,release/linux-s390x/bin/%, $(RELEASE_PKGS)) 281 282 release/%/bin/fabric-ca-client: $(GO_SOURCE) 283 @echo "Building $@ for $(GOOS)-$(GOARCH)" 284 mkdir -p $(@D) 285 GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $(abspath $@) -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(PKGNAME)/$(path-map.$(@F)) 286 287 .PHONY: dist 288 dist: dist-clean release 289 cd release/$(MARCH) && tar -czvf hyperledger-fabric-ca-$(MARCH).$(PROJECT_VERSION).tar.gz * 290 dist-all: dist-clean release-all $(patsubst %,dist/%, $(RELEASE_PLATFORMS)) 291 dist/windows-amd64: 292 cd release/windows-amd64 && tar -czvf hyperledger-fabric-ca-windows-amd64.$(PROJECT_VERSION).tar.gz * 293 dist/darwin-amd64: 294 cd release/darwin-amd64 && tar -czvf hyperledger-fabric-ca-darwin-amd64.$(PROJECT_VERSION).tar.gz * 295 dist/linux-amd64: 296 cd release/linux-amd64 && tar -czvf hyperledger-fabric-ca-linux-amd64.$(PROJECT_VERSION).tar.gz * 297 dist/linux-ppc64le: 298 cd release/linux-ppc64le && tar -czvf hyperledger-fabric-ca-linux-ppc64le.$(PROJECT_VERSION).tar.gz * 299 dist/linux-s390x: 300 cd release/linux-s390x && tar -czvf hyperledger-fabric-ca-linux-s390x.$(PROJECT_VERSION).tar.gz * 301 302 .PHONY: clean 303 clean: docker-clean release-clean 304 -@chmod -R +w build 305 -@rm -rf build bin ||: 306 307 .PHONY: clean-all 308 clean-all: clean dist-clean 309 310 %-release-clean: 311 $(eval TARGET = ${patsubst %-release-clean,%,${@}}) 312 -@rm -rf release/$(TARGET) 313 release-clean: $(patsubst %,%-release-clean, $(RELEASE_PLATFORMS)) 314 315 .PHONY: dist-clean 316 dist-clean: 317 -@rm -rf release/windows-amd64/hyperledger-fabric-ca-windows-amd64.$(PROJECT_VERSION).tar.gz ||: 318 -@rm -rf release/darwin-amd64/hyperledger-fabric-ca-darwin-amd64.$(PROJECT_VERSION).tar.gz ||: 319 -@rm -rf release/linux-amd64/hyperledger-fabric-ca-linux-amd64.$(PROJECT_VERSION).tar.gz ||: 320 -@rm -rf release/linux-ppc64le/hyperledger-fabric-ca-linux-ppc64le.$(PROJECT_VERSION).tar.gz ||: 321 -@rm -rf release/linux-s390x/hyperledger-fabric-ca-linux-s390x.$(PROJECT_VERSION).tar.gz ||: 322 323 .FORCE: