changeset 23295:22f57623221f

override "jvmci" tag for --jdk option with Graal specific JDK config
author Doug Simon <doug.simon@oracle.com>
date Tue, 12 Jan 2016 15:31:53 +0100
parents 3c37032e8e63
children 2bd7d1d8acd4
files mx.graal/mx_graal_8.py mx.graal/mx_graal_9.py mx.graal/suite.py
diffstat 3 files changed, 60 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/mx.graal/mx_graal_8.py	Tue Jan 12 14:34:05 2016 +0100
+++ b/mx.graal/mx_graal_8.py	Tue Jan 12 15:31:53 2016 +0100
@@ -31,7 +31,7 @@
 import re
 
 import mx
-from mx_jvmci import JvmciJDKDeployedDist, JVMCIArchiveParticipant, jdkDeployedDists, add_bootclasspath_prepend, buildvms, get_jvmci_jdk, VM, relativeVmLibDirInJdk, isJVMCIEnabled
+from mx_jvmci import JvmciJDKDeployedDist, JVMCIArchiveParticipant, jdkDeployedDists, add_bootclasspath_prepend, buildvms, get_jvmci_jdk, _JVMCI_JDK_TAG, VM, relativeVmLibDirInJdk, isJVMCIEnabled
 from mx_jvmci import get_vm as _jvmci_get_vm
 from mx_jvmci import run_vm as _jvmci_run_vm
 from mx_gate import Task
@@ -446,5 +446,57 @@
             self.services.setdefault('com.oracle.graal.options.OptionDescriptors', []).append(provider)
         return JVMCIArchiveParticipant.__add__(self, arcname, contents)
 
+"""
+The Graal JDK(s).
+"""
+_graal_jdks = {}
+
+def get_graal_jdk():
+    """
+    Gets a Graal JDK which adds support for handling the -G format of Graal options.
+    """
+    jvmci_jdk = get_jvmci_jdk()
+    if jvmci_jdk.javaCompliance < '9':
+        # jvmci-8
+        from mx_jvmci import check_VM_exists, JVMCIJDKConfig # pylint: disable=no-name-in-module
+        vmbuild = jvmci_jdk.vmbuild
+        check_VM_exists(get_vm(), jvmci_jdk.home, vmbuild)
+        jdk = _graal_jdks.get(vmbuild)
+        if jdk is None:
+            class GraalJDK8Config(JVMCIJDKConfig):
+                def __init__(self, vmbuild):
+                    JVMCIJDKConfig.__init__(self, vmbuild)
+
+                def parseVmArgs(self, args, addDefaultArgs=True):
+                    return JVMCIJDKConfig.parseVmArgs(self, map(_translateGOption, args), addDefaultArgs=addDefaultArgs)
+
+            jdk = GraalJDK8Config(vmbuild)
+            _graal_jdks[vmbuild] = jdk
+    else:
+        # jvmci-9
+        jdk = _graal_jdks.get('default')
+        if jdk is None:
+            from mx_jvmci import JVMCI9JDKConfig # pylint: disable=no-name-in-module
+            class GraalJDK9Config(JVMCI9JDKConfig):
+                def __init__(self, debugLevel):
+                    JVMCI9JDKConfig.__init__(self, debugLevel)
+
+                def parseVmArgs(self, args, addDefaultArgs=True):
+                    return JVMCI9JDKConfig.parseVmArgs(self, map(_translateGOption, args), addDefaultArgs=addDefaultArgs)
+            jdk = GraalJDK9Config(jvmci_jdk.debugLevel)
+            _graal_jdks['default'] = jdk
+    return jdk
+
+class GraalJDKFactory(mx.JDKFactory):
+    def getJDKConfig(self):
+        return get_graal_jdk()
+
+    def description(self):
+        return "Graal JDK"
+
+# This will override the 'generic' JVMCI JDK with a Graal JVMCI JDK that has
+# support for -G style Graal options.
+mx.addJDKFactory(_JVMCI_JDK_TAG, mx.JavaCompliance('9' if isinstance(_jvmci_get_vm(), VM) else '8'), GraalJDKFactory())
+
 def mx_post_parse_cmd_line(opts):
     add_bootclasspath_prepend(mx.distribution('truffle:TRUFFLE_API'))
--- a/mx.graal/mx_graal_9.py	Tue Jan 12 14:34:05 2016 +0100
+++ b/mx.graal/mx_graal_9.py	Tue Jan 12 15:31:53 2016 +0100
@@ -361,12 +361,12 @@
     cmd = [jdk.java] + ['-' + get_vm()] + jvmciModeArgs + args
     return mx.run(cmd, nonZeroIsFatal=nonZeroIsFatal, out=out, err=err, cwd=cwd)
 
-_GRAAL_JVMCI_TAG = 'graal'
+_JVMCI_JDK_TAG = 'jvmci'
 
 class GraalJVMCI9JDKConfig(mx.JDKConfig):
     def __init__(self, original):
         self._original = original
-        mx.JDKConfig.__init__(self, original.home, tag=_GRAAL_JVMCI_TAG)
+        mx.JDKConfig.__init__(self, original.home, tag=_JVMCI_JDK_TAG)
 
     def run_java(self, args, **kwArgs):
         run_java(self._original, args, **kwArgs)
@@ -378,7 +378,9 @@
     def description(self):
         return "JVMCI JDK with Graal"
 
-mx.addJDKFactory(_GRAAL_JVMCI_TAG, mx.JavaCompliance('9'), GraalJDKFactory())
+# This will override the 'generic' JVMCI JDK with a Graal JVMCI JDK that has
+# support for -G style Graal options.
+mx.addJDKFactory(_JVMCI_JDK_TAG, mx.JavaCompliance('9'), GraalJDKFactory())
 
 def run_vm(args, vm=None, nonZeroIsFatal=True, out=None, err=None, cwd=None, timeout=None, debugLevel=None, vmbuild=None):
     """run a Java program by executing the java executable in a JVMCI JDK"""
--- a/mx.graal/suite.py	Tue Jan 12 14:34:05 2016 +0100
+++ b/mx.graal/suite.py	Tue Jan 12 15:31:53 2016 +0100
@@ -31,7 +31,7 @@
     return [s for s in l if not JDK9 or not s.get('name') == "jvmci"]
 
 suite = {
-  "mxversion" : "5.6.7",
+  "mxversion" : "5.6.10",
   "name" : "graal",
 
   "imports" : {
@@ -39,7 +39,7 @@
             {
                "name" : "jvmci",
                "optional" : "true",
-               "version" : "61cc3ee666d2562ca6c51400729e65e0b8a0a669",
+               "version" : "7d02b40973092b688f7d941ffb3a479b41f14bd7",
                "urls" : [
                     {"url" : "http://lafo.ssw.uni-linz.ac.at/hg/graal-jvmci-8", "kind" : "hg"},
                     {"url" : "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind" : "binary"},