From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web12.4945.1586419509211976221 for ; Thu, 09 Apr 2020 01:05:09 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ard.biesheuvel@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id AED0C1FB; Thu, 9 Apr 2020 01:05:08 -0700 (PDT) Received: from [10.37.8.121] (unknown [10.37.8.121]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E7F153F68F; Thu, 9 Apr 2020 01:05:06 -0700 (PDT) Subject: Re: [PATCH v1 2/6] ArmVirtPkg: Add Platform CI and configuration for Core CI To: michael.kubacki@outlook.com, devel@edk2.groups.io Cc: Laszlo Ersek , Leif Lindholm References: <20200408181327.4324-1-michael.kubacki@outlook.com> From: "Ard Biesheuvel" Message-ID: <3dcff902-cd2a-2189-245d-84548b2c7da0@arm.com> Date: Thu, 9 Apr 2020 10:05:04 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit On 4/8/20 8:13 PM, michael.kubacki@outlook.com wrote: > From: Sean Brogan > > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2570 > > Add new Azure Pipeline definitions to build and run ArmVirtPkg with: > * Ubuntu GCC5 > Add PyTool based build of ArmVirtPkg > Add extdep for managing the iasl dependency > Add ArmVirtPkg.ci.yaml for Core CI > Add README-pytools for details and instructions > > Cc: Laszlo Ersek > Cc: Ard Biesheuvel > Cc: Leif Lindholm > Signed-off-by: Sean Brogan > --- > ArmVirtPkg/.azurepipelines/Ubuntu-GCC5.yml | 89 +++++++ > ArmVirtPkg/ArmVirtPkg.ci.yaml | 103 ++++++++ > ArmVirtPkg/PlatformBuild.py | 263 ++++++++++++++++++++ > ArmVirtPkg/README-pytools.md | 123 +++++++++ > ArmVirtPkg/iasl_ext_dep.yaml | 21 ++ > 5 files changed, 599 insertions(+) > Hello Michael, I agree with Laszlo's point here: it would be nice if we can keep these files organized a bit better, although I suppose there is already precent for keep .ci.yaml files at the package's root level, so that one should stay where it is. More comments below. ... > diff --git a/ArmVirtPkg/README-pytools.md b/ArmVirtPkg/README-pytools.md > new file mode 100644 > index 000000000000..ea70018e510a > --- /dev/null > +++ b/ArmVirtPkg/README-pytools.md > @@ -0,0 +1,123 @@ > +# ArmVirtPkg > + > +This README-pytools.md summarizes the current state of Platform CI for ArmVirtPkg. It also describes how to _build_ ArmVirtPkg using the Pytools build system. > + > +## Platform CI Current Status > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > +
ConfigBuild & RunNotes
DEBUGRELEASENOOPT
> + Ubuntu 18.04 GCC5 > +
AARCH64 > + > + > + > + > + > + > + > + > +
ARM > + > + > + > + > + > + > + > + > +
> + > +### Config Details > + > +| Config | Architectures |Additional Flags | > +| :---- | :----- | :---- | > +| AARCH64 | AARCH64 | None | > +| ARM | ARM | None | > + > +## Setup > + > +### The Usual EDK2 Build Setup > + > +- [Python 3.8.x - Download & Install](https://www.python.org/downloads/) > +- [GIT - Download & Install](https://git-scm.com/download/) > +- [GIT - Configure for EDK II](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems#github-help) > +- [QEMU - Download, Install, and add to your path](https://www.qemu.org/download/) > +- [EDKII Source - Download/Checkout from Github](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems#download) > + - **NOTE:** Do _not_ follow the EDK II Compile Tools and Build instructions, see below... > + > +### Differences from EDK Classic Build Setup > + > +- Build BaseTools using "`C:\git\edk2>python BaseTools\Edk2ToolsBuild.py [-t ]`" > + - This replaces "`edksetup Rebuild`" from the classic build system > + - For Windows `` examples, refer to [Windows ToolChain Matrix](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems-ToolChain-Matrix), defaults to `VS2017` if not specified > +- **No Action:** Submodule initialization and manual installation/setup of NASM and iASL is **not** required, it is handled by the PyTools build system > + > +### Building with Pytools for ArmVirtPkg > + > +- Install Pytools > + - `pip install --upgrade -r pip-requirements.txt` > +- Initialize & Update Submodules > + - `stuart_setup -c ArmVirt\PlatformBuild.py TOOL_CHAIN_TAG= -a ` Typo here ^^^ Also, could we standardize on forward slashes everywhere (as in the examples below)? > +- Initialize & Update Dependencies (e.g. iASL, NASM & GCC Arm/Aarch64 Compilers) > + - `stuart_update -c ArmVirtPkg\PlatformBuild.py TOOL_CHAIN_TAG= -a ` > +- Compile (AARCH64 supported / ARM support coming soon) > + - `stuart_build -c ArmVirtPkg\PlatformBuild.py TOOL_CHAIN_TAG= -a ` > +- Running Emulator > + - You can add `--FlashRom` to the end of your build command and the emulator will run after the build is complete. > + - or use the FlashOnly feature like `stuart_build -c ArmVirtPkg\PlatformBuild.py TOOL_CHAIN_TAG= -a --FlashOnly` to just run the emulator. > + > +### Notes > + > +1. Including the expected build architecture and toolchain to the _stuart_update_ command is critical. This is because there are extra scopes and tools that will be resolved during the update step that need to match your build step. > +2. Configuring _ACTIVE_PLATFORM_ and _TARGET_ARCH_ in Conf/target.txt is _not_ required. This environment is set by PlatformBuild.py based upon the "`[-a ]`" parameter. > +3. QEMU must be on your path. On Windows this is a manual process and not part of the QEMU installer. > + > +**NOTE:** Logging the execution output will be in the normal stuart log as well as to your console. > + > +## Custom Build Options > + > +**MAKE_STARTUP_NSH=TRUE** will output a _startup.nsh_ file to the location mapped as fs0. This is used in CI in combination with the --FlashOnly feature to run QEMU to the UEFI shell and then execute the contents of startup.nsh. > + > +**QEMU_HEADLESS=TRUE** Since CI servers run headless QEMU must be told to run with no display otherwise an error occurs. Locally you don't need to set this. > + > +## Passing Build Defines > + > +To pass build defines through _stuart_build_, prepend `BLD_*_`to the define name and pass it on the command-line. _stuart_build_ currently requires values to be assigned, so add an`=1` suffix for bare defines. > +For example, to enable the TPM2 support, instead of the traditional "-D TPM2_ENABLE=TRUE", the stuart_build command-line would be: > + > +`stuart_build -c ArmVirtPkg/PlatformBuild.py BLD_*_TPM2_ENABLE=TRUE` > + > +## References > + > +- [Installing Pytools](https://github.com/tianocore/edk2-pytool-extensions/blob/master/docs/using.md#installing) > +- For each workspace, consider creating & using a [Python Virtual Environment](https://docs.python.org/3/library/venv.html). For example > +- [stuart_build command-line parser](https://github.com/tianocore/edk2-pytool-extensions/blob/56f6a7aee09995c2f22da4765e8b0a29c1cbf5de/edk2toolext/edk2_invocable.py#L109) > diff --git a/ArmVirtPkg/iasl_ext_dep.yaml b/ArmVirtPkg/iasl_ext_dep.yaml > new file mode 100644 > index 000000000000..8869ed3ecef1 > --- /dev/null > +++ b/ArmVirtPkg/iasl_ext_dep.yaml > @@ -0,0 +1,21 @@ > +## @file > +# Download iasl executable tool from a nuget.org package > +# - package contains different binaries based on host > +# Add the folder with the tool to the path > +# > +# This is only downloaded for scope armvirt thus > +# should have no impact on the asl compiler used by any > +# other platform build > +# > +# Copyright (c) Microsoft Corporation. > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > +{ > + "id": "iasl-armvirt-1", > + "scope": "armvirt", > + "type": "nuget", > + "name": "iasl", > + "source": "https://api.nuget.org/v3/index.json", > + "version": "20190215.0.0", > + "flags": ["set_path", "host_specific"], > +} >