changeset 21099:3f51d02e536f

Make should export graal service files
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Thu, 23 Apr 2015 14:49:24 +0200
parents 5d09e1eda922
children 8cc759c89af7
files make/Makefile make/defs.make mx/mx_graal.py
diffstat 3 files changed, 35 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/make/Makefile	Thu Apr 23 13:31:20 2015 +0200
+++ b/make/Makefile	Thu Apr 23 14:49:24 2015 +0200
@@ -635,6 +635,9 @@
 $(EXPORT_JRE_LIB_GRAAL_DIR)/%.jar: $(SHARED_DIR)/%.jar
 	$(install-file)
 
+$(EXPORT_JRE_LIB_GRAAL_SERVICES_DIR)/%: $(SHARED_DIR)/services/%
+	$(install-file)
+
 $(EXPORT_INCLUDE_DIR)/%: $(HS_SRC_DIR)/share/vm/code/%
 	$(install-file)
 
--- a/make/defs.make	Thu Apr 23 13:31:20 2015 +0200
+++ b/make/defs.make	Thu Apr 23 14:49:24 2015 +0200
@@ -342,6 +342,7 @@
 EXPORT_JRE_LIB_DIR = $(EXPORT_JRE_DIR)/lib
 EXPORT_JRE_LIB_EXT_DIR = $(EXPORT_JRE_LIB_DIR)/ext
 EXPORT_JRE_LIB_GRAAL_DIR = $(EXPORT_JRE_LIB_DIR)/graal
+EXPORT_JRE_LIB_GRAAL_SERVICES_DIR = $(EXPORT_JRE_LIB_GRAAL_DIR)/services
 EXPORT_JRE_LIB_ARCH_DIR = $(EXPORT_JRE_LIB_DIR)/$(LIBARCH)
 
 # non-universal macosx builds need to appear universal
@@ -357,10 +358,17 @@
 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jni.h
 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/$(JDK_INCLUDE_SUBDIR)/jni_md.h
 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jmm.h
+EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/graal-loader.jar
+EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/truffle.jar
 EXPORT_LIST += $(EXPORT_JRE_LIB_GRAAL_DIR)/graal.jar
 EXPORT_LIST += $(EXPORT_JRE_LIB_GRAAL_DIR)/graal-truffle.jar
-EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/graal-loader.jar
-EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/truffle.jar
+
+EXPORT_LIST += $(EXPORT_JRE_LIB_GRAAL_SERVICES_DIR)/com.oracle.graal.compiler.match.MatchStatementSet
+EXPORT_LIST += $(EXPORT_JRE_LIB_GRAAL_SERVICES_DIR)/com.oracle.graal.hotspot.HotSpotBackendFactory
+EXPORT_LIST += $(EXPORT_JRE_LIB_GRAAL_SERVICES_DIR)/com.oracle.graal.nodes.spi.ReplacementsProvider
+EXPORT_LIST += $(EXPORT_JRE_LIB_GRAAL_SERVICES_DIR)/com.oracle.graal.phases.tiers.CompilerConfiguration
+EXPORT_LIST += $(EXPORT_JRE_LIB_GRAAL_SERVICES_DIR)/com.oracle.graal.truffle.hotspot.nfi.RawNativeCallNodeFactory
+EXPORT_LIST += $(EXPORT_JRE_LIB_GRAAL_SERVICES_DIR)/com.oracle.graal.truffle.OptimizedCallTargetInstrumentationFactory
 
 .PHONY: $(HS_ALT_MAKE)/defs.make
 
--- a/mx/mx_graal.py	Thu Apr 23 13:31:20 2015 +0200
+++ b/mx/mx_graal.py	Thu Apr 23 14:49:24 2015 +0200
@@ -618,13 +618,12 @@
             return True
     return False
 
-def _updateGraalServiceFiles(jdkDir):
-    jreGraalDir = join(jdkDir, 'jre', 'lib', 'graal')
-    graalJars = [join(jreGraalDir, e) for e in os.listdir(jreGraalDir) if e.startswith('graal') and e.endswith('.jar')]
-    jreGraalServicesDir = join(jreGraalDir, 'services')
-    if exists(jreGraalServicesDir):
-        shutil.rmtree(jreGraalServicesDir)
-    os.makedirs(jreGraalServicesDir)
+def _extractGraalServiceFiles(graalJars, destination, cleanDestination=True):
+    services = set()
+    if cleanDestination:
+        if exists(destination):
+            shutil.rmtree(destination)
+        os.makedirs(destination)
     for jar in graalJars:
         if os.path.isfile(jar):
             with zipfile.ZipFile(jar) as zf:
@@ -636,7 +635,8 @@
                     assert serviceName and member == 'META-INF/services/' + serviceName
                     if not _isGraalService(serviceName, graalJars):
                         continue
-                    target = join(jreGraalServicesDir, serviceName)
+                    services.add(serviceName)
+                    target = join(destination, serviceName)
                     lines = []
                     with zf.open(member) as serviceFile:
                         lines.extend(serviceFile.readlines())
@@ -646,6 +646,13 @@
                     with open(target, "w+") as targetFile:
                         for line in lines:
                             targetFile.write(line.rstrip() + os.linesep)
+    return services
+
+def _updateGraalServiceFiles(jdkDir):
+    jreGraalDir = join(jdkDir, 'jre', 'lib', 'graal')
+    graalJars = [join(jreGraalDir, e) for e in os.listdir(jreGraalDir) if e.startswith('graal') and e.endswith('.jar')]
+    jreGraalServicesDir = join(jreGraalDir, 'services')
+    _extractGraalServiceFiles(graalJars, jreGraalServicesDir)
 
 
 
@@ -845,6 +852,7 @@
         defsPath = join(_graal_home, 'make', 'defs.make')
         with open(defsPath) as fp:
             defs = fp.read()
+        graalJars = []
         for jdkDist in _jdkDeployedDists:
             dist = mx.distribution(jdkDist.name)
             defLine = 'EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/' + basename(dist.path)
@@ -852,11 +860,17 @@
                 defLine = 'EXPORT_LIST += $(EXPORT_JRE_LIB_EXT_DIR)/' + basename(dist.path)
             elif jdkDist.isGraalClassLoader:
                 defLine = 'EXPORT_LIST += $(EXPORT_JRE_LIB_GRAAL_DIR)/' + basename(dist.path)
+                graalJars.append(dist.path)
             else:
                 defLine = 'EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/' + basename(dist.path)
             if defLine not in defs:
                 mx.abort('Missing following line in ' + defsPath + '\n' + defLine)
             shutil.copy(dist.path, opts2.export_dir)
+        services = _extractGraalServiceFiles(graalJars, join(opts2.export_dir, 'services'))
+        for service in services:
+            defLine = 'EXPORT_LIST += $(EXPORT_JRE_LIB_GRAAL_SERVICES_DIR)/' + service
+            if defLine not in defs:
+                mx.abort('Missing following line in ' + defsPath + ' for service from ' + dist.name + '\n' + defLine)
         graalOptions = join(_graal_home, 'graal.options')
         if exists(graalOptions):
             shutil.copy(graalOptions, opts2.export_dir)