blob: 13fa80d9b722e9096cabb5c5e108a1a83823aa6c [file] [log] [blame]
Martin Rothcbaab7e2016-08-31 21:26:17 -06001##
Patrick Georgi7333a112020-05-08 20:48:04 +02002## SPDX-License-Identifier: GPL-2.0-only
3
Martin Rothcbaab7e2016-08-31 21:26:17 -06004export top=$(abspath $(CURDIR)/../..)
5export crossgcc_version=$(shell $(top)/util/crossgcc/buildgcc --version | grep 'cross toolchain' | sed 's/^.*\sv//' | sed 's/\s.*$$//')
Martin Roth561f3682016-12-30 17:00:19 -07006export DOCKER:=$(shell $(SHELL) -c "command -v docker")
7
Martin Roth85782b22016-12-31 14:59:29 -07008# Local port to forward to the jenkins image for the test server
9export COREBOOT_JENKINS_PORT?=49151
10
11# Local cache directory - for storing files shared with the docker image
12export COREBOOT_JENKINS_CACHE_DIR?=/srv/docker/coreboot-builder/cache
13
Martin Roth85782b22016-12-31 14:59:29 -070014# Name of the jenkins container
15export COREBOOT_JENKINS_CONTAINER?=coreboot_jenkins
16
Martin Roth561f3682016-12-30 17:00:19 -070017# Version of the jenkins / sdk container
Nico Huber9b1cbe02018-11-04 19:20:41 +010018export COREBOOT_IMAGE_TAG?=$(crossgcc_version)
Martin Roth561f3682016-12-30 17:00:19 -070019
20# Commit id to build from
21export DOCKER_COMMIT?=$(shell git log -n 1 --pretty=%h)
Martin Rothcbaab7e2016-08-31 21:26:17 -060022
Nico Huber9b731b52018-11-04 17:44:14 +010023# .ccache dir to use
24export DOCKER_CCACHE?=$(HOME)/.ccache
25
Piotr Król64f87f32017-10-20 12:17:34 +020026# SDK architecture
Hsuan Ting Chenbdad2832021-12-21 12:09:45 +080027export COREBOOT_CROSSGCC_PARAM?=all
Piotr Król64f87f32017-10-20 12:17:34 +020028
Martin Rothf8307c32018-05-27 14:53:02 -060029UID ?= $(shell id -u)
30GID ?= $(shell id -g)
31
Martin Roth9ee70ce2016-12-30 16:26:13 -070032test-docker:
Martin Rothcbaab7e2016-08-31 21:26:17 -060033 $(if $(DOCKER),,\
Martin Roth44cfde02020-11-07 15:52:56 -070034 $(warning Error: Docker command not found. Please install docker) \
35 $(warning Instructions: https://docs.docker.com/engine/install/ ) \
Martin Rothcbaab7e2016-08-31 21:26:17 -060036 $(error halting))
37
Martin Roth9ee70ce2016-12-30 16:26:13 -070038test-docker-login: test-docker
Martin Rothcbaab7e2016-08-31 21:26:17 -060039 $(if $(shell if [ ! -f ~/.docker/config.json ]; then \
40 echo "docker authentication file not found"; fi), \
41 $(error Docker authentication file not found. Run 'docker login'))
42
Martin Roth9ee70ce2016-12-30 16:26:13 -070043coreboot-sdk: test-docker
Martin Roth561f3682016-12-30 17:00:19 -070044 @echo "Building coreboot SDK $(crossgcc_version) from commit $(DOCKER_COMMIT)"
45 cat coreboot-sdk/Dockerfile | \
Martin Rothd736b1a2020-11-07 15:12:30 -070046 sed "s/{{DOCKER_COMMIT}}/$(DOCKER_COMMIT)/g" | \
47 sed "s/{{SDK_VERSION}}/$(COREBOOT_IMAGE_TAG)/g" | \
48 sed "s/{{CROSSGCC_PARAM}}/$(COREBOOT_CROSSGCC_PARAM)/g" | \
Nico Huber9b1cbe02018-11-04 19:20:41 +010049 $(DOCKER) build -t coreboot/coreboot-sdk:$(COREBOOT_IMAGE_TAG) -
Martin Rothcbaab7e2016-08-31 21:26:17 -060050
Martin Roth18fd3a22023-07-21 14:10:51 -060051coreboot-jenkins-test: test-docker
52 @echo "Testing coreboot SDK and jenkins node version $(crossgcc_version), built from commit $(DOCKER_COMMIT)"
53 cat coreboot-jenkins-test/Dockerfile | \
54 sed "s/{{SDK_VERSION}}/$(COREBOOT_IMAGE_TAG)/g" | \
55 $(DOCKER) build -t coreboot/coreboot-jenkins-test:$(COREBOOT_IMAGE_TAG) -
Martin Roth5a4cedb2023-05-27 18:13:51 -060056
Martin Roth9ee70ce2016-12-30 16:26:13 -070057upload-coreboot-sdk: test-docker-login
Nico Huber9b1cbe02018-11-04 19:20:41 +010058 $(DOCKER) push coreboot/coreboot-sdk:$(COREBOOT_IMAGE_TAG)
Martin Rothcbaab7e2016-08-31 21:26:17 -060059
Martin Roth9ee70ce2016-12-30 16:26:13 -070060coreboot-jenkins-node: test-docker
Martin Roth561f3682016-12-30 17:00:19 -070061 cat coreboot-jenkins-node/Dockerfile | \
Martin Rothd736b1a2020-11-07 15:12:30 -070062 sed "s/{{SDK_VERSION}}/$(COREBOOT_IMAGE_TAG)/g" | \
Martin Roth561f3682016-12-30 17:00:19 -070063 sed "s|{{SSH_KEY}}|$$(cat coreboot-jenkins-node/authorized_keys)|" | \
Nico Huber9b1cbe02018-11-04 19:20:41 +010064 $(DOCKER) build -t coreboot/coreboot-jenkins-node:$(COREBOOT_IMAGE_TAG) -
Martin Rothcbaab7e2016-08-31 21:26:17 -060065
Martin Roth9ee70ce2016-12-30 16:26:13 -070066upload-coreboot-jenkins-node: test-docker-login
Nico Huber9b1cbe02018-11-04 19:20:41 +010067 $(DOCKER) push coreboot/coreboot-jenkins-node:$(COREBOOT_IMAGE_TAG)
Martin Rothcbaab7e2016-08-31 21:26:17 -060068
Arthur Heymans593172c2019-10-17 22:10:59 +020069doc.coreboot.org: test-docker
70 $(DOCKER) build --force-rm -t doc.coreboot.org \
71 $(top)/util/docker/doc.coreboot.org/
72
Martin Roth9ee70ce2016-12-30 16:26:13 -070073docker-killall: test-docker
Martin Rothaf25fd72016-12-30 16:12:30 -070074 @if [ -n "$$($(DOCKER) ps | grep 'coreboot')" ]; then \
75 $(DOCKER) kill $$($(DOCKER) ps | grep 'coreboot' | cut -f1 -d ' '); \
76 fi
77
Martin Roth9ee70ce2016-12-30 16:26:13 -070078clean-coreboot-containers: docker-killall
Martin Roth85782b22016-12-31 14:59:29 -070079 @if [ -n "$$($(DOCKER) ps -a | grep 'coreboot')" ]; then \
80 $(DOCKER) rm $$($(DOCKER) ps -a | grep 'coreboot' | sed 's|\s.*$$||'); \
81 fi
Martin Rothcbaab7e2016-08-31 21:26:17 -060082
Martin Roth9ee70ce2016-12-30 16:26:13 -070083clean-coreboot-images: docker-killall
Martin Roth85782b22016-12-31 14:59:29 -070084 @if [ -n "$$($(DOCKER) images | grep 'coreboot')" ]; then \
85 $(DOCKER) rmi $$($(DOCKER) images | grep coreboot | sed 's|^\S\+\s\+\S\+\s\+||' | sed 's|\s.*$$||'); \
86 fi
87
88docker-clean: clean-coreboot-containers
89 @$(MAKE) clean-coreboot-images
90
Martin Roth44cfde02020-11-07 15:52:56 -070091docker-cleanall: test-docker
Frans Hendriksf9005622020-11-25 12:19:51 +010092ifeq ($(Y),1)
Martin Roth85782b22016-12-31 14:59:29 -070093 @if [ -n "$$($(DOCKER) ps -a | grep -v "CONTAINER")" ]; then \
Martin Roth44cfde02020-11-07 15:52:56 -070094 $(DOCKER) kill $$($(DOCKER) ps | grep -v "CONTAINER" | sed 's|\s.*$$||') ; \
Martin Roth85782b22016-12-31 14:59:29 -070095 $(DOCKER) rm $$($(DOCKER) ps -a | grep -v "CONTAINER" | sed 's|\s.*$$||'); \
96 fi
97 @if [ -n "$$($(DOCKER) images | grep -v "REPOSITORY")" ]; then \
98 $(DOCKER) rmi $$($(DOCKER) images | grep -v "REPOSITORY" | tr -s ' ' | cut -f3 -d ' '); \
99 fi
Martin Roth44cfde02020-11-07 15:52:56 -0700100else
101 echo "This will remove *ALL* docker containers from your machine."
102 echo "If this is what you want, run 'make docker-cleanall Y=1'"
103endif
Martin Rothcbaab7e2016-08-31 21:26:17 -0600104
Nico Huber9b731b52018-11-04 17:44:14 +0100105$(DOCKER_CCACHE):
106 @mkdir -p $@
107
108docker-run-local: test-docker $(DOCKER_CCACHE)
109 $(DOCKER) run -it --rm \
110 --volume $(DOCKER_CCACHE):/home/coreboot/.ccache \
111 --volume $(top):/home/coreboot/coreboot \
112 --env HOME=/home/coreboot \
Martin Rothf8307c32018-05-27 14:53:02 -0600113 --user $(UID):$(GID) \
Nico Huber9b1cbe02018-11-04 19:20:41 +0100114 coreboot/coreboot-sdk:$(COREBOOT_IMAGE_TAG) \
Nico Huber9b731b52018-11-04 17:44:14 +0100115 /bin/bash -c 'cd $${HOME}/coreboot && $(DOCKER_RUN_LOCAL)'
Martin Rothcbaab7e2016-08-31 21:26:17 -0600116
Nico Huber674ed242018-11-04 17:26:14 +0100117docker-build-coreboot: docker-run-local
118docker-build-coreboot: override DOCKER_RUN_LOCAL := \
Raul E Rangel81ff33c2019-07-11 10:44:21 -0600119 make clean && make $(BUILD_CMD)
Martin Rothcbaab7e2016-08-31 21:26:17 -0600120
Nico Huber674ed242018-11-04 17:26:14 +0100121docker-abuild: docker-run-local
122docker-abuild: override DOCKER_RUN_LOCAL := \
Raul E Rangel81ff33c2019-07-11 10:44:21 -0600123 make clean && util/abuild/abuild $(ABUILD_ARGS)
Nico Huber674ed242018-11-04 17:26:14 +0100124
125docker-what-jenkins-does: docker-run-local
126docker-what-jenkins-does: override DOCKER_RUN_LOCAL := \
127 make clean && make what-jenkins-does CPUS=$(CPUS)
Martin Roth85782b22016-12-31 14:59:29 -0700128
Martin Rothf1ee2f72023-07-22 12:59:28 -0600129test-docker-cache-dir:
Martin Roth85782b22016-12-31 14:59:29 -0700130 @if [ ! -d "$(COREBOOT_JENKINS_CACHE_DIR)" ]; then \
131 printf "\nError: %s does not exist.\n" "$(COREBOOT_JENKINS_CACHE_DIR)"; \
132 printf "Please run:\nsudo mkdir -p %s\n\n" "$(COREBOOT_JENKINS_CACHE_DIR)"; \
Martin Rothf1ee2f72023-07-22 12:59:28 -0600133 printf "sudo chown -R $$(whoami):$$(whoami) %s\n\n" "$(COREBOOT_JENKINS_CACHE_DIR)"; \
Martin Roth85782b22016-12-31 14:59:29 -0700134 false; \
135 fi
136 @if ! touch "$(COREBOOT_JENKINS_CACHE_DIR)/testfile" 2>/dev/null; then \
137 printf "\nError: Cannot create file in %s." "$(COREBOOT_JENKINS_CACHE_DIR)"; \
Martin Rothf1ee2f72023-07-22 12:59:28 -0600138 printf "Please run:\nsudo chown -R $$(whoami):$$(whoami) %s\n\n" "$(COREBOOT_JENKINS_CACHE_DIR)"; \
139 false; \
Martin Roth85782b22016-12-31 14:59:29 -0700140 else \
141 rm -f "$(COREBOOT_JENKINS_CACHE_DIR)/testfile"; \
142 fi
Martin Rothf1ee2f72023-07-22 12:59:28 -0600143
144docker-jenkins-server: test-docker-cache-dir test-docker
Martin Roth85782b22016-12-31 14:59:29 -0700145 $(DOCKER) run -d --privileged --restart=always \
146 -p $(COREBOOT_JENKINS_PORT):49151 \
147 -v $(COREBOOT_JENKINS_CACHE_DIR):/data/cache \
Martin Roth85782b22016-12-31 14:59:29 -0700148 --name=$(COREBOOT_JENKINS_CONTAINER) \
Nico Huber9b1cbe02018-11-04 19:20:41 +0100149 coreboot/coreboot-jenkins-node:$(COREBOOT_IMAGE_TAG)
Martin Roth85782b22016-12-31 14:59:29 -0700150
Martin Rothf1ee2f72023-07-22 12:59:28 -0600151docker-jenkins-shell: test-docker-cache-dir test-docker
Martin Roth85782b22016-12-31 14:59:29 -0700152 $(DOCKER) run -u root -it --privileged \
153 --entrypoint="/bin/bash" \
154 -p $(COREBOOT_JENKINS_PORT):49151 \
155 -v $(top):/home/coreboot/coreboot \
156 -v $(COREBOOT_JENKINS_CACHE_DIR):/data/cache \
Martin Roth85782b22016-12-31 14:59:29 -0700157 --name=$(COREBOOT_JENKINS_CONTAINER) \
Nico Huber9b1cbe02018-11-04 19:20:41 +0100158 --rm coreboot/coreboot-jenkins-node:$(COREBOOT_IMAGE_TAG)
Martin Roth85782b22016-12-31 14:59:29 -0700159
160docker-shell: USER=coreboot
161docker-shell: test-docker
162 $(DOCKER) run -u $(USER) -it \
Martin Rothfbc87b62018-07-15 20:10:44 -0600163 -e COLUMNS=$(shell tput cols) -e LINES=$(shell tput lines) -e TERM=$(TERM) \
Martin Roth85782b22016-12-31 14:59:29 -0700164 -w /home/coreboot/coreboot \
165 -v $(top):/home/coreboot/coreboot \
Nico Huber9b1cbe02018-11-04 19:20:41 +0100166 --rm coreboot/coreboot-sdk:$(COREBOOT_IMAGE_TAG) \
Martin Roth85782b22016-12-31 14:59:29 -0700167 /bin/bash -l
168
Martin Rothfbc87b62018-07-15 20:10:44 -0600169docker-jenkins-attach: USER=root
Martin Roth44cfde02020-11-07 15:52:56 -0700170docker-jenkins-attach: test-docker
171 $(DOCKER) exec --user $(USER) \
Martin Rothfbc87b62018-07-15 20:10:44 -0600172 -e COLUMNS=$(shell tput cols) -e LINES=$(shell tput lines) -e TERM=$(TERM) \
173 -it "$$(docker ps | grep coreboot-jenkins-node | cut -f1 -d' ')" \
174 /bin/bash -l
175
Arthur Heymans593172c2019-10-17 22:10:59 +0200176docker-build-docs: test-docker
177docker-build-docs:
178 $(DOCKER) run -it --rm \
Martin Roth44cfde02020-11-07 15:52:56 -0700179 --user $(UID):$(GID) \
180 -v "$(top)/:/data-in/:ro" \
181 -v "$(top)/Documentation/_build/:/data-out/" \
182 doc.coreboot.org
Arthur Heymans593172c2019-10-17 22:10:59 +0200183
184docker-livehtml-docs: test-docker
185docker-livehtml-docs:
186 $(DOCKER) run -it --rm \
Martin Roth44cfde02020-11-07 15:52:56 -0700187 --net=host -v "$(top)/:/data-in/:ro" \
188 doc.coreboot.org livehtml
Arthur Heymans593172c2019-10-17 22:10:59 +0200189
Martin Rothcbaab7e2016-08-31 21:26:17 -0600190help:
191 @echo "Commands for working with docker images:"
Martin Roth9ee70ce2016-12-30 16:26:13 -0700192 @echo " coreboot-sdk - Build coreboot-sdk container"
Martin Roth18fd3a22023-07-21 14:10:51 -0600193 @echo " coreboot-jenkins-test - Test the coreboot-jenkins-node build functionality"
Martin Rothcbaab7e2016-08-31 21:26:17 -0600194 @echo " upload-coreboot-sdk - Upload coreboot-sdk to hub.docker.com"
Martin Roth9ee70ce2016-12-30 16:26:13 -0700195 @echo " coreboot-jenkins-node - Build coreboot-jenkins-node container"
Martin Rothcbaab7e2016-08-31 21:26:17 -0600196 @echo " upload-coreboot-jenkins-node - Upload coreboot-jenkins-node to hub.docker.com"
Arthur Heymans593172c2019-10-17 22:10:59 +0200197 @echo " doc.coreboot.org - Build doc.coreboot.org container"
Martin Roth85782b22016-12-31 14:59:29 -0700198 @echo " clean-coreboot-containers - Remove all docker coreboot containers"
199 @echo " clean-coreboot-images - Remove all docker coreboot images"
Wim Vervoorn60510732020-01-30 11:43:14 +0100200 @echo " docker-clean - Remove docker coreboot containers & images"
Martin Rothcbaab7e2016-08-31 21:26:17 -0600201 @echo
202 @echo "Commands for using docker images"
Martin Roth85782b22016-12-31 14:59:29 -0700203 @echo " docker-build-coreboot - Build coreboot under coreboot-sdk"
204 @echo " <BUILD_CMD=target> "
205 @echo " docker-abuild - Run abuild under coreboot-sdk"
206 @echo " <ABUILD_ARGS='-a -B'>"
207 @echo " docker-what-jenkins-does - Run 'what-jenkins-does' target"
Martin Roth54216dd2023-07-31 09:19:09 -0600208 @echo " docker-jenkins-shell - Bash prompt in coreboot-jenkins-node"
209 @echo " <USER=root or USER=coreboot>"
210 @echo " docker-shell - Bash prompt in coreboot-sdk"
Martin Roth85782b22016-12-31 14:59:29 -0700211 @echo " <USER=root or USER=coreboot>"
212 @echo " docker-jenkins-server - Run coreboot-jenkins-node image (for server)"
Martin Rothfbc87b62018-07-15 20:10:44 -0600213 @echo " docker-jenkins-attach - Open shell in running jenkins server"
Arthur Heymans593172c2019-10-17 22:10:59 +0200214 @echo " docker-build-docs - Build the documentation"
215 @echo " docker-livehtml-docs - Run sphinx-autobuild"
Martin Roth561f3682016-12-30 17:00:19 -0700216 @echo
217 @echo "Variables:"
Martin Roth85782b22016-12-31 14:59:29 -0700218 @echo " COREBOOT_JENKINS_PORT=$(COREBOOT_JENKINS_PORT)"
219 @echo " COREBOOT_JENKINS_CACHE_DIR=$(COREBOOT_JENKINS_CACHE_DIR)"
Martin Roth85782b22016-12-31 14:59:29 -0700220 @echo " COREBOOT_JENKINS_CONTAINER=$(COREBOOT_JENKINS_CONTAINER)"
Nico Huber9b1cbe02018-11-04 19:20:41 +0100221 @echo " COREBOOT_IMAGE_TAG=$(COREBOOT_IMAGE_TAG)"
Martin Roth85782b22016-12-31 14:59:29 -0700222 @echo " DOCKER_COMMIT=$(DOCKER_COMMIT)"
Martin Rothcbaab7e2016-08-31 21:26:17 -0600223
Martin Rothf1ee2f72023-07-22 12:59:28 -0600224.PHONY: test-docker test-docker-login test-docker-cache-dir
Martin Roth18fd3a22023-07-21 14:10:51 -0600225.PHONY: coreboot-jenkins-node upload-coreboot-jenkins-node coreboot-jenkins-test
Martin Roth9ee70ce2016-12-30 16:26:13 -0700226.PHONY: coreboot-sdk upload-coreboot-sdk
Arthur Heymans593172c2019-10-17 22:10:59 +0200227.PHONY: doc.coreboot.org
Martin Rothf1ee2f72023-07-22 12:59:28 -0600228.PHONY: clean-coreboot-containers clean-coreboot-images docker-cleanall
Martin Roth9ee70ce2016-12-30 16:26:13 -0700229.PHONY: docker-abuild
Martin Roth54216dd2023-07-31 09:19:09 -0600230.PHONY: docker-shell docker-jenkins-shell
231.PHONY: docker-what-jenkins-does docker-jenkins-server docker-jenkins-attach
Arthur Heymans593172c2019-10-17 22:10:59 +0200232.PHONY: docker-build-docs docker-livehtml-docs
Martin Roth9ee70ce2016-12-30 16:26:13 -0700233.PHONY: help