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