mirror of https://github.com/acidanthera/audk.git
220 lines
7.9 KiB
Java
220 lines
7.9 KiB
Java
|
/*
|
||
|
*
|
||
|
* Copyright 2002-2006 The Ant-Contrib project
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
package net.sf.antcontrib.cpptasks.userdefine;
|
||
|
|
||
|
import org.apache.tools.ant.Project;
|
||
|
|
||
|
import net.sf.antcontrib.cpptasks.CCTask;
|
||
|
import org.tianocore.build.toolchain.*;
|
||
|
|
||
|
public class UserDefineCompiler extends CommandLineUserDefine {
|
||
|
|
||
|
public UserDefineCompiler(CCTask cctask, UserDefineDef userdefineDef) {
|
||
|
String arch = null;
|
||
|
String os = null;
|
||
|
String vendor = null;
|
||
|
String commandType = null;
|
||
|
Project project = cctask.getProject();
|
||
|
// get command string
|
||
|
if (cctask.getArch() == null) {
|
||
|
arch = project.getProperty("ARCH");
|
||
|
if (arch == null) {
|
||
|
arch = System.getProperty("os.arch");
|
||
|
}
|
||
|
} else {
|
||
|
arch = cctask.getArch();
|
||
|
}
|
||
|
arch = arch.toUpperCase();
|
||
|
if (cctask.getOs() == null) {
|
||
|
os = project.getProperty("OS");
|
||
|
if (os == null) {
|
||
|
os = System.getProperty("os.name");
|
||
|
}
|
||
|
} else {
|
||
|
os = cctask.getOs();
|
||
|
}
|
||
|
|
||
|
commandType = userdefineDef.getType();
|
||
|
|
||
|
if (commandType != null) {
|
||
|
if (ToolChainFactory.getValue(arch + "_" + commandType + "_VENDOR") != null
|
||
|
&& ToolChainFactory.getValue(
|
||
|
arch + "_" + commandType + "_VENDOR").trim()
|
||
|
.length() > 0) {
|
||
|
vendor = ToolChainFactory.getValue(arch + "_" + commandType
|
||
|
+ "_VENDOR");
|
||
|
} else if (ToolChainFactory.getValue(arch + "_VENDOR") != null) {
|
||
|
vendor = ToolChainFactory.getValue(arch + "_VENDOR");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// look if ARCH_VENDOR_OS_COMMANDTYPE is existed
|
||
|
if (arch != null && vendor != null && os != null && commandType != null) {
|
||
|
command = project.getProperty(arch + "_" + vendor + "_" + os + "_"
|
||
|
+ commandType);
|
||
|
}
|
||
|
// look if ARCH_VENDOR_COMMANDTYPE is existed
|
||
|
if (command == null) {
|
||
|
if (arch != null && vendor != null && commandType != null) {
|
||
|
command = project.getProperty(arch + "_" + vendor + "_"
|
||
|
+ commandType);
|
||
|
}
|
||
|
}
|
||
|
// look if ARCH_COMMANDTYPE is existed
|
||
|
if (command == null) {
|
||
|
if (arch != null && commandType != null) {
|
||
|
command = project.getProperty(arch + "_" + commandType);
|
||
|
}
|
||
|
}
|
||
|
// look if COMMANDTYPE is existed
|
||
|
if (command == null) {
|
||
|
if (commandType != null) {
|
||
|
command = project.getProperty(commandType);
|
||
|
}
|
||
|
}
|
||
|
// using the default value from VENDOR_OS_COMMANDTYPE or
|
||
|
// VENDOR_COMMANDTYPE
|
||
|
if (command == null) {
|
||
|
if (vendor != null && os != null && commandType != null) {
|
||
|
String str = vendor + "_" + os + "_" + commandType;
|
||
|
command = UserDefineMapping.getDefaultCommand(str);
|
||
|
}
|
||
|
}
|
||
|
// VENDOR_COMMANDTYPE
|
||
|
if (command == null) {
|
||
|
if (vendor != null && commandType != null) {
|
||
|
String str = vendor + "_" + commandType;
|
||
|
command = UserDefineMapping.getDefaultCommand(str);
|
||
|
}
|
||
|
}
|
||
|
// just give the name whatever
|
||
|
if (command == null) {
|
||
|
command = "cl";
|
||
|
}
|
||
|
|
||
|
// initialize the includePathDelimiter
|
||
|
if (userdefineDef.getIncludepathDelimiter() != null) {
|
||
|
includePathDelimiter = userdefineDef.getIncludepathDelimiter();
|
||
|
}
|
||
|
// else find VENDOR
|
||
|
else {
|
||
|
if (vendor != null) {
|
||
|
includePathDelimiter = UserDefineMapping
|
||
|
.getIncludePathDelimiter(vendor, commandType);
|
||
|
}
|
||
|
}
|
||
|
if (includePathDelimiter == null) {
|
||
|
includePathDelimiter = "-I";
|
||
|
}
|
||
|
/*
|
||
|
* Set libSet.
|
||
|
*/
|
||
|
if (userdefineDef.getLibSet() != null
|
||
|
&& userdefineDef.getLibSet().size() > 0) {
|
||
|
String[] libList;
|
||
|
if (vendor.equalsIgnoreCase("GCC")) {
|
||
|
libSetList.add("-(");
|
||
|
for (int i = 0; i < userdefineDef.getLibSet().size(); i++) {
|
||
|
libList = userdefineDef.getLibSet().get(i).getLibs();
|
||
|
for (int j = 0; j < libList.length; j++) {
|
||
|
libSetList.add(libList[j]);
|
||
|
}
|
||
|
}
|
||
|
libSetList.add("-)");
|
||
|
} else {
|
||
|
for (int i = 0; i < userdefineDef.getLibSet().size(); i++) {
|
||
|
libList = userdefineDef.getLibSet().get(i).getLibs();
|
||
|
for (int j = 0; j < libList.length; j++) {
|
||
|
libSetList.add(libList[j]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
/*
|
||
|
* set includeFileFlag
|
||
|
*/
|
||
|
if (userdefineDef.getIncludeFile() != null) {
|
||
|
if (userdefineDef.getIncludeFileFlag() != null) {
|
||
|
includeFileFlag = userdefineDef.getIncludeFileFlag();
|
||
|
} else {
|
||
|
includeFileFlag = UserDefineMapping.getCompellingIncFileFlag(
|
||
|
vendor, commandType);
|
||
|
}
|
||
|
}
|
||
|
/*
|
||
|
* set entryPointFlag
|
||
|
*/
|
||
|
if (userdefineDef.getEntryPointvalue() != null) {
|
||
|
if (userdefineDef.getEntryPointFlag() != null) {
|
||
|
entryPointFlag = userdefineDef.getEntryPointFlag();
|
||
|
} else {
|
||
|
entryPointFlag = UserDefineMapping.getEntryPointFlag(vendor,
|
||
|
commandType);
|
||
|
}
|
||
|
}
|
||
|
/*
|
||
|
* set subSystemFlag
|
||
|
*/
|
||
|
if (userdefineDef.getSubSystemvalue() != null) {
|
||
|
if (userdefineDef.getSubSystemFlag() != null) {
|
||
|
subSystemFlag = userdefineDef.getSubSystemFlag();
|
||
|
} else {
|
||
|
subSystemFlag = UserDefineMapping.getSubSystemFlag(vendor,
|
||
|
commandType);
|
||
|
}
|
||
|
}
|
||
|
/*
|
||
|
* set mapFlag
|
||
|
*/
|
||
|
if (userdefineDef.getMapvalue() != null) {
|
||
|
if (userdefineDef.getMapFlag() != null) {
|
||
|
mapFlag = userdefineDef.getMapFlag();
|
||
|
} else {
|
||
|
mapFlag = UserDefineMapping.getMapFlag(vendor, commandType);
|
||
|
}
|
||
|
}
|
||
|
/*
|
||
|
* set pdbFlag
|
||
|
*/
|
||
|
if (userdefineDef.getPdbvalue() != null) {
|
||
|
if (userdefineDef.getPdbFlag() != null) {
|
||
|
pdbFlag = userdefineDef.getPdbFlag();
|
||
|
} else {
|
||
|
pdbFlag = UserDefineMapping.getPdbFlag(vendor, commandType);
|
||
|
}
|
||
|
}
|
||
|
/*
|
||
|
* set outputFileFlag
|
||
|
*/
|
||
|
if (userdefineDef.getOutputFile() != null) {
|
||
|
if (userdefineDef.getOutPutFlag() != null) {
|
||
|
outputFileFlag = userdefineDef.getOutPutFlag();
|
||
|
} else {
|
||
|
outputFileFlag = UserDefineMapping.getOutputFileFlag(vendor,
|
||
|
arch, commandType);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* set fileList
|
||
|
*/
|
||
|
if (userdefineDef.getFileList() != null) {
|
||
|
fileList = userdefineDef.getFileList();
|
||
|
}
|
||
|
}
|
||
|
}
|