git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			1750 lines
		
	
	
		
			62 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			1750 lines
		
	
	
		
			62 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
/*
 | 
						|
 * 
 | 
						|
 * Copyright 2001-2005 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;
 | 
						|
 | 
						|
import java.io.File;
 | 
						|
import java.io.IOException;
 | 
						|
import java.util.Enumeration;
 | 
						|
import java.util.Hashtable;
 | 
						|
import java.util.Iterator;
 | 
						|
import java.util.Vector;
 | 
						|
 | 
						|
import net.sf.antcontrib.cpptasks.compiler.AslcompilerConfiguration;
 | 
						|
import net.sf.antcontrib.cpptasks.compiler.AssemblerConfiguration;
 | 
						|
import net.sf.antcontrib.cpptasks.compiler.CompilerConfiguration;
 | 
						|
import net.sf.antcontrib.cpptasks.compiler.LinkType;
 | 
						|
import net.sf.antcontrib.cpptasks.compiler.Linker;
 | 
						|
import net.sf.antcontrib.cpptasks.compiler.LinkerConfiguration;
 | 
						|
import net.sf.antcontrib.cpptasks.compiler.Processor;
 | 
						|
import net.sf.antcontrib.cpptasks.compiler.ProcessorConfiguration;
 | 
						|
import net.sf.antcontrib.cpptasks.types.AslcompilerArgument;
 | 
						|
import net.sf.antcontrib.cpptasks.types.AssemblerArgument;
 | 
						|
import net.sf.antcontrib.cpptasks.types.CompilerArgument;
 | 
						|
import net.sf.antcontrib.cpptasks.types.ConditionalFileSet;
 | 
						|
import net.sf.antcontrib.cpptasks.types.DefineSet;
 | 
						|
import net.sf.antcontrib.cpptasks.types.IncludePath;
 | 
						|
import net.sf.antcontrib.cpptasks.types.LibrarySet;
 | 
						|
import net.sf.antcontrib.cpptasks.types.LinkerArgument;
 | 
						|
import net.sf.antcontrib.cpptasks.types.SystemIncludePath;
 | 
						|
import net.sf.antcontrib.cpptasks.types.SystemLibrarySet;
 | 
						|
import net.sf.antcontrib.cpptasks.userdefine.UserDefineCompiler;
 | 
						|
import net.sf.antcontrib.cpptasks.userdefine.UserDefineDef;
 | 
						|
import net.sf.antcontrib.cpptasks.VersionInfo;
 | 
						|
 | 
						|
import org.apache.tools.ant.BuildException;
 | 
						|
import org.apache.tools.ant.Project;
 | 
						|
import org.apache.tools.ant.Task;
 | 
						|
import org.apache.tools.ant.types.Environment;
 | 
						|
 | 
						|
/**
 | 
						|
 * Compile, link, assembler and asl compile task.
 | 
						|
 * 
 | 
						|
 * <p>
 | 
						|
 * This task can compile various source languages and produce executables,
 | 
						|
 * shared libraries (aka DLL's) and static libraries. Compiler adaptors are
 | 
						|
 * currently available for several C/C++ compilers, FORTRAN, MIDL and Windows
 | 
						|
 * Resource files. Assembler adaptors are currently available for MASM and GAS.
 | 
						|
 * And aslcompiler support to ASL and IASL command.
 | 
						|
 * </p>
 | 
						|
 * 
 | 
						|
 * 
 | 
						|
 * <p>
 | 
						|
 * Copyright (c) 2001-2005, The Ant-Contrib project.
 | 
						|
 * </p>
 | 
						|
 * 
 | 
						|
 * <p>
 | 
						|
 * Licensed under the Apache Software License 2.0,
 | 
						|
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
						|
 * </p>
 | 
						|
 * 
 | 
						|
 * <p>
 | 
						|
 * For use with Apache Ant 1.5 or later. This software is not a product of the
 | 
						|
 * of the Apache Software Foundation and no endorsement is implied.
 | 
						|
 * </p>
 | 
						|
 * 
 | 
						|
 * <p>
 | 
						|
 * THIS SOFTWARE IS PROVIDED 'AS-IS', See
 | 
						|
 * http://www.apache.org/licenses/LICENSE-2.0 for additional disclaimers.
 | 
						|
 * </p>
 | 
						|
 * 
 | 
						|
 * To use:
 | 
						|
 * <ol>
 | 
						|
 * <li>Place cpptasks.jar into the lib directory of Ant 1.5 or later.</li>
 | 
						|
 * <li>Add <taskdef resource="cpptasks.tasks"/> and <typedef
 | 
						|
 * resource="cpptasks.types"/> to build.xml.</li>
 | 
						|
 * <li>Add <cc/>, <compiler/> <linker/> <assembler/>
 | 
						|
 * and <aslcompiler/> elements to project.</li>
 | 
						|
 * <li>Set path and environment variables to be able to run compiler from
 | 
						|
 * command line.</li>
 | 
						|
 * <li>Build project.</li>
 | 
						|
 * </ol>
 | 
						|
 * 
 | 
						|
 * @author Adam Murdoch
 | 
						|
 * @author Curt Arnold
 | 
						|
 */
 | 
						|
