blob: e0a15ca7d76af385103709056e6b45f438079bb7 [file] [log] [blame]
ifeq ($(ROOTDIR),)
$(error $$ROOTDIR IS NOT DEFINED -- don\'t forget to source setup.sh)
endif
include $(ROOTDIR)/build/preamble.mk
ARM64_BUILDER_FETCH_TARBALL ?= true
DOCKER_FETCH_TARBALL ?= true
docker-build: $(ROOTDIR)/cache/aiy-board-builder.tar
ifeq ($(DOCKER_FETCH_TARBALL),true)
$(ROOTDIR)/cache/aiy-board-builder.tar: $(PREBUILT_DOCKER_ROOT)/aiy-board-builder.tar
mkdir -p $(ROOTDIR)/cache
cp $< $(ROOTDIR)/cache
else
$(ROOTDIR)/cache/aiy-board-builder.tar:
mkdir -p $(ROOTDIR)/cache
docker build -t aiy-board-builder $(ROOTDIR)/build
docker image save -o $@ aiy-board-builder:latest
docker rmi aiy-board-builder:latest
endif
docker-build-arm64: $(ROOTDIR)/cache/arm64-builder.tar
ifeq ($(ARM64_BUILDER_FETCH_TARBALL),true)
$(ROOTDIR)/cache/arm64-builder.tar: $(PREBUILT_DOCKER_ROOT)/arm64-builder.tar
mkdir -p $(ROOTDIR)/cache
cp $< $(ROOTDIR)/cache
else
$(ROOTDIR)/cache/arm64-builder.tar:
mkdir -p $(ROOTDIR)/cache
mkdir -p $(PRODUCT_OUT)/obj/ARM64_BUILDER
cp $(ROOTDIR)/build/Dockerfile.arm64 $(PRODUCT_OUT)/obj/ARM64_BUILDER/Dockerfile
cp $(shell which qemu-aarch64-static) $(PRODUCT_OUT)/obj/ARM64_BUILDER
docker build -t arm64-builder $(PRODUCT_OUT)/obj/ARM64_BUILDER
docker image save -o $@ arm64-builder:latest
docker rmi arm64-builder:latest
endif
# Runs any make TARGET in x86 docker image ('m docker-TARGET')
docker-%: docker-build;
docker load -i $(ROOTDIR)/cache/aiy-board-builder.tar
docker run --rm --privileged --tty \
-v /dev\:/dev \
-v $(ROOTDIR)\:/rootdir \
-v $(TARBALL_FETCH_ROOT_DIRECTORY)\:/tarballs \
-v $(PREBUILT_DOCKER_ROOT)\:/docker \
-v $(PREBUILT_MODULES_ROOT)\:/modules \
-v $(FETCH_PBUILDER_DIRECTORY)\:/pbuilder \
-v $(PACKAGES_FETCH_ROOT_DIRECTORY)\:/packages \
-w /rootdir \
-e "DEBOOTSTRAP_FETCH_TARBALL=$(DEBOOTSTRAP_FETCH_TARBALL)" \
-e "ROOTFS_FETCH_TARBALL=$(ROOTFS_FETCH_TARBALL)" \
-e "ARM64_BUILDER_FETCH_TARBALL=$(ARM64_BUILDER_FETCH_TARBALL)" \
-e "FETCH_PBUILDER_BASE=$(FETCH_PBUILDER_BASE)" \
-e "TARBALL_FETCH_ROOT_DIRECTORY=/tarballs" \
-e "PREBUILT_DOCKER_ROOT=/docker" \
-e "ROOTFS_REVISION=$(ROOTFS_REVISION)" \
-e "DEBOOTSTRAP_TARBALL_REVISION=$(DEBOOTSTRAP_TARBALL_REVISION)" \
-e "PREBUILT_MODULES_ROOT=/modules" \
-e "FETCH_PBUILDER_DIRECTORY=/pbuilder" \
-e "PACKAGES_FETCH_ROOT_DIRECTORY=/packages" \
-e "FETCH_PACKAGES=$(FETCH_PACKAGES)" \
-e "PACKAGES_REVISION=$(PACKAGES_REVISION)" \
aiy-board-builder \
/bin/bash -c \
'groupadd --gid $(shell id -g) $(shell id -g -n); \
useradd -m -e "" -s /bin/bash --gid $(shell id -g) --uid $(shell id -u) $(shell id -u -n); \
passwd -d $(shell id -u -n); \
echo "$(shell id -u -n) ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers; \
adduser $(shell id -u -n) docker; \
/etc/init.d/docker start; \
sudo -E -u $(shell id -u -n) /bin/bash -c "source build/setup.sh; m \
-j$(shell nproc) $*";'
# Macro for running make target in arm64 docker image
define docker-arm64-run
docker-arm64-$1: docker-build-arm64;
docker load -i $(ROOTDIR)/cache/arm64-builder.tar; \
docker run --rm --tty \
-v /dev\:/dev \
-v $(ROOTDIR)\:/build \
-v $(TARBALL_FETCH_ROOT_DIRECTORY)\:/tarballs \
-v $(PREBUILT_DOCKER_ROOT)\:/docker \
-v $(PREBUILT_MODULES_ROOT)\:/modules \
-w /build \
-e "DEBOOTSTRAP_FETCH_TARBALL=$(DEBOOTSTRAP_FETCH_TARBALL)" \
-e "ROOTFS_FETCH_TARBALL=$(ROOTFS_FETCH_TARBALL)" \
-e "ARM64_BUILDER_FETCH_TARBALL=$(ARM64_BUILDER_FETCH_TARBALL)" \
-e "TARBALL_FETCH_ROOT_DIRECTORY=/tarballs" \
-e "PREBUILT_DOCKER_ROOT=/docker" \
-e "ROOTFS_REVISION=$(ROOTFS_REVISION)" \
-e "DEBOOTSTRAP_TARBALL_REVISION=$(DEBOOTSTRAP_TARBALL_REVISION)" \
-e "PREBUILT_MODULES_ROOT=/modules" \
arm64-builder \
/bin/bash -c \
'groupadd --gid $$(shell id -g) $$(shell id -g -n); \
useradd -m -e "" -s /bin/bash --gid $$(shell id -g) --uid $$(shell id -u) $$(shell id -u -n); \
passwd -d $$(shell id -u -n); \
echo "$$(shell id -u -n) ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers; \
source build/setup.sh; m -j$(shell nproc) $2'
endef
# Test x86 docker ('m docker-test-docker')
test-docker:
@echo "Docker architecture: $(shell uname -a)"
@echo "Compiler version: $(shell gcc --version)"
@echo -e '#include <stdio.h>\nint main() {printf("\\nHello Docker gcc test\\n\\n");\n return 0;\n}' > hello.c
@make hello
@./hello
@rm -f hello.c hello
# Test arm64 docker 'm docker-arm64-test-docker'
$(call docker-arm64-run,test-docker,test-docker)
.DEFAULT_GOAL:=docker-all
.PHONY:: docker-build