ikvm-fork/openjdk/openjdk.build

466 строки
24 KiB
XML

<?xml version="1.0"?>
<!--
Copyright (C) 2002-2014 Jeroen Frijters
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Jeroen Frijters
jeroen@frijters.net
-->
<project name="ClassLibrary" default="all">
<include buildfile="../ikvm.include" />
<property name="pathsep" value=":" />
<property overwrite="false" name="signoption" value="" />
<property overwrite="false" name="SkipSystemCoreDependency" value="false" />
<property name="OPENJDK_VERSION" value="OpenJDK 8u45 b14" />
<property name="IMPLEMENTATION_VERSION" value="1.8.0" />
<property name="SPECIFICATION_VERSION" value="1.8" />
<property name="FULL_VERSION" value="1.8.0_45-b14" />
<property name="OpenJDK.dir" value="${project::get-base-directory()}/../../openjdk-8u45-b14" />
<if test="${platform::is-win32()}">
<property name="pathsep" value=";" />
</if>
<target name="all" depends="classes rmi run-nasgen vfs resources core">
</target>
<target name="version">
<property name="VERSION" value="${assemblyname::get-version(assemblyname::get-assembly-name(path::combine(project::get-base-directory(), '../bin/IKVM.Runtime.dll')))}" />
</target>
<target name="copyright" depends="allsources.gen.lst">
<exec program="${project::get-base-directory()}/../tools/SourceLicenseAnalyzer.exe" output="copyright.txt" useruntimeengine="true" />
<loadfile file="copyright.txt" property="COPYRIGHT" />
</target>
<target name="allsources.gen.lst">
<copy file="allsources.lst" tofile="allsources.gen.lst" outputencoding="ascii" overwrite="true">
<filterchain>
<replacetokens>
<token key="OPENJDK" value="${OpenJDK.dir}" />
</replacetokens>
</filterchain>
</copy>
</target>
<target name="System.Core" unless="${SkipSystemCoreDependency}">
<delete file="System.Core.dll" />
<if test="${version::get-major(framework::get-version(framework::get-target-framework() )) &lt; 4}">
<copy file="../bin/IKVM.Reflection.dll" todir="." overwrite="true" />
<csc target="exe" output="GenerateSystemCore.exe">
<sources>
<include name="GenerateSystemCore.cs" />
</sources>
<references>
<include name="IKVM.Reflection.dll" asis="true" />
</references>
</csc>
<exec program="GenerateSystemCore.exe" useruntimeengine="true" />
<delete>
<fileset basedir=".">
<include name="IKVM.Reflection.dll"/>
<include name="GenerateSystemCore.exe"/>
</fileset>
</delete>
</if>
</target>
<target name="DummySystemCoreJar">
<exec program="javac" commandline="-implicit:none ExtensionAttribute.java" useruntimeengine="false" />
<zip zipfile="System.Core.jar">
<fileset prefix="cli/System/Runtime/CompilerServices">
<include name="ExtensionAttribute.class" />
<include name="ExtensionAttribute$Annotation.class" />
</fileset>
</zip>
<delete>
<fileset basedir=".">
<include name="ExtensionAttribute.class" />
<include name="ExtensionAttribute$Annotation.class" />
</fileset>
</delete>
</target>
<target name="clean-classes">
<delete>
<fileset basedir="../classpath">
<include name="**.class"/>
</fileset>
</delete>
<delete>
<fileset basedir="${OpenJDK.dir}">
<include name="**.class"/>
</fileset>
</delete>
<delete>
<fileset basedir=".">
<include name="**.class"/>
</fileset>
</delete>
</target>
<target name="clean-stubjars">
<delete>
<fileset basedir=".">
<include name="mscorlib.jar" />
<include name="System.jar" />
<include name="System.Core.jar" />
<include name="System.Data.jar" />
<include name="System.Drawing.jar" />
<include name="System.XML.jar" />
</fileset>
</delete>
</target>
<target name="stubjars" depends="clean-stubjars System.Core">
<exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap mscorlib" useruntimeengine="true" />
<exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap System" useruntimeengine="true" />
<exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap System.Core" useruntimeengine="true" unless="${SkipSystemCoreDependency}" />
<if test="${SkipSystemCoreDependency}">
<call target="DummySystemCoreJar" />
</if>
<exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap System.Data" useruntimeengine="true" />
<exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap System.Drawing" useruntimeengine="true" />
<exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" commandline="-bootstrap System.XML" useruntimeengine="true" />
</target>
<target name="runtime-identity">
<property name="IKVM.Runtime" value="IKVM.Runtime" />
<property name="IKVM.AWT.WinForms" value="IKVM.AWT.WinForms" />
<if test="${signoption != ''}">
<loadfile file="../tools/pubkey.txt" property="publickey" />
<property name="IKVM.Runtime" value="IKVM.Runtime, PublicKey=${publickey}" />
<property name="IKVM.AWT.WinForms" value="IKVM.AWT.WinForms, PublicKey=${publickey}" />
</if>
</target>
<target name="AssemblyInfo.java" depends="runtime-identity version copyright">
<copy file="AssemblyInfo.java.in" tofile="AssemblyInfo.java" outputencoding="ascii" overwrite="true">
<filterchain>
<replacetokens>
<token key="RUNTIME" value="${IKVM.Runtime}" />
<token key="AWTWINFORMS" value="${IKVM.AWT.WinForms}" />
<token key="VERSION" value="${VERSION}" />
<token key="COPYRIGHT" value="${COPYRIGHT}" />
</replacetokens>
</filterchain>
</copy>
</target>
<target name="PropertyConstants.java" depends="version">
<copy file="java/lang/PropertyConstants.java.in" tofile="java/lang/PropertyConstants.java" outputencoding="ascii" overwrite="true">
<filterchain>
<replacetokens>
<token key="AWTASSEMBLY" value="${string::replace(assemblyname::get-full-name(assemblyname::get-assembly-name(path::combine(project::get-base-directory(), '../bin/IKVM.Runtime.dll'))), 'IKVM.Runtime', 'IKVM.AWT.WinForms')}" />
<token key="VERSION" value="${VERSION}" />
<token key="OPENJDK_VERSION" value="${OPENJDK_VERSION}" />
</replacetokens>
</filterchain>
</copy>
</target>
<target name="classes" depends="clean-classes stubjars allsources.gen.lst AssemblyInfo.java PropertyConstants.java">
<exec program="javac" useruntimeengine="false">
<arg value="-J-Xmx1536M" />
<arg value="-g" />
<arg value="-nowarn" />
<arg value="-implicit:none" />
<arg value="-parameters" />
<arg line="-cp dummy" />
<arg value="-bootclasspath" />
<arg path="mscorlib.jar;System.jar;System.Core.jar;System.Data.jar;System.Drawing.jar;System.XML.jar;../runtime/IKVM.Runtime.jar" />
<arg value="@allsources.gen.lst" />
</exec>
<!-- copy the timestamps from the input files, because these timestamps end up in resources.jar and affect deterministics builds -->
<touch file="${OpenJDK.dir}/jdk/src/share/classes/sun/reflect/misc/Trampoline.class" datetime="${file::get-last-write-time(property::get-value('OpenJDK.dir') + '/jdk/src/share/classes/sun/reflect/misc/MethodUtil.java')}" />
<touch file="${OpenJDK.dir}/jdk/src/share/classes/java/lang/invoke/MethodHandleImpl$BindCaller$T.class" datetime="${file::get-last-write-time(property::get-value('OpenJDK.dir') + '/jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java')}" />
</target>
<target name="classpath">
<property name="CLASSPATH" value="mscorlib.jar${pathsep}System.Xml.jar${pathsep}${OpenJDK.dir}/jdk/src/share/classes/${pathsep}${OpenJDK.dir}/corba/src/share/classes${pathsep}${OpenJDK.dir}/build/linux-x86_64-normal-server-release/jdk/gensrc" />
</target>
<target name="rmi" depends="classpath">
<mkdir dir="rmistubs" />
<property name="VMARGS" value="-J-client -J-Xmx896m -J-Xms128m" />
<property name="OUTPUT" value="rmistubs" />
<property name="ARGS" value="${VMARGS} -nowarn -bootclasspath ${CLASSPATH} -d ${OUTPUT}" />
<exec program="rmic" commandline="${ARGS} -v1.1 sun.rmi.registry.RegistryImpl" />
<exec program="rmic" commandline="${ARGS} -v1.1 sun.rmi.transport.DGCImpl" />
<exec program="rmic" commandline="${ARGS} -v1.2 sun.rmi.server.Activation$ActivationSystemImpl" />
<exec program="rmic" commandline="${ARGS} -v1.2 java.rmi.activation.ActivationGroup" />
<exec program="rmic" commandline="${ARGS} -v1.2 com.sun.jndi.rmi.registry.ReferenceWrapper" />
<exec program="rmic" commandline="${ARGS} -v1.2 javax.management.remote.rmi.RMIConnectionImpl" />
<exec program="rmic" commandline="${ARGS} -v1.2 -iiop javax.management.remote.rmi.RMIConnectionImpl" />
<exec program="rmic" commandline="${ARGS} -v1.2 -iiop -standardPackage javax.management.remote.rmi.RMIConnectionImpl" />
<exec program="rmic" commandline="${ARGS} -v1.2 javax.management.remote.rmi.RMIServerImpl" />
<exec program="rmic" commandline="${ARGS} -v1.2 -iiop javax.management.remote.rmi.RMIServerImpl" />
<exec program="rmic" commandline="${ARGS} -v1.2 -iiop -standardPackage javax.management.remote.rmi.RMIServerImpl" />
<exec program="rmic" commandline="${ARGS} -iiop javax.management.remote.rmi.RMIConnection" />
<exec program="rmic" commandline="${ARGS} -iiop -standardPackage javax.management.remote.rmi.RMIConnection" />
<exec program="rmic" commandline="${ARGS} -iiop javax.management.remote.rmi.RMIServer" />
<exec program="rmic" commandline="${ARGS} -iiop -standardPackage javax.management.remote.rmi.RMIServer" />
</target>
<target name="run-nasgen" depends="classpath">
<!-- nasgen doesn't understand the MethodParameters attribute, so we have to recompile the classes it processes without parameters -->
<exec program="javac" useruntimeengine="false">
<arg value="-XDignore.symbol.file" />
<arg value="-g" />
<arg value="-nowarn" />
<arg value="-implicit:none" />
<arg value="-bootclasspath" />
<arg path="${CLASSPATH};${OpenJDK.dir}/nashorn/src;../runtime/IKVM.Runtime.jar" />
<arg value="${OpenJDK.dir}/nashorn/src/jdk/nashorn/internal/objects/*.java" />
</exec>
<exec program="java" useruntimeengine="false">
<arg value="-Xbootclasspath/p:${OpenJDK.dir}/nashorn/buildtools/nasgen/src${pathsep}${OpenJDK.dir}/nashorn/src" />
<arg value="jdk.nashorn.internal.tools.nasgen.Main" />
<arg value="${OpenJDK.dir}/nashorn/src" />
<arg value="jdk.nashorn.internal.objects" />
<arg value="${OpenJDK.dir}/nashorn/src" />
</exec>
</target>
<target name="vfs">
<!-- This file is generated here, but it is added as a resource to IKVM.Runtime.dll, because Ref.Emit on .NET 1.1 doesn't support adding a raw resource. -->
<zip zipfile="vfs.zip">
<fileset basedir="${OpenJDK.dir}/build/linux-x86_64-normal-server-release/jdk">
<include name="lib/calendars.properties" />
<include name="lib/logging.properties" />
<include name="lib/management/management.properties" />
<include name="lib/net.properties" />
<include name="lib/psfontj2d.properties" />
<include name="lib/sound.properties" />
<include name="lib/cmm/*" />
<include name="lib/tzdb.dat" />
<include name="lib/currency.data" />
<include name="lib/security/java.policy" />
<include name="lib/security/java.security" />
<!--
we don't add lib/security/local_policy.jar, because it is the restricted version,
instead we'll add a link in vfs from local_policy.jar to US_export_policy.jar
(because US_export_policy.jar is unrestricted)
-->
<include name="lib/security/US_export_policy.jar" />
</fileset>
<fileset basedir="${OpenJDK.dir}/jdk/src/windows">
<include name="lib/flavormap.properties" />
<include name="lib/content-types.properties" />
</fileset>
</zip>
</target>
<target name="resources">
<!-- collect the resources in a zip to make it easier to include them in the right assemblies -->
<zip zipfile="resources.zip">
<fileset basedir="${OpenJDK.dir}/build/linux-x86_64-normal-server-release/jdk/classes">
<include name="com/sun/corba/se/impl/orbutil/resources/*.properties" />
<include name="com/sun/rowset/*.properties" />
<include name="javax/swing/text/html/parser/html32.bdtd" />
<include name="sun/rmi/registry/resources/*.properties" />
<include name="sun/rmi/server/resources/*.properties" />
<include name="sun/text/resources/*IteratorData" />
<include name="sun/text/resources/th/*IteratorData_th" />
<include name="sun/text/resources/th/thai_dict" />
</fileset>
<fileset basedir="${OpenJDK.dir}/corba/src/share/classes">
<include name="**/*.properties" />
</fileset>
<fileset basedir="${OpenJDK.dir}/jdk/src/share/classes">
<include name="**/*.properties" />
<include name="**/*.gif" />
<include name="**/*.png" />
<include name="**/*.wav" />
<include name="com/sun/org/apache/xml/internal/security/resource/config.*" />
<include name="com/sun/swing/internal/plaf/**/*" />
<include name="javax/swing/text/html/default.css" />
<include name="javax/swing/text/rtf/charsets/*.txt" />
<include name="sun/text/resources/**/*.icu" />
</fileset>
<fileset basedir="${OpenJDK.dir}/jaxp/src">
<include name="**/*.properties" />
<include name="**/*.res" />
</fileset>
<fileset basedir="${OpenJDK.dir}/jaxws/src/share/jaf_classes">
<include name="**/*.properties" />
</fileset>
<fileset basedir="${OpenJDK.dir}/jaxws/src/share/jaxws_classes">
<include name="**/*.properties" />
<include name="**/*.xml" />
</fileset>
</zip>
</target>
<target name="response.gen.txt">
<copy file="response.txt" tofile="response.gen.txt" outputencoding="ascii" overwrite="true">
<filterchain>
<replacetokens>
<token key="OPENJDK" value="${OpenJDK.dir}" />
</replacetokens>
</filterchain>
</copy>
</target>
<target name="MANIFEST.MF">
<copy file="MANIFEST.MF.in" tofile="MANIFEST.MF" outputencoding="ascii" overwrite="true">
<filterchain>
<replacetokens>
<token key="IMPLEMENTATION_VERSION" value="${IMPLEMENTATION_VERSION}" />
<token key="SPECIFICATION_VERSION" value="${SPECIFICATION_VERSION}" />
</replacetokens>
</filterchain>
</copy>
<!-- copy the timestamp from the input file, because the timestamp ends up in resources.jar and affects deterministics builds -->
<touch file="MANIFEST.MF" datetime="${file::get-last-write-time('MANIFEST.MF.in')}" />
</target>
<target name="nashorn-version">
<copy file="resources/nashorn/version.properties.in" tofile="resources/nashorn/version.properties" outputencoding="ascii" overwrite="true">
<filterchain>
<replacetokens>
<token key="FULL_VERSION" value="${FULL_VERSION}" />
<token key="IMPLEMENTATION_VERSION" value="${IMPLEMENTATION_VERSION}" />
</replacetokens>
</filterchain>
</copy>
<!-- copy the timestamp from the input file, because the timestamp ends up in resources.jar and affects deterministics builds -->
<touch file="resources/nashorn/version.properties" datetime="${file::get-last-write-time('resources/nashorn/version.properties.in')}" />
</target>
<target name="core" depends="version response.gen.txt MANIFEST.MF nashorn-version">
<copy file="../bin/IKVM.Runtime.dll" todir="." />
<copy file="../bin/IKVM.AWT.WinForms.dll" todir="." />
<exec program="${project::get-base-directory()}/../bin/ikvmc.exe" useruntimeengine="true">
<arg value="-version:${VERSION}" />
<arg value="${signoption}" />
<arg value="-compressresources" />
<arg value="-opt:fields" />
<arg value="-strictfinalfieldsemantics" />
<arg value="-removeassertions" />
<arg value="-target:library" />
<arg value="-sharedclassloader" />
<arg value="-r:mscorlib.dll" />
<arg value="-r:System.dll" />
<arg value="-r:System.Core.dll" unless="${SkipSystemCoreDependency}" />
<arg value="-r:System.Xml.dll" />
<arg value="-r:IKVM.Runtime.dll" />
<!-- we already know that the JNI assembly is not available, so suppress the warning -->
<arg value="-nowarn:110" />
<arg value="-w4" />
<arg value="-noparameterreflection" />
<arg value="-warnaserror" />
<arg value="@response.gen.txt" />
</exec>
<if test="${property::exists('peverify')}">
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Beans.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Charsets.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Corba.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Core.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Cldrdata.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Jdbc.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Localedata.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Management.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Media.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Misc.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Naming.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Nashorn.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Remoting.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Security.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.SwingAWT.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Text.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.Util.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.XML.API.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.XML.Bind.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.XML.Crypto.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.XML.Parse.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.XML.Transform.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.XML.WebServices.dll" />
<exec program="${peverify}" commandline="-nologo IKVM.OpenJDK.XML.XPath.dll" />
</if>
<!-- make sure that we haven't accidentally introduced new dependencies -->
<exec program="${project::get-base-directory()}/../tools/depcheck.exe" commandline="response.txt dependencies.txt" useruntimeengine="true" />
<copy todir="../bin">
<fileset basedir=".">
<include name="IKVM.OpenJDK.*.dll" />
</fileset>
</copy>
<!-- update base addresses in response.txt for next build -->
<exec program="${project::get-base-directory()}/../tools/updbaseaddresses.exe" commandline="response.txt" useruntimeengine="true" />
<!-- generate stubs for the public Java APIs we expose -->
<mkdir dir="../lib" />
<exec program="${project::get-base-directory()}/../bin/ikvmstub.exe" useruntimeengine="true">
<arg value="-out:../lib/ikvm-api.jar" />
<arg value="../bin/IKVM.OpenJDK.Core.dll" />
<arg value="-namespace:ikvm.io" />
<arg value="-namespace:ikvm.lang" />
<arg value="-namespace:ikvm.runtime" />
</exec>
</target>
<target name="tools.gen.rsp">
<copy file="tools.rsp" tofile="tools.gen.rsp" outputencoding="ascii" overwrite="true">
<filterchain>
<replacetokens>
<token key="OPENJDK" value="${OpenJDK.dir}" />
</replacetokens>
</filterchain>
</copy>
</target>
<target name="tools" depends="version tools.gen.rsp">
<exec program="${project::get-base-directory()}/../bin/ikvmc.exe" useruntimeengine="true">
<arg value="-r:mscorlib.dll" />
<arg value="-version:${VERSION}" />
<arg value="${signoption}" />
<arg value="-warnaserror" />
<arg value="-w4" />
<arg value="-noparameterreflection" />
<arg value="@tools.gen.rsp" />
</exec>
</target>
<target name="jdk-tools" depends="version">
<exec program="${project::get-base-directory()}/../bin/ikvmc.exe" useruntimeengine="true">
<arg value="-version:${VERSION}" />
<arg value="-out:../bin/javac.exe" />
<arg value="-main:com.sun.tools.javac.Main" />
<arg value="-r:../bin/IKVM.OpenJDK.Tools.dll" />
</exec>
<exec program="${project::get-base-directory()}/../bin/ikvmc.exe" useruntimeengine="true">
<arg value="-version:${VERSION}" />
<arg value="-out:../bin/javah.exe" />
<arg value="-main:com.sun.tools.javah.Main" />
<arg value="-r:../bin/IKVM.OpenJDK.Tools.dll" />
</exec>
<exec program="${project::get-base-directory()}/../bin/ikvmc.exe" useruntimeengine="true">
<arg value="-version:${VERSION}" />
<arg value="-out:../bin/javap.exe" />
<arg value="-main:com.sun.tools.javap.Main" />
<arg value="-r:../bin/IKVM.OpenJDK.Tools.dll" />
</exec>
<exec program="${project::get-base-directory()}/../bin/ikvmc.exe" useruntimeengine="true">
<arg value="-version:${VERSION}" />
<arg value="-out:../bin/jjs.exe" />
<arg value="-main:jdk.nashorn.tools.Shell" />
</exec>
</target>
</project>