summaryrefslogtreecommitdiffstats
path: root/EmulatorPkg/PlatformCI/ReadMe.md
diff options
context:
space:
mode:
authorSean Brogan <sean.brogan@microsoft.com>2020-04-19 01:06:33 -0700
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2020-04-28 18:07:59 +0000
commit951a03536c63e08daea6f39a9d47247f122ad8c4 (patch)
tree69d2c051a1f6a1ea701579fd4919b972b87b13f7 /EmulatorPkg/PlatformCI/ReadMe.md
parent0c7f189e60c16ce636bfc140da11533a96a42c44 (diff)
downloadedk2-951a03536c63e08daea6f39a9d47247f122ad8c4.tar.gz
edk2-951a03536c63e08daea6f39a9d47247f122ad8c4.tar.bz2
edk2-951a03536c63e08daea6f39a9d47247f122ad8c4.zip
EmulatorPkg: Add Platform CI and configuration for Core CI
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2570 Add new Azure Pipeline definitions to build and run EmulatorPkg with: * Ubuntu GCC5 * Windows VS2019 Add PyTool based build of EmulatorPkg Add EmulatorPkg.ci.yaml for Core CI Add ReadMe.md for details and instructions Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Andrew Fish <afish@apple.com> Cc: Ray Ni <ray.ni@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Shenglei Zhang <shenglei.zhang@intel.com> Reviewed-by: Bret Barkelew <bret.barkelew@microsoft.com> Reviewed-by: Liming Gao <liming.gao@intel.com> Acked-by: Ray Ni <ray.ni@intel.com>
Diffstat (limited to 'EmulatorPkg/PlatformCI/ReadMe.md')
-rw-r--r--EmulatorPkg/PlatformCI/ReadMe.md128
1 files changed, 128 insertions, 0 deletions
diff --git a/EmulatorPkg/PlatformCI/ReadMe.md b/EmulatorPkg/PlatformCI/ReadMe.md
new file mode 100644
index 0000000000..c51838ec1a
--- /dev/null
+++ b/EmulatorPkg/PlatformCI/ReadMe.md
@@ -0,0 +1,128 @@
+# EmulatorPkg - Platform CI
+
+This ReadMe.md describes the Azure DevOps based Platform CI for EmulatorPkg and how
+to use the same Pytools based build infrastructure locally.
+
+## Supported Configuration Details
+
+This solution for building and running EmulatorPkg has only been validated with Windows 10
+with VS2019 and Ubuntu 18.04 with GCC5 toolchain. Two different firmware builds are
+supported and are described below.
+
+| Configuration name | Architectures | DSC File |Additional Flags |
+| :---- | :----- | :---- | :---- |
+| IA32 | IA32 | EmulatorPkg.dsc | None |
+| X64 | X64 | EmulatorPkg.dsc | None |
+
+## EDK2 Developer environment
+
+- [Python 3.8.x - Download & Install](https://www.python.org/downloads/)
+- [GIT - Download & Install](https://git-scm.com/download/)
+- [Edk2 Source](https://github.com/tianocore/edk2)
+- For building Basetools and other host applications
+
+ ``` bash
+ sudo apt-get update
+ sudo apt-get install gcc g++ make uuid-dev
+ ```
+
+- For building ARCH IA32 on X64 Ubuntu 18.04 LTS these steps where needed.
+
+ ``` bash
+ sudo dpkg --add-architecture i386
+ sudo apt-get update
+ sudo apt-get install libc6-dev:i386 libx11-dev:i386 libxext-dev:i386 lib32gcc-7-dev
+ ```
+
+Note: edksetup, Submodule initialization and manual installation of NASM, iASL, or
+the required cross-compiler toolchains are **not** required, this is handled by the
+Pytools build system.
+
+## Building with Pytools for EmulatorPkg
+
+1. [Optional] Create a Python Virtual Environment - generally once per workspace
+
+ ``` bash
+ python -m venv <name of virtual environment>
+ ```
+
+2. [Optional] Activate Virtual Environment - each time new shell opened
+ - Linux
+
+ ```bash
+ source <name of virtual environment>/bin/activate
+ ```
+
+ - Windows
+
+ ``` bash
+ <name of virtual environment>/Scripts/activate.bat
+ ```
+
+3. Install Pytools - generally once per virtual env or whenever pip-requirements.txt changes
+
+ ``` bash
+ pip install --upgrade -r pip-requirements.txt
+ ```
+
+4. Initialize & Update Submodules - only when submodules updated
+
+ ``` bash
+ stuart_setup -c EmulatorPkg/PlatformCI/PlatformBuild.py TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG> -a <TARGET_ARCH>
+ ```
+
+5. Initialize & Update Dependencies - only as needed when ext_deps change
+
+ ``` bash
+ stuart_update -c EmulatorPkg/PlatformCI/PlatformBuild.py TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG> -a <TARGET_ARCH>
+ ```
+
+6. Compile the basetools if necessary - only when basetools C source files change
+
+ ``` bash
+ python BaseTools/Edk2ToolsBuild.py -t <ToolChainTag>
+ ```
+
+7. Compile Firmware
+
+ ``` bash
+ stuart_build -c EmulatorPkg/PlatformCI/PlatformBuild.py TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG> -a <TARGET_ARCH>
+ ```
+
+ - use `stuart_build -c EmulatorPkg/PlatformCI/PlatformBuild.py -h` option to see additional
+ options like `--clean`
+
+8. 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 to just run the emulator.
+
+ ``` bash
+ stuart_build -c EmulatorPkg/PlatformCI/PlatformBuild.py TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG> -a <TARGET_ARCH> --FlashOnly
+ ```
+
+### Notes
+
+1. Configuring *ACTIVE_PLATFORM* and *TARGET_ARCH* in Conf/target.txt is **not** required. This
+ environment is set by PlatformBuild.py based upon the `[-a <TARGET_ARCH>]` parameter.
+
+**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 the Emulator to the UEFI shell and then execute
+the contents of *startup.nsh*.
+
+### 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 IP6 Network Stack, the stuart_build command-line would be:
+
+`stuart_build -c EmulatorPkg/PlatformCI/PlatformBuild.py BLD_*_NETWORK_IP6_ENABLE=1`
+
+## References
+
+- [Installing and using Pytools](https://github.com/tianocore/edk2-pytool-extensions/blob/master/docs/using.md#installing)
+- More on [python virtual environments](https://docs.python.org/3/library/venv.html)