## @file
# Azure Pipeline build file for building a platform.
#
# Platform: OVMF
# OS: Windows
# Toolchain: VS2019
#
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: BSD-2-Clause-Patent
##
trigger:
  - master
  - stable/*
pr:
  - master
  - stable/*

variables:
  - template: ../../../.azurepipelines/templates/defaults.yml

jobs:
  - job: Platform_CI
    variables:
      package: 'OvmfPkg'
      vm_image: 'windows-2019'
      should_run: true
      run_flags: "MAKE_STARTUP_NSH=TRUE QEMU_HEADLESS=TRUE QEMU_CPUHP_QUIRK=TRUE"

    #Use matrix to speed up the build process
    strategy:
        matrix:
          OVMF_IA32_DEBUG:
            Build.File: "$(package)/PlatformCI/PlatformBuild.py"
            Build.Arch: "IA32"
            Build.Flags: ""
            Build.Target: "DEBUG"
            Run.Flags: $(run_flags)
            Run: $(should_run)
          OVMF_IA32_RELEASE:
            Build.File: "$(package)/PlatformCI/PlatformBuild.py"
            Build.Arch: "IA32"
            Build.Flags: ""
            Build.Target: "RELEASE"
            Run.Flags: $(run_flags)
            Run: $(should_run)
          OVMF_IA32_NOOPT:
            Build.File: "$(package)/PlatformCI/PlatformBuild.py"
            Build.Arch: "IA32"
            Build.Flags: ""
            Build.Target: "NOOPT"
            Run.Flags: $(run_flags)
            Run: $(should_run)

          OVMF_X64_DEBUG:
            Build.File: "$(package)/PlatformCI/PlatformBuild.py"
            Build.Arch: "X64"
            Build.Flags: ""
            Build.Target: "DEBUG"
            Run.Flags: $(run_flags)
            Run: $(should_run)
          OVMF_X64_RELEASE:
            Build.File: "$(package)/PlatformCI/PlatformBuild.py"
            Build.Arch: "X64"
            Build.Flags: ""
            Build.Target: "RELEASE"
            Run.Flags: $(run_flags)
            Run: $(should_run)
          OVMF_X64_NOOPT:
            Build.File: "$(package)/PlatformCI/PlatformBuild.py"
            Build.Arch: "X64"
            Build.Flags: ""
            Build.Target: "NOOPT"
            Run.Flags: $(run_flags)
            Run: $(should_run)

          OVMF_IA32X64_DEBUG:
            Build.File: "$(package)/PlatformCI/PlatformBuild.py"
            Build.Arch: "IA32,X64"
            Build.Flags: ""
            Build.Target: "DEBUG"
            Run.Flags: $(run_flags)
            Run: $(should_run)
          OVMF_IA32X64_RELEASE:
            Build.File: "$(package)/PlatformCI/PlatformBuild.py"
            Build.Arch: "IA32,X64"
            Build.Flags: ""
            Build.Target: "RELEASE"
            Run.Flags: $(run_flags)
            Run: $(should_run)
          OVMF_IA32X64_NOOPT:
            Build.File: "$(package)/PlatformCI/PlatformBuild.py"
            Build.Arch: "IA32,X64"
            Build.Flags: ""
            Build.Target: "NOOPT"
            Run.Flags: $(run_flags)
            Run: $(should_run)

          OVMF_IA32X64_FULL_DEBUG:
            Build.File: "$(package)/PlatformCI/PlatformBuild.py"
            Build.Arch: "IA32,X64"
            Build.Flags: "BLD_*_SECURE_BOOT_ENABLE=1 BLD_*_SMM_REQUIRE=1 BLD_*_TPM2_ENABLE=1 BLD_*_NETWORK_TLS_ENABLE=1 BLD_*_NETWORK_IP6_ENABLE=1 BLD_*_NETWORK_HTTP_BOOT_ENABLE=1"
            Build.Target: "DEBUG"
            Run.Flags: $(run_flags)
            Run: $(should_run)
          OVMF_IA32X64_FULL_RELEASE:
            Build.File: "$(package)/PlatformCI/PlatformBuild.py"
            Build.Arch: "IA32,X64"
            Build.Flags: "BLD_*_SECURE_BOOT_ENABLE=1 BLD_*_SMM_REQUIRE=1 BLD_*_TPM2_ENABLE=1 BLD_*_NETWORK_TLS_ENABLE=1 BLD_*_NETWORK_IP6_ENABLE=1 BLD_*_NETWORK_HTTP_BOOT_ENABLE=1"
            Build.Target: "RELEASE"
            Run.Flags: $(run_flags)
            Run: $(should_run)

    # This currently creates a very large image which is too big for the FDF declared range
    #   Ovmf maintainers suggest to skip this build for now.
    #
    #       OVMF_IA32X64_FULL_NOOPT:
    #         Build.File: "$(package)/PlatformCI/PlatformBuild.py"
    #         Build.Arch: "IA32,X64"
    #         Build.Flags: "BLD_*_SECURE_BOOT_ENABLE=1 BLD_*_SMM_REQUIRE=1  BLD_*_TPM2_ENABLE=1 BLD_*_NETWORK_TLS_ENABLE=1 BLD_*_NETWORK_IP6_ENABLE=1 BLD_*_NETWORK_HTTP_BOOT_ENABLE=1"
    #         Build.Target: "NOOPT"
    #         Run.Flags: $(run_flags)
    #         Run: $(should_run)

    workspace:
      clean: all

    pool:
      vmImage: $(vm_image)

    steps:
    - template: ../../../.azurepipelines/templates/platform-build-run-steps.yml
      parameters:
        tool_chain_tag: VS2019
        build_pkg: $(package)
        build_target: $(Build.Target)
        build_arch: $(Build.Arch)
        build_file: $(Build.File)
        build_flags: $(Build.Flags)
        run_flags: $(Run.Flags)
        usePythonVersion: ${{ variables.default_python_version }}
        extra_install_step:
        - powershell: choco install qemu --version=2021.5.5; Write-Host "##vso[task.prependpath]c:\Program Files\qemu"
          displayName: Install QEMU and Set QEMU on path # friendly name displayed in the UI
          condition: and(gt(variables.pkg_count, 0), succeeded())