# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# 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
#
#     http://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.

version: '2.4'

volumes:
  android-debug-keystore:
  container-ccache:
  container-starboard-toolchains:

x-common-definitions: &common-definitions
  stdin_open: true
  tty: true

x-build-volumes: &build-volumes
  volumes:
    - ${COBALT_SRC:-.}:/code/
    - android-debug-keystore:/root/.android/
    - ${CCACHE_DIR:-container-ccache}:/root/ccache
    - ${STARBOARD_TOOLCHAINS_DIR:-container-starboard-toolchains}:/root/starboard-toolchains

x-build-common-definitions: &build-common-definitions
  <<: *common-definitions
  <<: *build-volumes
  depends_on:
    - build-base

x-shared-build-env: &shared-build-env
  NINJA_PARALLEL: ${NINJA_PARALLEL:-32}
  IS_CI: ${IS_CI:-0}

services:
  base:
    build:
      args:
        - BASE_OS
      context: ./docker/linux
      dockerfile: base/Dockerfile
    image: cobalt-base
    scale: 0

  base-xenial:
    build:
      args:
        - BASE_OS=ubuntu
        - BASE_OS_TAG=xenial
      context: ./docker/linux
      dockerfile: base/Dockerfile
    image: base-xenial
    scale: 0

  # Define common build container for Linux
  build-base:
    build:
      context: ./docker/linux
      dockerfile: base/build/Dockerfile
    image: cobalt-build-base
    depends_on:
      - base
    scale: 0

  build-base-xenial:
    build:
      context: ./docker/linux
      dockerfile: base/build/Dockerfile
      args:
        - FROM_IMAGE=base-xenial
    image: build-base-xenial
    depends_on:
      - base-xenial
    scale: 0

  stub:
    <<: *build-common-definitions
    build:
      context: ./docker/linux
      dockerfile: stub/Dockerfile
    image: cobalt-build-linux-stub
    depends_on: [ build-base ]
    environment:
      <<: *shared-build-env
      PLATFORM: stub
      CONFIG: ${CONFIG:-debug}

  stub-gn:
    <<: *build-common-definitions
    build:
      context: ./docker/linux
      dockerfile: stub/gn/Dockerfile
    image: cobalt-build-linux-stub-gn
    depends_on: [ build-base ]
    environment:
      <<: *shared-build-env
      PLATFORM: stub
      CONFIG: ${CONFIG:-debug}

  linux-x64x11:
    <<: *build-common-definitions
    build:
      context: ./docker/linux
      dockerfile: linux-x64x11/Dockerfile
    image: cobalt-build-linux
    depends_on: [ build-base ]
    environment:
      <<: *shared-build-env
      PLATFORM: linux-x64x11
      CONFIG: ${CONFIG:-debug}

  linux-x64x11-xenial:
    <<: *common-definitions
    <<: *build-volumes
    build:
      context: ./docker/linux
      dockerfile: linux-x64x11/Dockerfile
      args:
        - FROM_IMAGE=build-base-xenial
    image: linux-x64x11-xenial
    depends_on:
      - build-base-xenial
    scale: 0

  linux-x64x11-clang-3-6:
    <<: *common-definitions
    <<: *build-volumes
    build:
      context: ./docker/linux/
      dockerfile: clang-3-6/Dockerfile
    image: cobalt-build-linux-clang-3-6
    environment:
      <<: *shared-build-env
      PLATFORM: linux-x64x11-clang-3-6
      CONFIG: ${CONFIG:-debug}
    depends_on:
      - linux-x64x11-xenial

  linux-x64x11-clang-3-6-prebuilt:
    <<: *common-definitions
    <<: *build-volumes
    image: gcr.io/cobalt-tools/build-cobalt-linux-x64x11-clang-3-6:1.3
    environment:
      <<: *shared-build-env
      PLATFORM: linux-x64x11-clang-3-6
      CONFIG: ${CONFIG:-debug}
      USE_CCACHE: ${USE_CCACHE:-1}
      NINJA_STATUS: ${NINJA_STATUS}

  # Define common build container for Android
  build-android:
    <<: *build-common-definitions
    build:
      context: ./docker/linux/android
      dockerfile: ./Dockerfile
    image: cobalt-build-android
    scale: 0

  android-x86:
    <<: *build-common-definitions
    image: cobalt-build-android
    depends_on: [ build-android ]
    environment:
      <<: *shared-build-env
      IS_DOCKER: 1
      PLATFORM: android-x86
      CONFIG: ${CONFIG:-debug}

  android-arm:
    <<: *build-common-definitions
    image: cobalt-build-android
    depends_on: [ build-android ]
    environment:
      <<: *shared-build-env
      IS_DOCKER: 1
      PLATFORM: android-arm
      CONFIG: ${CONFIG:-debug}

  android-arm64:
    <<: *build-common-definitions
    image: cobalt-build-android
    depends_on: [ build-android ]
    environment:
      <<: *shared-build-env
      IS_DOCKER: 1
      PLATFORM: android-arm64
      CONFIG: ${CONFIG:-debug}

  raspi:
    <<: *build-common-definitions
    build:
      context: ./docker/linux/raspi
      dockerfile: ./Dockerfile
    image: cobalt-build-raspi
    environment:
      <<: *shared-build-env
      PLATFORM:
      CONFIG: ${CONFIG:-debug}

  # Define common build container for Evergreen
  build-evergreen:
    <<: *build-common-definitions
    build:
      context: ./docker/linux
      dockerfile: evergreen/Dockerfile
    image: cobalt-build-evergreen
    environment:
      <<: *shared-build-env

  evergreen-x64:
    <<: *build-common-definitions
    image: cobalt-build-evergreen
    depends_on: [ build-evergreen ]
    environment:
      <<: *shared-build-env
      PLATFORM: evergreen-x64

  evergreen-x64-sbversion-12:
    <<: *build-common-definitions
    image: cobalt-build-evergreen
    depends_on: [ build-evergreen ]
    environment:
      <<: *shared-build-env
      PLATFORM: evergreen-x64-sbversion-12

  evergreen-x86:
    <<: *build-common-definitions
    image: cobalt-build-evergreen
    depends_on: [ build-evergreen ]
    environment:
      <<: *shared-build-env
      PLATFORM: evergreen-x86

  evergreen-x86-sbversion-12:
    <<: *build-common-definitions
    image: cobalt-build-evergreen
    depends_on: [ build-evergreen ]
    environment:
      <<: *shared-build-env
      PLATFORM: evergreen-x86-sbversion-12

  evergreen-arm64:
    <<: *build-common-definitions
    image: cobalt-build-evergreen
    depends_on: [ build-evergreen ]
    environment:
      <<: *shared-build-env
      PLATFORM: evergreen-arm64

  evergreen-arm64-sbversion-12:
    <<: *build-common-definitions
    image: cobalt-build-evergreen
    depends_on: [ build-evergreen ]
    environment:
      <<: *shared-build-env
      PLATFORM: evergreen-arm64-sbversion-12

  evergreen-arm-hardfp:
    <<: *build-common-definitions
    image: cobalt-build-evergreen
    depends_on: [ build-evergreen ]
    environment:
      <<: *shared-build-env
      PLATFORM: evergreen-arm-hardfp

  evergreen-arm-hardfp-sbversion-12:
    <<: *build-common-definitions
    image: cobalt-build-evergreen
    depends_on: [ build-evergreen ]
    environment:
      <<: *shared-build-env
      PLATFORM: evergreen-arm-hardfp-sbversion-12

  evergreen-arm-softfp:
    <<: *build-common-definitions
    image: cobalt-build-evergreen
    depends_on: [ build-evergreen ]
    environment:
      <<: *shared-build-env
      PLATFORM: evergreen-arm-softfp

  evergreen-arm-softfp-sbversion-12:
    <<: *build-common-definitions
    image: cobalt-build-evergreen
    depends_on: [ build-evergreen ]
    environment:
      <<: *shared-build-env
      PLATFORM: evergreen-arm-softfp-sbversion-12

  unittest:
    <<: *common-definitions
    build:
      context: ./docker/linux
      dockerfile: unittest/Dockerfile
    image: cobalt-unittest
    environment:
      - PLATFORM=${PLATFORM:-linux-x64x11}
      - CONFIG=${CONFIG:-debug}
    volumes:
      - ${COBALT_SRC:-.}/out/${PLATFORM:-linux-x64x11}_${CONFIG:-debug}:/out
    # TODO: Get NPLB unittests to run with IPv6 without using the host network.
    network_mode: "host"
    depends_on: [ base ]
