mirror of https://github.com/acidanthera/audk.git
a) Cleaned tools_def.template
b) Changed overriding priority of tool chain definition. Now right non-* has higher priority. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1744 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
713ace4c96
commit
8c84e1b1ac
|
@ -15,6 +15,23 @@ IDENTIFIER = Default TOOL_CHAIN_CONF
|
|||
####################################################################################
|
||||
#
|
||||
# format: TARGET_TOOLCHAIN_ARCH_COMMANDTYPE_ATTRIBUTE = <string>
|
||||
# priorty:
|
||||
# TARGET_TOOLCHAIN_ARCH_COMMANDTYPE_ATTRIBUTE (Highest)
|
||||
# ******_TOOLCHAIN_ARCH_COMMANDTYPE_ATTRIBUTE
|
||||
# TARGET_*********_ARCH_COMMANDTYPE_ATTRIBUTE
|
||||
# ******_*********_ARCH_COMMANDTYPE_ATTRIBUTE
|
||||
# TARGET_TOOLCHAIN_****_COMMANDTYPE_ATTRIBUTE
|
||||
# ******_TOOLCHAIN_****_COMMANDTYPE_ATTRIBUTE
|
||||
# TARGET_*********_****_COMMANDTYPE_ATTRIBUTE
|
||||
# ******_*********_****_COMMANDTYPE_ATTRIBUTE
|
||||
# TARGET_TOOLCHAIN_ARCH_***********_ATTRIBUTE
|
||||
# ******_TOOLCHAIN_ARCH_***********_ATTRIBUTE
|
||||
# TARGET_*********_ARCH_***********_ATTRIBUTE
|
||||
# ******_*********_ARCH_***********_ATTRIBUTE
|
||||
# TARGET_TOOLCHAIN_****_***********_ATTRIBUTE
|
||||
# ******_TOOLCHAIN_****_***********_ATTRIBUTE
|
||||
# TARGET_*********_****_***********_ATTRIBUTE
|
||||
# ******_*********_****_***********_ATTRIBUTE (Lowest)
|
||||
#
|
||||
####################################################################################
|
||||
####################################################################################
|
||||
|
@ -124,10 +141,12 @@ RELEASE_WINDDK3790x1830_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OP
|
|||
##################
|
||||
# IPF definitions
|
||||
##################
|
||||
*_WINDDK3790x1830_IPF_APP_NAME = cl.exe
|
||||
*_WINDDK3790x1830_IPF_ASM_NAME = ias.exe
|
||||
*_WINDDK3790x1830_IPF_ASM_EXT = .s
|
||||
*_WINDDK3790x1830_IPF_*_PATH = C:\WINDDK\3790.1830\bin\win64\x86
|
||||
|
||||
*_WINDDK3790x1830_IPF_APP_FLAGS = /nologo /P /TC
|
||||
*_WINDDK3790x1830_IPF_PP_FLAGS = /nologo /P /TC /FI${DEST_DIR_DEBUG}/AutoGen.h
|
||||
*_WINDDK3790x1830_IPF_CC_FLAGS = /GS- /nologo /W4 /WX /EHs-c- /Gy /c /D EFI64 /O1i /DEFI_FIRMWARE_VENDOR=L\"INTEL\" /DSTRING_ARRAY_NAME=${BASE_NAME}Strings /FI${DEST_DIR_DEBUG}/AutoGen.h /Fp${DEST_DIR_OUTPUT}/AutoGen.h.gch /Yu${DEST_DIR_DEBUG}/AutoGen.h
|
||||
*_WINDDK3790x1830_IPF_PCH_FLAGS = /GS- /nologo /W4 /WX /EHs-c- /Gy /c /D EFI64 /O1i /DEFI_FIRMWARE_VENDOR=L\"INTEL\" /DSTRING_ARRAY_NAME=${BASE_NAME}Strings /FI${DEST_DIR_DEBUG}/AutoGen.h /Fp${DEST_DIR_OUTPUT}/AutoGen.h.gch /Yc /TC
|
||||
|
@ -155,10 +174,7 @@ RELEASE_WINDDK3790x1830_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OP
|
|||
##################
|
||||
*_WINDDK3790x1830_*_ASL_FAMILY = INTEL
|
||||
*_WINDDK3790x1830_*_ASL_NAME = iasl.exe
|
||||
*_WINDDK3790x1830_IA32_ASL_PATH = C:\ASL
|
||||
*_WINDDK3790x1830_X64_ASL_PATH = C:\ASL
|
||||
*_WINDDK3790x1830_IPF_ASL_PATH = C:\ASL
|
||||
*_WINDDK3790x1830_EBC_ASL_PATH = C:\ASL
|
||||
*_WINDDK3790x1830_*_ASL_PATH = C:\ASL
|
||||
|
||||
####################################################################################
|
||||
#
|
||||
|
@ -248,10 +264,7 @@ RELEASE_VS2005PRO_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF
|
|||
##################
|
||||
*_VS2005PRO_*_ASL_FAMILY = INTEL
|
||||
*_VS2005PRO_*_ASL_NAME = iasl.exe
|
||||
*_VS2005PRO_IA32_ASL_PATH = C:\ASL
|
||||
*_VS2005PRO_X64_ASL_PATH = C:\ASL
|
||||
*_VS2005PRO_IPF_ASL_PATH = C:\ASL
|
||||
*_VS2005PRO_EBC_ASL_PATH = C:\ASL
|
||||
*_VS2005PRO_*_ASL_PATH = C:\ASL
|
||||
|
||||
####################################################################################
|
||||
#
|
||||
|
@ -330,10 +343,7 @@ RELEASE_VS2005PRO_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF
|
|||
#
|
||||
# *_*_*_ASL_FAMILY = INTEL
|
||||
# *_*_*_ASL_NAME = iasl.exe
|
||||
# *_*_IA32_ASL_PATH = C:\ASL
|
||||
# *_*_X64_ASL_PATH = C:\ASL
|
||||
# *_*_IPF_ASL_PATH = C:\ASL
|
||||
# *_*_EBC_ASL_PATH = C:\ASL
|
||||
# *_*_*_ASL_PATH = C:\ASL
|
||||
#
|
||||
####################################################################################
|
||||
#
|
||||
|
@ -343,10 +353,7 @@ RELEASE_VS2005PRO_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF
|
|||
#
|
||||
# *_*_*_ASL_FAMILY = MSFT
|
||||
# *_*_*_ASL_NAME = asl.exe
|
||||
# *_*_IA32_ASL_PATH = C:\ASL
|
||||
# *_*_X64_ASL_PATH = C:\ASL
|
||||
# *_*_IPF_ASL_PATH = C:\ASL
|
||||
# *_*_EBC_ASL_PATH = C:\ASL
|
||||
# *_*_*_ASL_PATH = C:\ASL
|
||||
#
|
||||
|
||||
####################################################################################
|
||||
|
@ -359,20 +366,20 @@ RELEASE_VS2005PRO_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF
|
|||
# ASL - Intel ACPI Source Language COmpiler
|
||||
#
|
||||
####################################################################################
|
||||
*_MYTOOLS_*_*_FAMILY = MSFT
|
||||
|
||||
*_MYTOOLS_*_CC_NAME = cl.exe
|
||||
*_MYTOOLS_*_SLINK_NAME = lib.exe
|
||||
*_MYTOOLS_*_DLINK_NAME = link.exe
|
||||
*_MYTOOLS_*_ASMLINK_NAME = link.exe
|
||||
*_MYTOOLS_*_PP_NAME = cl.exe
|
||||
*_MYTOOLS_*_ASM_NAME = ml.exe
|
||||
|
||||
##################
|
||||
# IA32 definitions
|
||||
##################
|
||||
*_MYTOOLS_IA32_*_FAMILY = MSFT
|
||||
|
||||
*_MYTOOLS_IA32_CC_NAME = cl.exe
|
||||
*_MYTOOLS_IA32_SLINK_NAME = lib.exe
|
||||
*_MYTOOLS_IA32_DLINK_NAME = link.exe
|
||||
*_MYTOOLS_IA32_ASMLINK_NAME = link.exe
|
||||
*_MYTOOLS_IA32_PP_NAME = cl.exe
|
||||
*_MYTOOLS_IA32_ASM_NAME = ml.exe
|
||||
*_MYTOOLS_IA32_ASM_EXT = .asm
|
||||
*_MYTOOLS_IA32_PCH_NAME = cl.exe
|
||||
*_MYTOOLS_IA32_ASM_EXT = .asm
|
||||
|
||||
*_MYTOOLS_IA32_*_PATH = C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin
|
||||
*_MYTOOLS_IA32_*_DPATH = C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE
|
||||
|
@ -392,22 +399,14 @@ RELEASE_MYTOOLS_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /
|
|||
##################
|
||||
# x64 definitions
|
||||
##################
|
||||
*_MYTOOLS_X64_*_FAMILY = MSFT
|
||||
|
||||
*_MYTOOLS_X64_CC_NAME = cl.exe
|
||||
*_MYTOOLS_X64_SLINK_NAME = lib.exe
|
||||
*_MYTOOLS_X64_DLINK_NAME = link.exe
|
||||
*_MYTOOLS_X64_ASMLINK_NAME = link.exe
|
||||
*_MYTOOLS_X64_PP_NAME = cl.exe
|
||||
*_MYTOOLS_X64_PCH_NAME = cl.exe
|
||||
|
||||
*_MYTOOLS_X64_SLINK_FLAGS = /nologo /LTCG
|
||||
|
||||
*_MYTOOLS_X64_ASM_NAME = ml64.exe
|
||||
*_MYTOOLS_X64_ASM_EXT = .asm
|
||||
|
||||
*_MYTOOLS_X64_*_PATH = C:\WINDDK\3790.1830\bin\win64\x86\amd64
|
||||
*_MYTOOLS_X64_ASMLINK_PATH = C:\WINDDK\3790.1830\bin\bin16\
|
||||
|
||||
*_MYTOOLS_X64_SLINK_FLAGS = /nologo /LTCG
|
||||
*_MYTOOLS_X64_PP_FLAGS = /nologo /P /TC /FI${DEST_DIR_DEBUG}/AutoGen.h
|
||||
DEBUG_MYTOOLS_X64_CC_FLAGS = /nologo /X /W4 /WX /c /Gs8192 /GS- /D UNICODE /O1ib2s /GL /Gy /D EFIX64 /DOLDSMM=1 /D EFI_FIRMWARE_VENDOR=L\"INTEL\" /DSTRING_ARRAY_NAME=${BASE_NAME}Strings /FI${DEST_DIR_DEBUG}/AutoGen.h /Fp${DEST_DIR_OUTPUT}/AutoGen.h.gch /Yu${DEST_DIR_DEBUG}/AutoGen.h /Zi /Gm /EHs-c- /GF
|
||||
RELEASE_MYTOOLS_X64_CC_FLAGS = /nologo /X /W4 /WX /c /Gs8192 /GS- /D UNICODE /O1ib2s /GL /Gy /D EFIX64 /DOLDSMM=1 /D EFI_FIRMWARE_VENDOR=L\"INTEL\" /DSTRING_ARRAY_NAME=${BASE_NAME}Strings /FI${DEST_DIR_DEBUG}/AutoGen.h /Fp${DEST_DIR_OUTPUT}/AutoGen.h.gch /Yu${DEST_DIR_DEBUG}/AutoGen.h /EHs-c- /GF
|
||||
|
@ -421,19 +420,11 @@ RELEASE_MYTOOLS_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /O
|
|||
##################
|
||||
# IPF definitions
|
||||
##################
|
||||
*_MYTOOLS_IPF_*_FAMILY = MSFT
|
||||
|
||||
*_MYTOOLS_IPF_APP_NAME = cl.exe
|
||||
*_MYTOOLS_IPF_PP_NAME = cl.exe
|
||||
*_MYTOOLS_IPF_CC_NAME = cl.exe
|
||||
*_MYTOOLS_IPF_SLINK_NAME = lib.exe
|
||||
*_MYTOOLS_IPF_DLINK_NAME = link.exe
|
||||
*_MYTOOLS_IPF_PCH_NAME = cl.exe
|
||||
|
||||
*_MYTOOLS_IPF_SLINK_FLAGS = /nologo /LTCG
|
||||
|
||||
*_MYTOOLS_IPF_APP_NAME = cl.exe
|
||||
*_MYTOOLS_IPF_ASM_NAME = ias.exe
|
||||
*_MYTOOLS_IPF_ASM_EXT = .s
|
||||
|
||||
*_MYTOOLS_IPF_*_PATH = C:\WINDDK\3790.1830\bin\win64\x86
|
||||
|
||||
*_MYTOOLS_IPF_APP_FLAGS = /nologo /P /TC
|
||||
|
@ -442,6 +433,7 @@ RELEASE_MYTOOLS_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /O
|
|||
*_MYTOOLS_IPF_PCH_FLAGS = /GS- /nologo /W4 /WX /EHs-c- /Gy /c /D EFI64 /O1i /DEFI_FIRMWARE_VENDOR=L\"INTEL\" /DSTRING_ARRAY_NAME=${BASE_NAME}Strings /FI${DEST_DIR_DEBUG}/AutoGen.h /Fp${DEST_DIR_OUTPUT}/AutoGen.h.gch /Yc /TC
|
||||
*_MYTOOLS_IPF_ASM_FLAGS = -N us -X explicit -M ilp64 -N so -W4
|
||||
*_MYTOOLS_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /OPT:REF /IGNORE:4086 /MAP /MACHINE:IA64 /ENTRY:${ENTRYPOINT} /SUBSYSTEM:CONSOLE /MAP:${DEST_DIR_DEBUG}/${BASE_NAME}.map /PDB:${DEST_DIR_DEBUG}/${BASE_NAME}.pdb
|
||||
*_MYTOOLS_IPF_SLINK_FLAGS = /nologo /LTCG
|
||||
|
||||
##################
|
||||
# EBC definitions
|
||||
|
@ -451,6 +443,7 @@ RELEASE_MYTOOLS_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /O
|
|||
*_MYTOOLS_EBC_CC_NAME = iec.exe
|
||||
*_MYTOOLS_EBC_DLINK_NAME = link.exe
|
||||
*_MYTOOLS_EBC_SLINK_NAME = link.exe
|
||||
|
||||
*_MYTOOLS_EBC_*_PATH = C:\Program Files\Intel\EBC\Bin
|
||||
*_MYTOOLS_EBC_*_SPATH = "C:\Program Files\Intel\EBC\Lib\EbcLib.lib"
|
||||
|
||||
|
@ -464,7 +457,4 @@ RELEASE_MYTOOLS_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /O
|
|||
##################
|
||||
*_MYTOOLS_*_ASL_FAMILY = INTEL
|
||||
*_MYTOOLS_*_ASL_NAME = iasl.exe
|
||||
*_MYTOOLS_IA32_ASL_PATH = C:\ASL
|
||||
*_MYTOOLS_X64_ASL_PATH = C:\ASL
|
||||
*_MYTOOLS_IPF_ASL_PATH = C:\ASL
|
||||
*_MYTOOLS_EBC_ASL_PATH = C:\ASL
|
||||
*_MYTOOLS_*_ASL_PATH = C:\ASL
|
||||
|
|
|
@ -132,6 +132,7 @@ public class GlobalData {
|
|||
private static Map<FpdModuleIdentification, ToolChainMap> moduleToolChainOption = new HashMap<FpdModuleIdentification, ToolChainMap>();
|
||||
private static Map<FpdModuleIdentification, ToolChainMap> moduleToolChainFamilyOption = new HashMap<FpdModuleIdentification, ToolChainMap>();
|
||||
|
||||
private static Pattern flagPattern = Pattern.compile("[^\\\\]?(\".*?[^\\\\]\")[ \t,]+");
|
||||
/**
|
||||
Parse framework database (DB) and all SPD files listed in DB to initialize
|
||||
the environment for next build. This method will only be executed only once
|
||||
|
@ -733,153 +734,71 @@ public class GlobalData {
|
|||
ToolChainMap toolChainConfig = toolsDef.getConfig();
|
||||
String setting = null;
|
||||
|
||||
//
|
||||
// Default in tools_def.txt
|
||||
//
|
||||
setting = toolChainConfig.get(toolChainKey);
|
||||
if (setting == null) {
|
||||
setting = "";
|
||||
setting = "";
|
||||
}
|
||||
if (!commandDescription[ToolChainElement.ATTRIBUTE.value].equals(ToolChainAttribute.FLAGS.toString())) {
|
||||
return setting;
|
||||
}
|
||||
|
||||
//
|
||||
// get module specific options, if any
|
||||
// tool's option can be in .fpd and/or .msa file
|
||||
//
|
||||
// tool tag first
|
||||
ToolChainMap option = moduleToolChainOption.get(fpdModuleId);
|
||||
ToolChainKey toolChainFamilyKey = null;
|
||||
String optionString;
|
||||
ToolChainMap option = null;
|
||||
ToolChainKey toolChainFamilyKey = new ToolChainKey(commandDescription);
|
||||
|
||||
if (option != null && option.get(toolChainKey) != null)
|
||||
{
|
||||
String str = option.get(toolChainKey);
|
||||
|
||||
Pattern myPattern = Pattern.compile("[^\\\\]?(\".*?[^\\\\]\")[ \t,]+");
|
||||
Matcher matcher = myPattern.matcher(str + " ");
|
||||
while (matcher.find())
|
||||
{
|
||||
setting = setting + " " + str.substring(matcher.start(1), matcher.end(1));
|
||||
}
|
||||
}
|
||||
// else
|
||||
// {
|
||||
if (toolChainFamilyKey == null)
|
||||
{
|
||||
toolChainFamilyKey = new ToolChainKey(commandDescription);
|
||||
toolChainFamilyKey.setKey(ToolChainAttribute.FAMILY.toString(), ToolChainElement.ATTRIBUTE.value);
|
||||
String family = toolChainConfig.get(toolChainFamilyKey);
|
||||
toolChainFamilyKey.setKey(family, ToolChainElement.TOOLCHAIN.value);
|
||||
toolChainFamilyKey.setKey(ToolChainAttribute.FLAGS.toString(), ToolChainElement.ATTRIBUTE.value);
|
||||
}
|
||||
|
||||
option = moduleToolChainFamilyOption.get(fpdModuleId);
|
||||
if (option != null && option.get(toolChainFamilyKey) != null)
|
||||
{
|
||||
String str = option.get(toolChainFamilyKey);
|
||||
|
||||
Pattern myPattern = Pattern.compile("[^\\\\]?(\".*?[^\\\\]\")[ \t,]+");
|
||||
Matcher matcher = myPattern.matcher(str + " ");
|
||||
while (matcher.find())
|
||||
{
|
||||
setting = setting + " " + str.substring(matcher.start(1), matcher.end(1));
|
||||
}
|
||||
}
|
||||
// }
|
||||
toolChainFamilyKey.setKey(ToolChainAttribute.FAMILY.toString(), ToolChainElement.ATTRIBUTE.value);
|
||||
String family = toolChainConfig.get(toolChainFamilyKey);
|
||||
toolChainFamilyKey.setKey(family, ToolChainElement.TOOLCHAIN.value);
|
||||
toolChainFamilyKey.setKey(ToolChainAttribute.FLAGS.toString(), ToolChainElement.ATTRIBUTE.value);
|
||||
|
||||
//
|
||||
// get platform options, if any
|
||||
// Platform's tool chain family option
|
||||
//
|
||||
// tool tag first
|
||||
// if (platformToolChainOption != null && platformToolChainOption.get(toolChainKey) != null)
|
||||
if (platformToolChainOption.get(toolChainKey) != null)
|
||||
{
|
||||
String str = platformToolChainOption.get(toolChainKey);
|
||||
optionString = platformToolChainFamilyOption.get(toolChainFamilyKey);
|
||||
if (optionString != null) {
|
||||
setting += (" " + optionString);
|
||||
}
|
||||
|
||||
Pattern myPattern = Pattern.compile("[^\\\\]?(\".*?[^\\\\]\")[ \t,]+");
|
||||
Matcher matcher = myPattern.matcher(str + " ");
|
||||
while (matcher.find())
|
||||
{
|
||||
setting = setting + " " + str.substring(matcher.start(1), matcher.end(1));
|
||||
}
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// then tool chain family
|
||||
if (toolChainFamilyKey == null)
|
||||
{
|
||||
toolChainFamilyKey = new ToolChainKey(commandDescription);
|
||||
toolChainFamilyKey.setKey(ToolChainAttribute.FAMILY.toString(), ToolChainElement.ATTRIBUTE.value);
|
||||
String family = toolChainConfig.get(toolChainFamilyKey);
|
||||
toolChainFamilyKey.setKey(family, ToolChainElement.TOOLCHAIN.value);
|
||||
toolChainFamilyKey.setKey(ToolChainAttribute.FLAGS.toString(), ToolChainElement.ATTRIBUTE.value);
|
||||
}
|
||||
|
||||
// if (platformToolChainFamilyOption != null && platformToolChainFamilyOption.get(toolChainFamilyKey) != null)
|
||||
if (platformToolChainFamilyOption.get(toolChainFamilyKey) != null)
|
||||
{
|
||||
String str = platformToolChainFamilyOption.get(toolChainFamilyKey);
|
||||
|
||||
setting = setting + " " + str;
|
||||
|
||||
// Pattern myPattern = Pattern.compile("[^\\\\]?(\".*?[^\\\\]\")[ \t,]+");
|
||||
// Matcher matcher = myPattern.matcher(str + " ");
|
||||
// while (matcher.find())
|
||||
// {
|
||||
// setting = setting + " " + str.substring(matcher.start(1), matcher.end(1));
|
||||
// }
|
||||
}
|
||||
// }
|
||||
|
||||
return setting;
|
||||
|
||||
/*
|
||||
//
|
||||
// get module specific options, if any
|
||||
// Platform's tool chain tag option
|
||||
//
|
||||
// tool tag first
|
||||
ToolChainMap option = moduleToolChainOption.get(fpdModuleId);
|
||||
ToolChainKey toolChainFamilyKey = null;
|
||||
|
||||
if ((option == null) || (option != null && (setting = option.get(toolChainKey)) == null))
|
||||
{
|
||||
//
|
||||
// then tool chain family
|
||||
//
|
||||
toolChainFamilyKey = new ToolChainKey(commandDescription);
|
||||
toolChainFamilyKey.setKey(ToolChainAttribute.FAMILY.toString(), ToolChainElement.ATTRIBUTE.value);
|
||||
String family = toolChainConfig.get(toolChainFamilyKey);
|
||||
toolChainFamilyKey.setKey(family, ToolChainElement.TOOLCHAIN.value);
|
||||
toolChainFamilyKey.setKey(ToolChainAttribute.FLAGS.toString(), ToolChainElement.ATTRIBUTE.value);
|
||||
|
||||
option = moduleToolChainFamilyOption.get(fpdModuleId);
|
||||
if (option != null) {
|
||||
setting = option.get(toolChainFamilyKey);
|
||||
optionString = platformToolChainOption.get(toolChainKey);
|
||||
if (optionString != null) {
|
||||
Matcher matcher = flagPattern.matcher(optionString + " ");
|
||||
while (matcher.find()) {
|
||||
setting += (" " + optionString.substring(matcher.start(1), matcher.end(1)));
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// get platform options, if any
|
||||
// Module's tool chain family option
|
||||
//
|
||||
if (setting == null) {
|
||||
// tool tag first
|
||||
if (platformToolChainOption == null || (setting = platformToolChainOption.get(toolChainKey)) == null) {
|
||||
// then tool chain family
|
||||
if (toolChainFamilyKey == null) {
|
||||
toolChainFamilyKey = new ToolChainKey(commandDescription);
|
||||
toolChainFamilyKey.setKey(ToolChainAttribute.FAMILY.toString(), ToolChainElement.ATTRIBUTE.value);
|
||||
String family = toolChainConfig.get(toolChainFamilyKey);
|
||||
toolChainFamilyKey.setKey(family, ToolChainElement.TOOLCHAIN.value);
|
||||
toolChainFamilyKey.setKey(ToolChainAttribute.FLAGS.toString(), ToolChainElement.ATTRIBUTE.value);
|
||||
}
|
||||
|
||||
setting = platformToolChainFamilyOption.get(toolChainFamilyKey);
|
||||
option = moduleToolChainFamilyOption.get(fpdModuleId);
|
||||
if (option != null && (optionString = option.get(toolChainFamilyKey)) != null) {
|
||||
Matcher matcher = flagPattern.matcher(optionString + " ");
|
||||
while (matcher.find()) {
|
||||
setting += (" " + optionString.substring(matcher.start(1), matcher.end(1)));
|
||||
}
|
||||
}
|
||||
|
||||
if (setting == null) {
|
||||
setting = "";
|
||||
//
|
||||
// Module's tool chain tag option
|
||||
//
|
||||
option = moduleToolChainOption.get(fpdModuleId);
|
||||
if (option != null && (optionString = option.get(toolChainKey)) != null) {
|
||||
Matcher matcher = flagPattern.matcher(optionString + " ");
|
||||
while (matcher.find()) {
|
||||
setting += (" " + optionString.substring(matcher.start(1), matcher.end(1)));
|
||||
}
|
||||
}
|
||||
|
||||
return setting;
|
||||
*/
|
||||
}
|
||||
|
||||
public static void setToolChainEnvInfo(ToolChainInfo envInfo) {
|
||||
|
|
|
@ -29,7 +29,7 @@ public class ToolChainMap {
|
|||
//
|
||||
// From which part of key can be used to match "*"
|
||||
//
|
||||
private int matchLevel = ToolChainKey.keyLength - 2;
|
||||
private int matchLevel = ToolChainKey.keyLength - 1;
|
||||
|
||||
//
|
||||
// A Map object in which tool chain configuration information will be stored
|
||||
|
@ -211,98 +211,96 @@ public class ToolChainMap {
|
|||
///
|
||||
/// In the current tool chain definition format (in name/value pair),
|
||||
/// there're five parts in the "name". The last part of the "name" must
|
||||
/// not be "wildcard". So we should start combining "*" from the fourth part.
|
||||
/// not be "wildcard". We should start combining "*" from left to right.
|
||||
/// We'll try all the possible combinations until the value can be fetched.
|
||||
///
|
||||
/// The following code implements the logic which will try to use, for example,
|
||||
/// following key parts combinations sequentially to get the value.
|
||||
///
|
||||
/// TARGET_TOOLCHAIN_ARCH_TOOLCODE_ATTRIBUTE
|
||||
/// TARGET_TOOLCHAIN_ARCH_*_ATTRIBUTE
|
||||
/// TARGET_TOOLCHAIN_*_TOOLCODE_ATTRIBUTE
|
||||
/// TARGET_TOOLCHAIN_*_*_ATTRIBUTE
|
||||
/// TARGET_*_ARCH_TOOLCODE_ATTRIBUTE
|
||||
/// TARGET_*_ARCH_*_ATTRIBUTE
|
||||
/// TARGET_*_*_TOOLCODE_ATTRIBUTE
|
||||
/// TARGET_*_*_*_ATTRIBUTE
|
||||
/// *_TOOLCHAIN_ARCH_TOOLCODE_ATTRIBUTE
|
||||
/// *_TOOLCHAIN_ARCH_*_ATTRIBUTE
|
||||
/// *_TOOLCHAIN_*_TOOLCODE_ATTRIBUTE
|
||||
/// *_TOOLCHAIN_*_*_ATTRIBUTE
|
||||
/// *_*_ARCH_TOOLCODE_ATTRIBUTE
|
||||
/// *_*_ARCH_*_ATTRIBUTE
|
||||
/// *_*_*_TOOLCODE_ATTRIBUTE
|
||||
/// *_*_*_*_ATTRIBUTE
|
||||
/// ******_TOOLCHAIN_ARCH_TOOLCODE_ATTRIBUTE
|
||||
/// TARGET_*********_ARCH_TOOLCODE_ATTRIBUTE
|
||||
/// ******_*********_ARCH_TOOLCODE_ATTRIBUTE
|
||||
/// TARGET_TOOLCHAIN_****_TOOLCODE_ATTRIBUTE
|
||||
/// ******_TOOLCHAIN_****_TOOLCODE_ATTRIBUTE
|
||||
/// TARGET_*********_****_TOOLCODE_ATTRIBUTE
|
||||
/// ******_*********_****_TOOLCODE_ATTRIBUTE
|
||||
/// TARGET_TOOLCHAIN_ARCH_********_ATTRIBUTE
|
||||
/// ******_TOOLCHAIN_ARCH_********_ATTRIBUTE
|
||||
/// TARGET_*********_ARCH_********_ATTRIBUTE
|
||||
/// ******_*********_ARCH_********_ATTRIBUTE
|
||||
/// TARGET_TOOLCHAIN_****_********_ATTRIBUTE
|
||||
/// ******_TOOLCHAIN_****_********_ATTRIBUTE
|
||||
/// TARGET_*********_****_********_ATTRIBUTE
|
||||
/// ******_*********_****_********_ATTRIBUTE
|
||||
///
|
||||
|
||||
//
|
||||
// level is used to control if all parts of "name" have been "wildcarded"
|
||||
// The wildcard "*" appears regularly (2^n). "*" in TARGET appears 2^0
|
||||
// times at every 2^0 TARGET, "*" in TOOLCHAIN appears 2^1 times at
|
||||
// every 2^1 TOOLCHAIN, and "*" in TOOLCODE appears 2^3 times at every
|
||||
// 2^3 TOOLCODE. We're going to use this to form all the combinations of key.
|
||||
//
|
||||
int level = matchLevel;
|
||||
while (level >= 0) {
|
||||
int[] combinations = new int[matchLevel];
|
||||
for (int i = 0; i < matchLevel; ++i) {
|
||||
//
|
||||
// tmplevel is used to control if all parts of "name" between first
|
||||
// "*" and fourth name part have been "wildcarded".
|
||||
// initialize the array with 2^n
|
||||
//
|
||||
int tmpLevel = level;
|
||||
while (tmpLevel >= level) {
|
||||
String[] tmpKeySet = tmpKey.getKeySet();
|
||||
combinations[i] = 1 << (i + 1);
|
||||
}
|
||||
|
||||
//
|
||||
// when last part goes down to zero, we tried all combinations of key
|
||||
//
|
||||
int lastIndex = matchLevel - 1;
|
||||
while (combinations[lastIndex] > 0) {
|
||||
//
|
||||
// form the key which has "*" in it
|
||||
//
|
||||
for (int i = 0; i < matchLevel; ++i) {
|
||||
//
|
||||
// start again if not finished
|
||||
//
|
||||
if (combinations[i] == 0) {
|
||||
combinations[i] = 1 << (i + 1);
|
||||
}
|
||||
|
||||
//
|
||||
// half of 2^n is "*", the rest is non-*
|
||||
//
|
||||
try {
|
||||
if (!tmpKeySet[tmpLevel].equals("*")) {
|
||||
//
|
||||
// If "tmplevel" part is not "*", set it to "*".
|
||||
// For example, at first loop, the key will become
|
||||
// TARGET_TOOLCHAIN_ARCH_*_ATTRIBUTE, and at next loop,
|
||||
// become TARGET_TOOLCHAIN_*_ARCH_ATTRIBUTE
|
||||
//
|
||||
tmpKey.setKey("*", tmpLevel);
|
||||
//
|
||||
// We'll try all possible combinations between current
|
||||
// part and the fourth part.
|
||||
//
|
||||
tmpLevel = matchLevel;
|
||||
if (combinations[i] > (1 << i)) {
|
||||
tmpKey.setKey(keySet[i], i);
|
||||
} else {
|
||||
//
|
||||
// Restore original value of key if "*" at "tmplevel"
|
||||
// part of "name" has been checked
|
||||
//
|
||||
tmpKey.setKey(keySet[tmpLevel], tmpLevel);
|
||||
//
|
||||
// Try "*" at part left to "tmplevel" part of "name"
|
||||
//
|
||||
--tmpLevel;
|
||||
continue;
|
||||
tmpKey.setKey("*", i);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
//
|
||||
// Try get the value from the map
|
||||
//
|
||||
result = map.get(tmpKey);
|
||||
if (result != null) {
|
||||
//
|
||||
// The map actually has no exact key as the given "key",
|
||||
// putting it back into map can speed up the get() next time
|
||||
//
|
||||
map.put(key, result);
|
||||
return result;
|
||||
}
|
||||
combinations[i] -= 1;
|
||||
}
|
||||
|
||||
//
|
||||
// Try get the value from the map
|
||||
//
|
||||
result = map.get(tmpKey);
|
||||
if (result != null) {
|
||||
//
|
||||
// The map actually has no exact key as the given "key",
|
||||
// putting it back into map can speed up the get() next time
|
||||
//
|
||||
map.put(key, result);
|
||||
return result;
|
||||
}
|
||||
///
|
||||
/// If all possible combinations of "wildcard" between "level" and
|
||||
/// the fourth part of "name" have been tried, try the left part
|
||||
///
|
||||
--level;
|
||||
}
|
||||
|
||||
//
|
||||
// The map actually has no exact key as the given "key", putting it back
|
||||
// into map can speed up the get() next time even we got nothing.
|
||||
//
|
||||
map.put(key, result);
|
||||
return result;
|
||||
map.put(key, null);
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue