#
#  Copyright (c) 2006, Intel Corporation
#
#  All rights reserved. This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution.  The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php

#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#  Filename: target.template
#
#  ALL Paths are Relative to WORKSPACE

#  Separate multiple LIST entries with a SINGLE SPACE character, do not use comma characters.
#  Un-set an option by either commenting out the line, or not setting a value.

#
#  PROPERTY              Type       Use         Description
#  ----------------      --------   --------    -----------------------------------------------------------
#  ACTIVE_PLATFORM       Filename   Recommended Specify the WORKSPACE relative Path and Filename 
#                                               of the platform FPD file that will be used for the build
#                                               This line is required if and only if the current working
#                                               directory does not contain one or more FPD files.
ACTIVE_PLATFORM       = EdkNt32Pkg/Nt32.fpd

#  TARGET                List       Optional    Zero or more of the following: DEBUG, RELEASE, 
#                                               UserDefined; separated by a space character.  
#                                               If the line is missing or no value is specified, all 
#                                               valid targets specified in the FPD file will attempt 
#                                               to be built.  The following line will build all platform
#                                               targets.
# TARGET                = 

#  TARGET_ARCH           List       Optional    What kind of architecture is the binary being target for. 
#                                               One, or more, of the following, IA32, IA64, X64, EBC or ARM.
#                                               Multiple values can be specified on a single line, using 
#                                               space charaters to separate the values.  These are used 
#                                               during the parsing of an FPD file, restricting the build
#                                               output target(s.)
#                                               The Build Target ARCH is determined by a logical AND of:
#                                               FPD BuildOptions: <SupportedArchitectures> tag
#                                               If not specified, then all valid architectures specified 
#                                               in the FPD file, for which tools are available, will be 
#                                               built.
# TARGET_ARCH           = 

#  TOOL_DEFINITION_FILE  Filename  Optional   Specify the name of the filename to use for specifying 
#                                             the tools to use for the build.  If not specified, 
#                                             tools_def.txt will be used for the build.  This file 
#                                             MUST be located in the WORKSPACE/Tools/Conf directory.
TOOL_CHAIN_CONF       = Tools/Conf/tools_def.txt

#  TAGNAME               List      Optional   Specify the name(s) of the tools_def.txt TagName to use.  
#                                             If not specified, all applicable TagName tools will be 
#                                             used for the build.  The list uses space character separation.
TOOL_CHAIN_TAG        = MSFT

