gitee.com/zhaochuninhefei/fabric-ca-gm@v0.0.2/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 # - all-tests - runs unit and integration tests 14 # - int-tests - runs the go-test based integration tests 15 # - unit-tests - runs the go-test based unit tests 16 # - checks - runs all check conditions (license, format, imports, lint and vet) 17 # - native - ensures all native binaries are available 18 # - docker[-clean] - builds/cleans the fabric-ca docker image 19 # - docker-fvt[-clean] - builds/cleans the fabric-ca functional verification testing image 20 # - release - builds fabric-ca-client binary for the host platform. Binary built with this target will not support pkcs11 21 # - release-all - builds fabric-ca-client binary for all target platforms. Binaries built with this target will not support pkcs11 22 # - dist - builds release package for the host platform 23 # - dist-all - builds release packages for all target platforms 24 # - clean - cleans the build area 25 # - release-clean - cleans the binaries for all target platforms 26 # - dist-clean - cleans release packages for all target platforms 27 # - clean-all - cleans the build area and release packages 28 # - docker-thirdparty - pulls thirdparty images (postgres) 29 # - gotools - Installs go tools, such as: golint, goimports, gocov 30 # - vendor - vendors third-party packages 31 32 PROJECT_NAME = fabric-ca 33 ALPINE_VER ?= 3.14 34 DEBIAN_VER ?= stretch 35 BASE_VERSION = 1.5.2 36 IS_RELEASE = true 37 38 ARCH=$(shell go env GOARCH) 39 MARCH=$(shell go env GOOS)-$(shell go env GOARCH) 40 STABLE_TAG ?= $(ARCH)-$(BASE_VERSION)-stable 41 42 ifneq ($(IS_RELEASE),true) 43 EXTRA_VERSION ?= snapshot-$(shell git rev-parse --short HEAD) 44 PROJECT_VERSION=$(BASE_VERSION)-$(EXTRA_VERSION) 45 FABRIC_TAG ?= latest 46 else 47 PROJECT_VERSION=$(BASE_VERSION) 48 FABRIC_TAG ?= $(ARCH)-$(BASE_VERSION) 49 endif 50 51 PG_VER=11 52 53 PKGNAME = gitee.com/zhaochuninhefei/fabric-ca-gm 54 55 METADATA_VAR = Version=$(PROJECT_VERSION) 56 57 GO_VER = 1.17.5 58 GO_SOURCE := $(shell find . -name '*.go') 59 GO_LDFLAGS = $(patsubst %,-X $(PKGNAME)/lib/metadata.%,$(METADATA_VAR)) 60 export GO_LDFLAGS 61 62 IMAGES = $(PROJECT_NAME) 63 FVTIMAGE = $(PROJECT_NAME)-fvt 64 65 RELEASE_PLATFORMS = linux-amd64 darwin-amd64 windows-amd64 66 RELEASE_PKGS = fabric-ca-client fabric-ca-server 67 68 TOOLS = build/tools 69 70 path-map.fabric-ca-client := cmd/fabric-ca-client 71 path-map.fabric-ca-server := cmd/fabric-ca-server 72 73 include docker-env.mk 74 75 all: docker unit-tests 76 77 include gotools.mk 78 79 docker: $(patsubst %,build/image/%/$(DUMMY), $(IMAGES)) 80 81 docker-fvt: $(patsubst %,build/image/%/$(DUMMY), $(FVTIMAGE)) 82 83 checks: license vet lint format imports 84 85 license: .FORCE 86 @scripts/check_license 87 88 format: .FORCE 89 @scripts/check_format 90 91 imports: $(TOOLS)/goimports 92 @scripts/check_imports 93 94 lint: $(TOOLS)/golint 95 @scripts/check_lint 96 97 vet: .FORCE 98 @scripts/check_vet 99 100 docs: gotools fabric-ca-client fabric-ca-server 101 @scripts/regenDocs 102 103 fabric-ca-client: bin/fabric-ca-client 104 fabric-ca-server: bin/fabric-ca-server 105 106 bin/%: $(GO_SOURCE) 107 @echo "Building ${@F} in bin directory ..." 108 @mkdir -p bin && go build -o bin/${@F} -tags "!pkcs11" -ldflags "$(GO_LDFLAGS)" $(PKGNAME)/$(path-map.${@F}) 109 @echo "Built bin/${@F}" 110 111 build/image/fabric-ca/$(DUMMY): 112 @mkdir -p $(@D) 113 $(eval TARGET = ${patsubst build/image/%/$(DUMMY),%,${@}}) 114 @echo "Docker: building $(TARGET) image" 115 $(DBUILD) -f images/$(TARGET)/Dockerfile \ 116 --build-arg GO_VER=${GO_VER} \ 117 --build-arg GO_TAGS=!pkcs11 \ 118 --build-arg GO_LDFLAGS="${DOCKER_GO_LDFLAGS}" \ 119 --build-arg ALPINE_VER=${ALPINE_VER} \ 120 -t $(DOCKER_NS)/$(TARGET) . 121 docker tag $(DOCKER_NS)/$(TARGET) $(DOCKER_NS)/$(TARGET):$(BASE_VERSION) 122 docker tag $(DOCKER_NS)/$(TARGET) $(DOCKER_NS)/$(TARGET):$(DOCKER_TAG) 123 @touch $@ 124 125 build/image/fabric-ca-fvt/$(DUMMY): 126 @mkdir -p $(@D) 127 $(eval TARGET = ${patsubst build/image/%/$(DUMMY),%,${@}}) 128 @echo "Docker: building $(TARGET) image" 129 $(DBUILD) -f images/$(TARGET)/Dockerfile \ 130 --build-arg GO_VER=${GO_VER} \ 131 --build-arg GO_TAGS=!pkcs11 \ 132 --build-arg GO_LDFLAGS="${DOCKER_GO_LDFLAGS}" \ 133 --build-arg PG_VER=${PG_VER} \ 134 -t $(DOCKER_NS)/$(TARGET) . 135 @touch $@ 136 137 138 all-tests: unit-tests int-tests 139 140 int-tests: gotools fabric-ca-server fabric-ca-client 141 @scripts/run_integration_tests 142 143 unit-tests: gotools fabric-ca-server fabric-ca-client 144 @scripts/run_unit_tests 145 146 unit-test: unit-tests 147 148 vendor: .FORCE 149 @go mod tidy 150 @go mod vendor 151 152 container-tests: docker 153 154 fvt-tests: docker-clean docker-fvt 155 @docker run -v $(shell pwd):/build/fabric-ca ${DOCKER_NS}/fabric-ca-fvt 156 157 %-docker-clean: 158 $(eval TARGET = ${patsubst %-docker-clean,%,${@}}) 159 -docker images -q $(DOCKER_NS)/$(TARGET):latest | xargs -I '{}' docker rmi -f '{}' 160 -@rm -rf build/image/$(TARGET) ||: 161 162 docker-clean: $(patsubst %,%-docker-clean, $(IMAGES) $(PROJECT_NAME)-fvt) 163 @rm -rf build/docker/bin/* ||: 164 165 native: fabric-ca-client fabric-ca-server 166 167 release: $(patsubst %,release/%, $(MARCH)) 168 release-all: $(patsubst %,release/%, $(RELEASE_PLATFORMS)) 169 170 release/windows-amd64: GOOS=windows 171 release/windows-amd64: CC=/usr/bin/x86_64-w64-mingw32-gcc 172 release/windows-amd64: $(patsubst %,release/windows-amd64/bin/%, $(RELEASE_PKGS)) 173 174 release/darwin-amd64: GOOS=darwin 175 release/darwin-amd64: CC=/usr/bin/clang 176 release/darwin-amd64: $(patsubst %,release/darwin-amd64/bin/%, $(RELEASE_PKGS)) 177 178 release/linux-amd64: GOOS=linux 179 release/linux-amd64: $(patsubst %,release/linux-amd64/bin/%, $(RELEASE_PKGS)) 180 181 release/%-amd64: GOARCH=amd64 182 183 release/linux-%: GOOS=linux 184 185 release/%/bin/fabric-ca-client: GO_TAGS+= caclient 186 release/%/bin/fabric-ca-client: $(GO_SOURCE) 187 @echo "Building $@ for $(GOOS)-$(GOARCH)" 188 mkdir -p $(@D) 189 GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $(abspath $@) -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(PKGNAME)/$(path-map.$(@F)) 190 191 release/%/bin/fabric-ca-server: $(GO_SOURCE) 192 @echo "Building $@ for $(GOOS)-$(GOARCH)" 193 mkdir -p $(@D) 194 GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $(abspath $@) -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(PKGNAME)/$(path-map.$(@F)) 195 196 # Pull thirdparty docker images 197 # Currently the target is available but unused. If you are implementing a new 198 # test using the ifrit DB runners, you must add the docker-thirdparty target 199 # to the test target you are running i.e. (unit-tests, int-tests, all-tests). 200 .PHONY: docker-thirdparty 201 docker-thirdparty: 202 docker pull postgres:9.6 203 docker pull mysql:5.7 204 205 .PHONY: dist 206 dist: dist-clean release 207 cd release/$(MARCH) && tar -czvf hyperledger-fabric-ca-$(MARCH)-$(PROJECT_VERSION).tar.gz * 208 dist-all: dist-clean release-all $(patsubst %,dist/%, $(RELEASE_PLATFORMS)) 209 dist/windows-amd64: release/windows-amd64 210 cd release/windows-amd64 && tar -czvf hyperledger-fabric-ca-windows-amd64-$(PROJECT_VERSION).tar.gz * 211 dist/darwin-amd64: release/darwin-amd64 212 cd release/darwin-amd64 && tar -czvf hyperledger-fabric-ca-darwin-amd64-$(PROJECT_VERSION).tar.gz * 213 dist/linux-amd64: release/linux-amd64 214 cd release/linux-amd64 && tar -czvf hyperledger-fabric-ca-linux-amd64-$(PROJECT_VERSION).tar.gz * 215 216 .PHONY: clean 217 clean: docker-clean release-clean 218 -@rm -rf build bin ||: 219 220 .PHONY: clean-all 221 clean-all: clean dist-clean 222 223 %-release-clean: 224 $(eval TARGET = ${patsubst %-release-clean,%,${@}}) 225 -@rm -rf release/$(TARGET) 226 release-clean: $(patsubst %,%-release-clean, $(RELEASE_PLATFORMS)) 227 228 .PHONY: dist-clean 229 dist-clean: 230 -@rm -rf release/windows-amd64/hyperledger-fabric-ca-windows-amd64-$(PROJECT_VERSION).tar.gz ||: 231 -@rm -rf release/darwin-amd64/hyperledger-fabric-ca-darwin-amd64-$(PROJECT_VERSION).tar.gz ||: 232 -@rm -rf release/linux-amd64/hyperledger-fabric-ca-linux-amd64-$(PROJECT_VERSION).tar.gz ||: 233 234 .FORCE: