public inbox for rhug-rhats@sourceware.org
 help / color / mirror / Atom feed
* ant+ecj
@ 2004-05-16  5:53 Anthony Green
  2004-05-24 10:35 ` ant+ecj Gary Benson
  2004-05-26 16:01 ` ant+ecj Gary Benson
  0 siblings, 2 replies; 4+ messages in thread
From: Anthony Green @ 2004-05-16  5:53 UTC (permalink / raw)
  To: rhug-rhats; +Cc: Tom Tromey

[-- Attachment #1: Type: text/plain, Size: 574 bytes --]

Attached is the Eclipse Java compiler I wrote for Ant.

Tom - I have vague memories of you having done the same thing at one
point.

ecj has been in rhug for some time now.  Running it in-process as the
default java compiler makes for a wicked fast build system.

This requires the Ant patch that I recently sent to the list in order to
point the bootclasspath at the right libgcj.jar file.

I'd like to commit these changes (once I fluorinate ecj), but thought
I'd check to see how people feel about this...

Thanks,

AG

-- 
Anthony Green <green@redhat.com>
Red Hat, Inc.

[-- Attachment #2: Ecj.java --]
[-- Type: text/x-java, Size: 5937 bytes --]

/*
 * The Apache Software License, Version 1.1
 *
 * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution, if
 *    any, must include the following acknowlegement:
 *       "This product includes software developed by the
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowlegement may appear in the software itself,
 *    if and wherever such third-party acknowlegements normally appear.
 *
 * 4. The names "Ant" and "Apache Software
 *    Foundation" must not be used to endorse or promote products derived
 *    from this software without prior written permission. For written
 *    permission, please contact apache@apache.org.
 *
 * 5. Products derived from this software may not be called "Apache"
 *    nor may "Apache" appear in their names without prior written
 *    permission of the Apache Group.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 */

package org.apache.tools.ant.taskdefs.compilers;

import java.io.*;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;

import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;

import org.eclipse.jdt.internal.compiler.batch.Main;

/**
 * The implementation of the Eclipse Java compiler.
 * This is primarily a cut-and-paste from the original javac task before it
 * was refactored.
 *
 * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
 * @author Robin Green 
 *         <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a>
 * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
 * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
 * @author <a href="mailto:green@redhat.com">Anthony Green</a>
 *
 * @since Ant 1.3
 */
public class Ecj extends DefaultCompilerAdapter {

    /**
     * Run the compilation.
     *
     * @exception BuildException if the compilation has problems.
     */
    public boolean execute() throws BuildException {
        attributes.log("Using ecj compiler", Project.MSG_VERBOSE);
        Commandline cmd = setupECJCommand();

        try {
	  Main compiler = new Main (new PrintWriter(System.out), 
				    new PrintWriter(System.err), 
				    false);
	  logAndAddFilesToCompile(cmd);
	  boolean result = compiler.compile (cmd.getArguments());
	  return result;
        } catch (Exception ex) {
            if (ex instanceof BuildException) {
                throw (BuildException) ex;
            } else {
                throw new BuildException("Error starting ecj compiler", 
                                         ex, location);
            }
        }
    }

    protected Commandline setupECJCommand() {
        Commandline cmd = new Commandline();
        Path classpath = new Path(project);

        // ecj doesn't support an extension dir (-extdir)
        // so we'll emulate it for compatibility and convenience.
        classpath.addExtdirs(extdirs);

        if (bootclasspath == null || bootclasspath.size() == 0) {
            // no bootclasspath, therefore, get one from the java runtime
            includeJavaRuntime = true;
        }
        classpath.append(getCompileClasspath());

        // ecj has no option for source-path so we
        // will add it to classpath.
        if (compileSourcepath != null) {
            classpath.append(compileSourcepath);
        } else {
            classpath.append(src);
        }

        if (destDir != null) {
            cmd.createArgument().setValue("-d");
            cmd.createArgument().setFile(destDir);
            
            if (destDir.mkdirs()) {
                throw new BuildException("Can't make output directories. "
                                         + "Maybe permission is wrong. ");
            };
        }
        
        cmd.createArgument().setValue("-classpath");
        cmd.createArgument().setPath(classpath);

        if (encoding != null) {
            cmd.createArgument().setValue("-encoding " + encoding);
        }
        if (debug) {
            cmd.createArgument().setValue("-g");
        }

        addCurrentCompilerArgs(cmd);

        return cmd;
    }
}

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: ant+ecj
  2004-05-16  5:53 ant+ecj Anthony Green
@ 2004-05-24 10:35 ` Gary Benson
  2004-05-26 16:01 ` ant+ecj Gary Benson
  1 sibling, 0 replies; 4+ messages in thread
From: Gary Benson @ 2004-05-24 10:35 UTC (permalink / raw)
  To: rhug-rhats

I'm currently looking into the whole ant + ecj thing, so I'll probably
end up committing these changes if it's alright with you.

Gary

Anthony Green wrote:
> Attached is the Eclipse Java compiler I wrote for Ant.
> 
> Tom - I have vague memories of you having done the same thing at one
> point.
> 
> ecj has been in rhug for some time now.  Running it in-process as
> the default java compiler makes for a wicked fast build system.
> 
> This requires the Ant patch that I recently sent to the list in
> order to point the bootclasspath at the right libgcj.jar file.
> 
> I'd like to commit these changes (once I fluorinate ecj), but
> thought I'd check to see how people feel about this...
> 
> Thanks,
> 
> AG
> 
> -- 
> Anthony Green <green@redhat.com>
> Red Hat, Inc.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: ant+ecj
  2004-05-16  5:53 ant+ecj Anthony Green
  2004-05-24 10:35 ` ant+ecj Gary Benson
@ 2004-05-26 16:01 ` Gary Benson
  2004-05-27  1:25   ` ant+ecj Anthony Green
  1 sibling, 1 reply; 4+ messages in thread
From: Gary Benson @ 2004-05-26 16:01 UTC (permalink / raw)
  To: rhug-rhats

Anthony Green wrote:
> ecj has been in rhug for some time now.  Running it in-process [in
> ant] as the default java compiler makes for a wicked fast build
> system.

Jesus, you weren't kidding!  It's so fast compared to RHUG builds that
I didn't think it had done anything until I checked!

*speechless*

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: ant+ecj
  2004-05-26 16:01 ` ant+ecj Gary Benson
@ 2004-05-27  1:25   ` Anthony Green
  0 siblings, 0 replies; 4+ messages in thread
From: Anthony Green @ 2004-05-27  1:25 UTC (permalink / raw)
  To: Gary Benson; +Cc: rhug-rhats

On Wed, 2004-05-26 at 07:49, Gary Benson wrote:
> Anthony Green wrote:
> > ecj has been in rhug for some time now.  Running it in-process [in
> > ant] as the default java compiler makes for a wicked fast build
> > system.
> 
> Jesus, you weren't kidding!  It's so fast compared to RHUG builds that
> I didn't think it had done anything until I checked!

I've benchmarked it against jikes in the past as a stand alone compiler,
and this is faster.

So I think it's fair to say that for ant based builds, we'll compare
even more favorably against ant+jikes since we won't spawn processes.

AG

-- 
Anthony Green <green@redhat.com>
Red Hat, Inc.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2004-05-27  1:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-05-16  5:53 ant+ecj Anthony Green
2004-05-24 10:35 ` ant+ecj Gary Benson
2004-05-26 16:01 ` ant+ecj Gary Benson
2004-05-27  1:25   ` ant+ecj Anthony Green

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).