mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-02 22:43:17 +02:00
Add Manibuilder
Add a set of Dockerfiles for build testing. If you have an x86 machine and ~20GiB free disk space, run `make register` and `make -jxx` in util/manibuilder and go eat some pizza. The former runs a privileged docker container to set binfmt_misc up for qemu (read the code, don't trust it). Regarding the build targets, this is the original state of Manibuilder as it was used to build-test `flashrom-1.0`. Some fixes to the frame- work were applied, but fixups for the targets will be done in separate patches to maintain their original state for reference. Change-Id: I60863a5c7d70dde71486fccb66cb59b30ba4d982 Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/c/flashrom/+/23005 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
97
util/manibuilder/Makefile
Normal file
97
util/manibuilder/Makefile
Normal file
@ -0,0 +1,97 @@
|
||||
QUIET_TEST := @
|
||||
|
||||
include Makefile.targets
|
||||
|
||||
CC := ccache cc
|
||||
MAKECMD := make
|
||||
|
||||
spc :=
|
||||
spc := $(spc) $(spc)
|
||||
|
||||
stem = $(word 1,$(subst :,$(spc),$(subst \:,$(spc),$(1))))
|
||||
ident = $(subst :,_,$(subst \:,_,$(1)))
|
||||
|
||||
PKGSRC_MIRROR = http://cdn.netbsd.org/
|
||||
NETBSD_MIRROR = http://ftp.de.netbsd.org/
|
||||
|
||||
anita\:amd64-build: PKGSRC_PATH=pub/pkgsrc/packages/NetBSD/amd64/7.1/All
|
||||
anita\:amd64-build: NETBSD_IMAGE=pub/NetBSD/NetBSD-7.1/amd64/
|
||||
|
||||
anita\:i386-build: PKGSRC_PATH=pub/pkgsrc/packages/NetBSD/i386/7.1/All
|
||||
anita\:i386-build: NETBSD_IMAGE=pub/NetBSD/NetBSD-7.1/i386/
|
||||
|
||||
$(addsuffix -build,$(ANITA_TAGS)): %-build: Dockerfile.anita anita-wrapper.sh
|
||||
$(QUIET_SETUP)docker build . -f $< -t mani/$* \
|
||||
--build-arg PKG_PATH=$(PKGSRC_MIRROR)$(PKGSRC_PATH) \
|
||||
--build-arg INST_IMG=$(NETBSD_MIRROR)$(NETBSD_IMAGE)
|
||||
|
||||
define build_template
|
||||
Dockerfile.$(call ident,$(1)): Dockerfile.$(call stem,$(1)) mani-wrapper.sh
|
||||
$(QUIET_SETUP)sed -e 's|^FROM manibase|FROM $(2)/$(1)|' $$< >$$@
|
||||
|
||||
.INTERMEDIATE: Dockerfile.$(call ident,$(1))
|
||||
|
||||
$(1)-build: Dockerfile.$(call ident,$(1))
|
||||
$(QUIET_SETUP)docker build . -f $$< -t mani/$(1)
|
||||
endef
|
||||
|
||||
$(foreach tag,$(MULTIARCH_TAGS), \
|
||||
$(eval $(call build_template,$(tag),multiarch)))
|
||||
|
||||
djgpp\:6.1.0-build: %-build: Dockerfile.djgpp mani-wrapper.sh
|
||||
$(QUIET_SETUP)docker build . -f $< -t mani/$*
|
||||
|
||||
$(addsuffix -check-build,$(ALL_TAGS)): %-check-build:
|
||||
$(QUIET_SETUP)\
|
||||
[ $$(docker image ls -q mani/$*) ] \
|
||||
|| $(MAKE) $*-build $(if $(QUIET_SETUP),>/dev/null 2>/dev/null)
|
||||
|
||||
$(filter centos%,$(MULTIARCH_TAGS)) anita\:sparc: CC=cc
|
||||
djgpp\:6.1.0: CC=ccache i586-pc-msdosdjgpp-gcc
|
||||
djgpp\:6.1.0: STRIP=i586-pc-msdosdjgpp-strip
|
||||
djgpp\:6.1.0: LIBS_BASE=../
|
||||
djgpp\:6.1.0: TARGET=strip
|
||||
$(ANITA_TAGS): MAKECMD=gmake
|
||||
$(ALL_TAGS): export QUIET_SETUP=$(QUIET_TEST)
|
||||
$(ALL_TAGS): %: %-check-build
|
||||
$(QUIET_TEST)docker rm -f mani_$(call ident,$*) >/dev/null 2>&1 || true
|
||||
$(QUIET_TEST)\
|
||||
docker run \
|
||||
--env IDENT=$(call ident,$*) \
|
||||
--volume manicache:/home/mani/.ccache \
|
||||
--name mani_$(call ident,$*) mani/$* \
|
||||
"git fetch origin $${TEST_REVISION:-master} && \
|
||||
git checkout FETCH_HEAD && \
|
||||
$(MAKECMD) clean && $(MAKECMD) -j$${CPUS:-1} CC='$(CC)' \
|
||||
$(if $(STRIP),STRIP='$(STRIP)') \
|
||||
$(if $(LIBS_BASE),LIBS_BASE='$(LIBS_BASE)') \
|
||||
$(TARGET)" \
|
||||
$(if $(QUIET_TEST),>/dev/null 2>&1) || echo $*: $$?
|
||||
|
||||
$(addsuffix -shell,$(ALL_TAGS)): %-shell: %-check-build
|
||||
$(QUIET_SETUP)\
|
||||
if [ $$(docker ps -a -q -f name=mani_$(call ident,$*)) ]; then \
|
||||
docker commit mani_$(call ident,$*) mani_run/$* && \
|
||||
docker run --rm -it \
|
||||
--env IDENT=$(call ident,$*) \
|
||||
--volume manicache:/home/mani/.ccache \
|
||||
--entrypoint /bin/sh mani_run/$* \
|
||||
/home/mani/mani-wrapper.sh \
|
||||
$(patsubst %,"%",$(SHELL_ARG)); \
|
||||
docker image rm mani_run/$*; \
|
||||
else \
|
||||
docker run --rm -it \
|
||||
--env IDENT=$(call ident,$*) \
|
||||
--volume manicache:/home/mani/.ccache \
|
||||
mani/$* $(patsubst %,"%",$(SHELL_ARG)); \
|
||||
fi
|
||||
|
||||
.PHONY: $(foreach s,-build -check-build -shell, $(addsuffix $(s),$(ALL_TAGS)))
|
||||
|
||||
register:
|
||||
docker build . \
|
||||
-f Dockerfile.qemu-user-static \
|
||||
-t mani/qemu-user-static:register
|
||||
docker run --rm --privileged mani/qemu-user-static:register --reset
|
||||
|
||||
.PHONY: register
|
Reference in New Issue
Block a user