blob: f623f2fb18ba9243d23adcbf5f92a29fa9c1151d [file] [log] [blame]
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You 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.
-->
<project name="drlvm" default="build">
<description>
Build contributed source and lay out results in the required format
</description>
<import file="make/properties.xml"/>
<target name="help">
<echo>
Apache Harmony DRLVM Build
Usage:
ant build
Compiles the java and native code to produce a jre in
"deploy/jdk/jre".
It is possible to build an individual component via
corresponding targets.
ant clean
Removes all the files generated by a build.
ant rebuild
Performs a full build - that is 'clean' then 'build'.
ant test
Runs smoke and unit tests.
ant test2
Runs all pre-commit tests (in parallel on multi-way machines).
A single suite can be run as:
ant cunit.test - runs cunit tests
ant ehwa.test - runs automated Eclispe HWA scenario
ant kernel.test - runs tests for kernel.classes
ant smoke.test - runs smoke tests
ant jvmti.test - runs JVMTI tests
ant reg.test - runs regression tests
Also, it is possible to run a single testcase from specific suite
and customize JRE configuration, e.g.:
ant smoke.test -Dtest.case=exception.NPE -Dtest.mode=jit -Dtest.vmargs=-XX:+vm.crash_handler
ant doc
Generates the javadoc (TBD).
ant fetch-depends
Fetches dependencies. Note: Some of Harmony's dependencies are
licensed under terms other than the Apache License v2.
ant drlvm-echo echo debug-echo
Display the common properties that are used in the ant build files.
</echo>
</target>
<target name="fetch-depends">
<ant antfile="make/depends.xml" target="fetch"/>
</target>
<target name="check-depends">
<ant antfile="make/depends.xml" target="check"/>
</target>
<target name="rebuild" depends="clean,build"
description="Performs a full build - that is 'clean' then 'build'" />
<target name="build"
depends="drlvm-echo, -auto-fetch,
setup,
interpreter,
kernel,
em,
vmi,
jitrino,
gc_gen,
deploy,
deploy-relocate,
deploy-canonical"
description="Compiles the java and native code to produce a jdk">
</target>
<target name="-auto-fetch" if="auto.fetch">
<antcall target="fetch-depends"/>
</target>
<target name="clean" depends=""
description="Removes all the files generated by a build">
<delete quiet="true" dir="${drlvm.build.dir}"/>
</target>
<!-- ================================================================
build individual components
================================================================-->
<target name="build-extra" depends=""
description="Compiles external dependencies">
<ant antfile="make/extra/apr.xml"/>
</target>
<target name="encoder">
<ant antfile="make/vm/encoder.xml"/>
</target>
<target name="port" depends="build-extra">
<ant antfile="make/vm/port.xml"/>
</target>
<target name="port_ch" depends="port">
<ant antfile="make/vm/port_ch.xml"/>
</target>
<target name="hythr" depends="port">
<ant antfile="make/vm/hythr.xml"/>
</target>
<target name="verifier">
<ant antfile="make/vm/verifier.xml"/>
</target>
<target name="verifier-ext" description="Build a verifier extentions library">
<ant antfile="make/vm/verifier-ext.xml"/>
</target>
<target name="clean-verifier-ext" description="Clean a verifier extentions library">
<ant antfile="make/vm/verifier-ext.xml" target="clean"/>
</target>
<target name="vmcore" depends="encoder, port, port_ch, hythr, verifier">
<ant antfile="make/vm/vmcore.xml"/>
</target>
<target name="em" depends="vmcore">
<ant antfile="make/vm/em.xml"/>
</target>
<target name="interpreter" depends="vmcore">
<ant antfile="make/vm/interpreter.xml"/>
</target>
<target name="kernel">
<ant antfile="make/vm/kernel.xml"/>
</target>
<target name="vmi" depends="vmcore">
<ant antfile="make/vm/vmi.xml"/>
</target>
<target name="jitrino" depends="vmcore">
<ant antfile="make/vm/jitrino.xml"/>
</target>
<target name="gc_gen" depends="vmcore,kernel">
<ant antfile="make/vm/gc_gen.xml"/>
</target>
<!-- ================================================================
import the deploy stuff from hdk / classlib
================================================================-->
<target name="setup">
<mkdir dir="${drlvm.deploy.dir}/lib" />
<mkdir dir="${drlvm.deploy.dir}/jdk/jre" />
<mkdir dir="${drlvm.deploy.dir}/include" />
<copy todir="${drlvm.deploy.dir}">
<fileset dir="${hy.hdk}">
<include name="**" if="import.hdk"/>
<include name="jdk/jre/**" unless="import.hdk"/>
<exclude name="jdk/jre/bin/default/**" unless="import.hdk"/>
<exclude name="jdk/jre/bin/*hythr*" unless="import.hdk"/>
</fileset>
</copy>
</target>
<!-- ================================================================
deploy the rest of product
================================================================-->
<target name="deploy">
<copy todir="${drlvm.deploy.dir}/jdk/include">
<fileset dir="${vm.home}/include">
<include name="jni_types.h" />
<include name="jvmti_types.h" />
<include name="ncai_types.h" />
<include name="jni.h" />
<include name="jvmti.h" />
<include name="ncai.h" />
</fileset>
</copy>
<!-- a trick to drop duplicated dependencies -->
<delete quiet="yes">
<fileset dir="${drlvm.bin.dir}" includes="*" excludes="*hythr*">
<not>
<different targetdir="${drlvm.deploy.dir}/jdk/jre/bin"/>
</not>
</fileset>
</delete>
<!-- launcher should use our hythr -->
<copy todir="${drlvm.deploy.dir}/jdk/jre/bin" overwrite="yes">
<fileset dir="${drlvm.bin.dir}">
<include name="*hythr*"/>
</fileset>
</copy>
<copy file="${drlvm.base.dir}/make/resources/harmonyvm.properties"
todir="${drlvm.bin.dir}"/>
<copy file="${drlvm.base.dir}/make/resources/readme.txt"
tofile="${drlvm.deploy.dir}/jdk/jre/README"/>
<replace file="${drlvm.deploy.dir}/jdk/jre/README" >
<replacefilter token="@{hy.os}" value="${hy.os}"/>
<replacefilter token="@{hy.arch}" value="${hy.arch}"/>
</replace>
<fixcrlf srcDir="${drlvm.deploy.dir}/jdk/jre" includes="README" />
<chmod file="${drlvm.deploy.dir}/jdk/jre/bin/java*" perm="ugo+x" />
</target>
<!-- ==================================================================
place things into canonical 'deploy' directory
so irrespective of the platform, compiler or release/debug
there's a predicable place to find the output
================================================================== -->
<target name="deploy-canonical" if="deploy.canonical.flag">
<property name="canonical.deploy.dir" location="${drlvm.base.dir}/deploy" />
<delete dir="${canonical.deploy.dir}" failonerror="false" />
<mkdir dir="${canonical.deploy.dir}" />
<copy todir="${canonical.deploy.dir}">
<fileset dir="${drlvm.deploy.dir}"/>
</copy>
<chmod file="${canonical.deploy.dir}/jdk/jre/bin/java*" perm="ugo+x" />
</target>
<!-- ==================================================================
relocate build for Windows
================================================================== -->
<target name="deploy-relocate" if="is.windows">
<fileset dir="${drlvm.deploy.dir}/jdk/jre/bin/" id="relocate.files">
<include name="**/*.dll" />
<!-- Ignore ICUInterface34 stub from classlib -->
<exclude name="ICUInterface34.dll" />
</fileset>
<pathconvert pathsep=" " property="relocate.files.all" refid="relocate.files" />
<exec executable="editbin" outputproperty="null" logerror="yes" failonerror="true">
<arg value="/LARGEADDRESSAWARE" />
<arg value="/BIND" />
<arg value="${drlvm.deploy.dir}/jdk/jre/bin/java.exe" />
</exec>
<exec executable="editbin" outputproperty="null" logerror="yes" failonerror="true">
<arg value="/LARGEADDRESSAWARE" />
<arg value="/BIND" />
<arg value="/rebase:base=0x500000" />
<arg line="${relocate.files.all}" />
</exec>
</target>
<!-- Main target for generating javadoc & deploying guildes -->
<target name="doc">
<echo message="Not yet completed"/>
</target>
<!-- Main target for tests run: call unit.test and smoke.test -->
<target name="test" depends="drlvm-echo,
jvmti.test, cunit.test, smoke.test, kernel.test">
<fail if="test.failed" message="Some tests failed"/>
</target>
<target name="hut.test">
<property name="hut.module" value="*"/>
<property name="test.vmargs" value=""/>
<ant antfile="${external.dep.CLASSLIB}/build.xml" inheritAll="no">
<target name="properties"/>
<target name="test"/>
<property name="hy.test.vm.name" value="drl"/>
<property name="test.jre.home" value="${drlvm.deploy.dir}/jdk/jre"/>
<property name="short.report" value="true"/>
<property name="hy.test.vmargs" value="${test.vmargs}"/>
<property name="build.module" value="${hut.module}"/>
</ant>
</target>
<target name="test2" depends="drlvm-echo">
<property file="test.properties"/>
<!--property name="run.all.tests" value="true"/-->
<property name="short.report" value="true"/>
<mkdir dir="${base.test.dir}"/>
<parallel threadsPerProcessor="1" failonany="no">
<ant target="hut.test" output="${base.test.dir}/hut.log"/>
<ant target="kernel.test" output="${base.test.dir}/kernel.log"/>
<ant target="ehwa.test" output="${base.test.dir}/ehwa.log"/>
<ant target="jvmti.test" output="${base.test.dir}/jvmti.log"/>
<ant target="smoke.test" output="${base.test.dir}/smoke.log"/>
<ant target="reg.test" output="${base.test.dir}/reg.log"/>
<ant target="cunit.test" output="${base.test.dir}/cunit.log"/>
</parallel>
<fail if="test.failed" message="Some tests failed"/>
</target>
<!-- Run cunit tests only -->
<target name="cunit.test">
<ant antfile="make/tests/cunit-test.xml" target="cunit-test"/>
<available property="test.failed" file="${base.test.dir}/cunit.test.failed" />
</target>
<!-- Main target to run smoke tests -->
<target name="smoke.test">
<ant antfile="make/tests/smoke-test.xml" target="smoke-test"/>
<available property="test.failed" file="${base.test.dir}/smoke.test.failed" />
</target>
<!-- Main target to run kernel tests -->
<target name="kernel.test">
<ant antfile="make/tests/kernel-test.xml" target="kernel-test"/>
<available property="test.failed" file="${base.test.dir}/kernel.test.failed" />
</target>
<!-- Main target to run Eclipse HelloWorld test scenario -->
<target name="ehwa.test">
<ant antfile="make/tests/ehwa-test.xml" target="ehwa"/>
<available property="test.failed" file="${base.test.dir}/ehwa.test.failed" />
</target>
<!-- Main target to run jvmti tests /-->
<target name="jvmti.test">
<ant antfile="make/tests/jvmti-test.xml" target="jvmti-test"/>
<available property="test.failed" file="${base.test.dir}/jvmti.test.failed" />
</target>
<!-- Main target to run regression test /-->
<target name="reg.test">
<ant antfile="make/tests/reg-test.xml" target="reg-test"/>
<available property="test.failed" file="${base.test.dir}/reg.test.failed" />
</target>
<target name="lazy.test">
<ant antfile="make/tests/lazy-test.xml" target="lazy-test"/>
<available property="test.failed" file="${base.test.dir}/lazy.test.failed" />
</target>
</project>