From aa801a466803c32e8bcaa7cb8b0fd1c16b1210cf Mon Sep 17 00:00:00 2001 From: kuqin12 <42554914+kuqin12@users.noreply.github.com> Date: Thu, 1 Jun 2023 21:38:42 -0700 Subject: [PATCH] Onboarding ARM64 builds on selfhosted Azure pipeline agents (#404) Please ensure you have read the [contribution docs](https://github.com/microsoft/mu/blob/master/CONTRIBUTING.md) prior to submitting the pull request. In particular, [pull request guidelines](https://github.com/microsoft/mu/blob/master/CONTRIBUTING.md#pull-request-best-practices). This change added a few new matrix entries to support building mu_tiano_platforms on native ARM64 systems. The PR will cover both https://github.com/microsoft/mu_basecore/issues/369 and https://github.com/microsoft/mu_basecore/issues/305. The PR should also be incorporated with mu_devops change. For each item, place an "x" in between `[` and `]` if true. Example: `[x]`. _(you can also check items in the GitHub UI)_ - [x] Impacts functionality? - **Functionality** - Does the change ultimately impact how firmware functions? - Examples: Add a new library, publish a new PPI, update an algorithm, ... - [ ] Impacts security? - **Security** - Does the change have a direct security impact on an application, flow, or firmware? - Examples: Crypto algorithm change, buffer overflow fix, parameter validation improvement, ... - [ ] Breaking change? - **Breaking change** - Will anyone consuming this change experience a break in build or boot behavior? - Examples: Add a new library class, move a module to a different repo, call a function in a new library class in a pre-existing module, ... - [ ] Includes tests? - **Tests** - Does the change include any explicit test code? - Examples: Unit tests, integration tests, robot tests, ... - [ ] Includes documentation? - **Documentation** - Does the change contain explicit documentation additions outside direct code modifications (and comments)? - Examples: Update readme file, add feature readme file, link to documentation on an a separate Web page, ... This was tested on selfhost-agents and existing agents. Pipeline changes, N/A for integration. --- .azurepipelines/Matrix-Build-Job-Clang.yml | 82 ---------------- .azurepipelines/Matrix-Build-Job.yml | 107 --------------------- .azurepipelines/Ubuntu-CLANGPDB.yml | 29 ------ .azurepipelines/Ubuntu-GCC5.yml | 101 +++++++++++++++---- .azurepipelines/Windows-CLANGPDB.yml | 30 ------ .azurepipelines/Windows-VS.yml | 94 +++++++++++++++--- 6 files changed, 163 insertions(+), 280 deletions(-) delete mode 100644 .azurepipelines/Matrix-Build-Job-Clang.yml delete mode 100644 .azurepipelines/Matrix-Build-Job.yml delete mode 100644 .azurepipelines/Ubuntu-CLANGPDB.yml delete mode 100644 .azurepipelines/Windows-CLANGPDB.yml diff --git a/.azurepipelines/Matrix-Build-Job-Clang.yml b/.azurepipelines/Matrix-Build-Job-Clang.yml deleted file mode 100644 index f04dc113900..00000000000 --- a/.azurepipelines/Matrix-Build-Job-Clang.yml +++ /dev/null @@ -1,82 +0,0 @@ -## @file -# Template file for generating a CLANGPDB build job matrix for the packages currently supported for -# build in Mu Basecore. -# -# Copyright (c) Microsoft Corporation. -# Copyright (c) 2020 - 2021, ARM Limited. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent -## - -parameters: -- name: arch_list - displayName: Architectures (e.g. IA32, X64) - type: string - default: '' -- name: extra_build_args - displayName: Extra Build Command Arguments - type: string - default: '' -- name: extra_install_step - displayName: Extra Install Steps - type: stepList - default: - - script: echo No extra steps provided -- name: tool_chain_tag - displayName: Tool Chain (e.g. VS2022) - type: string - default: '' -- name: vm_image - displayName: Virtual Machine Image (e.g. windows-latest) - type: string - default: 'windows-latest' - -jobs: - -- job: Build - timeoutInMinutes: 120 - # Use matrix to speed up the build process - strategy: - matrix: - TARGET_MDE_CPU: - Build.Pkgs: 'MdePkg,UefiCpuPkg' - Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' - TARGET_MDEMODULE_DEBUG: - Build.Pkgs: 'MdeModulePkg' - Build.Targets: 'DEBUG,NOOPT' - TARGET_MDEMODULE_RELEASE: - Build.Pkgs: 'MdeModulePkg' - Build.Targets: 'RELEASE,NO-TARGET' - TARGET_NETWORK: - Build.Pkgs: 'NetworkPkg' - Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' - TARGET_OTHER: - Build.Pkgs: 'PcAtChipsetPkg,ShellPkg,StandaloneMmPkg,BaseTools' - Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' - TARGET_TEST_POLICY: - Build.Pkgs: 'UnitTestFrameworkPkg,PolicyServicePkg' - Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' - TARGET_CRYPTO: - Build.Pkgs: 'CryptoPkg' - Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' - - workspace: - clean: all - - pool: - vmImage: ${{ parameters.vm_image }} - - steps: - - template: Steps/PrGate.yml@mu_devops - parameters: - artifacts_identifier: '$(Build.Pkgs) $(Build.Targets)' - build_archs: ${{ parameters.arch_list }} - build_pkgs: $(Build.Pkgs) - build_targets: $(Build.Targets) - do_ci_build: true - do_ci_setup: false - do_non_ci_build: false - do_non_ci_setup: true - do_pr_eval: true - extra_build_args: ${{ parameters.extra_build_args }} - extra_install_step: ${{ parameters.extra_install_step }} - tool_chain_tag: ${{ parameters.tool_chain_tag }} diff --git a/.azurepipelines/Matrix-Build-Job.yml b/.azurepipelines/Matrix-Build-Job.yml deleted file mode 100644 index ece4233094b..00000000000 --- a/.azurepipelines/Matrix-Build-Job.yml +++ /dev/null @@ -1,107 +0,0 @@ -## @file -# Template file for generating a build job matrix for the packages currently supported for -# build in Mu Basecore. -# -# Copyright (c) Microsoft Corporation. -# Copyright (c) 2020 - 2021, ARM Limited. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent -## - -parameters: -- name: arch_list - displayName: Architectures (e.g. IA32, X64) - type: string - default: '' -- name: extra_build_args - displayName: Extra Build Command Arguments - type: string - default: '' -- name: extra_install_step - displayName: Extra Install Steps - type: stepList - default: - - script: echo No extra steps provided -- name: tool_chain_tag - displayName: Tool Chain (e.g. VS2022) - type: string - default: '' -- name: vm_image - displayName: Virtual Machine Image (e.g. windows-latest) - type: string - default: 'windows-latest' -- name: container_image - displayName: Container Image - type: string - default: '' - -jobs: - -- job: Build - timeoutInMinutes: 120 - # Use matrix to speed up the build process - strategy: - matrix: - TARGET_MDE_CPU: - Build.Pkgs: 'MdePkg,UefiCpuPkg' - Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' - TARGET_MDEMODULE_DEBUG: - Build.Pkgs: 'MdeModulePkg' - Build.Targets: 'DEBUG,NOOPT' - TARGET_MDEMODULE_RELEASE: - Build.Pkgs: 'MdeModulePkg' - Build.Targets: 'RELEASE,NO-TARGET' - TARGET_NETWORK: - Build.Pkgs: 'NetworkPkg' - Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' - TARGET_OTHER: - Build.Pkgs: 'PcAtChipsetPkg,ShellPkg,StandaloneMmPkg,BaseTools' - Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' - TARGET_TEST_POLICY: - Build.Pkgs: 'UnitTestFrameworkPkg,PolicyServicePkg' - Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' - TARGET_CRYPTO_DEBUG: - Build.Pkgs: 'CryptoPkg' - Build.Targets: 'DEBUG,NOOPT' - TARGET_CRYPTO_RELEASE: - Build.Pkgs: 'CryptoPkg' - Build.Targets: 'RELEASE,NO-TARGET' - - workspace: - clean: all - - ${{ if ne(parameters.container_image, '') }}: - container: ${{ parameters.container_image }} - - pool: - vmImage: ${{ parameters.vm_image }} - - steps: - - ${{ if and(ne(parameters.container_image, ''), not(contains(parameters.vm_image, 'windows'))) }}: - - script: echo "##vso[task.prependpath]/home/vsts_azpcontainer/.local/bin" - displayName: Add User Local Bin to Path - - template: Steps/PrGate.yml@mu_devops - parameters: - artifacts_identifier: '$(Build.Pkgs) $(Build.Targets)' - build_archs: ${{ parameters.arch_list }} - build_pkgs: $(Build.Pkgs) - build_targets: $(Build.Targets) - do_ci_build: true - do_ci_setup: false - do_non_ci_build: false - do_non_ci_setup: true - do_pr_eval: true - extra_build_args: ${{ parameters.extra_build_args }} - extra_install_step: ${{ parameters.extra_install_step }} - tool_chain_tag: ${{ parameters.tool_chain_tag }} - install_tools: ${{ eq(parameters.container_image, '') }} - -- job: PublishCoverage - dependsOn: Build - workspace: - clean: all - - pool: - vmImage: 'windows-latest' - - steps: - - template: Steps/PublishCodeCoverage.yml@mu_devops diff --git a/.azurepipelines/Ubuntu-CLANGPDB.yml b/.azurepipelines/Ubuntu-CLANGPDB.yml deleted file mode 100644 index ab15cbe2921..00000000000 --- a/.azurepipelines/Ubuntu-CLANGPDB.yml +++ /dev/null @@ -1,29 +0,0 @@ -## @file -# Azure Pipeline build file for a build using Ubuntu and CLANGPDB. -# -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: BSD-2-Clause-Patent -## - -resources: - repositories: - - repository: mu_devops - type: github - endpoint: microsoft - name: microsoft/mu_devops - ref: main - -variables: -- group: architectures-x86-64 -- group: tool-chain-clangpdb -- group: tool-chain-clangpdb-windows-vm-image - -jobs: -- template: Matrix-Build-Job-Clang.yml - parameters: - arch_list: $(arch_list) - extra_steps: - - script: sudo apt-get install mingw-w64 - displayName: Install Windows Resource Compiler for Linux - tool_chain_tag: $(tool_chain_tag) - vm_image: $(vm_image) diff --git a/.azurepipelines/Ubuntu-GCC5.yml b/.azurepipelines/Ubuntu-GCC5.yml index dc8da5651d9..ddceb8ae0d5 100644 --- a/.azurepipelines/Ubuntu-GCC5.yml +++ b/.azurepipelines/Ubuntu-GCC5.yml @@ -1,31 +1,94 @@ ## @file # Azure Pipeline build file for a build using Ubuntu and GCC. # +# IMPORTANT: This file requires the local repo to contain a .azurepipelines/Matrix-Build-Job.yml file that +# performs the actual build steps for the configurations and packages supported by the repo. +# +# NOTE: This file is automatically synchronized from Mu DevOps. Update the original file there +# instead of the file in this repo. +# +# - Mu DevOps Repo: https://github.com/microsoft/mu_devops +# - File Sync Settings: https://github.com/microsoft/mu_devops/blob/main/.sync/Files.yml +# # Copyright (c) Microsoft Corporation. # SPDX-License-Identifier: BSD-2-Clause-Patent ## -resources: - repositories: - - repository: mu_devops - type: github - endpoint: microsoft - name: microsoft/mu_devops - ref: main - variables: - group: architectures-arm-64-x86-64 - group: tool-chain-ubuntu-gcc -jobs: -- template: Matrix-Build-Job.yml +extends: + template: MuDevOpsWrapper.yml parameters: - arch_list: $(arch_list) - extra_build_args: CODE_COVERAGE=TRUE CC_HTML=TRUE - extra_install_step: - - script: | - sudo apt-get install -y mingw-w64 lcov - pip install lcov_cobertura pycobertura - displayName: Install Windows Resource Compiler for Linux & Code Coverage Tools - tool_chain_tag: $(tool_chain_tag) - vm_image: $(vm_image) + do_ci_build: true + do_ci_setup: false + do_non_ci_build: false + do_non_ci_setup: true + do_pr_eval: true + container_build: true + os_type: Linux + build_matrix: + TARGET_MDE_CPU: + Pkgs: 'MdePkg,UefiCpuPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + TARGET_MDEMODULE_DEBUG: + Pkgs: 'MdeModulePkg' + Targets: 'DEBUG,NOOPT' + ArchList: $(arch_list) + TARGET_MDEMODULE_RELEASE: + Pkgs: 'MdeModulePkg' + Targets: 'RELEASE,NO-TARGET' + ArchList: $(arch_list) + TARGET_NETWORK: + Pkgs: 'NetworkPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + TARGET_OTHER: + Pkgs: 'PcAtChipsetPkg,ShellPkg,StandaloneMmPkg,BaseTools' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + TARGET_TEST_POLICY: + Pkgs: 'UnitTestFrameworkPkg,PolicyServicePkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + TARGET_CRYPTO: + Pkgs: 'CryptoPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + TARGET_MDE_CPU_ARM: + Pkgs: 'MdePkg,UefiCpuPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_MDEMODULE_DEBUG_ARM: + Pkgs: 'MdeModulePkg' + Targets: 'DEBUG,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_MDEMODULE_RELEASE_ARM: + Pkgs: 'MdeModulePkg' + Targets: 'RELEASE,NO-TARGET' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_NETWORK_ARM: + Pkgs: 'NetworkPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_OTHER_ARM: + Pkgs: 'PcAtChipsetPkg,ShellPkg,StandaloneMmPkg,BaseTools' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_TEST_POLICY_ARM: + Pkgs: 'UnitTestFrameworkPkg,PolicyServicePkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_CRYPTO_ARM: + Pkgs: 'CryptoPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true diff --git a/.azurepipelines/Windows-CLANGPDB.yml b/.azurepipelines/Windows-CLANGPDB.yml deleted file mode 100644 index 5e28310dc85..00000000000 --- a/.azurepipelines/Windows-CLANGPDB.yml +++ /dev/null @@ -1,30 +0,0 @@ -## @file -# Azure Pipeline build file for a build using Windows and CLANGPDB. -# -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: BSD-2-Clause-Patent -## - -resources: - repositories: - - repository: mu_devops - type: github - endpoint: microsoft - name: microsoft/mu_devops - ref: main - -variables: -- group: architectures-x86-64 -- group: tool-chain-clangpdb -- group: tool-chain-clangpdb-ubuntu-vm-image - -jobs: -- template: Matrix-Build-Job-Clang.yml - parameters: - arch_list: $(arch_list) - extra_install_step: - - powershell: choco install llvm - displayName: Install LLVM and CLANG - condition: and(gt(variables.pkg_count, 0), succeeded()) - tool_chain_tag: $(tool_chain_tag) - vm_image: $(vm_image) diff --git a/.azurepipelines/Windows-VS.yml b/.azurepipelines/Windows-VS.yml index 9fd87fd7285..07d0ceab192 100644 --- a/.azurepipelines/Windows-VS.yml +++ b/.azurepipelines/Windows-VS.yml @@ -1,25 +1,93 @@ ## @file # Azure Pipeline build file for a build using Windows and the latest Visual Studio toolchain supported. # +# IMPORTANT: This file requires the local repo to contain a .azurepipelines/Matrix-Build-Job.yml file that +# performs the actual build steps for the configurations and packages supported by the repo. +# +# NOTE: This file is automatically synchronized from Mu DevOps. Update the original file there +# instead of the file in this repo. +# +# - Mu DevOps Repo: https://github.com/microsoft/mu_devops +# - File Sync Settings: https://github.com/microsoft/mu_devops/blob/main/.sync/Files.yml +# # Copyright (c) Microsoft Corporation. # SPDX-License-Identifier: BSD-2-Clause-Patent ## -resources: - repositories: - - repository: mu_devops - type: github - endpoint: microsoft - name: microsoft/mu_devops - ref: main - variables: - group: architectures-x86-64 - group: tool-chain-windows-visual-studio-latest -jobs: -- template: Matrix-Build-Job.yml +extends: + template: MuDevOpsWrapper.yml parameters: - arch_list: $(arch_list) - tool_chain_tag: $(tool_chain_tag) - vm_image: $(vm_image) + do_ci_build: true + do_ci_setup: false + do_non_ci_build: false + do_non_ci_setup: true + do_pr_eval: true + os_type: Windows_NT + build_matrix: + TARGET_MDE_CPU: + Pkgs: 'MdePkg,UefiCpuPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + TARGET_MDEMODULE_DEBUG: + Pkgs: 'MdeModulePkg' + Targets: 'DEBUG,NOOPT' + ArchList: $(arch_list) + TARGET_MDEMODULE_RELEASE: + Pkgs: 'MdeModulePkg' + Targets: 'RELEASE,NO-TARGET' + ArchList: $(arch_list) + TARGET_NETWORK: + Pkgs: 'NetworkPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + TARGET_OTHER: + Pkgs: 'PcAtChipsetPkg,ShellPkg,StandaloneMmPkg,BaseTools' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + TARGET_TEST_POLICY: + Pkgs: 'UnitTestFrameworkPkg,PolicyServicePkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + TARGET_CRYPTO: + Pkgs: 'CryptoPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + TARGET_MDE_CPU_ARM: + Pkgs: 'MdePkg,UefiCpuPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_MDEMODULE_DEBUG_ARM: + Pkgs: 'MdeModulePkg' + Targets: 'DEBUG,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_MDEMODULE_RELEASE_ARM: + Pkgs: 'MdeModulePkg' + Targets: 'RELEASE,NO-TARGET' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_NETWORK_ARM: + Pkgs: 'NetworkPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_OTHER_ARM: + Pkgs: 'PcAtChipsetPkg,ShellPkg,StandaloneMmPkg,BaseTools' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_TEST_POLICY_ARM: + Pkgs: 'UnitTestFrameworkPkg,PolicyServicePkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true + TARGET_CRYPTO_ARM: + Pkgs: 'CryptoPkg' + Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT' + ArchList: $(arch_list) + SelfHostAgent: true