[edk2-devel] [PATCH v2 edk2-platforms] Platform/ARM: Add build docs for Arm plats FVP and Juno

Jose Marinho posted 1 patch 1 year ago
Failed in applying to current master (apply log)
Platform/ARM/Readme.md | 329 +++++++++++++++++---
1 file changed, 292 insertions(+), 37 deletions(-)
[edk2-devel] [PATCH v2 edk2-platforms] Platform/ARM: Add build docs for Arm plats FVP and Juno
Posted by Jose Marinho 1 year ago
This patch updates the documentation for building Arm platforms.

Signed-off-by: Jose Marinho <jose.marinho@arm.com>

Cc: Sami Mujawar <sami.mujawar@arm.com>
Cc: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com>
---

Notes:
    v2:
     - Rebased with upstream edk2-platforms master   [Jose]

 Platform/ARM/Readme.md | 329 +++++++++++++++++---
 1 file changed, 292 insertions(+), 37 deletions(-)

diff --git a/Platform/ARM/Readme.md b/Platform/ARM/Readme.md
index ad2386c0dbb6d0e1ca7232c0cab7e2374dd4e255..8c48bd0d7bd55f076cf679ab7ca2b0b632aecd71 100644
--- a/Platform/ARM/Readme.md
+++ b/Platform/ARM/Readme.md
@@ -1,60 +1,315 @@
 # Introduction
 
 These instructions explain how to get an edk2/edk2-platforms build running
-on the ARM Base FVP, which is a software model provided by ARM (for free)
+on the Arm Base FVP and a Juno. The Arm Base FVP is a software model provided by ARM (for free)
 , which models a Cortex A core with various peripherals. More information
