Files
kotlin-fork/build.xml
T
2012-04-29 19:30:43 +04:00

319 lines
13 KiB
XML

<project name="Kotlin" default="dist">
<property name="output" value="${basedir}/dist"/>
<property name="kotlin-home" value="${output}/kotlinc"/>
<property name="build.number" value="snapshot"/>
<property name="output.name" value="kotlin-${build.number}"/>
<property name="idea.sdk" value="${basedir}/ideaSDK"/>
<import file="build-tools/build.xml" optional="false"/>
<path id="classpath">
<fileset dir="${idea.sdk}" includes="core/*.jar"/>
<!--
Work around this problem: https://gist.github.com/1c4a7d51b61ec81d581b
Somebody please fix it properly or delete this comment if this is OK
-->
<pathelement path="${idea.sdk}/lib/resources_en.jar"/>
<fileset dir="${basedir}/lib" includes="**/*.jar"/>
<pathelement path="${output}/classes/runtime"/>
</path>
<path id="classpath.kotlin">
<path refid="classpath"/>
<pathelement path="${output}/classes/compiler"/>
</path>
<path id="sourcepath">
<dirset dir="${basedir}/compiler">
<include name="frontend/src"/>
<include name="frontend.java/src"/>
<include name="backend/src"/>
<include name="cli/src"/>
<include name="util/src"/>
<include name="jet.as.java.psi/src"/>
</dirset>
</path>
<target name="init" depends="clean">
<mkdir dir="${kotlin-home}"/>
<mkdir dir="${kotlin-home}/lib"/>
<mkdir dir="${kotlin-home}/lib/alt"/>
</target>
<target name="compileRT" depends="init">
<mkdir dir="${output}/classes/runtime"/>
<javac destdir="${output}/classes/runtime" debug="true" debuglevel="lines,vars,source" includeAntRuntime="false">
<src path="${basedir}/runtime/src"/>
<classpath refid="classpath"/>
</javac>
</target>
<target name="compileStdlib" depends="jar,jarLang,compileRT">
<mkdir dir="${output}/classes/stdlib"/>
<java classname="org.jetbrains.jet.cli.jvm.K2JVMCompiler" failonerror="true" fork="true">
<classpath>
<path refid="classpath"/>
<pathelement location="${kotlin-home}/lib/kotlin-compiler.jar"/>
</classpath>
<arg value="-src"/>
<arg value="${basedir}/libraries/stdlib/src"/>
<arg value="-output"/>
<arg value="${output}/classes/stdlib"/>
<arg value="-mode"/>
<arg value="stdlib"/>
<arg value="-classpath"/>
<arg value="${output}/classes/runtime"/>
</java>
</target>
<target name="compileJDKHeaders" depends="jar,jarLang">
<mkdir dir="${output}/classes/stdlib"/>
<java classname="org.jetbrains.jet.cli.jvm.K2JVMCompiler" failonerror="true">
<classpath>
<path refid="classpath"/>
<pathelement location="${kotlin-home}/lib/kotlin-compiler.jar"/>
</classpath>
<arg value="-src"/>
<arg value="${basedir}/jdk-headers/src"/>
<arg value="-output"/>
<arg value="${output}/classes/jdk-headers"/>
<arg value="-mode"/>
<arg value="jdkHeaders"/>
</java>
</target>
<target name="compileLang" depends="jar">
<mkdir dir="${output}/classes/lang"/>
<java classname="org.jetbrains.jet.cli.jvm.K2JVMCompiler" failonerror="true">
<classpath>
<path refid="classpath"/>
<pathelement location="${kotlin-home}/lib/kotlin-compiler.jar"/>
</classpath>
<arg value="-src"/>
<arg value="${basedir}/compiler/frontend/src"/>
<arg value="-output"/>
<arg value="${output}/classes/lang"/>
<arg value="-mode"/>
<arg value="builtins"/>
</java>
</target>
<target name="jarRT" depends="compile,copyKotlinJars,compileStdlib">
<jar destfile="${kotlin-home}/lib/kotlin-runtime.jar">
<fileset dir="${output}/classes/runtime"/>
<fileset dir="${output}/classes/stdlib"/>
<fileset dir="${basedir}/runtime" includes="src/**/*"/>
<fileset dir="${basedir}/libraries/stdlib" includes="src/**/*"/>
</jar>
</target>
<target name="jarJDKHeaders" depends="compile,compileJDKHeaders">
<jar destfile="${kotlin-home}/lib/alt/kotlin-jdk-headers.jar">
<fileset dir="${output}/classes/jdk-headers"/>
</jar>
</target>
<target name="jarLang" depends="compile,compileLang">
<jar destfile="${kotlin-home}/lib/lang.jar">
<fileset dir="${output}/classes/lang"/>
</jar>
</target>
<target name="compileInjectorsGenerator">
<mkdir dir="${output}/classes/injectorsGenerator"/>
<javac destdir="${output}/classes/injectorsGenerator" debug="true" debuglevel="lines,vars,source" includeAntRuntime="false">
<src path="injector-generator/src"/>
<src refid="sourcepath"/>
<classpath refid="classpath"/>
</javac>
</target>
<target name="generateInjectors" depends="compileInjectorsGenerator">
<java classname="org.jetbrains.jet.di.AllInjectorsGenerator" failonerror="true">
<classpath refid="classpath"/>
<classpath path="${output}/classes/injectorsGenerator"/>
</java>
</target>
<target name="compile" depends="compileRT,generateInjectors">
<mkdir dir="${output}/classes/compiler"/>
<javac destdir="${output}/classes/compiler" debug="true" debuglevel="lines,vars,source" includeAntRuntime="false">
<src refid="sourcepath"/>
<classpath refid="classpath"/>
</javac>
</target>
<target name="compileTests" depends="dist">
<mkdir dir="${output}/classes/tests"/>
<javac destdir="${output}/classes/tests" debug="true" includeAntRuntime="false">
<src path="compiler/tests"/>
<classpath refid="classpath"/>
<classpath location="${output}/classes/compiler"/>
<classpath location="ideaSDK/lib/junit-4.10.jar"/>
<classpath location="ideaSDK/lib/idea.jar"/>
</javac>
</target>
<target name="jar" depends="compile">
<jar destfile="${kotlin-home}/lib/kotlin-compiler.jar">
<fileset dir="${output}/classes/compiler"/>
<fileset dir="${basedir}/compiler/frontend/src" includes="jet/**"/>
</jar>
</target>
<target name="jarjar">
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${basedir}/dependencies/jarjar.jar"/>
<taskdef resource="proguard/ant/task.properties" classpath="${basedir}/dependencies/proguard.jar"/>
<!-- JarJar Kotlin compiler & dependencies -->
<delete file="${output}/kotlin-compiler-jarjar.jar" failonerror="false"/>
<jarjar jarfile="${output}/kotlin-compiler-jarjar.jar">
<fileset dir="${output}/classes/compiler"/>
<fileset dir="${output}/classes/runtime"/>
<fileset dir="${basedir}/compiler/frontend/src" includes="jet/**"/>
<zipgroupfileset dir="${basedir}/lib" includes="*.jar"/>
<zipgroupfileset dir="${basedir}/ideaSDK/core" includes="*.jar"/>
<zap pattern="com.thoughtworks.xstream.converters.extended.ISO8601*"/>
<zap pattern="com.thoughtworks.xstream.converters.reflection.CGLIBEnhancedConverter*"/>
<zap pattern="com.thoughtworks.xstream.io.xml.Dom4J*"/>
<zap pattern="com.thoughtworks.xstream.io.xml.Xom*"/>
<zap pattern="com.thoughtworks.xstream.mapper.CGLIBMapper*"/>
<zap pattern="org.apache.log4j.jmx.Agent"/>
<zap pattern="org.apache.log4j.net.JMS*"/>
<zap pattern="org.apache.log4j.net.SMTP*"/>
<zap pattern="org.apache.log4j.or.jms.MessageRenderer"/>
<zap pattern="org.jdom.xpath.Jaxen*"/>
<rule pattern="com.intellij.**" result="kotlinc.internal.com.intellij.@1"/>
<rule pattern="org.intellij.lang.annotations.**" result="kotlinc.internal.org.intellij.lang.annotations.@1"/>
<rule pattern="org.jetbrains.annotations.**" result="kotlinc.internal.org.jetbrains.annotations.@1"/>
<rule pattern="com.google.**" result="kotlinc.internal.com.google.@1"/>
<rule pattern="org.objectweb.asm.**" result="kotlinc.internal.org.objectweb.asm.@1"/>
<rule pattern="com.sampullara.cli.**" result="kotlinc.internal.com.sampullara.cli.@1"/>
<rule pattern="org.picocontainer.**" result="kotlinc.internal.org.picocontainer.@1"/>
<rule pattern="gnu.trove.**" result="kotlinc.internal.gnu.trove.@1"/>
<rule pattern="javax.inject.**" result="kotlinc.internal.javax.inject.@1"/>
</jarjar>
<delete failonerror="false" dir="${output}/kotlin-compiler.exploded"/>
<mkdir dir="${output}/kotlin-compiler.exploded"/>
<unzip src="${output}/kotlin-compiler-jarjar.jar" dest="${output}/kotlin-compiler.exploded"/>
<delete file="${output}/kotlin-compiler-jarjar.jar"/>
<!-- Clean JarJar result -->
<delete file="${output}/kotlin-compiler-clean.jar" failonerror="false"/>
<jar jarfile="${output}/kotlin-compiler-clean.jar">
<fileset dir="${output}/kotlin-compiler.exploded">
<include name="**/*.class"/>
<include name="**/*.jet"/>
<include name="**/*.jet.src"/>
<include name="**/*.kt"/>
<include name="/META-INF/services/**"/>
<include name="/messages/**"/>
</fileset>
<manifest>
<attribute name="Built-By" value="JetBrains"/>
<attribute name="Implementation-Vendor" value="JetBrains"/>
<attribute name="Implementation-Title" value="Kotlin Compiler"/>
<attribute name="Implementation-Version" value="${build.number}"/>
<attribute name="Main-Class" value="org.jetbrains.jet.cli.jvm.K2JVMCompiler"/>
</manifest>
</jar>
<delete dir="${output}/kotlin-compiler.exploded" />
<available property="rtjar" value="${java.home}/lib/rt.jar" file="${java.home}/lib/rt.jar" />
<available property="rtjar" value="${java.home}/lib/classes.jar" file="${java.home}/lib/classes.jar" />
<delete file="${output}/kotlin-compiler.jar" failonerror="false"/>
<proguard><![CDATA[
-injars '${output}/kotlin-compiler-clean.jar'
-outjars '${output}/kotlin-compiler.jar'
-libraryjars '${rtjar}'
-target 1.6
-dontoptimize
-dontobfuscate
# Keep application classes, along with their 'main' methods.
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
-keepclasseswithmembers class * {
# Various dynamically called methods
void start();
void stop();
void dispose();
** getFileSystem();
** isVarArgs();
** getApplication();
** executeOnPooledThread(java.lang.Runnable);
int getBooleanAttributes(java.io.File);
<init>(kotlinc.internal.com.intellij.lang.ASTNode);
}
# Keep the special static methods that are required in enumeration classes.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * {
** toString();
** hashCode();
** project();
** TYPE;
** ourInstance;
}
]]></proguard>
<delete file="${output}/kotlin-compiler-clean.jar" />
</target>
<target name="clean">
<delete dir="${output}"/>
</target>
<target name="copyKotlinJars">
<copy todir="${kotlin-home}/lib">
<fileset dir="${idea.sdk}/core" includes="*.jar"/>
<fileset dir="${basedir}/lib" includes="**/*.jar"/>
</copy>
<copy todir="${kotlin-home}/lib/js">
<fileset dir="${basedir}/js/js.translator/lib" includes="**/*.jar"/>
</copy>
<copy todir="${kotlin-home}/bin">
<fileset dir="${basedir}/compiler/cli/bin"/>
</copy>
<chmod dir="${kotlin-home}/bin" includes="*" perm="755"/>
</target>
<target name="dist" depends="init,copyKotlinJars,jar,buildToolsJar,jarJDKHeaders,jarRT,jarLang,jarjar"/>
<target name="doc" depends="dist"/>
<target name="zip" depends="dist">
<echo file="${kotlin-home}/build.txt" message="${build.number}"/>
<zip destfile="${output}/${output.name}.zip">
<zipfileset prefix="kotlinc" dir="${kotlin-home}"/>
<zipfileset prefix="kotlinc" file="${output}/build.txt"/>
<zipfileset prefix="kotlinc/license" dir="${basedir}/license"/>
<zipfileset prefix="kotlinc/bin" filemode="755" dir="${basedir}/compiler/cli/bin"/>
</zip>
</target>
</project>