Git Product home page Git Product logo

edk2-platforms's Introduction

This branch holds all platforms actively maintained against the 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.

The majority of the content in the EDK II open source project uses a BSD-2-Clause Plus Patent License. Additional details on EDK II open source project code contributions can be found in the edk2 repository Readme.md.

INDEX

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 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 and 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
    
  2. Into that folder, clone:

    1. edk2
    2. edk2-platforms
    3. edk2-non-osi (if building platforms that need it)
    $ git clone https://github.com/tianocore/edk2.git
    $ git submodule update --init
    ...
    $ git clone https://github.com/tianocore/edk2-platforms.git
    ...
    $ git clone https://github.com/tianocore/edk2-non-osi.git
    
  3. 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.)

  2. 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

BeagleBoard

Hisilicon

Intel

For more information, see the EDK II Minimum Platform Specification.

Other Platforms

Intel® Quark SoC X1000 based platforms
Minnowboard Max/Turbot based on Intel Valleyview2 SoC

Marvell

Raspberry Pi

Socionext

Maintainers

See Maintainers.txt.

edk2-platforms's People

Contributors

alexeifedorov avatar bowenzhouxiaohu avatar chandnich avatar chaselchiu avatar dandanbi avatar daniileg avatar girishpathak avatar hwu25 avatar hzhuang1 avatar iworam avatar jaszczyk-grzegorz avatar jyao1 avatar lcp avatar lgao4 avatar lzeng14 avatar makubacki avatar marcchen246 avatar mcb30 avatar mdkinney avatar nate-desimone avatar pbatard avatar samimujawar avatar semihalf-michalec-tomasz avatar shenglei10 avatar vijayenthiran-arm avatar wojtas-marcin avatar wyq-david avatar ydong10 avatar zhichaogao avatar zhijufan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.