2 ## SPDX-License-Identifier: GPL-2.0-only
4 export top
=$(abspath
$(CURDIR
)/..
/..
)
5 export crossgcc_version
=$(shell $(top
)/util
/crossgcc
/buildgcc
--version | grep
'cross toolchain' | sed
's/^.*\sv//' | sed
's/\s.*$$//')
6 export DOCKER
:=$(shell $(SHELL
) -c
"command -v docker")
8 # Local port to forward to the jenkins image for the test server
9 export COREBOOT_JENKINS_PORT?
=49151
11 # Local cache directory - for storing files shared with the docker image
12 export COREBOOT_JENKINS_CACHE_DIR?
=/srv
/docker
/coreboot-builder
/cache
14 # Name of the jenkins container
15 export COREBOOT_JENKINS_CONTAINER?
=coreboot_jenkins
17 # Version of the jenkins / sdk container
18 export COREBOOT_IMAGE_TAG?
=$(crossgcc_version
)
20 # Commit id to build from
21 export DOCKER_COMMIT?
=$(shell git log
-n
1 --pretty
=%h
)
24 export DOCKER_CCACHE?
=$(HOME
)/.ccache
27 export COREBOOT_CROSSGCC_PARAM?
=all
34 $(warning Error
: Docker command not found. Please
install docker
) \
35 $(warning Instructions
: https
://docs.docker.com
/engine
/install/ ) \
38 test-docker-login
: test-docker
39 $(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'))
43 coreboot-sdk
: test-docker
44 @echo
"Building coreboot SDK $(crossgcc_version) from commit $(DOCKER_COMMIT)"
46 --tag coreboot
/coreboot-sdk
:$(COREBOOT_IMAGE_TAG
) \
47 --build-arg
=SDK_VERSION
="$(COREBOOT_IMAGE_TAG)" \
48 --build-arg
=DOCKER_COMMIT
="$(DOCKER_COMMIT)" \
49 --build-arg
=CROSSGCC_PARAM
="$(COREBOOT_CROSSGCC_PARAM)" \
52 coreboot-jenkins-test
: test-docker
53 @echo
"Testing coreboot SDK and jenkins node version $(crossgcc_version), built from commit $(DOCKER_COMMIT)"
55 --tag coreboot
/coreboot-jenkins-test
:$(COREBOOT_IMAGE_TAG
) \
56 --build-arg
=SDK_VERSION
="$(COREBOOT_IMAGE_TAG)" \
59 upload-coreboot-sdk
: test-docker-login
60 $(DOCKER
) push coreboot
/coreboot-sdk
:$(COREBOOT_IMAGE_TAG
)
62 coreboot-jenkins-node
: test-docker
63 cat coreboot-jenkins-node
/Dockerfile | \
64 sed
"s/{{SDK_VERSION}}/$(COREBOOT_IMAGE_TAG)/g" | \
65 sed
"s|{{SSH_KEY}}|$$(cat coreboot-jenkins-node/authorized_keys)|" | \
66 $(DOCKER
) build
-t coreboot
/coreboot-jenkins-node
:$(COREBOOT_IMAGE_TAG
) -
68 upload-coreboot-jenkins-node
: test-docker-login
69 $(DOCKER
) push coreboot
/coreboot-jenkins-node
:$(COREBOOT_IMAGE_TAG
)
71 doc.coreboot.org
: test-docker
72 $(DOCKER
) build
--force-rm
-t doc.coreboot.org \
73 $(top
)/util
/docker
/doc.coreboot.org
/
75 docker-killall
: test-docker
76 @if
[ -n
"$$($(DOCKER) ps | grep 'coreboot')" ]; then \
77 $(DOCKER
) kill
$$($(DOCKER
) ps | grep
'coreboot' | cut
-f1
-d
' '); \
80 clean-coreboot-containers
: docker-killall
81 @if
[ -n
"$$($(DOCKER) ps -a | grep 'coreboot')" ]; then \
82 $(DOCKER
) rm $$($(DOCKER
) ps
-a | grep
'coreboot' | sed
's|\s.*$$||'); \
85 clean-coreboot-images
: docker-killall
86 @if
[ -n
"$$($(DOCKER) images | grep 'coreboot')" ]; then \
87 $(DOCKER
) rmi
$$($(DOCKER
) images | grep coreboot | sed
's|^\S\+\s\+\S\+\s\+||' | sed
's|\s.*$$||'); \
90 docker-clean
: clean-coreboot-containers
91 @
$(MAKE
) clean-coreboot-images
93 docker-cleanall
: test-docker
95 @if
[ -n
"$$($(DOCKER) ps -a | grep -v "CONTAINER
")" ]; then \
96 $(DOCKER
) kill
$$($(DOCKER
) ps | grep
-v
"CONTAINER" | sed
's|\s.*$$||') ; \
97 $(DOCKER
) rm $$($(DOCKER
) ps
-a | grep
-v
"CONTAINER" | sed
's|\s.*$$||'); \
99 @if
[ -n
"$$($(DOCKER) images | grep -v "REPOSITORY
")" ]; then \
100 $(DOCKER
) rmi
$$($(DOCKER
) images | grep
-v
"REPOSITORY" | tr
-s
' ' | cut
-f3
-d
' '); \
103 echo
"This will remove *ALL* docker containers from your machine."
104 echo
"If this is what you want, run 'make docker-cleanall Y=1'"
110 docker-run-local
: test-docker
$(DOCKER_CCACHE
)
111 $(DOCKER
) run
-it
--rm \
112 --volume
$(DOCKER_CCACHE
):/home
/coreboot
/.ccache \
113 --volume
$(top
):/home
/coreboot
/coreboot \
114 --env HOME
=/home
/coreboot \
115 --user
$(UID
):$(GID
) \
116 coreboot
/coreboot-sdk
:$(COREBOOT_IMAGE_TAG
) \
117 /bin
/bash
-c
'cd $${HOME}/coreboot && $(DOCKER_RUN_LOCAL)'
119 docker-build-coreboot
: docker-run-local
120 docker-build-coreboot
: override DOCKER_RUN_LOCAL
:= \
121 make
clean && make
$(BUILD_CMD
)
123 docker-abuild
: docker-run-local
124 docker-abuild
: override DOCKER_RUN_LOCAL
:= \
125 make
clean && util
/abuild
/abuild
$(ABUILD_ARGS
)
127 docker-what-jenkins-does
: docker-run-local
128 docker-what-jenkins-does
: override DOCKER_RUN_LOCAL
:= \
129 make
clean && make what-jenkins-does CPUS
=$(CPUS
)
131 test-docker-cache-dir
:
132 @if
[ ! -d
"$(COREBOOT_JENKINS_CACHE_DIR)" ]; then \
133 printf
"\nError: %s does not exist.\n" "$(COREBOOT_JENKINS_CACHE_DIR)"; \
134 printf
"Please run:\nsudo mkdir -p %s\n\n" "$(COREBOOT_JENKINS_CACHE_DIR)"; \
135 printf
"sudo chown -R $$(whoami):$$(whoami) %s\n\n" "$(COREBOOT_JENKINS_CACHE_DIR)"; \
138 @if
! touch
"$(COREBOOT_JENKINS_CACHE_DIR)/testfile" 2>/dev
/null
; then \
139 printf
"\nError: Cannot create file in %s." "$(COREBOOT_JENKINS_CACHE_DIR)"; \
140 printf
"Please run:\nsudo chown -R $$(whoami):$$(whoami) %s\n\n" "$(COREBOOT_JENKINS_CACHE_DIR)"; \
143 rm -f
"$(COREBOOT_JENKINS_CACHE_DIR)/testfile"; \
146 docker-jenkins-server
: test-docker-cache-dir test-docker
147 $(DOCKER
) run
-d
--privileged
--restart
=always \
148 -p
$(COREBOOT_JENKINS_PORT
):49151 \
149 -v
$(COREBOOT_JENKINS_CACHE_DIR
):/data
/cache \
150 --name
=$(COREBOOT_JENKINS_CONTAINER
) \
151 coreboot
/coreboot-jenkins-node
:$(COREBOOT_IMAGE_TAG
)
153 docker-jenkins-shell
: test-docker-cache-dir test-docker
154 $(DOCKER
) run
-u root
-it
--privileged \
155 --entrypoint
="/bin/bash" \
156 -p
$(COREBOOT_JENKINS_PORT
):49151 \
157 -v
$(top
):/home
/coreboot
/coreboot \
158 -v
$(COREBOOT_JENKINS_CACHE_DIR
):/data
/cache \
159 --name
=$(COREBOOT_JENKINS_CONTAINER
) \
160 --rm coreboot
/coreboot-jenkins-node
:$(COREBOOT_IMAGE_TAG
)
162 docker-shell
: USER
=coreboot
163 docker-shell
: test-docker
164 $(DOCKER
) run
-u
$(USER
) -it \
165 -e COLUMNS
=$(shell tput cols
) -e LINES
=$(shell tput lines
) -e TERM
=$(TERM
) \
166 -w
/home
/coreboot
/coreboot \
167 -v
$(top
):/home
/coreboot
/coreboot \
168 --rm coreboot
/coreboot-sdk
:$(COREBOOT_IMAGE_TAG
) \
171 docker-jenkins-attach
: USER
=root
172 docker-jenkins-attach
: test-docker
173 $(DOCKER
) exec
--user
$(USER
) \
174 -e COLUMNS
=$(shell tput cols
) -e LINES
=$(shell tput lines
) -e TERM
=$(TERM
) \
175 -it
"$$(docker ps | grep coreboot-jenkins-node | cut -f1 -d' ')" \
178 docker-build-docs
: test-docker
180 mkdir
-p
$(top
)/Documentation
/_build
181 $(DOCKER
) run
-it
--rm \
182 --user
$(UID
):$(GID
) \
183 -v
"$(top)/:/data-in/:ro" \
184 -v
"$(top)/Documentation/_build/:/data-out/" \
187 docker-livehtml-docs
: test-docker
188 docker-livehtml-docs
:
189 $(DOCKER
) run
-it
--rm \
190 --net
=host
-v
"$(top)/:/data-in/:ro" \
191 doc.coreboot.org livehtml
194 @echo
"Commands for working with docker images:"
195 @echo
" coreboot-sdk - Build coreboot-sdk container"
196 @echo
" coreboot-jenkins-test - Test the coreboot-jenkins-node build functionality"
197 @echo
" upload-coreboot-sdk - Upload coreboot-sdk to hub.docker.com"
198 @echo
" coreboot-jenkins-node - Build coreboot-jenkins-node container"
199 @echo
" upload-coreboot-jenkins-node - Upload coreboot-jenkins-node to hub.docker.com"
200 @echo
" doc.coreboot.org - Build doc.coreboot.org container"
201 @echo
" clean-coreboot-containers - Remove all docker coreboot containers"
202 @echo
" clean-coreboot-images - Remove all docker coreboot images"
203 @echo
" docker-clean - Remove docker coreboot containers & images"
205 @echo
"Commands for using docker images"
206 @echo
" docker-build-coreboot - Build coreboot under coreboot-sdk"
207 @echo
" <BUILD_CMD=target> "
208 @echo
" docker-abuild - Run abuild under coreboot-sdk"
209 @echo
" <ABUILD_ARGS='-a -B'>"
210 @echo
" docker-what-jenkins-does - Run 'what-jenkins-does' target"
211 @echo
" docker-jenkins-shell - Bash prompt in coreboot-jenkins-node"
212 @echo
" <USER=root or USER=coreboot>"
213 @echo
" docker-shell - Bash prompt in coreboot-sdk"
214 @echo
" <USER=root or USER=coreboot>"
215 @echo
" docker-jenkins-server - Run coreboot-jenkins-node image (for server)"
216 @echo
" docker-jenkins-attach - Open shell in running jenkins server"
217 @echo
" docker-build-docs - Build the documentation"
218 @echo
" docker-livehtml-docs - Run sphinx-autobuild"
221 @echo
" COREBOOT_JENKINS_PORT=$(COREBOOT_JENKINS_PORT)"
222 @echo
" COREBOOT_JENKINS_CACHE_DIR=$(COREBOOT_JENKINS_CACHE_DIR)"
223 @echo
" COREBOOT_JENKINS_CONTAINER=$(COREBOOT_JENKINS_CONTAINER)"
224 @echo
" COREBOOT_IMAGE_TAG=$(COREBOOT_IMAGE_TAG)"
225 @echo
" DOCKER_COMMIT=$(DOCKER_COMMIT)"
227 .PHONY
: test-docker test-docker-login test-docker-cache-dir
228 .PHONY
: coreboot-jenkins-node upload-coreboot-jenkins-node coreboot-jenkins-test
229 .PHONY
: coreboot-sdk upload-coreboot-sdk
230 .PHONY
: doc.coreboot.org
231 .PHONY
: clean-coreboot-containers clean-coreboot-images docker-cleanall
232 .PHONY
: docker-abuild
233 .PHONY
: docker-shell docker-jenkins-shell
234 .PHONY
: docker-what-jenkins-does docker-jenkins-server docker-jenkins-attach
235 .PHONY
: docker-build-docs docker-livehtml-docs