# 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: [ stub ]
    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-gn:
    <<: *build-common-definitions
    build:
      context: ./docker/linux
      dockerfile: linux-x64x11/gn/Dockerfile
    image: cobalt-build-linux-gn
    depends_on: [ linux-x64x11 ]
    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: ${PLATFORM:-raspi-2}
      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 ]
