Skip to content

Commit 31598df

Browse files
committed
[GR-69715] Pull and build graalpy-extensions as part of the standalone test.
PullRequest: graalpython/4008
2 parents f64806e + d6cb55a commit 31598df

File tree

3 files changed

+40
-442
lines changed

3 files changed

+40
-442
lines changed

ci/python-gate.libsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
},
101101
windows: {
102102
common: {
103-
MAVEN_HOME: {name: 'maven', version: '3.3.9', platformspecific: false},
103+
MAVEN_HOME: {name: 'maven', version: '3.9.10', platformspecific: false},
104104
},
105105
amd64: {},
106106
aarch64: {},

mx.graalpython/mx_graalpython.py

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
# re-export custom mx project classes so they can be used from suite.py
6868
from mx import MavenProject #pylint: disable=unused-import
6969
from mx_cmake import CMakeNinjaProject #pylint: disable=unused-import
70-
from mx_graalpython_gradleproject import GradlePluginProject #pylint: disable=unused-import
7170

7271
from mx_gate import Task
7372
from mx_graalpython_bench_param import PATH_MESO
@@ -941,16 +940,20 @@ def get_maven_cache():
941940
# don't worry about maven.repo.local if not running on gate
942941
return os.path.join(SUITE.get_mx_output_dir(), 'm2_cache_' + buildnr) if buildnr else None
943942

944-
def deploy_local_maven_repo(env=None):
945-
env = {**os.environ.copy(), **(env or {})}
943+
def update_maven_opts(env):
946944
m2_cache = get_maven_cache()
947945
if m2_cache:
948946
mvn_repo_local = f'-Dmaven.repo.local={m2_cache}'
949947
maven_opts = env.get('MAVEN_OPTS')
950948
maven_opts = maven_opts + " " + mvn_repo_local if maven_opts else mvn_repo_local
949+
if mx.is_windows():
950+
maven_opts = maven_opts.replace("|", "^|")
951951
env['MAVEN_OPTS'] = maven_opts
952-
mx.log(f'Added {mvn_repo_local} to MAVEN_OPTS={maven_opts}')
952+
mx.log(f"Added '{mvn_repo_local}' to MAVEN_OPTS={maven_opts}")
953+
return env
953954

955+
def deploy_local_maven_repo(env=None):
956+
env = update_maven_opts({**os.environ.copy(), **(env or {})})
954957
run_mx_args = [
955958
'-p',
956959
os.path.join(mx.suite('truffle').dir, '..', 'vm'),
@@ -986,6 +989,37 @@ def deploy_local_maven_repo(env=None):
986989
return path, version, env
987990

988991

992+
def deploy_graalpy_extensions_to_local_maven_repo(env=None):
993+
env = update_maven_opts({**os.environ.copy(), **(env or {})})
994+
995+
gradle_java_home = os.environ.get('GRADLE_JAVA_HOME')
996+
if not gradle_java_home:
997+
def abortCallback(msg):
998+
mx.abort("Could not find a JDK of version between 17 and 21 to build a Gradle plugin from graalpy-extensions.\n"
999+
"Export GRADLE_JAVA_HOME pointing to a suitable JDK or use the generic MX mechanism explained below:\n" + msg)
1000+
gradle_java_home = mx.get_tools_jdk('17..21', abortCallback=abortCallback).home
1001+
1002+
graalpy_extensions_path = os.environ.get('GRAALPY_EXTENSIONS_PATH')
1003+
if not graalpy_extensions_path:
1004+
mx.log("Cloning graalpy-extensions. If you want to use custom local clone, set env variable GRAALPY_EXTENSIONS_PATH")
1005+
graalpy_extensions_path = os.path.join(SUITE.get_mx_output_dir(), 'graalpy-extensions')
1006+
if os.path.exists(graalpy_extensions_path):
1007+
shutil.rmtree(graalpy_extensions_path)
1008+
mx.run(['git', 'clone', '--depth=1', 'https://github.com/oracle/graalpy-extensions.git', graalpy_extensions_path])
1009+
1010+
local_repo_path = os.path.join(SUITE.get_mx_output_dir(), 'public-maven-repo')
1011+
version = GRAAL_VERSION
1012+
mx.run([os.path.join(graalpy_extensions_path, mx.cmd_suffix('mvnw')),
1013+
'-Pmxurlrewrite', '-DskipJavainterfacegen', '-DskipTests', '-DdeployAtEnd=true',
1014+
f'-Drevision={version}',
1015+
f'-Dlocal.repo.url=' + pathlib.Path(local_repo_path).as_uri(),
1016+
f'-DaltDeploymentRepository=local::default::file:{local_repo_path}',
1017+
f"-Dgradle.java.home={gradle_java_home}",
1018+
'deploy'], env=env, cwd=graalpy_extensions_path)
1019+
1020+
return local_repo_path, version, env
1021+
1022+
9891023
def deploy_local_maven_repo_wrapper(*_):
9901024
p, _, _ = deploy_local_maven_repo()
9911025
print(f"local Maven repo path: {p}")
@@ -1434,6 +1468,7 @@ def graalpython_gate_runner(_, tasks):
14341468
gvm_jdk = graalvm_jdk()
14351469
standalone_home = graalpy_standalone_home('jvm')
14361470
mvn_repo_path, version, env = deploy_local_maven_repo()
1471+
deploy_graalpy_extensions_to_local_maven_repo()
14371472

14381473
if RUNNING_ON_LATEST_JAVA:
14391474
# our standalone python binary is meant for standalone graalpy

0 commit comments

Comments
 (0)