-can be found here:
-[https://developer.arm.com/products/system-design/fixed-virtual-platforms]
+can be found [here](https://developer.arm.com/products/system-design/fixed-virtual-platforms).
 
-##Requirements
-- A 32-bit or 64-bit Linux host machine.
+## Build environment setup on Linux or Windows
 
-# Build EDK2 TianoCore
+### Initial steps
 
-`build -a AARCH64 -p Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc -t GCC5`
+The first step towards building an EDKII firmware image is to create a working directory.
 
-Once built, the edk2 image is the following file Build/ArmVExpress-FVP-AArch64/DEBUG_GCC5/FV/FVP_AARCH64_EFI.fd
+1. Launch a terminal window.
+2. Create a directory on your development machine (we willl name it 'source' in this example).
+3. Set the WORKSPACE environment variable to point to this directory.
 
-# Run edk2/edk2-platforms on the ARM Base Platform FVP
+#### Example:
+In a Linux bash shell:
+```
+cd <Directory where you want to work>
+mkdir source
+cd source
+export WORKSPACE=$PWD
+```
 
-In order to run the binary we have just built there are a few steps we need to
-go through, we need to get a model, a set of prebuilts (where we will swap out
-the edk2 image with our own) and the tool with which we will swap out the
-prebuilt edk2 image.
+OR
 
-We will also rely on the "run_model" script that comes with the prebuilts, it
-is entirely possible to run the model without this but would require quite a bit
-of knowledge regarding the arguments of the ARM fastmodel (documentation can be found here:
-[https://developer.arm.com/docs/100966/1101/programming-reference-for-base-fvps/base-platform-revc-features])
-however the manual set of the FVP is outside the scope of this document. If you are interested
-please consult the documentation.
+In a Windows command prompt:
 
-It's recommended you create a folder where you download the prebuilts and
-required tool and copy your edk2 image in to it, as the run script expects
-the binaries in the same directory.
+```
+cd <Directory where you want to work>
+mkdir source
+cd source
+set WORKSPACE=%CD%
+```
 
-1. Download the Base FVP from here https://developer.arm.com/products/system-design/fixed-virtual-platforms
+### Cloning the source code repositories
 
-	- Select Armv8-A Base Platform FVP based on Fast Models 11.4
-	- It has a click through license but is free.
+Note: To clone the repositories you need 'git' to be installed on your development PC (see Development Tools).
 
-2. Download the 20.01 Linaro ARM Landing Team release for FVP booting UEFI
-https://releases.linaro.org/members/arm/platforms/20.01/fvp-uefi.zip
+In the terminal window, change directory to your workspace ('source') folder and run the following commands. Install Git if necessary.
 
-3. Clone the trusted firmware repo from https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
+```
+git clone https://github.com/tianocore/edk2.git
+git clone https://github.com/tianocore/edk2-platforms.git
+git clone https://github.com/acpica/acpica.git
+```
 
-4. Build fiptool: `make -C trusted-firmware-a/tools/fiptool`
+Then go to the edk2 folder and update the submodules.
 
-5. Update the fip.bin image from fvp-uefi.zip by running the following command:
+```
+cd edk2
+git submodule update --init
+cd ..
+```
 
-    `./trusted-firmware-a/tools/fiptool/fiptool update --nt-fw=[path to binary built above] fip.bin`
+# Building firmware on a Linux host
 
-6. Execute the FVP run_model.sh script from fvp-uefi.zip and provide a path to the FVP binaries
-downloaded in step 1):
+## Prerequisites
 
-	`MODEL=[path to FVP binary] ./run_model.sh`
+- A 64-bit development machine.
+- Ubuntu 20.04 desktop.
+- At least 10GB of free disk space.
 
-This expects the contents of fvp-uefi.zip, the bl1.bin and fip.bin (which is
-the file we modify), to be in the same directory as the run_model.sh script.
+Check the Ubuntu version by typing the following in the terminal window.
 
-This should be sufficient to provide a build/run/debug environment for aarch64.
+```
+$ uname -srvmpio
+Linux 5.4.0-131-generic #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
+```
+
+### Development Tools
+
+The following tools must be installed on the development PC.
+
+
+| Sr. No.   | Tool                | Description                                                  | Install instructions                                     |
+|-----------|---------------------|--------------------------------------------------------------|----------------------------------------------------------|
+| 1         | Python 3            | Python interpreter                                           | $ sudo apt install python3 python3-distutils             |
+| 2         | Git                 | Git source control tool                                      | $ sudo apt install git                                   |
+| 3         | uuid-dev            | Required for including uuid/uuid.h                           | $ sudo apt install uuid-dev                              |
+| 4         | build-essential     | Installs make, gcc, g++, etc                                 | $ sudo apt install build-essential <br> $ make -v <br> GNU Make 4.2.1 <br> gcc --version <br> gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 <br> $ g++ --version <br> g++ (Ubuntu 9.4.0-1ubuntu1\~20.04.1) 9.4.0 |
+| 5         | bison               | A parser generator required by acpica tools.                 | $ sudo apt install bison                                 |
+| 6         | flex                | A fast lexical analyzer generator required by acpica tools   | $ sudp apt get install flex                              |
+
+### Setting up the development tools
+
+Install the required development tools by running the following commands in the terminal window.
+
+```
+$ sudo apt install bison build-essential flex git uuid-dev
+ ```
+
+```
+$ sudo apt install python3 python3-distutils
+ ```
+
+### Arm cross compiler toolchain
+
+The Arm toolchain to cross compile from x86_64-linux to aarch64-elf is available [here](https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads).
+
+Select the latest toolchain to match the development PC architecture. Select the little-endian 'AArch64 ELF bare-metal target (aarch64-elf)' GCC cross compiler.
+
+Example: For a x86_64 development PC, download arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.xz
+
+Create a directory called 'toolchain' under the workspace folder. For example source\toolchain and extract the toolchain to this directory.
+
+```
+$ mkdir $WORKSPACE/toolchain
+$ cd $WORKSPACE/toolchain
+$ wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.xz
+$ tar xf arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.xz
+$ cd $WORKSPACE
+```
+
+### Build the acpica tools
+
+The acpica tools implement the latest iasl compiler. To build the acpica tools, run the following commands in the terminal window.
+
+```
+$ make -C $WORKSPACE/acpica
+```
+
+## Building EDKII firmware
+
+1. To build the firmware image, follow the steps below and run the commands in the terminal window.
+
+2. Set up the environment variables.
+
+```
+$ export GCC5_AARCH64_PREFIX=$WORKSPACE/toolchain/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf/bin/aarch64-none-elf-
+$ export PACKAGES_PATH=$WORKSPACE/edk2:$WORKSPACE/edk2-platforms
+$ export IASL_PREFIX=$WORKSPACE/acpica/generate/unix/bin/
+$ export PYTHON_COMMAND=/usr/bin/python3
+```
+
+3. Configure the EDKII development environment by running the edk2setup bash script.
+```
+$ source edk2/edksetup.sh
+```
+
+4. Build the BaseTools.
+```
+$ make -C edk2/BaseTools
+```
+
+### Build the firmware for Arm FVP Base AEMv8A-AEMv8A Model platform
+
+Run the following command to build the firmware for FVP Base AEMv8A-AEMv8A platform.
+```
+$ build -a AARCH64 -t GCC5 -p Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc -b < DEBUG | RELEASE >
+```
+
+The firmware binaries can be found at the following location:
+```
+$WORKSPACE/Build/ArmVExpress-FVP-AArch64/<DEBUG|RELEASE>_GCC5/FV/FVP_AARCH64_EFI.fd
+```
+
+### Build the firmware for Arm Juno platform
+
+Run the following command to build the firmware for Arm Juno platform.
+```
+$ build -a AARCH64 -t GCC5 -p Platform/ARM/JunoPkg/ArmJuno.dsc -b < DEBUG | RELEASE >
+```
+
+The firmware binaries can be found at the following location:
+```
+$WORKSPACE/Build/ArmJuno/<DEBUG|RELEASE>_GCC5/FV/BL33_AP_UEFI.fd
+```
+
+# Building firmware on a Windows host using Windows Subsystem for Linux (WSL)
+
+The instructions for building the firmware using WSL are similar to that for a Linux host.
+The prerequisites for setting up the Windows Subsystem for Linux environment are listed below.
+
+## Prerequisites
+
+- A x64 development machine with Windows 10 (Version 21H2 - OS Build 19044.2486).
+- At least 10GB of free disk space.
+- Install the Windows Subsystem for Linux. Select Ubuntu 20.04 LTS from the Microsoft Store.
+
+Check the Ubuntu version by typing the following on the console.
+```
+$ uname -srvmpio
+Linux 4.4.0-19041-Microsoft #2311-Microsoft Tue Nov 08 17:09:00 PST 2022 x86_64 x86_64 x86_64 GNU/Linux
+```
+
+The remaining instructions for installing the development tools, configuring the development environment and building firmware are exactly the same as those for a Linux host.
+
+# Building firmware on a x64 Windows host
+
+#### Prerequisites
+
+- A 64-bit development machine
+- Windows 10 desktop (Version 21H2 - OS Build 19044.2486)
+- At least 10GB of free disk space.
+
+#### Development Tools
+
+The following tools must be installed on the development machine.
+
+| Sr. No.   | Tool                                         | Description                                                  | Install instructions                                     |
+|-----------|----------------------------------------------|--------------------------------------------------------------|----------------------------------------------------------|
+| 1         | Python 3                                     | Python interpreter                                           | Go [here](https://www.python.org/downloads/windows/) <br> <br> Choose the latest Python 3.X release. <br> <br> Download and run the Windows x86_64 MSI installer <br> <br> If needed, add the python executable to your path by executing the following command: <br> > set PATH=<Path_to_the_python_executable>;%PATH%  |
+| 2         | Git                                          | Git source control tool                                      | Go [here](https://git-scm.com/download/win) <br> <br> Download and run the 64-bit Git for Windows Setup |
+| 3         | ASL tools                                    | iasl compiler and other tools for the ASL language           | Go [here](https://www.acpica.org/downloads/binary-tools)  <br> <br> Download the iASL Compiler and Windows ACPI Tools <br> <br> Extract the content and place it at C:\ASL\ <br> <br> Check that the compiler is at the right place by executing: <br> > C:\ASL\iasl.exe -v |
+| 4         | Microsoft Visual Studio 2019 Professional    | Microsoft IDE and compiler toolchain.                        | Go [here](https://visualstudio.microsoft.com/downloads/) <br> <br> Download and install Visual Studio 2019 Professional |
+| 5         | echo tool                                    | Echo                                                         | See Workaround for echo command below. |
+
+
+## Setting up the development tools
+
+Install the required development tools listed above by running the appropriate installer applications.
+
+### Arm cross compiler toolchain
+The Arm toolchain Windows (i686-mingw32) hosted cross compilers are available [here](https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads).
+
+Select the latest toolchain for 'AArch64 bare-metal target (aarch64-none-elf)' GCC cross compiler.
+
+Example: Download arm-gnu-toolchain-12.2.rel1-mingw-w64-i686-aarch64-none-elf
+
+Create a directory called 'toolchain' under the workspace directory and extract the toolchain to this directory using the downloaded installer.
+
+The toolchain folder tree should look as below:
+
+```
+toolchain
++---arm-gnu-toolchain-12.2.rel1-mingw-w64-i686-aarch64-none-elf
+|   +---aarch64-none-elf
+|   +---bin
+|   +---include
+|   +---lib
+|   +---libexec
+|   +---share
+```
+
+### Workaround for the echo command
+
+EDKII needs a workaround related to the echo command. A script replacing the Windows echo executable must be created, with the name "echo.BAT?:
+
+- Create a file named "echo.BAT" in the folder of your choice.
+- Paste the following lines inside the file:
+
+```
+rem %~f0  echo.BAT  %*
+rem This file exists to overcome a problem in the EDKII build where
+rem build_rule.template invokes a command as:
+rem     "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}
+rem When OBJCOPY is set to echo, this results in the following error:
+rem     "echo" objcopy not needed for m:\...\PCD\Dxe\Pcd\DEBUG\PcdDxe.dll
+rem And CMD.EXE fails to find the DOS echo command because of the quotes
+@echo %*
+@goto :EOF
+```
+
+- Add the file to your PATH by executing:
+```
+> set PATH=<Path_to_the_echo_file>;%PATH%
+```
+
+## Building EDKII firmware
+
+1. To build the firmware image, follow the steps below and run the commands in the terminal window.
+2. Set up the environment variables.
+
+```
+ set GCC5_AARCH64_PREFIX=%WORKSPACE%\toolchain\arm-gnu-toolchain-12.2.rel1-mingw-w64-i686-aarch64-none-elf\bin\aarch64-none-elf-
+ set PACKAGES_PATH=%WORKSPACE%\edk2;%WORKSPACE%\edk2-platforms
+ set EDK_TOOLS_PATH=%WORKSPACE%\edk2\BaseTools
+ set GCC_HOST_BIN=n
+```
+
+Select the python version you wish to use and set the PYTHON_COMMAND environment variable to your Python executable.
+
+Set the PYTHON_COMMAND to point to the Python3 executable.
+
+Check that your path is set up as it is stated in the development tools table above. It should give access to:
+
+- The make executable
+- The echo.BAT script
+
+3. Configure the EDKII development environment by running the edksetup.bat script.
+The Rebuild option can be skipped if the BaseTools have already been built.
+
+The ForceRebuild option can be used to do a clean build of the Base tools.
+```
+> call %WORKSPACE%\edk2\edksetup.bat [Rebuild | ForceRebuild]
+```
+
+### Build the firmware for Arm FVP Base AEMv8A-AEMv8A Model platform
+
+Run the following command to build the firmware for FVP Base AEMv8A-AEMv8A platform.
+
+```
+> build -a AARCH64 -t GCC5 -p Platform\ARM\VExpressPkg\ArmVExpress-FVP-AArch64.dsc -b < DEBUG | RELEASE >
+```
+
+The firmware binaries can be found at the following location:
+```
+%WORKSPACE%\Build\ArmVExpress-FVP-AArch64\<DEBUG|RELEASE>_GCC5\FV\FVP_AARCH64_EFI.fd
+```
+
+### Build the firmware for Arm Juno platform
+
+Run the following command to build the firmware for Arm Juno platform.
+
+```
+> build -a AARCH64 -t GCC5 -p Platform\ARM\JunoPkg\ArmJuno.dsc -b < DEBUG | RELEASE >
+```
+The firmware binaries are at the following location:
+
+```
+%WORKSPACE%\Build\ArmJuno\<DEBUG|RELEASE>_GCC5\FV\BL33_AP_UEFI.fd
+```
-- 
2.25.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#100863): https://edk2.groups.io/g/devel/message/100863
Mute This Topic: https://groups.io/mt/97470584/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [PATCH v2 edk2-platforms] Platform/ARM: Add build docs for Arm plats FVP and Juno
Posted by Sami Mujawar 11 months ago
Hi Jose,

Thank you for this patch.

I have some minor updates that I will do before merging. These include a 
note to indicate that the same FVP firmware binary can be used for both 
FVP Base AEMvA-AEMvA and FVP Base RevC models.

Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>

Regards,

Sami Mujawar

On 08/03/2023 11:59 am, Jose Marinho wrote:
> This patch updates the documentation for building Arm platforms.
>
> Signed-off-by: Jose Marinho <jose.marinho@arm.com>
>
> Cc: Sami Mujawar <sami.mujawar@arm.com>
> Cc: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com>
> ---
>
> Notes:
>      v2:
>       - Rebased with upstream edk2-platforms master   [Jose]
>
>   Platform/ARM/Readme.md | 329 +++++++++++++++++---
>   1 file changed, 292 insertions(+), 37 deletions(-)
>
> diff --git a/Platform/ARM/Readme.md b/Platform/ARM/Readme.md
> index ad2386c0dbb6d0e1ca7232c0cab7e2374dd4e255..8c48bd0d7bd55f076cf679ab7ca2b0b632aecd71 100644
> --- a/Platform/ARM/Readme.md
> +++ b/Platform/ARM/Readme.md
> @@ -1,60 +1,315 @@
>   # Introduction
>   
>   These instructions explain how to get an edk2/edk2-platforms build running
> -on the ARM Base FVP, which is a software model provided by ARM (for free)
> +on the Arm Base FVP and a Juno. The Arm Base FVP is a software model provided by ARM (for free)
>   , which models a Cortex A core with various peripherals. More information
> -can be found here:
> -[https://developer.arm.com/products/system-design/fixed-virtual-platforms]
> +can be found [here](https://developer.arm.com/products/system-design/fixed-virtual-platforms).
>   
> -##Requirements
> -- A 32-bit or 64-bit Linux host machine.
> +## Build environment setup on Linux or Windows
>   
> -# Build EDK2 TianoCore
> +### Initial steps
>   
> -`build -a AARCH64 -p Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc -t GCC5`
> +The first step towards building an EDKII firmware image is to create a working directory.
>   
> -Once built, the edk2 image is the following file Build/ArmVExpress-FVP-AArch64/DEBUG_GCC5/FV/FVP_AARCH64_EFI.fd
> +1. Launch a terminal window.
> +2. Create a directory on your development machine (we willl name it 'source' in this example).
> +3. Set the WORKSPACE environment variable to point to this directory.
>   
> -# Run edk2/edk2-platforms on the ARM Base Platform FVP
> +#### Example:
> +In a Linux bash shell:
> +```
> +cd <Directory where you want to work>
> +mkdir source
> +cd source
> +export WORKSPACE=$PWD
> +```
>   
> -In order to run the binary we have just built there are a few steps we need to
> -go through, we need to get a model, a set of prebuilts (where we will swap out
> -the edk2 image with our own) and the tool with which we will swap out the
> -prebuilt edk2 image.
> +OR
>   
> -We will also rely on the "run_model" script that comes with the prebuilts, it
> -is entirely possible to run the model without this but would require quite a bit
> -of knowledge regarding the arguments of the ARM fastmodel (documentation can be found here:
> -[https://developer.arm.com/docs/100966/1101/programming-reference-for-base-fvps/base-platform-revc-features])
> -however the manual set of the FVP is outside the scope of this document. If you are interested
> -please consult the documentation.
> +In a Windows command prompt:
>   
> -It's recommended you create a folder where you download the prebuilts and
> -required tool and copy your edk2 image in to it, as the run script expects
> -the binaries in the same directory.
> +```
> +cd <Directory where you want to work>
> +mkdir source
> +cd source
> +set WORKSPACE=%CD%
> +```
>   
> -1. Download the Base FVP from here https://developer.arm.com/products/system-design/fixed-virtual-platforms
> +### Cloning the source code repositories
>   
> -	- Select Armv8-A Base Platform FVP based on Fast Models 11.4
> -	- It has a click through license but is free.
> +Note: To clone the repositories you need 'git' to be installed on your development PC (see Development Tools).
>   
> -2. Download the 20.01 Linaro ARM Landing Team release for FVP booting UEFI
> -https://releases.linaro.org/members/arm/platforms/20.01/fvp-uefi.zip
> +In the terminal window, change directory to your workspace ('source') folder and run the following commands. Install Git if necessary.
>   
> -3. Clone the trusted firmware repo from https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
> +```
> +git clone https://github.com/tianocore/edk2.git
> +git clone https://github.com/tianocore/edk2-platforms.git
> +git clone https://github.com/acpica/acpica.git
> +```
>   
> -4. Build fiptool: `make -C trusted-firmware-a/tools/fiptool`
> +Then go to the edk2 folder and update the submodules.
>   
> -5. Update the fip.bin image from fvp-uefi.zip by running the following command:
> +```
> +cd edk2
> +git submodule update --init
> +cd ..
> +```
>   
> -    `./trusted-firmware-a/tools/fiptool/fiptool update --nt-fw=[path to binary built above] fip.bin`
> +# Building firmware on a Linux host
>   
> -6. Execute the FVP run_model.sh script from fvp-uefi.zip and provide a path to the FVP binaries
> -downloaded in step 1):
> +## Prerequisites
>   
> -	`MODEL=[path to FVP binary] ./run_model.sh`
> +- A 64-bit development machine.
> +- Ubuntu 20.04 desktop.
> +- At least 10GB of free disk space.
>   
> -This expects the contents of fvp-uefi.zip, the bl1.bin and fip.bin (which is
> -the file we modify), to be in the same directory as the run_model.sh script.
> +Check the Ubuntu version by typing the following in the terminal window.
>   
> -This should be sufficient to provide a build/run/debug environment for aarch64.
> +```
> +$ uname -srvmpio
> +Linux 5.4.0-131-generic #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
> +```
> +
> +### Development Tools
> +
> +The following tools must be installed on the development PC.
> +
> +
> +| Sr. No.   | Tool                | Description                                                  | Install instructions                                     |
> +|-----------|---------------------|--------------------------------------------------------------|----------------------------------------------------------|
> +| 1         | Python 3            | Python interpreter                                           | $ sudo apt install python3 python3-distutils             |
> +| 2         | Git                 | Git source control tool                                      | $ sudo apt install git                                   |
> +| 3         | uuid-dev            | Required for including uuid/uuid.h                           | $ sudo apt install uuid-dev                              |
> +| 4         | build-essential     | Installs make, gcc, g++, etc                                 | $ sudo apt install build-essential <br> $ make -v <br> GNU Make 4.2.1 <br> gcc --version <br> gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 <br> $ g++ --version <br> g++ (Ubuntu 9.4.0-1ubuntu1\~20.04.1) 9.4.0 |
> +| 5         | bison               | A parser generator required by acpica tools.                 | $ sudo apt install bison                                 |
> +| 6         | flex                | A fast lexical analyzer generator required by acpica tools   | $ sudp apt get install flex                              |
> +
> +### Setting up the development tools
> +
> +Install the required development tools by running the following commands in the terminal window.
> +
> +```
> +$ sudo apt install bison build-essential flex git uuid-dev
> + ```
> +
> +```
> +$ sudo apt install python3 python3-distutils
> + ```
> +
> +### Arm cross compiler toolchain
> +
> +The Arm toolchain to cross compile from x86_64-linux to aarch64-elf is available [here](https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads).
> +
> +Select the latest toolchain to match the development PC architecture. Select the little-endian 'AArch64 ELF bare-metal target (aarch64-elf)' GCC cross compiler.
> +
> +Example: For a x86_64 development PC, download arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.xz
> +
> +Create a directory called 'toolchain' under the workspace folder. For example source\toolchain and extract the toolchain to this directory.
> +
> +```
> +$ mkdir $WORKSPACE/toolchain
> +$ cd $WORKSPACE/toolchain
> +$ wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.xz
> +$ tar xf arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.xz
> +$ cd $WORKSPACE
> +```
> +
> +### Build the acpica tools
> +
> +The acpica tools implement the latest iasl compiler. To build the acpica tools, run the following commands in the terminal window.
> +
> +```
> +$ make -C $WORKSPACE/acpica
> +```
> +
> +## Building EDKII firmware
> +
> +1. To build the firmware image, follow the steps below and run the commands in the terminal window.
> +
> +2. Set up the environment variables.
> +
> +```
> +$ export GCC5_AARCH64_PREFIX=$WORKSPACE/toolchain/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf/bin/aarch64-none-elf-
> +$ export PACKAGES_PATH=$WORKSPACE/edk2:$WORKSPACE/edk2-platforms
> +$ export IASL_PREFIX=$WORKSPACE/acpica/generate/unix/bin/
> +$ export PYTHON_COMMAND=/usr/bin/python3
> +```
> +
> +3. Configure the EDKII development environment by running the edk2setup bash script.
> +```
> +$ source edk2/edksetup.sh
> +```
> +
> +4. Build the BaseTools.
> +```
> +$ make -C edk2/BaseTools
> +```
> +
> +### Build the firmware for Arm FVP Base AEMv8A-AEMv8A Model platform
> +
> +Run the following command to build the firmware for FVP Base AEMv8A-AEMv8A platform.
> +```
> +$ build -a AARCH64 -t GCC5 -p Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc -b < DEBUG | RELEASE >
> +```
> +
> +The firmware binaries can be found at the following location:
> +```
> +$WORKSPACE/Build/ArmVExpress-FVP-AArch64/<DEBUG|RELEASE>_GCC5/FV/FVP_AARCH64_EFI.fd
> +```
> +
> +### Build the firmware for Arm Juno platform
> +
> +Run the following command to build the firmware for Arm Juno platform.
> +```
> +$ build -a AARCH64 -t GCC5 -p Platform/ARM/JunoPkg/ArmJuno.dsc -b < DEBUG | RELEASE >
> +```
> +
> +The firmware binaries can be found at the following location:
> +```
> +$WORKSPACE/Build/ArmJuno/<DEBUG|RELEASE>_GCC5/FV/BL33_AP_UEFI.fd
> +```
> +
> +# Building firmware on a Windows host using Windows Subsystem for Linux (WSL)
> +
> +The instructions for building the firmware using WSL are similar to that for a Linux host.
> +The prerequisites for setting up the Windows Subsystem for Linux environment are listed below.
> +
> +## Prerequisites
> +
> +- A x64 development machine with Windows 10 (Version 21H2 - OS Build 19044.2486).
> +- At least 10GB of free disk space.
> +- Install the Windows Subsystem for Linux. Select Ubuntu 20.04 LTS from the Microsoft Store.
> +
> +Check the Ubuntu version by typing the following on the console.
> +```
> +$ uname -srvmpio
> +Linux 4.4.0-19041-Microsoft #2311-Microsoft Tue Nov 08 17:09:00 PST 2022 x86_64 x86_64 x86_64 GNU/Linux
> +```
> +
> +The remaining instructions for installing the development tools, configuring the development environment and building firmware are exactly the same as those for a Linux host.
> +
> +# Building firmware on a x64 Windows host
> +
> +#### Prerequisites
> +
> +- A 64-bit development machine
> +- Windows 10 desktop (Version 21H2 - OS Build 19044.2486)
> +- At least 10GB of free disk space.
> +
> +#### Development Tools
> +
> +The following tools must be installed on the development machine.
> +
> +| Sr. No.   | Tool                                         | Description                                                  | Install instructions                                     |
> +|-----------|----------------------------------------------|--------------------------------------------------------------|----------------------------------------------------------|
> +| 1         | Python 3                                     | Python interpreter                                           | Go [here](https://www.python.org/downloads/windows/) <br> <br> Choose the latest Python 3.X release. <br> <br> Download and run the Windows x86_64 MSI installer <br> <br> If needed, add the python executable to your path by executing the following command: <br> > set PATH=<Path_to_the_python_executable>;%PATH%  |
> +| 2         | Git                                          | Git source control tool                                      | Go [here](https://git-scm.com/download/win) <br> <br> Download and run the 64-bit Git for Windows Setup |
> +| 3         | ASL tools                                    | iasl compiler and other tools for the ASL language           | Go [here](https://www.acpica.org/downloads/binary-tools)  <br> <br> Download the iASL Compiler and Windows ACPI Tools <br> <br> Extract the content and place it at C:\ASL\ <br> <br> Check that the compiler is at the right place by executing: <br> > C:\ASL\iasl.exe -v |
> +| 4         | Microsoft Visual Studio 2019 Professional    | Microsoft IDE and compiler toolchain.                        | Go [here](https://visualstudio.microsoft.com/downloads/) <br> <br> Download and install Visual Studio 2019 Professional |
> +| 5         | echo tool                                    | Echo                                                         | See Workaround for echo command below. |
> +
> +
> +## Setting up the development tools
> +
> +Install the required development tools listed above by running the appropriate installer applications.
> +
> +### Arm cross compiler toolchain
> +The Arm toolchain Windows (i686-mingw32) hosted cross compilers are available [here](https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads).
> +
> +Select the latest toolchain for 'AArch64 bare-metal target (aarch64-none-elf)' GCC cross compiler.
> +
> +Example: Download arm-gnu-toolchain-12.2.rel1-mingw-w64-i686-aarch64-none-elf
> +
> +Create a directory called 'toolchain' under the workspace directory and extract the toolchain to this directory using the downloaded installer.
> +
> +The toolchain folder tree should look as below:
> +
> +```
> +toolchain
> ++---arm-gnu-toolchain-12.2.rel1-mingw-w64-i686-aarch64-none-elf
> +|   +---aarch64-none-elf
> +|   +---bin
> +|   +---include
> +|   +---lib
> +|   +---libexec
> +|   +---share
> +```
> +
> +### Workaround for the echo command
> +
> +EDKII needs a workaround related to the echo command. A script replacing the Windows echo executable must be created, with the name "echo.BAT?:
> +
> +- Create a file named "echo.BAT" in the folder of your choice.
> +- Paste the following lines inside the file:
> +
> +```
> +rem %~f0  echo.BAT  %*
> +rem This file exists to overcome a problem in the EDKII build where
> +rem build_rule.template invokes a command as:
> +rem     "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}
> +rem When OBJCOPY is set to echo, this results in the following error:
> +rem     "echo" objcopy not needed for m:\...\PCD\Dxe\Pcd\DEBUG\PcdDxe.dll
> +rem And CMD.EXE fails to find the DOS echo command because of the quotes
> +@echo %*
> +@goto :EOF
> +```
> +
> +- Add the file to your PATH by executing:
> +```
> +> set PATH=<Path_to_the_echo_file>;%PATH%
> +```
> +
> +## Building EDKII firmware
> +
> +1. To build the firmware image, follow the steps below and run the commands in the terminal window.
> +2. Set up the environment variables.
> +
> +```
> + set GCC5_AARCH64_PREFIX=%WORKSPACE%\toolchain\arm-gnu-toolchain-12.2.rel1-mingw-w64-i686-aarch64-none-elf\bin\aarch64-none-elf-
> + set PACKAGES_PATH=%WORKSPACE%\edk2;%WORKSPACE%\edk2-platforms
> + set EDK_TOOLS_PATH=%WORKSPACE%\edk2\BaseTools
> + set GCC_HOST_BIN=n
> +```
> +
> +Select the python version you wish to use and set the PYTHON_COMMAND environment variable to your Python executable.
> +
> +Set the PYTHON_COMMAND to point to the Python3 executable.
> +
> +Check that your path is set up as it is stated in the development tools table above. It should give access to:
> +
> +- The make executable
> +- The echo.BAT script
> +
> +3. Configure the EDKII development environment by running the edksetup.bat script.
> +The Rebuild option can be skipped if the BaseTools have already been built.
> +
> +The ForceRebuild option can be used to do a clean build of the Base tools.
> +```
> +> call %WORKSPACE%\edk2\edksetup.bat [Rebuild | ForceRebuild]
> +```
> +
> +### Build the firmware for Arm FVP Base AEMv8A-AEMv8A Model platform
> +
> +Run the following command to build the firmware for FVP Base AEMv8A-AEMv8A platform.
> +
> +```
> +> build -a AARCH64 -t GCC5 -p Platform\ARM\VExpressPkg\ArmVExpress-FVP-AArch64.dsc -b < DEBUG | RELEASE >
> +```
> +
> +The firmware binaries can be found at the following location:
> +```
> +%WORKSPACE%\Build\ArmVExpress-FVP-AArch64\<DEBUG|RELEASE>_GCC5\FV\FVP_AARCH64_EFI.fd
> +```
> +
> +### Build the firmware for Arm Juno platform
> +
> +Run the following command to build the firmware for Arm Juno platform.
> +
> +```
> +> build -a AARCH64 -t GCC5 -p Platform\ARM\JunoPkg\ArmJuno.dsc -b < DEBUG | RELEASE >
> +```
> +The firmware binaries are at the following location:
> +
> +```
> +%WORKSPACE%\Build\ArmJuno\<DEBUG|RELEASE>_GCC5\FV\BL33_AP_UEFI.fd
> +```


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#103710): https://edk2.groups.io/g/devel/message/103710
Mute This Topic: https://groups.io/mt/97470584/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [PATCH v2 edk2-platforms] Platform/ARM: Add build docs for Arm plats FVP and Juno
Posted by Sami Mujawar 11 months ago
Merged as  0ed7b18b92e4..24d22fe163c4
Thanks.

Regards,
Sami Mujawar


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#103711): https://edk2.groups.io/g/devel/message/103711
Mute This Topic: https://groups.io/mt/97470584/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH v2 edk2-platforms] Platform/ARM: Add build docs for Arm plats FVP and Juno
Posted by Jose Marinho 1 year ago
The GitHub branch with the patch can be seen at https://github.com/jmarinho/edk2-platforms/tree/arm_platform_docs_v2

> -----Original Message-----
> From: Jose Marinho <jose.marinho@arm.com>
> Sent: 08 March 2023 11:59
> To: devel@edk2.groups.io
> Cc: Jose Marinho <Jose.Marinho@arm.com>; nd <nd@arm.com>;
> ardb+tianocore@kernel.org; Thomas Abraham <thomas.abraham@arm.com>;
> Sami Mujawar <Sami.Mujawar@arm.com>; Samer El-Haj-Mahmoud <Samer.El-
> Haj-Mahmoud@arm.com>
> Subject: [PATCH v2 edk2-platforms] Platform/ARM: Add build docs for Arm
> plats FVP and Juno
> 
> This patch updates the documentation for building Arm platforms.
> 
> Signed-off-by: Jose Marinho <jose.marinho@arm.com>
> 
> Cc: Sami Mujawar <sami.mujawar@arm.com>
> Cc: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com>
> ---
> 
> Notes:
>     v2:
>      - Rebased with upstream edk2-platforms master   [Jose]
> 
>  Platform/ARM/Readme.md | 329 +++++++++++++++++---
>  1 file changed, 292 insertions(+), 37 deletions(-)
> 
> diff --git a/Platform/ARM/Readme.md b/Platform/ARM/Readme.md index
> ad2386c0dbb6d0e1ca7232c0cab7e2374dd4e255..8c48bd0d7bd55f076cf679ab
> 7ca2b0b632aecd71 100644
> --- a/Platform/ARM/Readme.md
> +++ b/Platform/ARM/Readme.md
> @@ -1,60 +1,315 @@
>  # Introduction
> 
>  These instructions explain how to get an edk2/edk2-platforms build running -
> on the ARM Base FVP, which is a software model provided by ARM (for free)
> +on the Arm Base FVP and a Juno. The Arm Base FVP is a software model
> +provided by ARM (for free)
>  , which models a Cortex A core with various peripherals. More information -
> can be found here:
> -[https://developer.arm.com/products/system-design/fixed-virtual-platforms]
> +can be found [here](https://developer.arm.com/products/system-
> design/fixed-virtual-platforms).
> 
> -##Requirements
> -- A 32-bit or 64-bit Linux host machine.
> +## Build environment setup on Linux or Windows
> 
> -# Build EDK2 TianoCore
> +### Initial steps
> 
> -`build -a AARCH64 -p Platform/ARM/VExpressPkg/ArmVExpress-FVP-
> AArch64.dsc -t GCC5`
> +The first step towards building an EDKII firmware image is to create a working
> directory.
> 
> -Once built, the edk2 image is the following file Build/ArmVExpress-FVP-
> AArch64/DEBUG_GCC5/FV/FVP_AARCH64_EFI.fd
> +1. Launch a terminal window.
> +2. Create a directory on your development machine (we willl name it 'source'
> in this example).
> +3. Set the WORKSPACE environment variable to point to this directory.
> 
> -# Run edk2/edk2-platforms on the ARM Base Platform FVP
> +#### Example:
> +In a Linux bash shell:
> +```
> +cd <Directory where you want to work>
> +mkdir source
> +cd source
> +export WORKSPACE=$PWD
> +```
> 
> -In order to run the binary we have just built there are a few steps we need to -
> go through, we need to get a model, a set of prebuilts (where we will swap out
> -the edk2 image with our own) and the tool with which we will swap out the -
> prebuilt edk2 image.
> +OR
> 
> -We will also rely on the "run_model" script that comes with the prebuilts, it -is
> entirely possible to run the model without this but would require quite a bit -of
> knowledge regarding the arguments of the ARM fastmodel (documentation can
> be found here:
> -[https://developer.arm.com/docs/100966/1101/programming-reference-for-
> base-fvps/base-platform-revc-features])
> -however the manual set of the FVP is outside the scope of this document. If
> you are interested -please consult the documentation.
> +In a Windows command prompt:
> 
> -It's recommended you create a folder where you download the prebuilts and -
> required tool and copy your edk2 image in to it, as the run script expects -the
> binaries in the same directory.
> +```
> +cd <Directory where you want to work>
> +mkdir source
> +cd source
> +set WORKSPACE=%CD%
> +```
> 
> -1. Download the Base FVP from here
> https://developer.arm.com/products/system-design/fixed-virtual-platforms
> +### Cloning the source code repositories
> 
> -	- Select Armv8-A Base Platform FVP based on Fast Models 11.4
> -	- It has a click through license but is free.
> +Note: To clone the repositories you need 'git' to be installed on your
> development PC (see Development Tools).
> 
> -2. Download the 20.01 Linaro ARM Landing Team release for FVP booting UEFI
> -https://releases.linaro.org/members/arm/platforms/20.01/fvp-uefi.zip
> +In the terminal window, change directory to your workspace ('source') folder
> and run the following commands. Install Git if necessary.
> 
> -3. Clone the trusted firmware repo from https://git.trustedfirmware.org/TF-
> A/trusted-firmware-a.git
> +```
> +git clone https://github.com/tianocore/edk2.git
> +git clone https://github.com/tianocore/edk2-platforms.git
> +git clone https://github.com/acpica/acpica.git
> +```
> 
> -4. Build fiptool: `make -C trusted-firmware-a/tools/fiptool`
> +Then go to the edk2 folder and update the submodules.
> 
> -5. Update the fip.bin image from fvp-uefi.zip by running the following
> command:
> +```
> +cd edk2
> +git submodule update --init
> +cd ..
> +```
> 
> -    `./trusted-firmware-a/tools/fiptool/fiptool update --nt-fw=[path to binary
> built above] fip.bin`
> +# Building firmware on a Linux host
> 
> -6. Execute the FVP run_model.sh script from fvp-uefi.zip and provide a path to
> the FVP binaries -downloaded in step 1):
> +## Prerequisites
> 
> -	`MODEL=[path to FVP binary] ./run_model.sh`
> +- A 64-bit development machine.
> +- Ubuntu 20.04 desktop.
> +- At least 10GB of free disk space.
> 
> -This expects the contents of fvp-uefi.zip, the bl1.bin and fip.bin (which is -the
> file we modify), to be in the same directory as the run_model.sh script.
> +Check the Ubuntu version by typing the following in the terminal window.
> 
> -This should be sufficient to provide a build/run/debug environment for
> aarch64.
> +```
> +$ uname -srvmpio
> +Linux 5.4.0-131-generic #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022
> +x86_64 x86_64 x86_64 GNU/Linux ```
> +
> +### Development Tools
> +
> +The following tools must be installed on the development PC.
> +
> +
> +| Sr. No.   | Tool                | Description                                                  | Install
> instructions                                     |
> +|-----------|---------------------|--------------------------------------------------------------|---
> -------------------------------------------------------|
> +| 1         | Python 3            | Python interpreter                                           | $
> sudo apt install python3 python3-distutils             |
> +| 2         | Git                 | Git source control tool                                      | $ sudo
> apt install git                                   |
> +| 3         | uuid-dev            | Required for including uuid/uuid.h
> | $ sudo apt install uuid-dev                              |
> +| 4         | build-essential     | Installs make, gcc, g++, etc                                 | $
> sudo apt install build-essential <br> $ make -v <br> GNU Make 4.2.1 <br> gcc --
> version <br> gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 <br> $ g++ --version
> <br> g++ (Ubuntu 9.4.0-1ubuntu1\~20.04.1) 9.4.0 |
> +| 5         | bison               | A parser generator required by acpica tools.
> | $ sudo apt install bison                                 |
> +| 6         | flex                | A fast lexical analyzer generator required by acpica
> tools   | $ sudp apt get install flex                              |
> +
> +### Setting up the development tools
> +
> +Install the required development tools by running the following commands in
> the terminal window.
> +
> +```
> +$ sudo apt install bison build-essential flex git uuid-dev  ```
> +
> +```
> +$ sudo apt install python3 python3-distutils  ```
> +
> +### Arm cross compiler toolchain
> +
> +The Arm toolchain to cross compile from x86_64-linux to aarch64-elf is
> available [here](https://developer.arm.com/downloads/-/arm-gnu-toolchain-
> downloads).
> +
> +Select the latest toolchain to match the development PC architecture. Select
> the little-endian 'AArch64 ELF bare-metal target (aarch64-elf)' GCC cross
> compiler.
> +
> +Example: For a x86_64 development PC, download
> +arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.xz
> +
> +Create a directory called 'toolchain' under the workspace folder. For example
> source\toolchain and extract the toolchain to this directory.
> +
> +```
> +$ mkdir $WORKSPACE/toolchain
> +$ cd $WORKSPACE/toolchain
> +$ wget
> +https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/12.
> +2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.x
> +z $ tar xf arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.xz
> +$ cd $WORKSPACE
> +```
> +
> +### Build the acpica tools
> +
> +The acpica tools implement the latest iasl compiler. To build the acpica tools,
> run the following commands in the terminal window.
> +
> +```
> +$ make -C $WORKSPACE/acpica
> +```
> +
> +## Building EDKII firmware
> +
> +1. To build the firmware image, follow the steps below and run the commands
> in the terminal window.
> +
> +2. Set up the environment variables.
> +
> +```
> +$ export
> +GCC5_AARCH64_PREFIX=$WORKSPACE/toolchain/arm-gnu-toolchain-
> 12.2.rel1-x8
> +6_64-aarch64-none-elf/bin/aarch64-none-elf-
> +$ export PACKAGES_PATH=$WORKSPACE/edk2:$WORKSPACE/edk2-platforms
> +$ export IASL_PREFIX=$WORKSPACE/acpica/generate/unix/bin/
> +$ export PYTHON_COMMAND=/usr/bin/python3 ```
> +
> +3. Configure the EDKII development environment by running the edk2setup
> bash script.
> +```
> +$ source edk2/edksetup.sh
> +```
> +
> +4. Build the BaseTools.
> +```
> +$ make -C edk2/BaseTools
> +```
> +
> +### Build the firmware for Arm FVP Base AEMv8A-AEMv8A Model platform
> +
> +Run the following command to build the firmware for FVP Base AEMv8A-
> AEMv8A platform.
> +```
> +$ build -a AARCH64 -t GCC5 -p
> +Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc -b < DEBUG |
> +RELEASE > ```
> +
> +The firmware binaries can be found at the following location:
> +```
> +$WORKSPACE/Build/ArmVExpress-FVP-
> AArch64/<DEBUG|RELEASE>_GCC5/FV/FVP_AA
> +RCH64_EFI.fd
> +```
> +
> +### Build the firmware for Arm Juno platform
> +
> +Run the following command to build the firmware for Arm Juno platform.
> +```
> +$ build -a AARCH64 -t GCC5 -p Platform/ARM/JunoPkg/ArmJuno.dsc -b <
> +DEBUG | RELEASE > ```
> +
> +The firmware binaries can be found at the following location:
> +```
> +$WORKSPACE/Build/ArmJuno/<DEBUG|RELEASE>_GCC5/FV/BL33_AP_UEFI.fd
> +```
> +
> +# Building firmware on a Windows host using Windows Subsystem for Linux
> +(WSL)
> +
> +The instructions for building the firmware using WSL are similar to that for a
> Linux host.
> +The prerequisites for setting up the Windows Subsystem for Linux
> environment are listed below.
> +
> +## Prerequisites
> +
> +- A x64 development machine with Windows 10 (Version 21H2 - OS Build
> 19044.2486).
> +- At least 10GB of free disk space.
> +- Install the Windows Subsystem for Linux. Select Ubuntu 20.04 LTS from the
> Microsoft Store.
> +
> +Check the Ubuntu version by typing the following on the console.
> +```
> +$ uname -srvmpio
> +Linux 4.4.0-19041-Microsoft #2311-Microsoft Tue Nov 08 17:09:00 PST
> +2022 x86_64 x86_64 x86_64 GNU/Linux ```
> +
> +The remaining instructions for installing the development tools, configuring
> the development environment and building firmware are exactly the same as
> those for a Linux host.
> +
> +# Building firmware on a x64 Windows host
> +
> +#### Prerequisites
> +
> +- A 64-bit development machine
> +- Windows 10 desktop (Version 21H2 - OS Build 19044.2486)
> +- At least 10GB of free disk space.
> +
> +#### Development Tools
> +
> +The following tools must be installed on the development machine.
> +
> +| Sr. No.   | Tool                                         | Description
> | Install instructions                                     |
> +|-----------|----------------------------------------------|-----------------------------------------
> ---------------------|----------------------------------------------------------|
> +| 1         | Python 3                                     | Python interpreter
> | Go [here](https://www.python.org/downloads/windows/) <br> <br> Choose
> the latest Python 3.X release. <br> <br> Download and run the Windows
> x86_64 MSI installer <br> <br> If needed, add the python executable to your
> path by executing the following command: <br> > set
> PATH=<Path_to_the_python_executable>;%PATH%  |
> +| 2         | Git                                          | Git source control tool
> | Go [here](https://git-scm.com/download/win) <br> <br> Download and run
> the 64-bit Git for Windows Setup |
> +| 3         | ASL tools                                    | iasl compiler and other tools for the
> ASL language           | Go [here](https://www.acpica.org/downloads/binary-
> tools)  <br> <br> Download the iASL Compiler and Windows ACPI Tools <br>
> <br> Extract the content and place it at C:\ASL\ <br> <br> Check that the
> compiler is at the right place by executing: <br> > C:\ASL\iasl.exe -v |
> +| 4         | Microsoft Visual Studio 2019 Professional    | Microsoft IDE and
> compiler toolchain.                        | Go
> [here](https://visualstudio.microsoft.com/downloads/) <br> <br> Download
> and install Visual Studio 2019 Professional |
> +| 5         | echo tool                                    | Echo
> | See Workaround for echo command below. |
> +
> +
> +## Setting up the development tools
> +
> +Install the required development tools listed above by running the appropriate
> installer applications.
> +
> +### Arm cross compiler toolchain
> +The Arm toolchain Windows (i686-mingw32) hosted cross compilers are
> available [here](https://developer.arm.com/downloads/-/arm-gnu-toolchain-
> downloads).
> +
> +Select the latest toolchain for 'AArch64 bare-metal target (aarch64-none-elf)'
> GCC cross compiler.
> +
> +Example: Download
> +arm-gnu-toolchain-12.2.rel1-mingw-w64-i686-aarch64-none-elf
> +
> +Create a directory called 'toolchain' under the workspace directory and extract
> the toolchain to this directory using the downloaded installer.
> +
> +The toolchain folder tree should look as below:
> +
> +```
> +toolchain
> ++---arm-gnu-toolchain-12.2.rel1-mingw-w64-i686-aarch64-none-elf
> +|   +---aarch64-none-elf
> +|   +---bin
> +|   +---include
> +|   +---lib
> +|   +---libexec
> +|   +---share
> +```
> +
> +### Workaround for the echo command
> +
> +EDKII needs a workaround related to the echo command. A script replacing
> the Windows echo executable must be created, with the name "echo.BAT?:
> +
> +- Create a file named "echo.BAT" in the folder of your choice.
> +- Paste the following lines inside the file:
> +
> +```
> +rem %~f0  echo.BAT  %*
> +rem This file exists to overcome a problem in the EDKII build where rem
> +build_rule.template invokes a command as:
> +rem     "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}
> +rem When OBJCOPY is set to echo, this results in the following error:
> +rem     "echo" objcopy not needed for m:\...\PCD\Dxe\Pcd\DEBUG\PcdDxe.dll
> +rem And CMD.EXE fails to find the DOS echo command because of the
> +quotes @echo %* @goto :EOF ```
> +
> +- Add the file to your PATH by executing:
> +```
> +> set PATH=<Path_to_the_echo_file>;%PATH%
> +```
> +
> +## Building EDKII firmware
> +
> +1. To build the firmware image, follow the steps below and run the commands
> in the terminal window.
> +2. Set up the environment variables.
> +
> +```
> + set
> +GCC5_AARCH64_PREFIX=%WORKSPACE%\toolchain\arm-gnu-toolchain-
> 12.2.rel1-m
> +ingw-w64-i686-aarch64-none-elf\bin\aarch64-none-elf-
> + set PACKAGES_PATH=%WORKSPACE%\edk2;%WORKSPACE%\edk2-platforms
> + set EDK_TOOLS_PATH=%WORKSPACE%\edk2\BaseTools
> + set GCC_HOST_BIN=n
> +```
> +
> +Select the python version you wish to use and set the PYTHON_COMMAND
> environment variable to your Python executable.
> +
> +Set the PYTHON_COMMAND to point to the Python3 executable.
> +
> +Check that your path is set up as it is stated in the development tools table
> above. It should give access to:
> +
> +- The make executable
> +- The echo.BAT script
> +
> +3. Configure the EDKII development environment by running the edksetup.bat
> script.
> +The Rebuild option can be skipped if the BaseTools have already been built.
> +
> +The ForceRebuild option can be used to do a clean build of the Base tools.
> +```
> +> call %WORKSPACE%\edk2\edksetup.bat [Rebuild | ForceRebuild]
> +```
> +
> +### Build the firmware for Arm FVP Base AEMv8A-AEMv8A Model platform
> +
> +Run the following command to build the firmware for FVP Base AEMv8A-
> AEMv8A platform.
> +
> +```
> +> build -a AARCH64 -t GCC5 -p
> +> Platform\ARM\VExpressPkg\ArmVExpress-FVP-AArch64.dsc -b < DEBUG |
> +> RELEASE >
> +```
> +
> +The firmware binaries can be found at the following location:
> +```
> +%WORKSPACE%\Build\ArmVExpress-FVP-
> AArch64\<DEBUG|RELEASE>_GCC5\FV\FVP_A
> +ARCH64_EFI.fd
> +```
> +
> +### Build the firmware for Arm Juno platform
> +
> +Run the following command to build the firmware for Arm Juno platform.
> +
> +```
> +> build -a AARCH64 -t GCC5 -p Platform\ARM\JunoPkg\ArmJuno.dsc -b <
> +> DEBUG | RELEASE >
> +```
> +The firmware binaries are at the following location:
> +
> +```
> +%WORKSPACE%\Build\ArmJuno\<DEBUG|RELEASE>_GCC5\FV\BL33_AP_UEFI.
> fd
> +```
> --
> 2.25.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#100864): https://edk2.groups.io/g/devel/message/100864
Mute This Topic: https://groups.io/mt/97470584/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-