Class CommandLineLinker

All Implemented Interfaces:
Cloneable, Linker, Processor
Direct Known Subclasses:
AbstractArLibrarian, AbstractLdLinker, ADSLibrarian, ADSLinker, BorlandLibrarian, BorlandLinker, C89Linker, ClxxLibrarian, ClxxLinker, CompaqVisualFortranLibrarian, DevStudioCompatibleLibrarian, DevStudioCompatibleLinker, IccLinker, OpenWatcomLibrarian, OpenWatcomLinker, OS390Linker

public abstract class CommandLineLinker extends AbstractLinker
An abstract Linker implementation that performs the link via an external command.
Author:
Adam Murdoch
  • Constructor Details

    • CommandLineLinker

      public CommandLineLinker(String command, String identifierArg, String[] extensions, String[] ignoredExtensions, String outputSuffix, boolean isLibtool, CommandLineLinker libtoolLinker)
      Creates a comand line linker invocation
  • Method Details

    • addBase

      protected abstract void addBase(long base, Vector args)
    • addFixed

      protected abstract void addFixed(Boolean fixed, Vector args)
    • addImpliedArgs

      protected abstract void addImpliedArgs(boolean debug, LinkType linkType, Vector args)
    • addIncremental

      protected abstract void addIncremental(boolean incremental, Vector args)
    • addLibrarySets

      protected String[] addLibrarySets(CCTask task, LibrarySet[] libsets, Vector preargs, Vector midargs, Vector endargs)
    • addMap

      protected abstract void addMap(boolean map, Vector args)
    • addStack

      protected abstract void addStack(int stack, Vector args)
    • addEntry

      protected abstract void addEntry(String entry, Vector args)
    • createConfiguration

      protected LinkerConfiguration createConfiguration(CCTask task, LinkType linkType, ProcessorDef[] baseDefs, LinkerDef specificDef, TargetDef targetPlatform, VersionInfo versionInfo)
      Specified by:
      createConfiguration in class AbstractLinker
    • decorateLinkerOption

      protected String decorateLinkerOption(StringBuffer buf, String arg)
      Allows drived linker to decorate linker option. Override by GccLinker to prepend a "-Wl," to pass option to through gcc to linker.
      Parameters:
      buf - buffer that may be used and abused in the decoration process, must not be null.
      arg - linker argument
    • getCommand

      protected final String getCommand()
    • getCommandFileSwitch

      protected abstract String getCommandFileSwitch(String commandFile)
    • getIdentifier

      public String getIdentifier()
      Description copied from interface: Processor
      Retrieve an identifier that identifies the specific version of the compiler. Compilers with the same identifier should produce the same output files for the same input files and command line switches.
      Specified by:
      getIdentifier in interface Processor
      Specified by:
      getIdentifier in class AbstractProcessor
    • getLibtoolLinker

      public final CommandLineLinker getLibtoolLinker()
    • getMaximumCommandLength

      protected abstract int getMaximumCommandLength()
    • getOutputFileNames

      public String[] getOutputFileNames(String baseName, VersionInfo versionInfo)
      Description copied from interface: Processor
      Output file name (no path components) corresponding to source file
      Specified by:
      getOutputFileNames in interface Processor
      Specified by:
      getOutputFileNames in class AbstractLinker
      Parameters:
      baseName - input file
      Returns:
      output file name or null if no output file or name not determined by input file
    • getOutputFileSwitch

      protected String[] getOutputFileSwitch(CCTask task, String outputFile)
    • getOutputFileSwitch

      protected abstract String[] getOutputFileSwitch(String outputFile)
    • getStartupObject

      protected String getStartupObject(LinkType linkType)
    • link

      public void link(CCTask task, File outputFile, String[] sourceFiles, CommandLineLinkerConfiguration config) throws org.apache.tools.ant.BuildException
      Performs a link using a command line linker
      Throws:
      org.apache.tools.ant.BuildException
    • prepareArguments

      protected String[] prepareArguments(CCTask task, String outputDir, String outputFile, String[] sourceFiles, CommandLineLinkerConfiguration config)
      Prepares argument list for exec command. Will return null if command line would exceed allowable command line buffer.
      Parameters:
      task - compilation task.
      outputFile - linker output file
      sourceFiles - linker input files (.obj, .o, .res)
      config - linker configuration
      Returns:
      arguments for runTask
    • prepareFilename

      protected String prepareFilename(StringBuffer buf, String outputDir, String sourceFile)
      Processes filename into argument form
    • prepareResponseFile

      protected String[] prepareResponseFile(File outputFile, String[] args) throws IOException
      Prepares argument list to execute the linker using a response file.
      Parameters:
      outputFile - linker output file
      args - output of prepareArguments
      Returns:
      arguments for runTask
      Throws:
      IOException
    • quoteFilename

      protected String quoteFilename(StringBuffer buf, String filename)
    • runCommand

      protected int runCommand(CCTask task, File workingDir, String[] cmdline) throws org.apache.tools.ant.BuildException
      This method is exposed so test classes can overload and test the arguments without actually spawning the compiler
      Throws:
      org.apache.tools.ant.BuildException
    • setCommand

      protected final void setCommand(String command)