1include ../containerd.mk 2 3ARCH=$(shell uname -m) 4ENGINE_DIR:=$(CURDIR)/../../engine 5CLI_DIR:=$(CURDIR)/../../cli 6GITCOMMIT=$(shell cd $(ENGINE_DIR) && git rev-parse --short HEAD) 7VERSION?=0.0.0-dev 8GO_BASE_IMAGE=golang 9GO_VERSION:=1.10.8 10GO_IMAGE?=$(GO_BASE_IMAGE):$(GO_VERSION) 11GEN_RPM_VER=$(shell ./gen-rpm-ver $(CLI_DIR) $(VERSION)) 12CHOWN=docker run --rm -i -v $(CURDIR):/v -w /v alpine chown 13 14DOCKERFILE=Dockerfile 15ifdef NEEDS_ARCH_SPECIFIC 16 DOCKERFILE=Dockerfile.$(ARCH) 17endif 18ifdef BUILD_IMAGE 19 BUILD_IMAGE_FLAG=--build-arg $(BUILD_IMAGE) 20endif 21BUILD?=docker build \ 22 $(BUILD_IMAGE_FLAG) \ 23 --build-arg GO_IMAGE=$(GO_IMAGE) \ 24 --build-arg ENGINE_IMAGE=$(shell cat rpmbuild/SOURCES/engine-image) \ 25 -t rpmbuild-$@/$(ARCH) \ 26 -f $@/$(DOCKERFILE) \ 27 . 28 29SPEC_FILES?=docker-ce.spec docker-ce-cli.spec 30SPECS?=$(addprefix SPECS/, $(SPEC_FILES)) 31RPMBUILD=docker run --privileged --rm -i\ 32 -v $(CURDIR)/rpmbuild/SOURCES:/root/rpmbuild/SOURCES \ 33 -v $(CURDIR)/rpmbuild/RPMS:/root/rpmbuild/RPMS \ 34 -v $(CURDIR)/rpmbuild/SRPMS:/root/rpmbuild/SRPMS 35RPMBUILD_FLAGS?=-ba\ 36 --define '_gitcommit $(word 3,$(GEN_RPM_VER))' \ 37 --define '_release $(word 2,$(GEN_RPM_VER))' \ 38 --define '_version $(word 1,$(GEN_RPM_VER))' \ 39 --define '_origversion $(word 4, $(GEN_RPM_VER))' \ 40 $(SPECS) 41RUN?=$(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) 42 43SOURCE_FILES=engine-image cli.tgz docker.service docker.socket distribution_based_engine.json 44SOURCES=$(addprefix rpmbuild/SOURCES/, $(SOURCE_FILES)) 45 46 47.PHONY: help 48help: ## show make targets 49 @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) 50 51.PHONY: clean 52clean: ## remove build artifacts 53 [ ! -d rpmbuild ] || $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild 54 $(RM) -r rpmbuild/ 55 [ ! -d artifacts ] || $(CHOWN) -R $(shell id -u):$(shell id -g) artifacts 56 $(RM) -r artifacts/ 57 [ ! -d tmp ] || $(CHOWN) -R $(shell id -u):$(shell id -g) tmp 58 $(RM) -r tmp/ 59 -docker rm docker2oci 60 $(MAKE) -C ../image clean 61 62.PHONY: rpm 63rpm: fedora centos ## build all rpm packages 64 65.PHONY: fedora 66fedora: fedora-28 fedora-27 fedora-26 ## build all fedora rpm packages 67 68.PHONY: centos 69centos: centos-7 ## build all centos rpm packages 70 71.PHONY: fedora-29 72fedora-29: ## build fedora-29 rpm packages 73fedora-29: $(SOURCES) 74 $(CHOWN) -R root:root rpmbuild 75 $(BUILD) 76 $(RUN) 77 $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild 78 79.PHONY: fedora-28 80fedora-28: ## build fedora-28 rpm packages 81fedora-28: $(SOURCES) 82 $(CHOWN) -R root:root rpmbuild 83 $(BUILD) 84 $(RUN) 85 $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild 86 87.PHONY: fedora-27 88fedora-27: ## build fedora-27 rpm packages 89fedora-27: $(SOURCES) 90 $(CHOWN) -R root:root rpmbuild 91 $(BUILD) 92 $(RUN) 93 $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild 94 95.PHONY: centos-7 96centos-7: ## build centos-7 rpm packages 97centos-7: $(SOURCES) 98 $(CHOWN) -R root:root rpmbuild 99 $(BUILD) 100 $(RUN) 101 $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild 102 103rpmbuild/SOURCES/cli.tgz: 104 mkdir -p rpmbuild/SOURCES 105 docker run --rm -i -w /v \ 106 -v $(CLI_DIR):/cli \ 107 -v $(CURDIR)/rpmbuild/SOURCES:/v \ 108 alpine \ 109 tar -C / -c -z -f /v/cli.tgz --exclude .git cli 110 111rpmbuild/SOURCES/docker.service: ../systemd/docker.service 112 mkdir -p $(@D) 113 cp $< $@ 114 115rpmbuild/SOURCES/docker.socket: ../systemd/docker.socket 116 mkdir -p $(@D) 117 cp $< $@ 118 119rpmbuild/SOURCES/engine-image: 120 $(MAKE) -C ../image image-linux-dm 121 mkdir -p $(@D) 122 cp ../image/image-linux-dm $@ 123 124rpmbuild/SOURCES/distribution_based_engine.json: rpmbuild/SOURCES/engine-image 125 mkdir -p $(@D) 126 docker inspect "$(shell cat $<)" \ 127 --format '{{index .Config.Labels "com.docker.distribution_based_engine" }}' > $@ 128