public class CCTask extends Task {
 | 
						|
    private class SystemLibraryCollector implements FileVisitor {
 | 
						|
        private Hashtable libraries;
 | 
						|
 | 
						|
        private Linker linker;
 | 
						|
 | 
						|
        public SystemLibraryCollector (Linker linker, Hashtable libraries) {
 | 
						|
            this.linker = linker;
 | 
						|
            this.libraries = libraries;
 | 
						|
        }
 | 
						|
 | 
						|
        public void visit(File basedir, String filename) {
 | 
						|
            if (linker.bid(filename) > 0) {
 | 
						|
                File libfile = new File(basedir, filename);
 | 
						|
                String key = linker.getLibraryKey(libfile);
 | 
						|
                libraries.put(key, libfile);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    private static final ProcessorConfiguration[] EMPTY_CONFIG_ARRAY = new ProcessorConfiguration[0];
 | 
						|
 | 
						|
    /**
 | 
						|
     * Builds a Hashtable to targets needing to be rebuilt keyed by compiler
 | 
						|
     * configuration
 | 
						|
     */
 | 
						|
    public static Hashtable getTargetsToBuildByConfiguration(Hashtable targets) {
 | 
						|
        Hashtable targetsByConfig = new Hashtable();
 | 
						|
        Enumeration targetEnum = targets.elements();
 | 
						|
        while (targetEnum.hasMoreElements()) {
 | 
						|
            TargetInfo target = (TargetInfo) targetEnum.nextElement();
 | 
						|
            if (target.getRebuild()) {
 | 
						|
                Vector targetsForSameConfig = (Vector) targetsByConfig
 | 
						|
                                .get(target.getConfiguration());
 | 
						|
                if (targetsForSameConfig != null) {
 | 
						|
                    targetsForSameConfig.addElement(target);
 | 
						|
                } else {
 | 
						|
                    targetsForSameConfig = new Vector();
 | 
						|
                    targetsForSameConfig.addElement(target);
 | 
						|
                    targetsByConfig.put(target.getConfiguration(),
 | 
						|
                                    targetsForSameConfig);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return targetsByConfig;
 | 
						|
    }
 | 
						|
 | 
						|
    /** The userdefine definitions. */
 | 
						|
    private Vector _userdefines = new Vector();
 | 
						|
    
 | 
						|
    /** The compiler definitions. */
 | 
						|
    private Vector _compilers = new Vector();
 | 
						|
 | 
						|
    /** The output file type. */
 | 
						|
    // private LinkType _linkType = LinkType.EXECUTABLE;
 | 
						|
    /** The library sets. */
 | 
						|
    private Vector _libsets = new Vector();
 | 
						|
 | 
						|
    /** The aslcompiler definitions. */
 | 
						|
    private Vector _aslcompiler = new Vector();
 | 
						|
 | 
						|
    /** The assembler definitions. */
 | 
						|
    private Vector _assemblers = new Vector();
 | 
						|
 | 
						|
    /** The linker definitions. */
 | 
						|
    private Vector _linkers = new Vector();
 | 
						|
 | 
						|
    /** The object directory. */
 | 
						|
    private File _objDir;
 | 
						|
 | 
						|
    /** The output file. */
 | 
						|
    private File _outfile;
 | 
						|
    
 | 
						|
    private boolean userdefine = false;
 | 
						|
    private String arch;
 | 
						|
    private String os;
 | 
						|
    private String vendor;
 | 
						|
    
 | 
						|
    /** the flag for assembler */
 | 
						|
    private boolean assembler = true;
 | 
						|
 | 
						|
    /** the flag for aslcompiler */
 | 
						|
    private boolean aslcompiler = true;
 | 
						|
 | 
						|
    /** The linker definitions. */
 | 
						|
    private final Vector targetPlatforms = new Vector();
 | 
						|
 | 
						|
    /** The distributer definitions. */
 | 
						|
    private Vector distributers = new Vector();
 | 
						|
 | 
						|
    /**
 | 
						|
     * If true, stop build on compile failure.
 | 
						|
     */
 | 
						|
    protected boolean failOnError = true;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Content that appears in <cc>and also in <compiler>are maintained by a
 | 
						|
     * captive CompilerDef instance
 | 
						|
     */
 | 
						|
    private final CompilerDef compilerDef = new CompilerDef();
 | 
						|
 | 
						|
    /**
 | 
						|
     * Content that appears in <cc>and also in <aslcompiler>are maintained by a
 | 
						|
     * captive AslcompilerDef instance
 | 
						|
     */
 | 
						|
    private final AslcompilerDef aslcompilerDef = new AslcompilerDef();
 | 
						|
 | 
						|
    /** The OS390 dataset to build to object to */
 | 
						|
    private String dataset;
 | 
						|
 | 
						|
    /**
 | 
						|
     * 
 | 
						|
     * Depth of dependency checking
 | 
						|
     * 
 | 
						|
     * Values < 0 indicate full dependency checking Values >= 0 indicate partial
 | 
						|
     * dependency checking and for superficial compilation checks. Will throw
 | 
						|
     * BuildException before attempting link
 | 
						|
     */
 | 
						|
    private int dependencyDepth = -1;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Content that appears in <cc>and also in <assembler>are maintained by a
 | 
						|
     * captive AssemblerDef instance
 | 
						|
     */
 | 
						|
    private final AssemblerDef assemblerDef = new AssemblerDef();
 | 
						|
 | 
						|
    /**
 | 
						|
     * Content that appears in <cc>and also in <linker>are maintained by a
 | 
						|
     * captive CompilerDef instance
 | 
						|
     */
 | 
						|
    private final LinkerDef linkerDef = new LinkerDef();
 | 
						|
 | 
						|
    /**
 | 
						|
     * contains the subsystem, output type and
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    private final LinkType linkType = new LinkType();
 | 
						|
 | 
						|
    /**
 | 
						|
     * The property name which will be set with the physical filename of the
 | 
						|
     * file that is generated by the linker
 | 
						|
     */
 | 
						|
    private String outputFileProperty;
 | 
						|
 | 
						|
    /**
 | 
						|
     * if relentless = true, compilations should attempt to compile as many
 | 
						|
     * files as possible before throwing a BuildException
 | 
						|
     */
 | 
						|
    private boolean relentless;
 | 
						|
 | 
						|
    public CCTask () {
 | 
						|
    }
 | 
						|
 | 
						|
    
 | 
						|
    public void addConfiguredCommand(UserDefineDef userdefineDef) {
 | 
						|
        if (userdefineDef == null) {
 | 
						|
            throw new NullPointerException("UserDefineDef");
 | 
						|
        }
 | 
						|
        userdefineDef.setProject(getProject());
 | 
						|
        _userdefines.addElement(userdefineDef);
 | 
						|
    }
 | 
						|
    /**
 | 
						|
     * Adds a asl compiler definition or reference.
 | 
						|
     * 
 | 
						|
     * @param Aslcompiler
 | 
						|
     *            aslcompiler
 | 
						|
     * @throws NullPointerException
 | 
						|
     *             if aslcompiler is null
 | 
						|
     */
 | 
						|
    public void addConfiguredAslcompiler(AslcompilerDef aslcompier) {
 | 
						|
        if (aslcompier == null) {
 | 
						|
            throw new NullPointerException("aslcompier");
 | 
						|
        }
 | 
						|
        aslcompier.setProject(getProject());
 | 
						|
        _aslcompiler.addElement(aslcompier);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a asl command-line arg. Argument will be inherited by all nested
 | 
						|
     * aslcompiler elements that do not have inherit="false".
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public void addConfiguredAslcompilerArg(AslcompilerArgument arg) {
 | 
						|
        aslcompilerDef.addConfiguredAslcompilerArg(arg);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a assembler definition or reference.
 | 
						|
     * 
 | 
						|
     * @param assembler
 | 
						|
     *            assemblera
 | 
						|
     * @throws NullPointerException
 | 
						|
     *             if assembler is null
 | 
						|
     */
 | 
						|
    public void addConfiguredAssembler(AssemblerDef assembler) {
 | 
						|
        if (assembler == null) {
 | 
						|
            throw new NullPointerException("assembler");
 | 
						|
        }
 | 
						|
        assembler.setProject(getProject());
 | 
						|
        _assemblers.addElement(assembler);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a assembler command-line arg. Argument will be inherited by all
 | 
						|
     * nested assembler elements that do not have inherit="false".
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public void addConfiguredAssemblerArg(AssemblerArgument arg) {
 | 
						|
        assemblerDef.addConfiguredAssemblerArg(arg);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a compiler definition or reference.
 | 
						|
     * 
 | 
						|
     * @param compiler
 | 
						|
     *            compiler
 | 
						|
     * @throws NullPointerException
 | 
						|
     *             if compiler is null
 | 
						|
     */
 | 
						|
    public void addConfiguredCompiler(CompilerDef compiler) {
 | 
						|
        if (compiler == null) {
 | 
						|
            throw new NullPointerException("compiler");
 | 
						|
        }
 | 
						|
        compiler.setProject(getProject());
 | 
						|
        _compilers.addElement(compiler);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a compiler command-line arg. Argument will be inherited by all
 | 
						|
     * nested compiler elements that do not have inherit="false".
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public void addConfiguredCompilerArg(CompilerArgument arg) {
 | 
						|
        compilerDef.addConfiguredCompilerArg(arg);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a defineset. Will be inherited by all compiler elements that do not
 | 
						|
     * have inherit="false".
 | 
						|
     * 
 | 
						|
     * @param defs
 | 
						|
     *            Define set
 | 
						|
     */
 | 
						|
    public void addConfiguredDefineset(DefineSet defs) {
 | 
						|
        compilerDef.addConfiguredDefineset(defs);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a linker definition. The first linker that is not disqualified by
 | 
						|
     * its "if" and "unless" attributes will perform the link. If no child
 | 
						|
     * linker element is active, the linker implied by the cc elements name or
 | 
						|
     * classname attribute will be used.
 | 
						|
     * 
 | 
						|
     * @param linker
 | 
						|
     *            linker
 | 
						|
     * @throws NullPointerException
 | 
						|
     *             if linker is null
 | 
						|
     */
 | 
						|
    public void addConfiguredLinker(LinkerDef linker) {
 | 
						|
        if (linker == null) {
 | 
						|
            throw new NullPointerException("linker");
 | 
						|
        }
 | 
						|
        linker.setProject(getProject());
 | 
						|
        _linkers.addElement(linker);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a linker command-line arg. Argument will be inherited by all nested
 | 
						|
     * linker elements that do not have inherit="false".
 | 
						|
     */
 | 
						|
    public void addConfiguredLinkerArg(LinkerArgument arg) {
 | 
						|
        linkerDef.addConfiguredLinkerArg(arg);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Add an environment variable to the launched process.
 | 
						|
     */
 | 
						|
    public void addEnv(Environment.Variable var) {
 | 
						|
        compilerDef.addEnv(var);
 | 
						|
        linkerDef.addEnv(var);
 | 
						|
        assemblerDef.addEnv(var);
 | 
						|
        aslcompilerDef.addEnv(var);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a source file set.
 | 
						|
     * 
 | 
						|
     * Files in these filesets will be auctioned to the available compiler
 | 
						|
     * configurations, with the default compiler implied by the cc element
 | 
						|
     * bidding last. If no compiler is interested in the file, it will be passed
 | 
						|
     * to the linker.
 | 
						|
     * 
 | 
						|
     * To have a file be processed by a particular compiler configuration, add a
 | 
						|
     * fileset to the corresponding compiler element.
 | 
						|
     */
 | 
						|
    public void addFileset(ConditionalFileSet srcSet) {
 | 
						|
        compilerDef.addFileset(srcSet);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a library set.
 | 
						|
     * 
 | 
						|
     * Library sets will be inherited by all linker elements that do not have
 | 
						|
     * inherit="false".
 | 
						|
     * 
 | 
						|
     * @param libset
 | 
						|
     *            library set
 | 
						|
     * @throws NullPointerException
 | 
						|
     *             if libset is null.
 | 
						|
     */
 | 
						|
    public void addLibset(LibrarySet libset) {
 | 
						|
        if (libset == null) {
 | 
						|
            throw new NullPointerException("libset");
 | 
						|
        }
 | 
						|
        linkerDef.addLibset(libset);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a system library set. Timestamps and locations of system library
 | 
						|
     * sets are not used in dependency analysis.
 | 
						|
     * 
 | 
						|
     * Essential libraries (such as C Runtime libraries) should not be specified
 | 
						|
     * since the task will attempt to identify the correct libraries based on
 | 
						|
     * the multithread, debug and runtime attributes.
 | 
						|
     * 
 | 
						|
     * System library sets will be inherited by all linker elements that do not
 | 
						|
     * have inherit="false".
 | 
						|
     * 
 | 
						|
     * @param libset
 | 
						|
     *            library set
 | 
						|
     * @throws NullPointerException
 | 
						|
     *             if libset is null.
 | 
						|
     */
 | 
						|
    public void addSyslibset(SystemLibrarySet libset) {
 | 
						|
        if (libset == null) {
 | 
						|
            throw new NullPointerException("libset");
 | 
						|
        }
 | 
						|
        linkerDef.addSyslibset(libset);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Checks all targets that are not forced to be rebuilt or are missing
 | 
						|
     * object files to be checked for modified include files
 | 
						|
     * 
 | 
						|
     * @returns total number of targets to be rebuilt
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    protected int checkForChangedIncludeFiles(Hashtable targets) {
 | 
						|
        int potentialTargets = 0;
 | 
						|
        int definiteTargets = 0;
 | 
						|
        Enumeration targetEnum = targets.elements();
 | 
						|
        while (targetEnum.hasMoreElements()) {
 | 
						|
            TargetInfo target = (TargetInfo) targetEnum.nextElement();
 | 
						|
            if (!target.getRebuild()) {
 | 
						|
                potentialTargets++;
 | 
						|
            } else {
 | 
						|
                definiteTargets++;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // If there were remaining targets that
 | 
						|
        // might be out of date
 | 
						|
        //
 | 
						|
        if (potentialTargets > 0) {
 | 
						|
            log("Starting dependency analysis for "
 | 
						|
                            + Integer.toString(potentialTargets) + " files.");
 | 
						|
            DependencyTable dependencyTable = new DependencyTable(_objDir);
 | 
						|
            try {
 | 
						|
                dependencyTable.load();
 | 
						|
            } catch (Exception ex) {
 | 
						|
                log("Problem reading dependencies.xml: " + ex.toString());
 | 
						|
            }
 | 
						|
            targetEnum = targets.elements();
 | 
						|
            while (targetEnum.hasMoreElements()) {
 | 
						|
                TargetInfo target = (TargetInfo) targetEnum.nextElement();
 | 
						|
                if (!target.getRebuild()) {
 | 
						|
                    if (dependencyTable.needsRebuild(this, target,
 | 
						|
                                    dependencyDepth)) {
 | 
						|
                        target.mustRebuild();
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            dependencyTable.commit(this);
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // count files being rebuilt now
 | 
						|
        //
 | 
						|
        int currentTargets = 0;
 | 
						|
        targetEnum = targets.elements();
 | 
						|
        while (targetEnum.hasMoreElements()) {
 | 
						|
            TargetInfo target = (TargetInfo) targetEnum.nextElement();
 | 
						|
            if (target.getRebuild()) {
 | 
						|
                currentTargets++;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if (potentialTargets > 0) {
 | 
						|
            log(Integer.toString(potentialTargets - currentTargets
 | 
						|
                            + definiteTargets)
 | 
						|
                            + " files are up to date.");
 | 
						|
            log(Integer.toString(currentTargets - definiteTargets)
 | 
						|
                            + " files to be recompiled from dependency analysis.");
 | 
						|
        }
 | 
						|
        log(Integer.toString(currentTargets) + " total files to be compiled.");
 | 
						|
        return currentTargets;
 | 
						|
    }
 | 
						|
 | 
						|
    protected LinkerConfiguration collectExplicitObjectFiles(
 | 
						|
                    Vector objectFiles, Vector sysObjectFiles) {
 | 
						|
        //
 | 
						|
        // find the first eligible linker
 | 
						|
        //
 | 
						|
        //
 | 
						|
        ProcessorConfiguration linkerConfig = null;
 | 
						|
        LinkerDef selectedLinkerDef = null;
 | 
						|
        Linker selectedLinker = null;
 | 
						|
        Hashtable sysLibraries = new Hashtable();
 | 
						|
        TargetDef targetPlatform = getTargetPlatform();
 | 
						|
        FileVisitor objCollector = null;
 | 
						|
        FileVisitor sysLibraryCollector = null;
 | 
						|
        for (int i = 0; i < _linkers.size(); i++) {
 | 
						|
            LinkerDef currentLinkerDef = (LinkerDef) _linkers.elementAt(i);
 | 
						|
            if (currentLinkerDef.isActive()) {
 | 
						|
                selectedLinkerDef = currentLinkerDef;
 | 
						|
                selectedLinker = currentLinkerDef.getProcessor().getLinker(
 | 
						|
                                linkType);
 | 
						|
                //
 | 
						|
                // skip the linker if it doesn't know how to
 | 
						|
                // produce the specified link type
 | 
						|
                if (selectedLinker != null) {
 | 
						|
                    linkerConfig = currentLinkerDef.createConfiguration(this,
 | 
						|
                                    linkType, linkerDef, targetPlatform);
 | 
						|
                    if (linkerConfig != null) {
 | 
						|
                        //
 | 
						|
                        // create collectors for object files
 | 
						|
                        // and system libraries
 | 
						|
                        objCollector = new ObjectFileCollector(selectedLinker,
 | 
						|
                                        objectFiles);
 | 
						|
                        sysLibraryCollector = new SystemLibraryCollector(
 | 
						|
                                        selectedLinker, sysLibraries);
 | 
						|
                        //
 | 
						|
                        // if the <linker> has embedded <fileset>'s
 | 
						|
                        // (such as linker specific libraries)
 | 
						|
                        // add them as object files.
 | 
						|
                        //
 | 
						|
                        if (currentLinkerDef.hasFileSets()) {
 | 
						|
                            currentLinkerDef.visitFiles(objCollector);
 | 
						|
                        }
 | 
						|
                        //
 | 
						|
                        // user libraries are just a specialized form
 | 
						|
                        // of an object fileset
 | 
						|
                        selectedLinkerDef.visitUserLibraries(selectedLinker,
 | 
						|
                                        objCollector);
 | 
						|
                    }
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if (linkerConfig == null) {
 | 
						|
            linkerConfig = linkerDef.createConfiguration(this, linkType, null,
 | 
						|
                            targetPlatform);
 | 
						|
            selectedLinker = (Linker) linkerDef.getProcessor().getLinker(
 | 
						|
                            linkType);
 | 
						|
            objCollector = new ObjectFileCollector(selectedLinker, objectFiles);
 | 
						|
            sysLibraryCollector = new SystemLibraryCollector(selectedLinker,
 | 
						|
                            sysLibraries);
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // unless there was a <linker> element that
 | 
						|
        // explicitly did not inherit files from
 | 
						|
        // containing <cc> element
 | 
						|
        if (selectedLinkerDef == null || selectedLinkerDef.getInherit()) {
 | 
						|
            linkerDef.visitUserLibraries(selectedLinker, objCollector);
 | 
						|
            linkerDef.visitSystemLibraries(selectedLinker, sysLibraryCollector);
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // if there was a <syslibset> in a nested <linker>
 | 
						|
        // evaluate it last so it takes priority over
 | 
						|
        // identically named libs from <cc> element
 | 
						|
        //
 | 
						|
        if (selectedLinkerDef != null) {
 | 
						|
            //
 | 
						|
            // add any system libraries to the hashtable
 | 
						|
            // done in reverse order so the earliest
 | 
						|
            // on the classpath takes priority
 | 
						|
            selectedLinkerDef.visitSystemLibraries(selectedLinker,
 | 
						|
                            sysLibraryCollector);
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // copy over any system libraries to the
 | 
						|
        // object files vector
 | 
						|
        //
 | 
						|
        Enumeration sysLibEnum = sysLibraries.elements();
 | 
						|
        while (sysLibEnum.hasMoreElements()) {
 | 
						|
            sysObjectFiles.addElement(sysLibEnum.nextElement());
 | 
						|
        }
 | 
						|
        return (LinkerConfiguration) linkerConfig;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds an include path.
 | 
						|
     * 
 | 
						|
     * Include paths will be inherited by nested compiler elements that do not
 | 
						|
     * have inherit="false".
 | 
						|
     */
 | 
						|
    public IncludePath createIncludePath() {
 | 
						|
        return compilerDef.createIncludePath();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Specifies precompilation prototype file and exclusions. Inherited by all
 | 
						|
     * compilers that do not have inherit="false".
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public PrecompileDef createPrecompile() throws BuildException {
 | 
						|
        return compilerDef.createPrecompile();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a system include path. Locations and timestamps of files located
 | 
						|
     * using the system include paths are not used in dependency analysis.
 | 
						|
     * 
 | 
						|
     * 
 | 
						|
     * Standard include locations should not be specified. The compiler adapters
 | 
						|
     * should recognized the settings from the appropriate environment variables
 | 
						|
     * or configuration files.
 | 
						|
     * 
 | 
						|
     * System include paths will be inherited by nested compiler elements that
 | 
						|
     * do not have inherit="false".
 | 
						|
     */
 | 
						|
    public SystemIncludePath createSysIncludePath() {
 | 
						|
        return compilerDef.createSysIncludePath();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Executes the task. Compiles the given files.
 | 
						|
     * 
 | 
						|
     * @throws BuildException
 | 
						|
     *             if someting goes wrong with the build
 | 
						|
     */
 | 
						|
    public void execute() throws BuildException {
 | 
						|
        //
 | 
						|
        // if link type allowed objdir to be defaulted
 | 
						|
        // provide it from outfile
 | 
						|
        if (_objDir == null) {
 | 
						|
            if (_outfile != null) {
 | 
						|
                _objDir = new File(_outfile.getParent());
 | 
						|
            } else {
 | 
						|
                _objDir = new File(".");
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        //
 | 
						|
        // if the object directory does not exist
 | 
						|
        //
 | 
						|
        if (!_objDir.exists()) {
 | 
						|
            throw new BuildException("Object directory does not exist");
 | 
						|
        }
 | 
						|
        
 | 
						|
        //
 | 
						|
        // if userdefine is true, then run all user defined command
 | 
						|
        //
 | 
						|
        if (userdefine) {
 | 
						|
            Iterator iter = _userdefines.iterator();
 | 
						|
            while( iter.hasNext()) {
 | 
						|
                UserDefineDef userdefineDef = (UserDefineDef)iter.next();
 | 
						|
                UserDefineCompiler userdefineCompiler = new UserDefineCompiler(this, userdefineDef);
 | 
						|
                userdefineCompiler.command(this, userdefineDef);
 | 
						|
            }
 | 
						|
            return ;
 | 
						|
        }
 | 
						|
        
 | 
						|
        TargetHistoryTable objHistory = new TargetHistoryTable(this, _objDir);
 | 
						|
        //
 | 
						|
        // determine the eventual linker configuration
 | 
						|
        // (may be null) and collect any explicit
 | 
						|
        // object files or libraries
 | 
						|
        Vector objectFiles = new Vector();
 | 
						|
        Vector sysObjectFiles = new Vector();
 | 
						|
        LinkerConfiguration linkerConfig = collectExplicitObjectFiles(
 | 
						|
                        objectFiles, sysObjectFiles);
 | 
						|
        //
 | 
						|
        // Assembler hashtable of all files
 | 
						|
        // that we know how to compile (keyed by output file name)
 | 
						|
        //
 | 
						|
        Hashtable targets = getTargets(linkerConfig, objectFiles);
 | 
						|
        Hashtable acpiTarget = new Hashtable();
 | 
						|
        if (aslcompiler) {
 | 
						|
            acpiTarget = getAcpiTargets(linkerConfig, new Vector());
 | 
						|
        }
 | 
						|
        Hashtable assemblerTarget = new Hashtable();
 | 
						|
        if (assembler) {
 | 
						|
            assemblerTarget = getAssemblerTargets(linkerConfig, objectFiles);
 | 
						|
        }
 | 
						|
        TargetInfo linkTarget = null;
 | 
						|
        //
 | 
						|
        // if output file is not specified,
 | 
						|
        // then skip link step
 | 
						|
        //
 | 
						|
        if (_outfile != null) {
 | 
						|
            linkTarget = getLinkTarget(linkerConfig, objectFiles,
 | 
						|
                            sysObjectFiles, targets, assemblerTarget);
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // If specify the aslcompiler, then call asl compiler
 | 
						|
        //
 | 
						|
        if (aslcompiler) {
 | 
						|
            BuildException acpiException = null;
 | 
						|
            Hashtable targetsByConfig = getTargetsToBuildByConfiguration(acpiTarget);
 | 
						|
            Enumeration acpiTargetEnum = targetsByConfig.elements();
 | 
						|
            Vector[] targetVectors = new Vector[targetsByConfig.size()];
 | 
						|
            int index = 0;
 | 
						|
            while (acpiTargetEnum.hasMoreElements()) {
 | 
						|
                Vector targetsForConfig = (Vector) acpiTargetEnum.nextElement();
 | 
						|
                targetVectors[index++] = targetsForConfig;
 | 
						|
            }
 | 
						|
            for (int i = 0; i < targetVectors.length; i++) {
 | 
						|
                //
 | 
						|
                // get the targets for this configuration
 | 
						|
                //
 | 
						|
                Vector targetsForConfig = targetVectors[i];
 | 
						|
                //
 | 
						|
                // get the configuration from the first entry
 | 
						|
                //
 | 
						|
                AslcompilerConfiguration config = (AslcompilerConfiguration) ((TargetInfo) targetsForConfig
 | 
						|
                                .elementAt(0)).getConfiguration();
 | 
						|
                //
 | 
						|
                // prepare the list of source files
 | 
						|
                //
 | 
						|
                String[] sourceFiles = new String[targetsForConfig.size()];
 | 
						|
                Enumeration targetsEnum = targetsForConfig.elements();
 | 
						|
                index = 0;
 | 
						|
                while (targetsEnum.hasMoreElements()) {
 | 
						|
                    TargetInfo targetInfo = ((TargetInfo) targetsEnum
 | 
						|
                                    .nextElement());
 | 
						|
                    sourceFiles[index++] = targetInfo.getSources()[0]
 | 
						|
                                    .toString();
 | 
						|
                }
 | 
						|
                try {
 | 
						|
                    config.aslcompiler(this, _objDir, sourceFiles);
 | 
						|
                    log(sourceFiles.length
 | 
						|
                                    + " total ACPI source files to be compiled.");
 | 
						|
                } catch (BuildException ex) {
 | 
						|
                    if (acpiException == null) {
 | 
						|
                        acpiException = ex;
 | 
						|
                    }
 | 
						|
                    if (!relentless)
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // If specify the assembler, then call assembler
 | 
						|
        //
 | 
						|
        if (assembler) {
 | 
						|
            BuildException assemblerException = null;
 | 
						|
            Hashtable targetsByConfig = getTargetsToBuildByConfiguration(assemblerTarget);
 | 
						|
            Enumeration assembleTargetEnum = targetsByConfig.elements();
 | 
						|
            Vector[] targetVectors = new Vector[targetsByConfig.size()];
 | 
						|
            int index = 0;
 | 
						|
            while (assembleTargetEnum.hasMoreElements()) {
 | 
						|
                Vector targetsForConfig = (Vector) assembleTargetEnum
 | 
						|
                                .nextElement();
 | 
						|
                targetVectors[index++] = targetsForConfig;
 | 
						|
            }
 | 
						|
            for (int i = 0; i < targetVectors.length; i++) {
 | 
						|
                //
 | 
						|
                // get the targets for this configuration
 | 
						|
                //
 | 
						|
                Vector targetsForConfig = targetVectors[i];
 | 
						|
                //
 | 
						|
                // get the configuration from the first entry
 | 
						|
                //
 | 
						|
                AssemblerConfiguration config = (AssemblerConfiguration) ((TargetInfo) targetsForConfig
 | 
						|
                                .elementAt(0)).getConfiguration();
 | 
						|
                //
 | 
						|
                // prepare the list of source files
 | 
						|
                //
 | 
						|
                String[] sourceFiles = new String[targetsForConfig.size()];
 | 
						|
                Enumeration targetsEnum = targetsForConfig.elements();
 | 
						|
                index = 0;
 | 
						|
                while (targetsEnum.hasMoreElements()) {
 | 
						|
                    TargetInfo targetInfo = ((TargetInfo) targetsEnum
 | 
						|
                                    .nextElement());
 | 
						|
                    sourceFiles[index++] = targetInfo.getSources()[0]
 | 
						|
                                    .toString();
 | 
						|
                }
 | 
						|
                try {
 | 
						|
                    config.assembler(this, _objDir, sourceFiles);
 | 
						|
                    log(sourceFiles.length + " total files to be assembled.");
 | 
						|
                } catch (BuildException ex) {
 | 
						|
                    if (assemblerException == null) {
 | 
						|
                        assemblerException = ex;
 | 
						|
                    }
 | 
						|
                    if (!relentless)
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            //
 | 
						|
            // if we threw a assembler exception and
 | 
						|
            // didn't throw it at the time because
 | 
						|
            // we were relentless then
 | 
						|
            // save the history and
 | 
						|
            // throw the exception
 | 
						|
            //
 | 
						|
            if (assemblerException != null) {
 | 
						|
                if (failOnError) {
 | 
						|
                    throw assemblerException;
 | 
						|
                } else {
 | 
						|
                    log(assemblerException.getMessage(), Project.MSG_ERR);
 | 
						|
                    return;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        //
 | 
						|
        // mark targets that don't have a history record or
 | 
						|
        // whose source last modification time is not
 | 
						|
        // the same as the history to be rebuilt
 | 
						|
        //
 | 
						|
        objHistory.markForRebuild(targets);
 | 
						|
        CCTaskProgressMonitor monitor = new CCTaskProgressMonitor(objHistory);
 | 
						|
        //
 | 
						|
        // check for changed include files
 | 
						|
        //
 | 
						|
        int rebuildCount = checkForChangedIncludeFiles(targets);
 | 
						|
        if (rebuildCount > 0) {
 | 
						|
            BuildException compileException = null;
 | 
						|
            //
 | 
						|
            // compile all targets with getRebuild() == true
 | 
						|
            //
 | 
						|
            Hashtable targetsByConfig = getTargetsToBuildByConfiguration(targets);
 | 
						|
            //
 | 
						|
            // build array containing Vectors with precompiled generation
 | 
						|
            // steps going first
 | 
						|
            //
 | 
						|
            Vector[] targetVectors = new Vector[targetsByConfig.size()];
 | 
						|
            int index = 0;
 | 
						|
            Enumeration targetVectorEnum = targetsByConfig.elements();
 | 
						|
            while (targetVectorEnum.hasMoreElements()) {
 | 
						|
                Vector targetsForConfig = (Vector) targetVectorEnum
 | 
						|
                                .nextElement();
 | 
						|
                //
 | 
						|
                // get the configuration from the first entry
 | 
						|
                //
 | 
						|
                CompilerConfiguration config = (CompilerConfiguration) ((TargetInfo) targetsForConfig
 | 
						|
                                .elementAt(0)).getConfiguration();
 | 
						|
                if (config.isPrecompileGeneration()) {
 | 
						|
                    targetVectors[index++] = targetsForConfig;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            targetVectorEnum = targetsByConfig.elements();
 | 
						|
            while (targetVectorEnum.hasMoreElements()) {
 | 
						|
                Vector targetsForConfig = (Vector) targetVectorEnum
 | 
						|
                                .nextElement();
 | 
						|
                for (int i = 0; i < targetVectors.length; i++) {
 | 
						|
                    if (targetVectors[i] == targetsForConfig) {
 | 
						|
                        break;
 | 
						|
                    }
 | 
						|
                    if (targetVectors[i] == null) {
 | 
						|
                        targetVectors[i] = targetsForConfig;
 | 
						|
                        break;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            for (int i = 0; i < targetVectors.length; i++) {
 | 
						|
                //
 | 
						|
                // get the targets for this configuration
 | 
						|
                //
 | 
						|
                Vector targetsForConfig = targetVectors[i];
 | 
						|
                //
 | 
						|
                // get the configuration from the first entry
 | 
						|
                //
 | 
						|
                CompilerConfiguration config = (CompilerConfiguration) ((TargetInfo) targetsForConfig
 | 
						|
                                .elementAt(0)).getConfiguration();
 | 
						|
                //
 | 
						|
                // prepare the list of source files
 | 
						|
                //
 | 
						|
                String[] sourceFiles = new String[targetsForConfig.size()];
 | 
						|
                Enumeration targetsEnum = targetsForConfig.elements();
 | 
						|
                index = 0;
 | 
						|
                while (targetsEnum.hasMoreElements()) {
 | 
						|
                    TargetInfo targetInfo = ((TargetInfo) targetsEnum
 | 
						|
                                    .nextElement());
 | 
						|
                    sourceFiles[index++] = targetInfo.getSources()[0]
 | 
						|
                                    .toString();
 | 
						|
                }
 | 
						|
                try {
 | 
						|
                    config.compile(this, _objDir, sourceFiles, relentless,
 | 
						|
                                    monitor);
 | 
						|
                } catch (BuildException ex) {
 | 
						|
                    if (compileException == null) {
 | 
						|
                        compileException = ex;
 | 
						|
                    }
 | 
						|
                    if (!relentless)
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            //
 | 
						|
            // save the details of the object file compilation
 | 
						|
            // settings to disk for dependency analysis
 | 
						|
            //
 | 
						|
            try {
 | 
						|
                objHistory.commit();
 | 
						|
            } catch (IOException ex) {
 | 
						|
                this.log("Error writing history.xml: " + ex.toString());
 | 
						|
            }
 | 
						|
            //
 | 
						|
            // if we threw a compile exception and
 | 
						|
            // didn't throw it at the time because
 | 
						|
            // we were relentless then
 | 
						|
            // save the history and
 | 
						|
            // throw the exception
 | 
						|
            //
 | 
						|
            if (compileException != null) {
 | 
						|
                if (failOnError) {
 | 
						|
                    throw compileException;
 | 
						|
                } else {
 | 
						|
                    log(compileException.getMessage(), Project.MSG_ERR);
 | 
						|
                    return;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // if the dependency tree was not fully
 | 
						|
        // evaluated, then throw an exception
 | 
						|
        // since we really didn't do what we
 | 
						|
        // should have done
 | 
						|
        //
 | 
						|
        //
 | 
						|
        if (dependencyDepth >= 0) {
 | 
						|
            throw new BuildException(
 | 
						|
                            "All files at depth "
 | 
						|
                                            + Integer.toString(dependencyDepth)
 | 
						|
                                            + " from changes successfully compiled.\n"
 | 
						|
                                            + "Remove or change dependencyDepth to -1 to perform full compilation.");
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // if no link target then
 | 
						|
        // commit the history for the object files
 | 
						|
        // and leave the task
 | 
						|
        if (linkTarget != null) {
 | 
						|
            //
 | 
						|
            // get the history for the link target (may be the same
 | 
						|
            // as the object history)
 | 
						|
            TargetHistoryTable linkHistory = getLinkHistory(objHistory);
 | 
						|
            //
 | 
						|
            // see if it needs to be rebuilt
 | 
						|
            //
 | 
						|
            linkHistory.markForRebuild(linkTarget);
 | 
						|
            //
 | 
						|
            // if it needs to be rebuilt, rebuild it
 | 
						|
            //
 | 
						|
            File output = linkTarget.getOutput();
 | 
						|
            if (linkTarget.getRebuild()) {
 | 
						|
                log("Starting link");
 | 
						|
                LinkerConfiguration linkConfig = (LinkerConfiguration) linkTarget
 | 
						|
                                .getConfiguration();
 | 
						|
                if (failOnError) {
 | 
						|
                    linkConfig.link(this, linkTarget);
 | 
						|
                } else {
 | 
						|
                    try {
 | 
						|
                        linkConfig.link(this, linkTarget);
 | 
						|
                    } catch (BuildException ex) {
 | 
						|
                        log(ex.getMessage(), Project.MSG_ERR);
 | 
						|
                        return;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                if (outputFileProperty != null)
 | 
						|
                    getProject().setProperty(outputFileProperty,
 | 
						|
                                    output.getAbsolutePath());
 | 
						|
                linkHistory.update(linkTarget);
 | 
						|
                try {
 | 
						|
                    linkHistory.commit();
 | 
						|
                } catch (IOException ex) {
 | 
						|
                    log("Error writing link history.xml: " + ex.toString());
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                if (outputFileProperty != null)
 | 
						|
                    getProject().setProperty(outputFileProperty,
 | 
						|
                                    output.getAbsolutePath());
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets the dataset.
 | 
						|
     * 
 | 
						|
     * @return Returns a String
 | 
						|
     */
 | 
						|
    public String getDataset() {
 | 
						|
        return dataset;
 | 
						|
    }
 | 
						|
 | 
						|
    protected TargetHistoryTable getLinkHistory(TargetHistoryTable objHistory) {
 | 
						|
        File outputFileDir = new File(_outfile.getParent());
 | 
						|
        //
 | 
						|
        // if the output file is being produced in the link
 | 
						|
        // directory, then we can use the same history file
 | 
						|
        //
 | 
						|
        if (_objDir.equals(outputFileDir)) {
 | 
						|
            return objHistory;
 | 
						|
        }
 | 
						|
        return new TargetHistoryTable(this, outputFileDir);
 | 
						|
    }
 | 
						|
 | 
						|
    protected TargetInfo getLinkTarget(LinkerConfiguration linkerConfig,
 | 
						|
                    Vector objectFiles, Vector sysObjectFiles,
 | 
						|
                    Hashtable compileTargets, Hashtable assemblerTargets) {
 | 
						|
        //
 | 
						|
        // walk the compile phase targets and
 | 
						|
        // add those sources that have already been
 | 
						|
        // assigned to the linker or
 | 
						|
        // our output files the linker knows how to consume
 | 
						|
        // files the linker knows how to consume
 | 
						|
        //
 | 
						|
        Enumeration compileTargetsEnum = compileTargets.elements();
 | 
						|
        while (compileTargetsEnum.hasMoreElements()) {
 | 
						|
            TargetInfo compileTarget = (TargetInfo) compileTargetsEnum
 | 
						|
                            .nextElement();
 | 
						|
            //
 | 
						|
            // output of compile tasks
 | 
						|
            //
 | 
						|
            int bid = linkerConfig.bid(compileTarget.getOutput().toString());
 | 
						|
            if (bid > 0) {
 | 
						|
                objectFiles.addElement(compileTarget.getOutput());
 | 
						|
            }
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // walk the assembler phase targets and
 | 
						|
        // add those sources that have already been
 | 
						|
        // assigned to the linker or
 | 
						|
        // our output files the linker knows how to consume
 | 
						|
        // files the linker knows how to consume
 | 
						|
        //
 | 
						|
        Enumeration assembleTargetsEnum = assemblerTargets.elements();
 | 
						|
        while (assembleTargetsEnum.hasMoreElements()) {
 | 
						|
            TargetInfo assemblerTarget = (TargetInfo) assembleTargetsEnum
 | 
						|
                            .nextElement();
 | 
						|
            //
 | 
						|
            // output of assemble tasks
 | 
						|
            //
 | 
						|
            int bid = linkerConfig.bid(assemblerTarget.getOutput().toString());
 | 
						|
            if (bid > 0) {
 | 
						|
                objectFiles.addElement(assemblerTarget.getOutput());
 | 
						|
            }
 | 
						|
        }
 | 
						|
        File[] objectFileArray = new File[objectFiles.size()];
 | 
						|
        objectFiles.copyInto(objectFileArray);
 | 
						|
        File[] sysObjectFileArray = new File[sysObjectFiles.size()];
 | 
						|
        sysObjectFiles.copyInto(sysObjectFileArray);
 | 
						|
        String baseName = _outfile.getName();
 | 
						|
        String fullName = linkerConfig.getOutputFileName(baseName);
 | 
						|
        File outputFile = new File(_outfile.getParent(), fullName);
 | 
						|
        return new TargetInfo(linkerConfig, objectFileArray,
 | 
						|
                        sysObjectFileArray, outputFile, linkerConfig
 | 
						|
                                        .getRebuild());
 | 
						|
    }
 | 
						|
 | 
						|
    public File getObjdir() {
 | 
						|
        return _objDir;
 | 
						|
    }
 | 
						|
 | 
						|
    public File getOutfile() {
 | 
						|
        return _outfile;
 | 
						|
    }
 | 
						|
 | 
						|
    public TargetDef getTargetPlatform() {
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * This method collects a Hashtable, keyed by output file name, of
 | 
						|
     * TargetInfo's for every source file that is specified in the filesets of
 | 
						|
     * the <aslcompiler> elements. The TargetInfo's contain the appropriate ACPI
 | 
						|
     * configurations for their possible acpi
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    private Hashtable getAcpiTargets(LinkerConfiguration linkerConfig,
 | 
						|
                    Vector objectFiles) {
 | 
						|
        Hashtable targets = new Hashtable(1000);
 | 
						|
        TargetDef targetPlatform = getTargetPlatform();
 | 
						|
        Vector biddingProcessors = new Vector(_aslcompiler.size());
 | 
						|
        for (int i = 0; i < _aslcompiler.size(); i++) {
 | 
						|
            AslcompilerDef currentAslDef = (AslcompilerDef) _aslcompiler
 | 
						|
                            .elementAt(i);
 | 
						|
            if (currentAslDef.isActive()) {
 | 
						|
                ProcessorConfiguration config = currentAslDef
 | 
						|
                                .createConfiguration(this, linkType,
 | 
						|
                                                aslcompilerDef, targetPlatform);
 | 
						|
                //
 | 
						|
                // if the aslcompiler has a fileset
 | 
						|
                // then allow it to add its files to
 | 
						|
                // the set of potential targets
 | 
						|
                //
 | 
						|
                ProcessorConfiguration[] localConfigs = new ProcessorConfiguration[] { config };
 | 
						|
                if (currentAslDef.hasFileSets()) {
 | 
						|
                    TargetMatcher matcher = new TargetMatcher(this, _objDir,
 | 
						|
                                    localConfigs, linkerConfig, objectFiles,
 | 
						|
                                    targets);
 | 
						|
                    currentAslDef.visitFiles(matcher);
 | 
						|
                }
 | 
						|
                biddingProcessors.addElement(config);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // add fallback compiler at the end
 | 
						|
        //
 | 
						|
        ProcessorConfiguration config = aslcompilerDef.createConfiguration(
 | 
						|
                        this, linkType, null, targetPlatform);
 | 
						|
        biddingProcessors.addElement(config);
 | 
						|
        ProcessorConfiguration[] bidders = new ProcessorConfiguration[biddingProcessors
 | 
						|
                        .size()];
 | 
						|
        biddingProcessors.copyInto(bidders);
 | 
						|
        TargetMatcher matcher = new TargetMatcher(this, _objDir, bidders,
 | 
						|
                        linkerConfig, objectFiles, targets);
 | 
						|
        aslcompilerDef.visitFiles(matcher);
 | 
						|
        return targets;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * This method collects a Hashtable, keyed by output file name, of
 | 
						|
     * TargetInfo's for every source file that is specified in the filesets of
 | 
						|
     * the <assembler> elements. The TargetInfo's contain the appropriate
 | 
						|
     * assembler configurations for their possible assembly
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    private Hashtable getAssemblerTargets(LinkerConfiguration linkerConfig,
 | 
						|
                    Vector objectFiles) {
 | 
						|
        Hashtable targets = new Hashtable(1000);
 | 
						|
        TargetDef targetPlatform = getTargetPlatform();
 | 
						|
        Vector biddingProcessors = new Vector(_assemblers.size());
 | 
						|
        for (int i = 0; i < _assemblers.size(); i++) {
 | 
						|
            AssemblerDef currentAssemblerDef = (AssemblerDef) _assemblers
 | 
						|
                            .elementAt(i);
 | 
						|
            if (currentAssemblerDef.isActive()) {
 | 
						|
                ProcessorConfiguration config = currentAssemblerDef
 | 
						|
                                .createConfiguration(this, linkType,
 | 
						|
                                                assemblerDef, targetPlatform);
 | 
						|
                //
 | 
						|
                // if the assembler has a fileset
 | 
						|
                // then allow it to add its files to
 | 
						|
                // the set of potential targets
 | 
						|
                //
 | 
						|
                ProcessorConfiguration[] localConfigs = new ProcessorConfiguration[] { config };
 | 
						|
                if (currentAssemblerDef.hasFileSets()) {
 | 
						|
                    TargetMatcher matcher = new TargetMatcher(this, _objDir,
 | 
						|
                                    localConfigs, linkerConfig, objectFiles,
 | 
						|
                                    targets);
 | 
						|
                    currentAssemblerDef.visitFiles(matcher);
 | 
						|
                }
 | 
						|
                biddingProcessors.addElement(config);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // add fallback assembler at the end
 | 
						|
        //
 | 
						|
        ProcessorConfiguration config = assemblerDef.createConfiguration(this,
 | 
						|
                        linkType, null, targetPlatform);
 | 
						|
        biddingProcessors.addElement(config);
 | 
						|
        ProcessorConfiguration[] bidders = new ProcessorConfiguration[biddingProcessors
 | 
						|
                        .size()];
 | 
						|
        biddingProcessors.copyInto(bidders);
 | 
						|
        TargetMatcher matcher = new TargetMatcher(this, _objDir, bidders,
 | 
						|
                        linkerConfig, objectFiles, targets);
 | 
						|
        assemblerDef.visitFiles(matcher);
 | 
						|
        return targets;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * This method collects a Hashtable, keyed by output file name, of
 | 
						|
     * TargetInfo's for every source file that is specified in the filesets of
 | 
						|
     * the <cc>and nested <compiler>elements. The TargetInfo's contain the
 | 
						|
     * appropriate compiler configurations for their possible compilation
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    private Hashtable getTargets(LinkerConfiguration linkerConfig,
 | 
						|
                    Vector objectFiles) {
 | 
						|
        Hashtable targets = new Hashtable(1000);
 | 
						|
        TargetDef targetPlatform = getTargetPlatform();
 | 
						|
        //
 | 
						|
        // find active (specialized) compilers
 | 
						|
        //
 | 
						|
        Vector biddingProcessors = new Vector(_compilers.size());
 | 
						|
        for (int i = 0; i < _compilers.size(); i++) {
 | 
						|
            CompilerDef currentCompilerDef = (CompilerDef) _compilers
 | 
						|
                            .elementAt(i);
 | 
						|
            if (currentCompilerDef.isActive()) {
 | 
						|
                ProcessorConfiguration config = currentCompilerDef
 | 
						|
                                .createConfiguration(this, linkType,
 | 
						|
                                                compilerDef, targetPlatform);
 | 
						|
                //
 | 
						|
                // see if this processor had a precompile child element
 | 
						|
                //
 | 
						|
                PrecompileDef precompileDef = currentCompilerDef
 | 
						|
                                .getActivePrecompile(compilerDef);
 | 
						|
                ProcessorConfiguration[] localConfigs = new ProcessorConfiguration[] { config };
 | 
						|
                //
 | 
						|
                // if it does then
 | 
						|
                //
 | 
						|
                if (precompileDef != null) {
 | 
						|
                    File prototype = precompileDef.getPrototype();
 | 
						|
                    //
 | 
						|
                    // will throw exceptions if prototype doesn't exist, etc
 | 
						|
                    //
 | 
						|
                    if (!prototype.exists()) {
 | 
						|
                        throw new BuildException("prototype ("
 | 
						|
                                        + prototype.toString()
 | 
						|
                                        + ") does not exist.");
 | 
						|
                    }
 | 
						|
                    if (prototype.isDirectory()) {
 | 
						|
                        throw new BuildException("prototype ("
 | 
						|
                                        + prototype.toString()
 | 
						|
                                        + ") is a directory.");
 | 
						|
                    }
 | 
						|
                    String[] exceptFiles = precompileDef.getExceptFiles();
 | 
						|
                    //
 | 
						|
                    // create a precompile building and precompile using
 | 
						|
                    // variants of the configuration
 | 
						|
                    // or return null if compiler doesn't support
 | 
						|
                    // precompilation
 | 
						|
                    CompilerConfiguration[] configs = ((CompilerConfiguration) config)
 | 
						|
                                    .createPrecompileConfigurations(prototype,
 | 
						|
                                                    exceptFiles);
 | 
						|
                    if (configs != null && configs.length == 2) {
 | 
						|
                        //
 | 
						|
                        // visit the precompiled file to add it into the
 | 
						|
                        // targets list (just like any other file if
 | 
						|
                        // compiler doesn't support precompilation)
 | 
						|
                        TargetMatcher matcher = new TargetMatcher(
 | 
						|
                                        this,
 | 
						|
                                        _objDir,
 | 
						|
                                        new ProcessorConfiguration[] { configs[0] },
 | 
						|
                                        linkerConfig, objectFiles, targets);
 | 
						|
                        matcher.visit(new File(prototype.getParent()),
 | 
						|
                                        prototype.getName());
 | 
						|
                        //
 | 
						|
                        // only the configuration that uses the
 | 
						|
                        // precompiled header gets added to the bidding list
 | 
						|
                        biddingProcessors.addElement(configs[1]);
 | 
						|
                        localConfigs = new ProcessorConfiguration[2];
 | 
						|
                        localConfigs[0] = configs[1];
 | 
						|
                        localConfigs[1] = config;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                //
 | 
						|
                // if the compiler has a fileset
 | 
						|
                // then allow it to add its files
 | 
						|
                // to the set of potential targets
 | 
						|
                if (currentCompilerDef.hasFileSets()) {
 | 
						|
                    TargetMatcher matcher = new TargetMatcher(this, _objDir,
 | 
						|
                                    localConfigs, linkerConfig, objectFiles,
 | 
						|
                                    targets);
 | 
						|
                    currentCompilerDef.visitFiles(matcher);
 | 
						|
                }
 | 
						|
                biddingProcessors.addElement(config);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        //
 | 
						|
        // add fallback compiler at the end
 | 
						|
        //
 | 
						|
        ProcessorConfiguration config = compilerDef.createConfiguration(this,
 | 
						|
                        linkType, null, targetPlatform);
 | 
						|
        biddingProcessors.addElement(config);
 | 
						|
        ProcessorConfiguration[] bidders = new ProcessorConfiguration[biddingProcessors
 | 
						|
                        .size()];
 | 
						|
        biddingProcessors.copyInto(bidders);
 | 
						|
        //
 | 
						|
        // bid out the <fileset>'s in the cctask
 | 
						|
        //
 | 
						|
        TargetMatcher matcher = new TargetMatcher(this, _objDir, bidders,
 | 
						|
                        linkerConfig, objectFiles, targets);
 | 
						|
        compilerDef.visitFiles(matcher);
 | 
						|
        return targets;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the default compiler adapter. Use the "name" attribute when the
 | 
						|
     * compiler is a supported compiler.
 | 
						|
     * 
 | 
						|
     * @param classname
 | 
						|
     *            fully qualified classname which implements CompilerAdapter
 | 
						|
     */
 | 
						|
    public void setClassname(String classname) {
 | 
						|
        compilerDef.setClassname(classname);
 | 
						|
        linkerDef.setClassname(classname);
 | 
						|
        assemblerDef.setClassname(classname);
 | 
						|
        aslcompilerDef.setClassname(classname);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the dataset for OS/390 builds.
 | 
						|
     * 
 | 
						|
     * @param dataset
 | 
						|
     *            The dataset to set
 | 
						|
     */
 | 
						|
    public void setDataset(String dataset) {
 | 
						|
        this.dataset = dataset;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Enables or disables generation of debug info.
 | 
						|
     */
 | 
						|
    public void setDebug(boolean debug) {
 | 
						|
        compilerDef.setDebug(debug);
 | 
						|
        linkerDef.setDebug(debug);
 | 
						|
        assemblerDef.setDebug(debug);
 | 
						|
        aslcompilerDef.setDebug(debug);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Deprecated.
 | 
						|
     * 
 | 
						|
     * Controls the depth of the dependency evaluation. Used to do a quick check
 | 
						|
     * of changes before a full build.
 | 
						|
     * 
 | 
						|
     * Any negative value which will perform full dependency checking. Positive
 | 
						|
     * values will truncate dependency checking. A value of 0 will cause only
 | 
						|
     * those files that changed to be recompiled, a value of 1 which cause files
 | 
						|
     * that changed or that explicitly include a file that changed to be
 | 
						|
     * recompiled.
 | 
						|
     * 
 | 
						|
     * Any non-negative value will cause a BuildException to be thrown before
 | 
						|
     * attempting a link or completing the task.
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public void setDependencyDepth(int depth) {
 | 
						|
        dependencyDepth = depth;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Enables generation of exception handling code
 | 
						|
     */
 | 
						|
    public void setExceptions(boolean exceptions) {
 | 
						|
        compilerDef.setExceptions(exceptions);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Enables run-time type information.
 | 
						|
     */
 | 
						|
    public void setRtti(boolean rtti) {
 | 
						|
        compilerDef.setRtti(rtti);
 | 
						|
    }
 | 
						|
 | 
						|
    // public LinkType getLinkType() {
 | 
						|
    // return linkType;
 | 
						|
    // }
 | 
						|
    /**
 | 
						|
     * Enables or disables incremental linking.
 | 
						|
     * 
 | 
						|
     * @param incremental
 | 
						|
     *            new state
 | 
						|
     */
 | 
						|
    public void setIncremental(boolean incremental) {
 | 
						|
        linkerDef.setIncremental(incremental);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set use of libtool.
 | 
						|
     * 
 | 
						|
     * If set to true, the "libtool " will be prepended to the command line for
 | 
						|
     * compatible processors
 | 
						|
     * 
 | 
						|
     * @param libtool
 | 
						|
     *            If true, use libtool.
 | 
						|
     */
 | 
						|
    public void setLibtool(boolean libtool) {
 | 
						|
        compilerDef.setLibtool(libtool);
 | 
						|
        linkerDef.setLibtool(libtool);
 | 
						|
        assemblerDef.setLibtool(libtool);
 | 
						|
        aslcompilerDef.setLibtool(libtool);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the output file type. Supported values "executable", "shared", and
 | 
						|
     * "static". Deprecated, specify outtype instead.
 | 
						|
     * 
 | 
						|
     * @deprecated
 | 
						|
     */
 | 
						|
    public void setLink(OutputTypeEnum outputType) {
 | 
						|
        linkType.setOutputType(outputType);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Enables or disables generation of multithreaded code
 | 
						|
     * 
 | 
						|
     * @param multi
 | 
						|
     *            If true, generated code may be multithreaded.
 | 
						|
     */
 | 
						|
    public void setMultithreaded(boolean multi) {
 | 
						|
        compilerDef.setMultithreaded(multi);
 | 
						|
    }
 | 
						|
 | 
						|
    //
 | 
						|
    // keep near duplicate comment at CompilerDef.setName in sync
 | 
						|
    //
 | 
						|
    /**
 | 
						|
     * Sets type of the default compiler and linker.
 | 
						|
     * 
 | 
						|
     * <table width="100%" border="1"> <thead>Supported compilers </thead>
 | 
						|
     * <tr>
 | 
						|
     * <td>gcc (default)</td>
 | 
						|
     * <td>GCC C++ compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>g++</td>
 | 
						|
     * <td>GCC C++ compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>c++</td>
 | 
						|
     * <td>GCC C++ compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>g77</td>
 | 
						|
     * <td>GNU FORTRAN compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>msvc</td>
 | 
						|
     * <td>Microsoft Visual C++</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>bcc</td>
 | 
						|
     * <td>Borland C++ Compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>msrc</td>
 | 
						|
     * <td>Microsoft Resource Compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>brc</td>
 | 
						|
     * <td>Borland Resource Compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>df</td>
 | 
						|
     * <td>Compaq Visual Fortran Compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>midl</td>
 | 
						|
     * <td>Microsoft MIDL Compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>icl</td>
 | 
						|
     * <td>Intel C++ compiler for Windows (IA-32)</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>ecl</td>
 | 
						|
     * <td>Intel C++ compiler for Windows (IA-64)</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>icc</td>
 | 
						|
     * <td>Intel C++ compiler for Linux (IA-32)</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>ecc</td>
 | 
						|
     * <td>Intel C++ compiler for Linux (IA-64)</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>CC</td>
 | 
						|
     * <td>Sun ONE C++ compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>aCC</td>
 | 
						|
     * <td>HP aC++ C++ Compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>os390</td>
 | 
						|
     * <td>OS390 C Compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>os400</td>
 | 
						|
     * <td>Icc Compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>sunc89</td>
 | 
						|
     * <td>Sun C89 C Compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>xlC</td>
 | 
						|
     * <td>VisualAge C Compiler</td>
 | 
						|
     * </tr>
 | 
						|
     * </table>
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public void setName(CompilerEnum name) {
 | 
						|
        compilerDef.setName(name);
 | 
						|
        Processor compiler = compilerDef.getProcessor();
 | 
						|
        Linker linker = compiler.getLinker(linkType);
 | 
						|
        linkerDef.setProcessor(linker);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Do not propagate old environment when new environment variables are
 | 
						|
     * specified.
 | 
						|
     */
 | 
						|
    public void setNewenvironment(boolean newenv) {
 | 
						|
        compilerDef.setNewenvironment(newenv);
 | 
						|
        linkerDef.setNewenvironment(newenv);
 | 
						|
        assemblerDef.setNewenvironment(newenv);
 | 
						|
        aslcompilerDef.setNewenvironment(newenv);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the destination directory for object files.
 | 
						|
     * 
 | 
						|
     * Generally this should be a property expression that evaluates to distinct
 | 
						|
     * debug and release object file directories.
 | 
						|
     * 
 | 
						|
     * @param dir
 | 
						|
     *            object directory
 | 
						|
     */
 | 
						|
    public void setObjdir(File dir) {
 | 
						|
        if (dir == null) {
 | 
						|
            throw new NullPointerException("dir");
 | 
						|
        }
 | 
						|
        _objDir = dir;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the output file name. If not specified, the task will only compile
 | 
						|
     * files and not attempt to link. If an extension is not specified, the task
 | 
						|
     * may use a system appropriate extension and prefix, for example,
 | 
						|
     * outfile="example" may result in "libexample.so" being created.
 | 
						|
     * 
 | 
						|
     * @param outfile
 | 
						|
     *            output file name
 | 
						|
     */
 | 
						|
    public void setOutfile(File outfile) {
 | 
						|
        //
 | 
						|
        // if file name was empty, skip link step
 | 
						|
        //
 | 
						|
        if (outfile == null || outfile.toString().length() > 0) {
 | 
						|
            _outfile = outfile;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Specifies the name of a property to set with the physical filename that
 | 
						|
     * is produced by the linker
 | 
						|
     */
 | 
						|
    public void setOutputFileProperty(String outputFileProperty) {
 | 
						|
        this.outputFileProperty = outputFileProperty;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the output file type. Supported values "executable", "shared", and
 | 
						|
     * "static".
 | 
						|
     */
 | 
						|
    public void setOuttype(OutputTypeEnum outputType) {
 | 
						|
        linkType.setOutputType(outputType);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the project.
 | 
						|
     */
 | 
						|
    public void setProject(Project project) {
 | 
						|
        super.setProject(project);
 | 
						|
        compilerDef.setProject(project);
 | 
						|
        linkerDef.setProject(project);
 | 
						|
        assemblerDef.setProject(project);
 | 
						|
        aslcompilerDef.setProject(project);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * If set to true, all files will be rebuilt.
 | 
						|
     * 
 | 
						|
     * @paran rebuildAll If true, all files will be rebuilt. If false, up to
 | 
						|
     *        date files will not be rebuilt.
 | 
						|
     */
 | 
						|
    public void setRebuild(boolean rebuildAll) {
 | 
						|
        compilerDef.setRebuild(rebuildAll);
 | 
						|
        linkerDef.setRebuild(rebuildAll);
 | 
						|
        assemblerDef.setRebuild(rebuildAll);
 | 
						|
        aslcompilerDef.setRebuild(rebuildAll);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * If set to true, compilation errors will not stop the task until all files
 | 
						|
     * have been attempted.
 | 
						|
     * 
 | 
						|
     * @param relentless
 | 
						|
     *            If true, don't stop on the first compilation error
 | 
						|
     * 
 | 
						|
     */
 | 
						|
    public void setRelentless(boolean relentless) {
 | 
						|
        this.relentless = relentless;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the type of runtime library, possible values "dynamic", "static".
 | 
						|
     */
 | 
						|
    public void setRuntime(RuntimeType rtlType) {
 | 
						|
        linkType.setStaticRuntime((rtlType.getIndex() == 1));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the nature of the subsystem under which that the program will
 | 
						|
     * execute.
 | 
						|
     * 
 | 
						|
     * <table width="100%" border="1"> <thead>Supported subsystems </thead>
 | 
						|
     * <tr>
 | 
						|
     * <td>gui</td>
 | 
						|
     * <td>Graphical User Interface</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>console</td>
 | 
						|
     * <td>Command Line Console</td>
 | 
						|
     * </tr>
 | 
						|
     * <tr>
 | 
						|
     * <td>other</td>
 | 
						|
     * <td>Other</td>
 | 
						|
     * </tr>
 | 
						|
     * </table>
 | 
						|
     * 
 | 
						|
     * @param subsystem
 | 
						|
     *            subsystem
 | 
						|
     * @throws NullPointerException
 | 
						|
     *             if subsystem is null
 | 
						|
     */
 | 
						|
    public void setSubsystem(SubsystemEnum subsystem) {
 | 
						|
        if (subsystem == null) {
 | 
						|
            throw new NullPointerException("subsystem");
 | 
						|
        }
 | 
						|
        linkType.setSubsystem(subsystem);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Enumerated attribute with the values "none", "severe", "default",
 | 
						|
     * "production", "diagnostic", and "failtask".
 | 
						|
     */
 | 
						|
    public void setWarnings(CompilerDef.WarningLevel level) {
 | 
						|
        compilerDef.setWarnings(level);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Indicates whether the build will continue even if there are compilation
 | 
						|
     * errors; defaults to true.
 | 
						|
     * 
 | 
						|
     * @param fail
 | 
						|
     *            if true halt the build on failure
 | 
						|
     */
 | 
						|
    public void setFailonerror(boolean fail) {
 | 
						|
        failOnError = fail;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets the failonerror flag.
 | 
						|
     * 
 | 
						|
     * @return the failonerror flag
 | 
						|
     */
 | 
						|
    public boolean getFailonerror() {
 | 
						|
        return failOnError;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds descriptive version information to be included in the generated
 | 
						|
     * file. The first active version info block will be used. (Non-functional
 | 
						|
     * prototype)
 | 
						|
     */
 | 
						|
    public void addConfiguredVersioninfo(VersionInfo info) {
 | 
						|
        linkerDef.addConfiguredVersioninfo(info);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a target definition or reference (Non-functional prototype).
 | 
						|
     * 
 | 
						|
     * @param target
 | 
						|
     *            target
 | 
						|
     * @throws NullPointerException
 | 
						|
     *             if compiler is null
 | 
						|
     */
 | 
						|
    public void addConfiguredTarget(TargetDef target) {
 | 
						|
        if (target == null) {
 | 
						|
            throw new NullPointerException("target");
 | 
						|
        }
 | 
						|
        target.setProject(getProject());
 | 
						|
        targetPlatforms.addElement(target);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a distributer definition or reference (Non-functional prototype).
 | 
						|
     * 
 | 
						|
     * @param distributer
 | 
						|
     *            distributer
 | 
						|
     * @throws NullPointerException
 | 
						|
     *             if compiler is null
 | 
						|
     */
 | 
						|
    public void addConfiguredDistributer(DistributerDef distributer) {
 | 
						|
        if (distributer == null) {
 | 
						|
            throw new NullPointerException("distributer");
 | 
						|
        }
 | 
						|
        distributer.setProject(getProject());
 | 
						|
        distributers.addElement(distributer);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets optimization.
 | 
						|
     * @param optimization
 | 
						|
     */
 | 
						|
    public void setOptimize(OptimizationEnum optimization) {
 | 
						|
        compilerDef.setOptimize(optimization);
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean isAssembler() {
 | 
						|
        return assembler;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setAssembler(boolean assembler) {
 | 
						|
        this.assembler = assembler;
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean isAslcompiler() {
 | 
						|
        return aslcompiler;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setAslcompiler(boolean aslcompiler) {
 | 
						|
        this.aslcompiler = aslcompiler;
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean isUserdefine() {
 | 
						|
        return userdefine;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setUserdefine(boolean userdefine) {
 | 
						|
        this.userdefine = userdefine;
 | 
						|
    }
 | 
						|
 | 
						|
    public String getArch() {
 | 
						|
        return arch;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setArch(String arch) {
 | 
						|
        this.arch = arch;
 | 
						|
    }
 | 
						|
 | 
						|
    public String getOs() {
 | 
						|
        return os;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setOs(String os) {
 | 
						|
        this.os = os;
 | 
						|
    }
 | 
						|
 | 
						|
    public String getVendor() {
 | 
						|
        return vendor;
 | 
						|
    }
 | 
						|
 | 
						|
    public void setVendor(String vendor) {
 | 
						|
        this.vendor = vendor;
 | 
						|
    }
 | 
						|
    
 | 
						|
    
 | 
						|
}
 |