xref: /aosp_15_r20/external/libcxx/utils/docker/build_docker_image.sh (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
1*58b9f456SAndroid Build Coastguard Worker#!/bin/bash
2*58b9f456SAndroid Build Coastguard Worker#===- libcxx/utils/docker/build_docker_image.sh ----------------------------===//
3*58b9f456SAndroid Build Coastguard Worker#
4*58b9f456SAndroid Build Coastguard Worker#                     The LLVM Compiler Infrastructure
5*58b9f456SAndroid Build Coastguard Worker#
6*58b9f456SAndroid Build Coastguard Worker# This file is distributed under the University of Illinois Open Source
7*58b9f456SAndroid Build Coastguard Worker# License. See LICENSE.TXT for details.
8*58b9f456SAndroid Build Coastguard Worker#
9*58b9f456SAndroid Build Coastguard Worker#===----------------------------------------------------------------------===//
10*58b9f456SAndroid Build Coastguard Workerset -e
11*58b9f456SAndroid Build Coastguard Worker
12*58b9f456SAndroid Build Coastguard WorkerIMAGE_SOURCE=""
13*58b9f456SAndroid Build Coastguard WorkerDOCKER_REPOSITORY=""
14*58b9f456SAndroid Build Coastguard WorkerDOCKER_TAG=""
15*58b9f456SAndroid Build Coastguard Worker
16*58b9f456SAndroid Build Coastguard Workerfunction show_usage() {
17*58b9f456SAndroid Build Coastguard Worker  cat << EOF
18*58b9f456SAndroid Build Coastguard WorkerUsage: build_docker_image.sh [options] [-- [cmake_args]...]
19*58b9f456SAndroid Build Coastguard Worker
20*58b9f456SAndroid Build Coastguard WorkerAvailable options:
21*58b9f456SAndroid Build Coastguard Worker  General:
22*58b9f456SAndroid Build Coastguard Worker    -h|--help               show this help message
23*58b9f456SAndroid Build Coastguard Worker  Docker-specific:
24*58b9f456SAndroid Build Coastguard Worker    -s|--source             image source dir (i.e. debian8, nvidia-cuda, etc)
25*58b9f456SAndroid Build Coastguard Worker    -d|--docker-repository  docker repository for the image
26*58b9f456SAndroid Build Coastguard Worker    -t|--docker-tag         docker tag for the image
27*58b9f456SAndroid Build Coastguard Worker
28*58b9f456SAndroid Build Coastguard WorkerRequired options: --source and --docker-repository.
29*58b9f456SAndroid Build Coastguard Worker
30*58b9f456SAndroid Build Coastguard WorkerFor example, running:
31*58b9f456SAndroid Build Coastguard Worker$ build_docker_image.sh -s debian9 -d mydocker/debian9-clang -t latest
32*58b9f456SAndroid Build Coastguard Workerwill produce two docker images:
33*58b9f456SAndroid Build Coastguard Worker    mydocker/debian9-clang-build:latest - an intermediate image used to compile
34*58b9f456SAndroid Build Coastguard Worker      clang.
35*58b9f456SAndroid Build Coastguard Worker    mydocker/clang-debian9:latest       - a small image with preinstalled clang.
36*58b9f456SAndroid Build Coastguard WorkerPlease note that this example produces a not very useful installation, since it
37*58b9f456SAndroid Build Coastguard Workerdoesn't override CMake defaults, which produces a Debug and non-boostrapped
38*58b9f456SAndroid Build Coastguard Workerversion of clang.
39*58b9f456SAndroid Build Coastguard WorkerEOF
40*58b9f456SAndroid Build Coastguard Worker}
41*58b9f456SAndroid Build Coastguard Worker
42*58b9f456SAndroid Build Coastguard Workerwhile [[ $# -gt 0 ]]; do
43*58b9f456SAndroid Build Coastguard Worker  case "$1" in
44*58b9f456SAndroid Build Coastguard Worker    -h|--help)
45*58b9f456SAndroid Build Coastguard Worker      show_usage
46*58b9f456SAndroid Build Coastguard Worker      exit 0
47*58b9f456SAndroid Build Coastguard Worker      ;;
48*58b9f456SAndroid Build Coastguard Worker    -s|--source)
49*58b9f456SAndroid Build Coastguard Worker      shift
50*58b9f456SAndroid Build Coastguard Worker      IMAGE_SOURCE="$1"
51*58b9f456SAndroid Build Coastguard Worker      shift
52*58b9f456SAndroid Build Coastguard Worker      ;;
53*58b9f456SAndroid Build Coastguard Worker    -d|--docker-repository)
54*58b9f456SAndroid Build Coastguard Worker      shift
55*58b9f456SAndroid Build Coastguard Worker      DOCKER_REPOSITORY="$1"
56*58b9f456SAndroid Build Coastguard Worker      shift
57*58b9f456SAndroid Build Coastguard Worker      ;;
58*58b9f456SAndroid Build Coastguard Worker    -t|--docker-tag)
59*58b9f456SAndroid Build Coastguard Worker      shift
60*58b9f456SAndroid Build Coastguard Worker      DOCKER_TAG="$1"
61*58b9f456SAndroid Build Coastguard Worker      shift
62*58b9f456SAndroid Build Coastguard Worker      ;;
63*58b9f456SAndroid Build Coastguard Worker    *)
64*58b9f456SAndroid Build Coastguard Worker      echo "Unknown argument $1"
65*58b9f456SAndroid Build Coastguard Worker      exit 1
66*58b9f456SAndroid Build Coastguard Worker      ;;
67*58b9f456SAndroid Build Coastguard Worker  esac
68*58b9f456SAndroid Build Coastguard Workerdone
69*58b9f456SAndroid Build Coastguard Worker
70*58b9f456SAndroid Build Coastguard Worker
71*58b9f456SAndroid Build Coastguard Workercommand -v docker >/dev/null ||
72*58b9f456SAndroid Build Coastguard Worker  {
73*58b9f456SAndroid Build Coastguard Worker    echo "Docker binary cannot be found. Please install Docker to use this script."
74*58b9f456SAndroid Build Coastguard Worker    exit 1
75*58b9f456SAndroid Build Coastguard Worker  }
76*58b9f456SAndroid Build Coastguard Worker
77*58b9f456SAndroid Build Coastguard Workerif [ "$IMAGE_SOURCE" == "" ]; then
78*58b9f456SAndroid Build Coastguard Worker  echo "Required argument missing: --source"
79*58b9f456SAndroid Build Coastguard Worker  exit 1
80*58b9f456SAndroid Build Coastguard Workerfi
81*58b9f456SAndroid Build Coastguard Worker
82*58b9f456SAndroid Build Coastguard Workerif [ "$DOCKER_REPOSITORY" == "" ]; then
83*58b9f456SAndroid Build Coastguard Worker  echo "Required argument missing: --docker-repository"
84*58b9f456SAndroid Build Coastguard Worker  exit 1
85*58b9f456SAndroid Build Coastguard Workerfi
86*58b9f456SAndroid Build Coastguard Worker
87*58b9f456SAndroid Build Coastguard WorkerSOURCE_DIR=$(dirname $0)
88*58b9f456SAndroid Build Coastguard Workerif [ ! -d "$SOURCE_DIR/$IMAGE_SOURCE" ]; then
89*58b9f456SAndroid Build Coastguard Worker  echo "No sources for '$IMAGE_SOURCE' were found in $SOURCE_DIR"
90*58b9f456SAndroid Build Coastguard Worker  exit 1
91*58b9f456SAndroid Build Coastguard Workerfi
92*58b9f456SAndroid Build Coastguard Worker
93*58b9f456SAndroid Build Coastguard WorkerBUILD_DIR=$(mktemp -d)
94*58b9f456SAndroid Build Coastguard Workertrap "rm -rf $BUILD_DIR" EXIT
95*58b9f456SAndroid Build Coastguard Workerecho "Using a temporary directory for the build: $BUILD_DIR"
96*58b9f456SAndroid Build Coastguard Worker
97*58b9f456SAndroid Build Coastguard Workercp -r "$SOURCE_DIR/$IMAGE_SOURCE" "$BUILD_DIR/$IMAGE_SOURCE"
98*58b9f456SAndroid Build Coastguard Workercp -r "$SOURCE_DIR/scripts" "$BUILD_DIR/scripts"
99*58b9f456SAndroid Build Coastguard Worker
100*58b9f456SAndroid Build Coastguard Worker
101*58b9f456SAndroid Build Coastguard Workerif [ "$DOCKER_TAG" != "" ]; then
102*58b9f456SAndroid Build Coastguard Worker  DOCKER_TAG=":$DOCKER_TAG"
103*58b9f456SAndroid Build Coastguard Workerfi
104*58b9f456SAndroid Build Coastguard Worker
105*58b9f456SAndroid Build Coastguard Workerecho "Building ${DOCKER_REPOSITORY}${DOCKER_TAG} from $IMAGE_SOURCE"
106*58b9f456SAndroid Build Coastguard Workerdocker build -t "${DOCKER_REPOSITORY}${DOCKER_TAG}" \
107*58b9f456SAndroid Build Coastguard Worker  -f "$BUILD_DIR/$IMAGE_SOURCE/Dockerfile" \
108*58b9f456SAndroid Build Coastguard Worker  "$BUILD_DIR"
109*58b9f456SAndroid Build Coastguard Workerecho "Done"
110