# Copyright (c) 2021 Valve Corporation
# Copyright (c) 2021 LunarG, Inc.

# 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.
#
# Author: Jeremy Kniager <jeremyk@lunarg.com>

name: CI Build

on:
    push:
    pull_request:
        branches:
            - master

jobs:
    linux:
        runs-on: ${{matrix.os}}

        strategy:
            matrix:
                cc: [ gcc, clang ]
                cxx: [ g++, clang++ ]
                config: [ Debug, Release ]
                os: [ ubuntu-18.04, ubuntu-20.04 ]
                cube_wsi: [ XCB, XLIB, WAYLAND, DISPLAY ]
                exclude:
                    - cc: gcc
                      cxx: clang++
                    - cc: clang
                      cxx: g++
                    - os: ubuntu-18.04
                      cube_wsi: WAYLAND

        steps:
            - uses: actions/checkout@v2
            - uses: actions/setup-python@v2
              with:
                python-version: '3.7'
            - run: |
                sudo apt-get -qq update
                sudo apt install libxkbcommon-dev libwayland-dev libmirclient-dev libxrandr-dev libx11-xcb-dev wayland-protocols

            - name: Fetch and install headers
              run: python scripts/update_deps.py --dir external

            - name: Generate build files
              run: cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=${{matrix.config}} -DCUBE_WSI_SELECTION=${{matrix.cube_wsi}} -Cexternal/helper.cmake
              env:
                CC: ${{matrix.cc}}
                CXX: ${{matrix.cxx}}

            - name: Build the tools
              run: make -C build

            - name: Verify generated source files
              run: python scripts/generate_source.py --verify external/Vulkan-Headers/registry

    windows:
        runs-on: ${{matrix.os}}

        strategy:
            matrix:
                arch: [ Win32, x64 ]
                config: [ Debug, Release ]
                os: [ windows-latest ]

        steps:
            - uses: actions/checkout@v2
            - uses: actions/setup-python@v2
              with:
                python-version: '3.7'

            - name: Fetch and install headers
              run: python scripts/update_deps.py --dir external

            - name: Generate build files
              run: cmake -S. -Bbuild -A${{matrix.arch}} "-Cexternal/helper.cmake"

            - name: Build the tools
              run: cmake --build ./build --config ${{matrix.config}}

            - name: Verify generated source files
              run: python scripts/generate_source.py --verify external/Vulkan-Headers/registry

    mac:
        runs-on: macos-latest

        strategy:
            matrix:
                config: [ Debug, Release ]

        steps:
            - uses: actions/checkout@v2
            - uses: actions/setup-python@v2
              with:
                python-version: '3.7'
            - name: Install Ninja
              run: brew install ninja
            - name: Cache dependencies
              id: cache-deps
              uses: actions/cache@v3
              env:
                cache-name: cache-macos-latest
              with:
                path: |
                  external/Vulkan-Headers/build/install
                  external/MoltenVK
                  external/Vulkan-Loader/build/install
                key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ matrix.config }}-${{ hashfiles('scripts/known_good.json') }}

            - name: Fetch/Update dependencies
              run: python scripts/update_deps.py --dir external --skip-existing-install

            - name: Generate build files
              run: cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=${{matrix.config}} -Cexternal/helper.cmake -G "Ninja"
              env:
                # Specify the minimum version of macOS on which the target binaries are to be deployed.
                # https://cmake.org/cmake/help/latest/envvar/MACOSX_DEPLOYMENT_TARGET.html
                MACOSX_DEPLOYMENT_TARGET: 10.12

            - name: Build the tools
              run: cmake --build build

            - name: Verify generated source files
              run: python scripts/generate_source.py --verify external/Vulkan-Headers/registry

    gn:
        runs-on: ubuntu-18.04

        strategy:
            matrix:
                config: [ Debug, Release ]

        steps:
            - uses: actions/checkout@v2

            - name: Get depot tools
              run: |
                git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git depot_tools
                echo "$GITHUB_WORKSPACE/depot_tools" >> $GITHUB_PATH
            - name: Fetch and install headers
              run: ./build-gn/update_deps.sh

            - name: Generate build files
              run: gn gen out/${{matrix.config}} --args="is_debug=true"
              if: matrix.config != 'Release'

            - name: Generate build files
              run: gn gen out/${{matrix.config}} --args="is_debug=false"
              if: matrix.config == 'Release'

            - name: Build the tools
              run: ninja -C out/${{matrix.config}}

    android:
        runs-on: ubuntu-20.04
        steps:
            - uses: actions/checkout@v2
            - name: Setup Environment
              run: |
                  echo "ANDROID_SDK_HOME=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
                  echo "ANDROID_NDK_HOME=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
                  echo "$ANDROID_SDK_ROOT/build-tools/31.0.0" >> $GITHUB_PATH
                  echo "$ANDROID_NDK_LATEST_HOME" >> $GITHUB_PATH
                  $ANDROID_SDK_ROOT/tools/bin/sdkmanager "platforms;android-23"
                  keytool -genkey -v -keystore $HOME/.android/debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "C=US, O=Android, CN=Android Debug"
            - name: Build vkcube
              run: |
                  cd build-android
                  ./build_all.sh
