Intel(R) Platform Innovation Framework for EFI
EFI Development Kit II (EDK II)
Root Package 1.00
2008-05-22

Intel is a trademark or registered trademark of Intel Corporation or its
subsidiaries in the United States and other countries.
* Other names and brands may be claimed as the property of others.
Copyright (c) 2007 - 2008, Intel Corporation  All rights reserved.

EDK II packages are in the development phase. They consist of:

  BuildNotes2.txt         - The build notes for this package
  BaseTools               - Build -specific tools that are designed to help the
                            developer create and modify drivers and libraries
  DuetPkg                 - UEFI 2.1.PI 1.0 boot image creation platform
  EdkShellBinPkg          - Binaries of full shell, minimum shell and commands
  FatBinPkg               - Binaries built from the FatPkg 
  IntelFrameworkPkg       - Tiano/Framework Includes and Libraries
  IntelFrameworkModulePKg - Tiano/Framework Includes and Libraries
  MdeModulePkg            - UEFI 2.1/PI 1.0 compliant modules
  MdePkg                  - Industry-standard headers and libraries
  Nt32Pkg                 - UEFI 2.1/PI 1.0 emulation environment for Windows
  OptionRomPkg            - UEFI 2.1 peripheral drivers
  UnixPkg                 - UEFI 2.1/PI 1.0 emulation environment for Unix


-------------------------------------------------------------------------------
The most recent version of the setup instructions is available on the EDK II
web-site:
  https://edk2.tianocore.org/installation.html


-------------------------------------------------------------------------------
Quick Start (Windows Development Platform)
-----------

In a command prompt window, change to the top-level directory of the EDK II 
source.

Note:
  The first time the edksetup script is executed, it creates three files in the
  %WORKSPACE%\Conf directory. The files: tools_def.txt, target.txt and
  build_rule.txt, are only created if they do not exist, if they exist, they
  are not touched.

First, set up your project workspace. If you have previously initialized this
WORKSPACE, and a newer version of the *.template files in
WORKSPACE\BaseTools\Conf exists, remove the *.txt files in the WORKSPACE\Conf
directory prior to running the edksetup script.

For the reference build of the Nt32 Platform emulation environment, use the 
edksetup.bat option: --nt32. For building other platforms or modules, this
option is not required, as Visual Studio standard includes, libraries and/or
dlls are not required for normal development.

    c:\MyWork\edk2\> edksetup --nt32

The default tool chain (named MYTOOLS) is pre-configured to use VS2005 for IA32
and X64 target architectures and the DDK for IPF target architectures. To use a
different tool chain, either modify the tools_def.txt file's MYTOOLS entries,
or modify the %WORKSPACE%\Conf\target.txt file's TOOL_CHAIN_TAG. The pre-defined
tags are listed near the top of the %WORKSPACE%\Conf\tools_def.txt file, below
the Supported Tool Chains comment.
Alternatively, you may use the build command's -t option to specify a different
tool chain tag name: build -t VS2003 ... , for example.  Using this method will
require that you always use the build command's -t option.


Next, go to the module directory and begin to build.  This example is for the
HelloWorld application.

    c:\MyWork\edk2\> cd MdeModulePkg\Application\HelloWorld
    c:\MyWork\edk2\> build

If you want to build the a module in another package (for example, 
MdePkg\Library\BaseLib\BaseLib.inf), please edit the file,
%WORKSPACE%\Conf\Target.txt, first.

Change the following line
    ACTIVE_PLATFORM       = MdeModulePkg/MdeModulePkg.dsc
to
    ACTIVE_PLATFORM       = MdePkg/MdePkg.dsc

Then go to MdePkg\Library\BaseLib directory and type build:
    c:\MyWork\edk2\> cd MdePkg\Library\BaseLib
    c:\MyWork\edk2\> build

If you want build a platform, ACTIVE_PLATFORM must be set to your desired
platform dsc file, go to directory which must be not a module's directory, and
run "build" command.

Instead of changing Target.txt, you can specify platform, module and/or
architecture on command line.
For example, if you want to build NT32 platform, you can just type 

    c:\MyWork\edk2\> build -p Nt32Pkg\Nt32Pkg.dsc -a IA32

and if you want to build HelloWorld module, you can just type

    c:\MyWork\edk2\> build -p Nt32Pkg\Nt32Pkg.dsc -a IA32 -m MdeModulePkg\Application\HelloWorld\HelloWorld.inf

Other helpful command line options of build tool include "-v" and "-d".
The "-v" option is used to turn on the verbose build, which provide more
information during the build. "-d <debug level 0-9>" option is used to
turn on the debug information which is helpful debugging build tools.

For more information on build options, please try "build -h" on command line.

Note:
  The Windows style help option "/?" is not a valid option for the build
  command.


-------------------------------------------------------------------------------
Supported build targets
-----------------------

all       - Build whole platform or module. It can be ignored.
genc      - Generate AutoGen.c, AutoGen.h and <ModuleName>.depex files only.
genmake   - Generate makefiles in addition to files generated by "genc" target.
clean     - Clean intermediate files
cleanall  - Clean all generated files and directories during build, except the
            generated Makefile files (top level and module makefiles)
cleanlib  - Clean all generated files and directories during library build
run       - Launch NT32 shell (only valid for NT32 platform)

-------------------------------------------------------------------------------
Tools in Python
---------------

* Run buld tool written in Python from source
  The build tool written in Python can be executed from its source directly as
  long as you have the Python interpreter (version 2.5) installed. The source
  of Python code is locating at:

    https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools/Source/Python

  where:

    build/build.py      - The entry tool of build tools

  "build.py" steps:
    1. Run "edksetup.bat"
    2. set PYTHONPATH to the local directory of above source
       (BaseTools/Source/Python)
    3. Set ACTIVE_PLATFORM in WORKSPACE\Conf
    4. Go to platform or module directory
    5. Run "<python_interpreter.exe> <python_source_dir>/build/build.py" or
       "<python_source_dir>/build/build.py" directly.

* Convert Python source to exe file
  The tools written in Python can be coverted into executable program which can
  be executed without Python interpreter. One of the conversion tools is called
  cx_Freeze, available at: 

    http://sourceforge.net/projects/cx-freeze/

  If you have installed cx_Freeze at c:\cx_Freeze-3.0.3. Use the following
  command lines to convert MyBuild.py to a Windows executable.

    set PYTHONPATH=<buildtools>\BaseTools\Source\Python
    c:\cx_Freeze-3.0.3\FreezePython.exe --include-modules=encodings.cp437,encodings.gbk,encodings.utf_16,encodings.utf_8 --install-dir=.\mybuild MyBuild.py

  The generated .exe files are put in "mybuild" subdirectory.

