Intel(R) Platform Innovation Framework for EFI
EFI Development Kit II (EDK II)
2011-12-14

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 - 2011, Intel Corporation. All rights reserved.

EDK II packages can be checked out from the following SVN address:
http://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2 

The detailed introduction of these packages can be found in each package
description file. (The *.dec file under the package directory)


-------------------------------------------------------------------------------
The most recent version of the setup instructions is available on the EDK II
web-site:
  http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Step-by-step_instructions


-------------------------------------------------------------------------------
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 VS2008 for IA32
and X64 target architectures and DDK3790 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 VS2008 ... , for example.  Using this method will
require that you always use the build command's -t option. If you use 64-bit 
windows OS, you should use tool chain tag name with x86, such as VS2008x86.


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.4) installed. The source
  of Python code is locating at:

    http://edk2-buildtools.svn.sourceforge.net/svnroot/edk2-buildtools/trunk/BaseTools

  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.

