* [PATCH edk2-platforms v1 0/1]Readme: Add instructions to build in a Windows Environment
@ 2018-06-29 3:42 Chris Co
2018-06-29 3:42 ` [PATCH edk2-platforms v1 1/1] Readme: " Chris Co
0 siblings, 1 reply; 3+ messages in thread
From: Chris Co @ 2018-06-29 3:42 UTC (permalink / raw)
To: edk2-devel@lists.01.org; +Cc: Ard Biesheuvel, Leif Lindholm, Michael D Kinney
REF: https://github.com/christopherco/edk2-platforms/tree/win_build_doc_v1
These instructions detail how to setup a Windows build environment
and build for ARM platforms using the GCC cross-compiler toolchain.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Christopher Co <christopher.co@microsoft.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Christopher Co (1):
Readme: Add instructions to build in a Windows Environment
Readme.md | 614 ++++++++++++--------
1 file changed, 387 insertions(+), 227 deletions(-)
--
2.16.2.gvfs.1.33.gf5370f1
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH edk2-platforms v1 1/1] Readme: Add instructions to build in a Windows Environment
2018-06-29 3:42 [PATCH edk2-platforms v1 0/1]Readme: Add instructions to build in a Windows Environment Chris Co
@ 2018-06-29 3:42 ` Chris Co
2018-06-29 10:52 ` Leif Lindholm
0 siblings, 1 reply; 3+ messages in thread
From: Chris Co @ 2018-06-29 3:42 UTC (permalink / raw)
To: edk2-devel@lists.01.org; +Cc: Ard Biesheuvel, Leif Lindholm, Michael D Kinney
These instructions detail how to setup a Windows build environment
and build for ARM platforms using the GCC cross-compiler toolchain.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Christopher Co <christopher.co@microsoft.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
---
Readme.md | 614 ++++++++++++--------
1 file changed, 387 insertions(+), 227 deletions(-)
diff --git a/Readme.md b/Readme.md
index 3104144634b9..c9f2af9a6948 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,227 +1,387 @@
-This branch holds all platforms actively maintained against the
-[edk2](https://github.com/tianocore/edk2) master branch.
-
-For generic information about the edk2-platforms repository, and the process
-under which _stable_ and _devel_ branches can be added for individual platforms,
-please see
-[the introduction on the about branch](https://github.com/tianocore/edk2-platforms/blob/about/Readme.md).
-
-# INDEX
-* [Overview](#overview)
-* [How To Build (Linux Environment)](#how-to-build-linux-environment)
- * [Manual building](#manual-building)
- * [Using uefi-tools helper scripts](#using-uefi-tools-helper-scripts)
-* [How To Build (Windows Environment)](#how-to-build-windows-environment)
-* [Supported Platforms](#supported-platforms)
-* [Maintainers](#maintainers)
-
-# Overview
-
-Platform description files can be found under `Platform/{Vendor}/{Platform}`.
-
-Many platforms require additional image processing beyond the EDK2 build.
-Any such steps should be documented (as a Readme.md), and any necessary helper
-scripts be contained, under said platform directory.
-
-Any contributions to this branch should be submitted via email to the
-edk2-devel mailing list with a subject prefix of `[platforms]`. See
-[Laszlo's excellent guide](https://github.com/tianocore/tianocore.github.io/wiki/Laszlo's-unkempt-git-guide-for-edk2-contributors-and-maintainers) for details
-on how to do this successfully.
-
-# How to build (Linux Environment)
-
-## Prerequisites
-The build tools themselves depend on Python (2) and libuuid. Most Linux systems
-will come with a Python environment installed by default, but you usually need
-to install uuid-dev (or uuid-devel, depending on distribution) manually.
-
-## If cross compiling
-If building EDK2 for a different archtecture than the build machine, you need to
-obtain an appropriate cross-compiler. X64 (x86_64) compilers also support IA32,
-but the reverse may not always be true.
-
-Target architecture | Cross compilation prefix
---------------------|-------------------------
-AARCH64 | aarch64-linux-gnu-
-ARM | arm-linux-gnueabihf-
-IA32 | i?86-linux-gnu-* _or_ x86_64-linux-gnu-
-IPF | ia64-linux-gnu
-X64 | x86_64-linux-gnu-
-
-\* i386, i486, i586 or i686
-
-### GCC
-Linaro provides GCC toolchains for
-[aarch64-linux-gnu](https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/)
-and [arm-linux-gnueabihf](https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/)
-compiled to run on x86_64/i686 Linux and i686 Windows. Some Linux distributions
-provide their own packaged cross-toolchains.
-
-### clang
-Clang does not require separate cross compilers, but it does need a
-target-specific binutils. These are included with any prepackaged GCC toolchain
-(see above), or can be installed or built separately.
-
-## Obtaining source code
-1. Create a new folder (directory) on your local development machine
- for use as your workspace. This example uses `/work/git/tianocore`, modify as
- appropriate for your needs.
- ```
- $ export WORKSPACE=/work/git/tianocore
- $ mkdir -p $WORKSPACE
- $ cd $WORKSPACE
- ```
-
-1. Into that folder, clone:
- 1. [edk2](https://github.com/tianocore/edk2)
- 1. [edk2-platforms](https://github.com/tianocore/edk2-platforms)
- 1. [edk2-non-osi](https://github.com/tianocore/edk2-non-osi) (if building
- platforms that need it)
- ```
- $ git clone https://github.com/tianocore/edk2.git
- ...
- $ git clone https://github.com/tianocore/edk2-platforms.git
- ...
- $ git clone https://github.com/tianocore/edk2-non-osi.git
- ```
-
-1. Set up a **PACKAGES_PATH** to point to the locations of these three
- repositories:
-
- `$ export PACKAGES_PATH=$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi`
-
-## Manual building
-
-1. Set up the build environment (this will modify your environment variables)
-
- `$ . edk2/edksetup.sh`
-
- (This step _depends_ on **WORKSPACE** being set as per above.)
-1. Build BaseTools
-
- `make -C edk2/BaseTools`
-
- (BaseTools can currently not be built in parallel, so do not specify any `-j`
- option, either on the command line or in a **MAKEFLAGS** environment
- variable.)
-
-### Build options
-There are a number of options that can (or must) be specified at the point of
-building. Their default values are set in `edk2/Conf/target.txt`. If we are
-working only on a single platform, it makes sense to just update this file.
-
-target.txt option | command line | Description
-------------------|--------------|------------
-ACTIVE_PLATFORM | `-p` | Description file (.dsc) of platform.
-TARGET | `-b` | One of DEBUG, RELEASE or NOOPT.
-TARGET_ARCH | `-a` | Architecture to build for.
-TOOL_CHAIN_TAG | `-t` | Toolchain profile to use for building.
-
-There is also MAX_CONCURRENT_THREAD_NUMBER (`-n`), roughly equivalent to
-`make -j`.
-
-When specified on command line, `-b` can be repeated multiple times in order to
-build multiple targets sequentially.
-
-After a successful build, the resulting images can be found in
-`Build/{Platform Name}/{TARGET}_{TOOL_CHAIN_TAG}/FV`.
-
-### Build a platform
-The main build process _can_ run in parallel - so figure out how many threads we
-have available.
-
-```
-$ getconf _NPROCESSORS_ONLN
-8
-```
-OK, so we have 8 CPUs - let's tell the build to use a little more than that:
-```
-$ NUM_CPUS=$((`getconf _NPROCESSORS_ONLN` + 2))
-```
-For the toolchain tag, use GCC5 for gcc version 5 or later, GCC4x for
-earlier versions, or CLANG35/CLANG38 as appropriate when building with clang.
-```
-$ build -n $NUM_CPUS -a AARCH64 -t GCC5 -p Platform/ARM/JunoPkg/ArmJuno.dsc
-```
-(Note that the description file gets resolved by the build command through
-searching in all locations specified in **PACKAGES_PATH**.)
-
-#### If cross-compiling
-When cross-compiling, or building with a different version of the compiler than
-the default `gcc` or `clang`(/binutils), we additionally need to inform the
-build command which toolchain to use. We do this by setting the environment
-variable `{TOOL_CHAIN_TAG}_{TARGET_ARCH}_PREFIX` - in the case above,
-**GCC5_AARCH64_PREFIX**.
-
-So, referring to the cross compiler toolchain table above, we should prepend the `build` command line with `GCC5_AARCH64_PREFIX=aarch64-linux-gnu-`.
-
-## Using uefi-tools helper scripts
-uefi-tools is a completely unofficial set of helper-scripts developed by Linaro.
-They automate figuring out all of the manual options above, and store the paths
-to platform description files in a separate configuration file. Additionally,
-they simplify bulk-building large numbers of platforms.
-
-The (best effort) intent is to keep this configuration up to date with all
-platforms that exist in the edk2-platforms master branch.
-
-The equivalent of the manual example above would be
-```
-$ git clone https://git.linaro.org/uefi/uefi-tools.git
-...
-$ ./uefi-tools/edk2-build.sh juno
-...
-------------------------------------------------------------
- aarch64 Juno (AARCH64) RELEASE pass
-------------------------------------------------------------
-pass 1
-fail 0
-```
-The build finishes with a summary of which platforms/targets were built, which
-succeeded and which failed (and the total number of either).
-
-Like the `build` command itself, `edk2-build.sh` it supports specifying multiple
-targets on a single command line, but it also lets you specify multiple
-platforms (or `all` for building all known platforms). So in order to build all
-platforms described by the configuration file, for both DEBUG and RELEASE
-targets:
-```
-$ ./uefi-tools/edk2-build.sh -b DEBUG -b RELEASE
-```
-
-# How To Build (Windows Environment)
-
-(I genuinely have no idea. Please help!)
-
-
-# Supported Platforms
-
-These are the platforms currently supported by this tree - grouped by
-Processor/SoC vendor, rather than platform vendor.
-
-If there are any additional build steps beyond the generic ones listed above,
-they will be documented with the platform.
-
-## AMD
-* [Cello](Platform/LeMaker/CelloBoard)
-* [Overdrive](Platform/AMD/OverdriveBoard)
-* [Overdrive 1000](Platform/SoftIron/Overdrive1000Board)
-
-## ARM
-* [Juno](Platform/ARM/JunoPkg)
-* [Versatile Express](Platform/ARM/VExpressPkg)
-
-## Hisilicon
-* [D02](Platform/Hisilicon/D02)
-* [D03](Platform/Hisilicon/D03)
-* [D05](Platform/Hisilicon/D05)
-* [HiKey](Platform/Hisilicon/HiKey)
-
-## Marvell
-* [Armada 70x0](Platform/Marvell/Armada)
-
-## Socionext
-* [SynQuacer](Platform/Socionext/DeveloperBox)
-
-# Maintainers
-
-See [Maintainers.txt](Maintainers.txt).
+This branch holds all platforms actively maintained against the
+[edk2](https://github.com/tianocore/edk2) master branch.
+
+For generic information about the edk2-platforms repository, and the process
+under which _stable_ and _devel_ branches can be added for individual platforms,
+please see
+[the introduction on the about branch](https://github.com/tianocore/edk2-platforms/blob/about/Readme.md).
+
+# INDEX
+* [Overview](#overview)
+* [How To Build (Linux Environment)](#how-to-build-linux-environment)
+ * [Manual building](#manual-building)
+ * [Using uefi-tools helper scripts](#using-uefi-tools-helper-scripts)
+* [How To Build (Windows Environment)](#how-to-build-windows-environment)
+* [Supported Platforms](#supported-platforms)
+* [Maintainers](#maintainers)
+
+# Overview
+
+Platform description files can be found under `Platform/{Vendor}/{Platform}`.
+
+Many platforms require additional image processing beyond the EDK2 build.
+Any such steps should be documented (as a Readme.md), and any necessary helper
+scripts be contained, under said platform directory.
+
+Any contributions to this branch should be submitted via email to the
+edk2-devel mailing list with a subject prefix of `[platforms]`. See
+[Laszlo's excellent guide](https://github.com/tianocore/tianocore.github.io/wiki/Laszlo's-unkempt-git-guide-for-edk2-contributors-and-maintainers) for details
+on how to do this successfully.
+
+# How to build (Linux Environment)
+
+## Prerequisites
+The build tools themselves depend on Python (2) and libuuid. Most Linux systems
+will come with a Python environment installed by default, but you usually need
+to install uuid-dev (or uuid-devel, depending on distribution) manually.
+
+## If cross compiling
+If building EDK2 for a different archtecture than the build machine, you need to
+obtain an appropriate cross-compiler. X64 (x86_64) compilers also support IA32,
+but the reverse may not always be true.
+
+Target architecture | Cross compilation prefix
+--------------------|-------------------------
+AARCH64 | aarch64-linux-gnu-
+ARM | arm-linux-gnueabihf-
+IA32 | i?86-linux-gnu-* _or_ x86_64-linux-gnu-
+IPF | ia64-linux-gnu
+X64 | x86_64-linux-gnu-
+
+\* i386, i486, i586 or i686
+
+### GCC
+Linaro provides GCC toolchains for
+[aarch64-linux-gnu](https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/)
+and [arm-linux-gnueabihf](https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/)
+compiled to run on x86_64/i686 Linux and i686 Windows. Some Linux distributions
+provide their own packaged cross-toolchains.
+
+### clang
+Clang does not require separate cross compilers, but it does need a
+target-specific binutils. These are included with any prepackaged GCC toolchain
+(see above), or can be installed or built separately.
+
+## Obtaining source code
+1. Create a new folder (directory) on your local development machine
+ for use as your workspace. This example uses `/work/git/tianocore`, modify as
+ appropriate for your needs.
+ ```
+ $ export WORKSPACE=/work/git/tianocore
+ $ mkdir -p $WORKSPACE
+ $ cd $WORKSPACE
+ ```
+
+1. Into that folder, clone:
+ 1. [edk2](https://github.com/tianocore/edk2)
+ 1. [edk2-platforms](https://github.com/tianocore/edk2-platforms)
+ 1. [edk2-non-osi](https://github.com/tianocore/edk2-non-osi) (if building
+ platforms that need it)
+ ```
+ $ git clone https://github.com/tianocore/edk2.git
+ ...
+ $ git clone https://github.com/tianocore/edk2-platforms.git
+ ...
+ $ git clone https://github.com/tianocore/edk2-non-osi.git
+ ```
+
+1. Set up a **PACKAGES_PATH** to point to the locations of these three
+ repositories:
+
+ `$ export PACKAGES_PATH=$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi`
+
+## Manual building
+
+1. Set up the build environment (this will modify your environment variables)
+
+ `$ . edk2/edksetup.sh`
+
+ (This step _depends_ on **WORKSPACE** being set as per above.)
+1. Build BaseTools
+
+ `make -C edk2/BaseTools`
+
+ (BaseTools can currently not be built in parallel, so do not specify any `-j`
+ option, either on the command line or in a **MAKEFLAGS** environment
+ variable.)
+
+### Build options
+There are a number of options that can (or must) be specified at the point of
+building. Their default values are set in `edk2/Conf/target.txt`. If we are
+working only on a single platform, it makes sense to just update this file.
+
+target.txt option | command line | Description
+------------------|--------------|------------
+ACTIVE_PLATFORM | `-p` | Description file (.dsc) of platform.
+TARGET | `-b` | One of DEBUG, RELEASE or NOOPT.
+TARGET_ARCH | `-a` | Architecture to build for.
+TOOL_CHAIN_TAG | `-t` | Toolchain profile to use for building.
+
+There is also MAX_CONCURRENT_THREAD_NUMBER (`-n`), roughly equivalent to
+`make -j`.
+
+When specified on command line, `-b` can be repeated multiple times in order to
+build multiple targets sequentially.
+
+After a successful build, the resulting images can be found in
+`Build/{Platform Name}/{TARGET}_{TOOL_CHAIN_TAG}/FV`.
+
+### Build a platform
+The main build process _can_ run in parallel - so figure out how many threads we
+have available.
+
+```
+$ getconf _NPROCESSORS_ONLN
+8
+```
+OK, so we have 8 CPUs - let's tell the build to use a little more than that:
+```
+$ NUM_CPUS=$((`getconf _NPROCESSORS_ONLN` + 2))
+```
+For the toolchain tag, use GCC5 for gcc version 5 or later, GCC4x for
+earlier versions, or CLANG35/CLANG38 as appropriate when building with clang.
+```
+$ build -n $NUM_CPUS -a AARCH64 -t GCC5 -p Platform/ARM/JunoPkg/ArmJuno.dsc
+```
+(Note that the description file gets resolved by the build command through
+searching in all locations specified in **PACKAGES_PATH**.)
+
+#### If cross-compiling
+When cross-compiling, or building with a different version of the compiler than
+the default `gcc` or `clang`(/binutils), we additionally need to inform the
+build command which toolchain to use. We do this by setting the environment
+variable `{TOOL_CHAIN_TAG}_{TARGET_ARCH}_PREFIX` - in the case above,
+**GCC5_AARCH64_PREFIX**.
+
+So, referring to the cross compiler toolchain table above, we should prepend the `build` command line with `GCC5_AARCH64_PREFIX=aarch64-linux-gnu-`.
+
+## Using uefi-tools helper scripts
+uefi-tools is a completely unofficial set of helper-scripts developed by Linaro.
+They automate figuring out all of the manual options above, and store the paths
+to platform description files in a separate configuration file. Additionally,
+they simplify bulk-building large numbers of platforms.
+
+The (best effort) intent is to keep this configuration up to date with all
+platforms that exist in the edk2-platforms master branch.
+
+The equivalent of the manual example above would be
+```
+$ git clone https://git.linaro.org/uefi/uefi-tools.git
+...
+$ ./uefi-tools/edk2-build.sh juno
+...
+------------------------------------------------------------
+ aarch64 Juno (AARCH64) RELEASE pass
+------------------------------------------------------------
+pass 1
+fail 0
+```
+The build finishes with a summary of which platforms/targets were built, which
+succeeded and which failed (and the total number of either).
+
+Like the `build` command itself, `edk2-build.sh` it supports specifying multiple
+targets on a single command line, but it also lets you specify multiple
+platforms (or `all` for building all known platforms). So in order to build all
+platforms described by the configuration file, for both DEBUG and RELEASE
+targets:
+```
+$ ./uefi-tools/edk2-build.sh -b DEBUG -b RELEASE
+```
+
+# How To Build (Windows Environment)
+
+These instructions will be a summary of the
+[Windows Systems wiki entry](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems).
+The wiki entry is targeted towards using the Visual Studio compiler. The
+instructions below will have some extra steps if you are cross-compiling with GCC.
+
+## Prerequisites
+You will need Git for Windows and Visual Studio installed to build EDK2 from source.
+If you wish to build the build tools, you will also need Python 2.7 for Windows
+and CxFreeze.
+
+## If cross compiling
+If building EDK2 for a different architecture than the build machine, you need to
+obtain an appropriate cross-compiler. X64 (x86_64) compilers also support IA32,
+but the reverse may not always be true.
+
+Target architecture | Cross compilation prefix
+--------------------|-------------------------
+ARM | arm-eabi-
+
+### GCC
+Linaro provides a Windows-compatible GCC toolchain for [arm-eabi](https://releases.linaro.org/components/toolchain/binaries/latest/arm-eabi/)
+compiled to run on x86_64/i686 Windows. Select the i686 mingw32 variant.
+
+To use the GCC toolchain, you will also need a Windows-compatible GCC environment
+like [MinGW](http://mingw.org/). Specifically you will need the GNU make tool.
+
+## Obtaining source code
+1. Create a new folder (directory) on your local development machine
+ for use as your workspace. This example uses `C:\git\tianocore`, modify as
+ appropriate for your needs.
+
+1. In a Windows command prompt:
+ ```
+ > set WORKSPACE=C:\git\tianocore
+ > mkdir %WORKSPACE%
+ > cd %WORKSPACE%
+ ```
+
+1. Into that folder, clone:
+ 1. [edk2](https://github.com/tianocore/edk2)
+ 1. [edk2-platforms](https://github.com/tianocore/edk2-platforms)
+ 1. [edk2-non-osi](https://github.com/tianocore/edk2-non-osi) (if building
+ platforms that need it)
+ ```
+ > git clone https://github.com/tianocore/edk2.git
+ ...
+ > git clone https://github.com/tianocore/edk2-platforms.git
+ ...
+ > git clone https://github.com/tianocore/edk2-non-osi.git
+ ```
+
+1. Clone submodules
+ ```
+ > pushd edk2
+ > git submodule update --init --recursive
+ > popd
+ ```
+
+1. Set up a **PACKAGES_PATH** to point to the locations of these three
+ repositories:
+
+ `> set PACKAGES_PATH=%WORKSPACE%/edk2;%WORKSPACE%/edk2-platforms;%WORKSPACE%/edk2-non-osi`
+
+### If cross-compiling with GCC
+1. Download [MinGW](http://mingw.org/) and get the **make** executable. Copy
+make.exe and any library dependencies to a folder in your workspace.
+ ```
+ > mkdir %WORKSPACE%\MinGW
+ > pushd %WORKSPACE%\MinGW
+ ... copy make.exe and any library dependencies into MinGW folder ...
+ > popd
+ ```
+(Note sometimes the MinGW installer prepends **mingw32-** before **make.exe**.
+You should rename the exe to make before proceeding.)
+
+1. Download your GCC cross-compiler and place it in your workspace
+ ```
+ > mkdir %WORKSPACE%\Toolchains
+ > pushd %WORKSPACE%\Toolchains
+ ... copy GCC cross-compiler into Toolchains folder ...
+ > popd
+ ```
+
+## Manual building
+1. Set up the build environment (this will modify your environment variables)
+
+ `> edk2\edk2setup.bat`
+
+ (This step _depends_ on **WORKSPACE** being set as per above.)
+
+1. Get the BaseTools. You can either build them from source or fetch prebuilt binaries.
+ * To build from source, follow the Windows instructions found [here](https://github.com/tianocore/edk2/blob/master/BaseTools/BuildNotes.txt).
+ * To use prebuilt binaries, clone
+ [edk2-BaseTools-win32](https://github.com/tianocore/edk2-BaseTools-win32)
+ and set **EDK_TOOLS_DIR** to point to this location.
+ ```
+ > git clone https://github.com/tianocore/edk2-BaseTools-win32.git
+ ...
+ > set EDK_TOOLS_DIR=%WORKSPACE%/edk2-BaseTools-win32
+ ```
+
+1. Install the ASL compiler (if necessary) for your platform. Follow
+the instructions found [here](https://github.com/tianocore/tianocore.github.io/wiki/Asl-Setup).
+
+### If cross-compiling with GCC
+1. Set **PATH** to include the location of your MinGW make executable and cross-compiling toolchain bin folder.
+
+ `> set PATH=%WORKSPACE%\MinGW;%WORKSPACE%\Toolchains\<Cross Compiler>\bin;%PATH%`
+
+### Build options
+There are a number of options that can (or must) be specified at the point of
+building. Their default values are set in `edk2\Conf\target.txt`. If we are
+working only on a single platform, it makes sense to just update this file.
+
+target.txt option | command line | Description
+------------------|--------------|------------
+ACTIVE_PLATFORM | `-p` | Description file (.dsc) of platform.
+TARGET | `-b` | One of DEBUG, RELEASE or NOOPT.
+TARGET_ARCH | `-a` | Architecture to build for.
+TOOL_CHAIN_TAG | `-t` | Toolchain profile to use for building.
+
+There is also MAX_CONCURRENT_THREAD_NUMBER (`-n`), roughly equivalent to
+`make -j`.
+
+When specified on command line, `-b` can be repeated multiple times in order to
+build multiple targets sequentially.
+
+After a successful build, the resulting images can be found in
+`%WORKSPACE%\Build\{Platform Name}\{TARGET}_{TOOL_CHAIN_TAG}\FV`.
+
+### Build a platform
+The main build process _can_ run in parallel - so figure out how many threads we
+have available.
+
+```
+> echo %NUMBER_OF_PROCESSORS%
+8
+```
+OK, so we have 8 CPUs - let's tell the build to use a little more than that:
+```
+> set /A NUM_CPUS=%NUMBER_OF_PROCESSORS%+2
+```
+For the toolchain tag, select a toolchain that is compatible with building in a Windows Environment. Search for 'Supported Tool Chains' in tools_def.txt to see the valid options for `TOOL_CHAIN_TAG`. If using Visual Studio Compiler, consult the
+[VS Toolchain Matrix](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems-ToolChain-Matrix)
+to determine the proper VS `TOOL_CHAIN_TAG`.
+
+```
+> build -n %NUM_CPUS% -a ARM -t GCC5 -p Platform/NXP/SABRESD_IMX6Q_1GB/SABRESD_IMX6Q_1GB.dsc
+```
+
+(Note that the description file gets resolved by the build command through
+searching in all locations specified in **PACKAGES_PATH**.)
+
+#### If cross-compiling
+When cross-compiling, we additionally need to inform the
+build command which toolchain to use. We do this by setting the environment
+variable `{TOOL_CHAIN_TAG}_{TARGET_ARCH}_PREFIX` - in the case above,
+**GCC5_ARM_PREFIX**.
+
+So, referring to the cross compiler toolchain table above, we should prepend the `build` command line with
+
+ > set GCC5_ARM_PREFIX=arm-eabi-
+
+# Supported Platforms
+
+These are the platforms currently supported by this tree - grouped by
+Processor/SoC vendor, rather than platform vendor.
+
+If there are any additional build steps beyond the generic ones listed above,
+they will be documented with the platform.
+
+## AMD
+* [Cello](Platform/LeMaker/CelloBoard)
+* [Overdrive](Platform/AMD/OverdriveBoard)
+* [Overdrive 1000](Platform/SoftIron/Overdrive1000Board)
+
+## ARM
+* [Juno](Platform/ARM/JunoPkg)
+* [Versatile Express](Platform/ARM/VExpressPkg)
+
+## Hisilicon
+* [D02](Platform/Hisilicon/D02)
+* [D03](Platform/Hisilicon/D03)
+* [D05](Platform/Hisilicon/D05)
+* [HiKey](Platform/Hisilicon/HiKey)
+
+## Marvell
+* [Armada 70x0](Platform/Marvell/Armada)
+
+## Socionext
+* [SynQuacer](Platform/Socionext/DeveloperBox)
+
+# Maintainers
+
+See [Maintainers.txt](Maintainers.txt).
--
2.16.2.gvfs.1.33.gf5370f1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH edk2-platforms v1 1/1] Readme: Add instructions to build in a Windows Environment
2018-06-29 3:42 ` [PATCH edk2-platforms v1 1/1] Readme: " Chris Co
@ 2018-06-29 10:52 ` Leif Lindholm
0 siblings, 0 replies; 3+ messages in thread
From: Leif Lindholm @ 2018-06-29 10:52 UTC (permalink / raw)
To: Chris Co; +Cc: edk2-devel@lists.01.org, Ard Biesheuvel, Michael D Kinney
On Fri, Jun 29, 2018 at 03:42:37AM +0000, Chris Co wrote:
> These instructions detail how to setup a Windows build environment
> and build for ARM platforms using the GCC cross-compiler toolchain.
Hi Chris,
This patch doesn't add Windows instructions - it deletes everything,
then adds everything back (now with Windows instructions).
Presumably this is because I messed up when I added the original, and
you've converted the line-endings to CRLF.
This is all good, but please submit the conversion as a separate
preceding patch so that we can actually tell which bits of
documentation you've added/modified and which remain unchanged.
/
Leif
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Christopher Co <christopher.co@microsoft.com>
> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> Cc: Leif Lindholm <leif.lindholm@linaro.org>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> ---
> Readme.md | 614 ++++++++++++--------
> 1 file changed, 387 insertions(+), 227 deletions(-)
>
> diff --git a/Readme.md b/Readme.md
> index 3104144634b9..c9f2af9a6948 100644
> --- a/Readme.md
> +++ b/Readme.md
> @@ -1,227 +1,387 @@
> -This branch holds all platforms actively maintained against the
> -[edk2](https://github.com/tianocore/edk2) master branch.
> -
> -For generic information about the edk2-platforms repository, and the process
> -under which _stable_ and _devel_ branches can be added for individual platforms,
> -please see
> -[the introduction on the about branch](https://github.com/tianocore/edk2-platforms/blob/about/Readme.md).
> -
> -# INDEX
> -* [Overview](#overview)
> -* [How To Build (Linux Environment)](#how-to-build-linux-environment)
> - * [Manual building](#manual-building)
> - * [Using uefi-tools helper scripts](#using-uefi-tools-helper-scripts)
> -* [How To Build (Windows Environment)](#how-to-build-windows-environment)
> -* [Supported Platforms](#supported-platforms)
> -* [Maintainers](#maintainers)
> -
> -# Overview
> -
> -Platform description files can be found under `Platform/{Vendor}/{Platform}`.
> -
> -Many platforms require additional image processing beyond the EDK2 build.
> -Any such steps should be documented (as a Readme.md), and any necessary helper
> -scripts be contained, under said platform directory.
> -
> -Any contributions to this branch should be submitted via email to the
> -edk2-devel mailing list with a subject prefix of `[platforms]`. See
> -[Laszlo's excellent guide](https://github.com/tianocore/tianocore.github.io/wiki/Laszlo's-unkempt-git-guide-for-edk2-contributors-and-maintainers) for details
> -on how to do this successfully.
> -
> -# How to build (Linux Environment)
> -
> -## Prerequisites
> -The build tools themselves depend on Python (2) and libuuid. Most Linux systems
> -will come with a Python environment installed by default, but you usually need
> -to install uuid-dev (or uuid-devel, depending on distribution) manually.
> -
> -## If cross compiling
> -If building EDK2 for a different archtecture than the build machine, you need to
> -obtain an appropriate cross-compiler. X64 (x86_64) compilers also support IA32,
> -but the reverse may not always be true.
> -
> -Target architecture | Cross compilation prefix
> ---------------------|-------------------------
> -AARCH64 | aarch64-linux-gnu-
> -ARM | arm-linux-gnueabihf-
> -IA32 | i?86-linux-gnu-* _or_ x86_64-linux-gnu-
> -IPF | ia64-linux-gnu
> -X64 | x86_64-linux-gnu-
> -
> -\* i386, i486, i586 or i686
> -
> -### GCC
> -Linaro provides GCC toolchains for
> -[aarch64-linux-gnu](https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/)
> -and [arm-linux-gnueabihf](https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/)
> -compiled to run on x86_64/i686 Linux and i686 Windows. Some Linux distributions
> -provide their own packaged cross-toolchains.
> -
> -### clang
> -Clang does not require separate cross compilers, but it does need a
> -target-specific binutils. These are included with any prepackaged GCC toolchain
> -(see above), or can be installed or built separately.
> -
> -## Obtaining source code
> -1. Create a new folder (directory) on your local development machine
> - for use as your workspace. This example uses `/work/git/tianocore`, modify as
> - appropriate for your needs.
> - ```
> - $ export WORKSPACE=/work/git/tianocore
> - $ mkdir -p $WORKSPACE
> - $ cd $WORKSPACE
> - ```
> -
> -1. Into that folder, clone:
> - 1. [edk2](https://github.com/tianocore/edk2)
> - 1. [edk2-platforms](https://github.com/tianocore/edk2-platforms)
> - 1. [edk2-non-osi](https://github.com/tianocore/edk2-non-osi) (if building
> - platforms that need it)
> - ```
> - $ git clone https://github.com/tianocore/edk2.git
> - ...
> - $ git clone https://github.com/tianocore/edk2-platforms.git
> - ...
> - $ git clone https://github.com/tianocore/edk2-non-osi.git
> - ```
> -
> -1. Set up a **PACKAGES_PATH** to point to the locations of these three
> - repositories:
> -
> - `$ export PACKAGES_PATH=$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi`
> -
> -## Manual building
> -
> -1. Set up the build environment (this will modify your environment variables)
> -
> - `$ . edk2/edksetup.sh`
> -
> - (This step _depends_ on **WORKSPACE** being set as per above.)
> -1. Build BaseTools
> -
> - `make -C edk2/BaseTools`
> -
> - (BaseTools can currently not be built in parallel, so do not specify any `-j`
> - option, either on the command line or in a **MAKEFLAGS** environment
> - variable.)
> -
> -### Build options
> -There are a number of options that can (or must) be specified at the point of
> -building. Their default values are set in `edk2/Conf/target.txt`. If we are
> -working only on a single platform, it makes sense to just update this file.
> -
> -target.txt option | command line | Description
> -------------------|--------------|------------
> -ACTIVE_PLATFORM | `-p` | Description file (.dsc) of platform.
> -TARGET | `-b` | One of DEBUG, RELEASE or NOOPT.
> -TARGET_ARCH | `-a` | Architecture to build for.
> -TOOL_CHAIN_TAG | `-t` | Toolchain profile to use for building.
> -
> -There is also MAX_CONCURRENT_THREAD_NUMBER (`-n`), roughly equivalent to
> -`make -j`.
> -
> -When specified on command line, `-b` can be repeated multiple times in order to
> -build multiple targets sequentially.
> -
> -After a successful build, the resulting images can be found in
> -`Build/{Platform Name}/{TARGET}_{TOOL_CHAIN_TAG}/FV`.
> -
> -### Build a platform
> -The main build process _can_ run in parallel - so figure out how many threads we
> -have available.
> -
> -```
> -$ getconf _NPROCESSORS_ONLN
> -8
> -```
> -OK, so we have 8 CPUs - let's tell the build to use a little more than that:
> -```
> -$ NUM_CPUS=$((`getconf _NPROCESSORS_ONLN` + 2))
> -```
> -For the toolchain tag, use GCC5 for gcc version 5 or later, GCC4x for
> -earlier versions, or CLANG35/CLANG38 as appropriate when building with clang.
> -```
> -$ build -n $NUM_CPUS -a AARCH64 -t GCC5 -p Platform/ARM/JunoPkg/ArmJuno.dsc
> -```
> -(Note that the description file gets resolved by the build command through
> -searching in all locations specified in **PACKAGES_PATH**.)
> -
> -#### If cross-compiling
> -When cross-compiling, or building with a different version of the compiler than
> -the default `gcc` or `clang`(/binutils), we additionally need to inform the
> -build command which toolchain to use. We do this by setting the environment
> -variable `{TOOL_CHAIN_TAG}_{TARGET_ARCH}_PREFIX` - in the case above,
> -**GCC5_AARCH64_PREFIX**.
> -
> -So, referring to the cross compiler toolchain table above, we should prepend the `build` command line with `GCC5_AARCH64_PREFIX=aarch64-linux-gnu-`.
> -
> -## Using uefi-tools helper scripts
> -uefi-tools is a completely unofficial set of helper-scripts developed by Linaro.
> -They automate figuring out all of the manual options above, and store the paths
> -to platform description files in a separate configuration file. Additionally,
> -they simplify bulk-building large numbers of platforms.
> -
> -The (best effort) intent is to keep this configuration up to date with all
> -platforms that exist in the edk2-platforms master branch.
> -
> -The equivalent of the manual example above would be
> -```
> -$ git clone https://git.linaro.org/uefi/uefi-tools.git
> -...
> -$ ./uefi-tools/edk2-build.sh juno
> -...
> -------------------------------------------------------------
> - aarch64 Juno (AARCH64) RELEASE pass
> -------------------------------------------------------------
> -pass 1
> -fail 0
> -```
> -The build finishes with a summary of which platforms/targets were built, which
> -succeeded and which failed (and the total number of either).
> -
> -Like the `build` command itself, `edk2-build.sh` it supports specifying multiple
> -targets on a single command line, but it also lets you specify multiple
> -platforms (or `all` for building all known platforms). So in order to build all
> -platforms described by the configuration file, for both DEBUG and RELEASE
> -targets:
> -```
> -$ ./uefi-tools/edk2-build.sh -b DEBUG -b RELEASE
> -```
> -
> -# How To Build (Windows Environment)
> -
> -(I genuinely have no idea. Please help!)
> -
> -
> -# Supported Platforms
> -
> -These are the platforms currently supported by this tree - grouped by
> -Processor/SoC vendor, rather than platform vendor.
> -
> -If there are any additional build steps beyond the generic ones listed above,
> -they will be documented with the platform.
> -
> -## AMD
> -* [Cello](Platform/LeMaker/CelloBoard)
> -* [Overdrive](Platform/AMD/OverdriveBoard)
> -* [Overdrive 1000](Platform/SoftIron/Overdrive1000Board)
> -
> -## ARM
> -* [Juno](Platform/ARM/JunoPkg)
> -* [Versatile Express](Platform/ARM/VExpressPkg)
> -
> -## Hisilicon
> -* [D02](Platform/Hisilicon/D02)
> -* [D03](Platform/Hisilicon/D03)
> -* [D05](Platform/Hisilicon/D05)
> -* [HiKey](Platform/Hisilicon/HiKey)
> -
> -## Marvell
> -* [Armada 70x0](Platform/Marvell/Armada)
> -
> -## Socionext
> -* [SynQuacer](Platform/Socionext/DeveloperBox)
> -
> -# Maintainers
> -
> -See [Maintainers.txt](Maintainers.txt).
> +This branch holds all platforms actively maintained against the
> +[edk2](https://github.com/tianocore/edk2) master branch.
> +
> +For generic information about the edk2-platforms repository, and the process
> +under which _stable_ and _devel_ branches can be added for individual platforms,
> +please see
> +[the introduction on the about branch](https://github.com/tianocore/edk2-platforms/blob/about/Readme.md).
> +
> +# INDEX
> +* [Overview](#overview)
> +* [How To Build (Linux Environment)](#how-to-build-linux-environment)
> + * [Manual building](#manual-building)
> + * [Using uefi-tools helper scripts](#using-uefi-tools-helper-scripts)
> +* [How To Build (Windows Environment)](#how-to-build-windows-environment)
> +* [Supported Platforms](#supported-platforms)
> +* [Maintainers](#maintainers)
> +
> +# Overview
> +
> +Platform description files can be found under `Platform/{Vendor}/{Platform}`.
> +
> +Many platforms require additional image processing beyond the EDK2 build.
> +Any such steps should be documented (as a Readme.md), and any necessary helper
> +scripts be contained, under said platform directory.
> +
> +Any contributions to this branch should be submitted via email to the
> +edk2-devel mailing list with a subject prefix of `[platforms]`. See
> +[Laszlo's excellent guide](https://github.com/tianocore/tianocore.github.io/wiki/Laszlo's-unkempt-git-guide-for-edk2-contributors-and-maintainers) for details
> +on how to do this successfully.
> +
> +# How to build (Linux Environment)
> +
> +## Prerequisites
> +The build tools themselves depend on Python (2) and libuuid. Most Linux systems
> +will come with a Python environment installed by default, but you usually need
> +to install uuid-dev (or uuid-devel, depending on distribution) manually.
> +
> +## If cross compiling
> +If building EDK2 for a different archtecture than the build machine, you need to
> +obtain an appropriate cross-compiler. X64 (x86_64) compilers also support IA32,
> +but the reverse may not always be true.
> +
> +Target architecture | Cross compilation prefix
> +--------------------|-------------------------
> +AARCH64 | aarch64-linux-gnu-
> +ARM | arm-linux-gnueabihf-
> +IA32 | i?86-linux-gnu-* _or_ x86_64-linux-gnu-
> +IPF | ia64-linux-gnu
> +X64 | x86_64-linux-gnu-
> +
> +\* i386, i486, i586 or i686
> +
> +### GCC
> +Linaro provides GCC toolchains for
> +[aarch64-linux-gnu](https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/)
> +and [arm-linux-gnueabihf](https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/)
> +compiled to run on x86_64/i686 Linux and i686 Windows. Some Linux distributions
> +provide their own packaged cross-toolchains.
> +
> +### clang
> +Clang does not require separate cross compilers, but it does need a
> +target-specific binutils. These are included with any prepackaged GCC toolchain
> +(see above), or can be installed or built separately.
> +
> +## Obtaining source code
> +1. Create a new folder (directory) on your local development machine
> + for use as your workspace. This example uses `/work/git/tianocore`, modify as
> + appropriate for your needs.
> + ```
> + $ export WORKSPACE=/work/git/tianocore
> + $ mkdir -p $WORKSPACE
> + $ cd $WORKSPACE
> + ```
> +
> +1. Into that folder, clone:
> + 1. [edk2](https://github.com/tianocore/edk2)
> + 1. [edk2-platforms](https://github.com/tianocore/edk2-platforms)
> + 1. [edk2-non-osi](https://github.com/tianocore/edk2-non-osi) (if building
> + platforms that need it)
> + ```
> + $ git clone https://github.com/tianocore/edk2.git
> + ...
> + $ git clone https://github.com/tianocore/edk2-platforms.git
> + ...
> + $ git clone https://github.com/tianocore/edk2-non-osi.git
> + ```
> +
> +1. Set up a **PACKAGES_PATH** to point to the locations of these three
> + repositories:
> +
> + `$ export PACKAGES_PATH=$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi`
> +
> +## Manual building
> +
> +1. Set up the build environment (this will modify your environment variables)
> +
> + `$ . edk2/edksetup.sh`
> +
> + (This step _depends_ on **WORKSPACE** being set as per above.)
> +1. Build BaseTools
> +
> + `make -C edk2/BaseTools`
> +
> + (BaseTools can currently not be built in parallel, so do not specify any `-j`
> + option, either on the command line or in a **MAKEFLAGS** environment
> + variable.)
> +
> +### Build options
> +There are a number of options that can (or must) be specified at the point of
> +building. Their default values are set in `edk2/Conf/target.txt`. If we are
> +working only on a single platform, it makes sense to just update this file.
> +
> +target.txt option | command line | Description
> +------------------|--------------|------------
> +ACTIVE_PLATFORM | `-p` | Description file (.dsc) of platform.
> +TARGET | `-b` | One of DEBUG, RELEASE or NOOPT.
> +TARGET_ARCH | `-a` | Architecture to build for.
> +TOOL_CHAIN_TAG | `-t` | Toolchain profile to use for building.
> +
> +There is also MAX_CONCURRENT_THREAD_NUMBER (`-n`), roughly equivalent to
> +`make -j`.
> +
> +When specified on command line, `-b` can be repeated multiple times in order to
> +build multiple targets sequentially.
> +
> +After a successful build, the resulting images can be found in
> +`Build/{Platform Name}/{TARGET}_{TOOL_CHAIN_TAG}/FV`.
> +
> +### Build a platform
> +The main build process _can_ run in parallel - so figure out how many threads we
> +have available.
> +
> +```
> +$ getconf _NPROCESSORS_ONLN
> +8
> +```
> +OK, so we have 8 CPUs - let's tell the build to use a little more than that:
> +```
> +$ NUM_CPUS=$((`getconf _NPROCESSORS_ONLN` + 2))
> +```
> +For the toolchain tag, use GCC5 for gcc version 5 or later, GCC4x for
> +earlier versions, or CLANG35/CLANG38 as appropriate when building with clang.
> +```
> +$ build -n $NUM_CPUS -a AARCH64 -t GCC5 -p Platform/ARM/JunoPkg/ArmJuno.dsc
> +```
> +(Note that the description file gets resolved by the build command through
> +searching in all locations specified in **PACKAGES_PATH**.)
> +
> +#### If cross-compiling
> +When cross-compiling, or building with a different version of the compiler than
> +the default `gcc` or `clang`(/binutils), we additionally need to inform the
> +build command which toolchain to use. We do this by setting the environment
> +variable `{TOOL_CHAIN_TAG}_{TARGET_ARCH}_PREFIX` - in the case above,
> +**GCC5_AARCH64_PREFIX**.
> +
> +So, referring to the cross compiler toolchain table above, we should prepend the `build` command line with `GCC5_AARCH64_PREFIX=aarch64-linux-gnu-`.
> +
> +## Using uefi-tools helper scripts
> +uefi-tools is a completely unofficial set of helper-scripts developed by Linaro.
> +They automate figuring out all of the manual options above, and store the paths
> +to platform description files in a separate configuration file. Additionally,
> +they simplify bulk-building large numbers of platforms.
> +
> +The (best effort) intent is to keep this configuration up to date with all
> +platforms that exist in the edk2-platforms master branch.
> +
> +The equivalent of the manual example above would be
> +```
> +$ git clone https://git.linaro.org/uefi/uefi-tools.git
> +...
> +$ ./uefi-tools/edk2-build.sh juno
> +...
> +------------------------------------------------------------
> + aarch64 Juno (AARCH64) RELEASE pass
> +------------------------------------------------------------
> +pass 1
> +fail 0
> +```
> +The build finishes with a summary of which platforms/targets were built, which
> +succeeded and which failed (and the total number of either).
> +
> +Like the `build` command itself, `edk2-build.sh` it supports specifying multiple
> +targets on a single command line, but it also lets you specify multiple
> +platforms (or `all` for building all known platforms). So in order to build all
> +platforms described by the configuration file, for both DEBUG and RELEASE
> +targets:
> +```
> +$ ./uefi-tools/edk2-build.sh -b DEBUG -b RELEASE
> +```
> +
> +# How To Build (Windows Environment)
> +
> +These instructions will be a summary of the
> +[Windows Systems wiki entry](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems).
> +The wiki entry is targeted towards using the Visual Studio compiler. The
> +instructions below will have some extra steps if you are cross-compiling with GCC.
> +
> +## Prerequisites
> +You will need Git for Windows and Visual Studio installed to build EDK2 from source.
> +If you wish to build the build tools, you will also need Python 2.7 for Windows
> +and CxFreeze.
> +
> +## If cross compiling
> +If building EDK2 for a different architecture than the build machine, you need to
> +obtain an appropriate cross-compiler. X64 (x86_64) compilers also support IA32,
> +but the reverse may not always be true.
> +
> +Target architecture | Cross compilation prefix
> +--------------------|-------------------------
> +ARM | arm-eabi-
> +
> +### GCC
> +Linaro provides a Windows-compatible GCC toolchain for [arm-eabi](https://releases.linaro.org/components/toolchain/binaries/latest/arm-eabi/)
> +compiled to run on x86_64/i686 Windows. Select the i686 mingw32 variant.
> +
> +To use the GCC toolchain, you will also need a Windows-compatible GCC environment
> +like [MinGW](http://mingw.org/). Specifically you will need the GNU make tool.
> +
> +## Obtaining source code
> +1. Create a new folder (directory) on your local development machine
> + for use as your workspace. This example uses `C:\git\tianocore`, modify as
> + appropriate for your needs.
> +
> +1. In a Windows command prompt:
> + ```
> + > set WORKSPACE=C:\git\tianocore
> + > mkdir %WORKSPACE%
> + > cd %WORKSPACE%
> + ```
> +
> +1. Into that folder, clone:
> + 1. [edk2](https://github.com/tianocore/edk2)
> + 1. [edk2-platforms](https://github.com/tianocore/edk2-platforms)
> + 1. [edk2-non-osi](https://github.com/tianocore/edk2-non-osi) (if building
> + platforms that need it)
> + ```
> + > git clone https://github.com/tianocore/edk2.git
> + ...
> + > git clone https://github.com/tianocore/edk2-platforms.git
> + ...
> + > git clone https://github.com/tianocore/edk2-non-osi.git
> + ```
> +
> +1. Clone submodules
> + ```
> + > pushd edk2
> + > git submodule update --init --recursive
> + > popd
> + ```
> +
> +1. Set up a **PACKAGES_PATH** to point to the locations of these three
> + repositories:
> +
> + `> set PACKAGES_PATH=%WORKSPACE%/edk2;%WORKSPACE%/edk2-platforms;%WORKSPACE%/edk2-non-osi`
> +
> +### If cross-compiling with GCC
> +1. Download [MinGW](http://mingw.org/) and get the **make** executable. Copy
> +make.exe and any library dependencies to a folder in your workspace.
> + ```
> + > mkdir %WORKSPACE%\MinGW
> + > pushd %WORKSPACE%\MinGW
> + ... copy make.exe and any library dependencies into MinGW folder ...
> + > popd
> + ```
> +(Note sometimes the MinGW installer prepends **mingw32-** before **make.exe**.
> +You should rename the exe to make before proceeding.)
> +
> +1. Download your GCC cross-compiler and place it in your workspace
> + ```
> + > mkdir %WORKSPACE%\Toolchains
> + > pushd %WORKSPACE%\Toolchains
> + ... copy GCC cross-compiler into Toolchains folder ...
> + > popd
> + ```
> +
> +## Manual building
> +1. Set up the build environment (this will modify your environment variables)
> +
> + `> edk2\edk2setup.bat`
> +
> + (This step _depends_ on **WORKSPACE** being set as per above.)
> +
> +1. Get the BaseTools. You can either build them from source or fetch prebuilt binaries.
> + * To build from source, follow the Windows instructions found [here](https://github.com/tianocore/edk2/blob/master/BaseTools/BuildNotes.txt).
> + * To use prebuilt binaries, clone
> + [edk2-BaseTools-win32](https://github.com/tianocore/edk2-BaseTools-win32)
> + and set **EDK_TOOLS_DIR** to point to this location.
> + ```
> + > git clone https://github.com/tianocore/edk2-BaseTools-win32.git
> + ...
> + > set EDK_TOOLS_DIR=%WORKSPACE%/edk2-BaseTools-win32
> + ```
> +
> +1. Install the ASL compiler (if necessary) for your platform. Follow
> +the instructions found [here](https://github.com/tianocore/tianocore.github.io/wiki/Asl-Setup).
> +
> +### If cross-compiling with GCC
> +1. Set **PATH** to include the location of your MinGW make executable and cross-compiling toolchain bin folder.
> +
> + `> set PATH=%WORKSPACE%\MinGW;%WORKSPACE%\Toolchains\<Cross Compiler>\bin;%PATH%`
> +
> +### Build options
> +There are a number of options that can (or must) be specified at the point of
> +building. Their default values are set in `edk2\Conf\target.txt`. If we are
> +working only on a single platform, it makes sense to just update this file.
> +
> +target.txt option | command line | Description
> +------------------|--------------|------------
> +ACTIVE_PLATFORM | `-p` | Description file (.dsc) of platform.
> +TARGET | `-b` | One of DEBUG, RELEASE or NOOPT.
> +TARGET_ARCH | `-a` | Architecture to build for.
> +TOOL_CHAIN_TAG | `-t` | Toolchain profile to use for building.
> +
> +There is also MAX_CONCURRENT_THREAD_NUMBER (`-n`), roughly equivalent to
> +`make -j`.
> +
> +When specified on command line, `-b` can be repeated multiple times in order to
> +build multiple targets sequentially.
> +
> +After a successful build, the resulting images can be found in
> +`%WORKSPACE%\Build\{Platform Name}\{TARGET}_{TOOL_CHAIN_TAG}\FV`.
> +
> +### Build a platform
> +The main build process _can_ run in parallel - so figure out how many threads we
> +have available.
> +
> +```
> +> echo %NUMBER_OF_PROCESSORS%
> +8
> +```
> +OK, so we have 8 CPUs - let's tell the build to use a little more than that:
> +```
> +> set /A NUM_CPUS=%NUMBER_OF_PROCESSORS%+2
> +```
> +For the toolchain tag, select a toolchain that is compatible with building in a Windows Environment. Search for 'Supported Tool Chains' in tools_def.txt to see the valid options for `TOOL_CHAIN_TAG`. If using Visual Studio Compiler, consult the
> +[VS Toolchain Matrix](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems-ToolChain-Matrix)
> +to determine the proper VS `TOOL_CHAIN_TAG`.
> +
> +```
> +> build -n %NUM_CPUS% -a ARM -t GCC5 -p Platform/NXP/SABRESD_IMX6Q_1GB/SABRESD_IMX6Q_1GB.dsc
> +```
> +
> +(Note that the description file gets resolved by the build command through
> +searching in all locations specified in **PACKAGES_PATH**.)
> +
> +#### If cross-compiling
> +When cross-compiling, we additionally need to inform the
> +build command which toolchain to use. We do this by setting the environment
> +variable `{TOOL_CHAIN_TAG}_{TARGET_ARCH}_PREFIX` - in the case above,
> +**GCC5_ARM_PREFIX**.
> +
> +So, referring to the cross compiler toolchain table above, we should prepend the `build` command line with
> +
> + > set GCC5_ARM_PREFIX=arm-eabi-
> +
> +# Supported Platforms
> +
> +These are the platforms currently supported by this tree - grouped by
> +Processor/SoC vendor, rather than platform vendor.
> +
> +If there are any additional build steps beyond the generic ones listed above,
> +they will be documented with the platform.
> +
> +## AMD
> +* [Cello](Platform/LeMaker/CelloBoard)
> +* [Overdrive](Platform/AMD/OverdriveBoard)
> +* [Overdrive 1000](Platform/SoftIron/Overdrive1000Board)
> +
> +## ARM
> +* [Juno](Platform/ARM/JunoPkg)
> +* [Versatile Express](Platform/ARM/VExpressPkg)
> +
> +## Hisilicon
> +* [D02](Platform/Hisilicon/D02)
> +* [D03](Platform/Hisilicon/D03)
> +* [D05](Platform/Hisilicon/D05)
> +* [HiKey](Platform/Hisilicon/HiKey)
> +
> +## Marvell
> +* [Armada 70x0](Platform/Marvell/Armada)
> +
> +## Socionext
> +* [SynQuacer](Platform/Socionext/DeveloperBox)
> +
> +# Maintainers
> +
> +See [Maintainers.txt](Maintainers.txt).
> --
> 2.16.2.gvfs.1.33.gf5370f1
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-06-29 10:52 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-29 3:42 [PATCH edk2-platforms v1 0/1]Readme: Add instructions to build in a Windows Environment Chris Co
2018-06-29 3:42 ` [PATCH edk2-platforms v1 1/1] Readme: " Chris Co
2018-06-29 10:52 ` Leif Lindholm
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox