changeset 9163:45b37dcb24de

Automatically add service providers to build-graal.xml
author Roland Schatz <roland.schatz@oracle.com>
date Tue, 16 Apr 2013 19:01:24 +0200
parents 85b71f453ef5
children 380857cb7117
files make/build-graal.xml mx/commands.py
diffstat 2 files changed, 39 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/make/build-graal.xml	Tue Apr 16 18:16:57 2013 +0200
+++ b/make/build-graal.xml	Tue Apr 16 19:01:24 2013 +0200
@@ -74,7 +74,16 @@
   </target>
   <target depends="compile" name="jar">
     <mkdir dir="${jar.dir}"/>
-    <jar basedir="${classes.dir}" destfile="${jar.file}"/>
+    <jar basedir="${classes.dir}" destfile="${jar.file}">
+      <service type="com.oracle.graal.phases.tiers.CompilerConfiguration">
+        <provider classname="com.oracle.graal.compiler.phases.BasicConfiguration"/>
+      </service>
+      <service type="com.oracle.graal.nodes.spi.ReplacementsProvider">
+        <provider classname="com.oracle.graal.hotspot.replacements.HotSpotInstalledCodeIntrinsics"/>
+        <provider classname="com.oracle.graal.hotspot.replacements.CallSiteSubstitutions"/>
+        <provider classname="com.oracle.graal.replacements.GraalMethodSubstitutions"/>
+      </service>
+    </jar>
   </target>
   <target name="cleanclasses">
     <delete dir="${classes.dir}"/>
--- a/mx/commands.py	Tue Apr 16 18:16:57 2013 +0200
+++ b/mx/commands.py	Tue Apr 16 19:01:24 2013 +0200
@@ -501,11 +501,31 @@
     
     out.element('target', {'name' : 'main', 'depends' : 'jar'})
 
+    serviceMap = {};
+    def addService(service, provider):
+        if service not in serviceMap:
+            serviceMap[service] = set();
+        serviceMap[service].add(provider)
+
     out.open('target', {'name' : 'compile', 'depends' : 'cleanclasses'})
     out.element('mkdir', {'dir' : '${classes.dir}'})
     out.open('javac', {'destdir' : '${classes.dir}', 'debug' : 'on', 'includeantruntime' : 'false', 'encoding' : 'UTF-8'})
+
     for p in mx.sorted_deps(mx.distribution('GRAAL').deps):
         out.element('src', {'path' : '${src.dir}/' + p.name})
+        servicesDir = join(p.output_dir(), 'META-INF', 'services')
+        if exists(servicesDir):
+            for service in os.listdir(servicesDir):
+                with open(join(servicesDir, service), 'r') as serviceFile:
+                    for line in serviceFile:
+                        addService(service, line.strip())
+        providersDir = join(p.output_dir(), 'META-INF', 'providers')
+        if exists(providersDir):
+            for provider in os.listdir(providersDir):
+                with open(join(providersDir, provider), 'r') as providerFile:
+                    for line in providerFile:
+                        addService(line.strip(), provider)
+
     out.element('compilerarg', {'value' : '-XDignore.symbol.file'})
     
     out.open('classpath')
@@ -519,7 +539,15 @@
 
     out.open('target', {'name' : 'jar', 'depends' : 'compile'})
     out.element('mkdir', {'dir' : '${jar.dir}'})
-    out.element('jar', {'destfile' : '${jar.file}', 'basedir' : '${classes.dir}'})
+    out.open('jar', {'destfile' : '${jar.file}', 'basedir' : '${classes.dir}'})
+
+    for service, providers in serviceMap.iteritems():
+        out.open('service', {'type' : service})
+        for provider in providers:
+            out.element('provider', {'classname' : provider})
+        out.close('service')
+
+    out.close('jar');
     out.close('target')
     
     out.open('target', {'name' : 'cleanclasses'})