blob: 1669e7afde9779c5b04857fd86676e97b9941f07 [file] [log] [blame]
# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
ifeq ($(ROOTDIR),)
$(error $$ROOTDIR IS NOT DEFINED -- don\'t forget to source setup.sh)
endif
include $(ROOTDIR)/build/preamble.mk
docker-build: $(ROOTDIR)/cache/aiy-board-builder.tar
ifneq ($(PREBUILT_DOCKER_ROOT),)
$(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: $(ROOTDIR)/build/Dockerfile $(ROOTDIR)/build/prereqs.mk
mkdir -p $(ROOTDIR)/cache/docker-build
cp -a $(ROOTDIR)/build $(ROOTDIR)/cache/docker-build
cp -a $(ROOTDIR)/board $(ROOTDIR)/cache/docker-build
cp -a $(ROOTDIR)/build/Dockerfile $(ROOTDIR)/cache/docker-build
docker build -t aiy-board-builder $(ROOTDIR)/cache/docker-build
docker image save -o $@ aiy-board-builder:latest
docker rmi aiy-board-builder:latest
rm -rf $(ROOTDIR)/cache/docker-build
endif
DOCKER_VOLUMES := \
-v /dev\:/dev \
-v $(ROOTDIR)\:/rootdir
DOCKER_ENV := \
-e "FETCH_PACKAGES=$(FETCH_PACKAGES)" \
-e "HEADLESS_BUILD=$(HEADLESS_BUILD)" \
-e "IS_EXTERNAL=$(IS_EXTERNAL)" \
-e "http_proxy=$(http_proxy)" \
-e "USERSPACE_ARCH=$(USERSPACE_ARCH)" \
-e "QEMU_ARCH=$(QEMU_ARCH)"
DOCKER_FLAGS := \
--rm --privileged --tty
ifneq ($(ROOTFS_RAW_CACHE_DIRECTORY),)
DOCKER_VOLUMES += -v $(ROOTFS_RAW_CACHE_DIRECTORY)\:/rootfs
DOCKER_ENV += -e "ROOTFS_RAW_CACHE_DIRECTORY=/rootfs"
endif
ifneq ($(FETCH_PBUILDER_DIRECTORY),)
DOCKER_VOLUMES += -v $(FETCH_PBUILDER_DIRECTORY)\:/pbuilder
DOCKER_ENV += -e "FETCH_PBUILDER_DIRECTORY=/pbuilder"
endif
INTERACTIVE:=$(shell [[ -t 0 ]] && echo true)
ifeq ($(INTERACTIVE),true)
DOCKER_FLAGS += -i
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 \
$(DOCKER_FLAGS) \
$(DOCKER_VOLUMES) \
$(DOCKER_ENV) \
-w /rootdir \
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; \
sudo cp /rootdir/build/99network-settings /etc/apt/apt.conf.d/; \
sudo chmod 644 /etc/apt/apt.conf.d/99network-settings; \
sudo -E -u $(shell id -u -n) /bin/bash -c "source build/setup.sh; m \
-j$$(nproc) $*";'
# 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
.DEFAULT_GOAL:=docker-all
.MAKEFLAGS += --no-builtin-rules
.SUFFIXES:
.PHONY:: docker-build