From 2441e108f7b6ca5d9bc97ecdf8647f981f543301 Mon Sep 17 00:00:00 2001 From: 3arthqu4ke <56741599+3arthqu4ke@users.noreply.github.com> Date: Tue, 21 Jan 2025 22:50:22 +0100 Subject: [PATCH] Experimenting with GraalVM --- .github/workflows/graal.yml | 44 ++++++++++++++++++++++++ build.gradle | 17 +++++---- gradle.properties | 2 ++ gradle/wrapper/gradle-wrapper.properties | 2 +- headlessmc-launcher/build.gradle | 3 +- headlessmc-modlauncher/build.gradle | 10 +++--- 6 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/graal.yml diff --git a/.github/workflows/graal.yml b/.github/workflows/graal.yml new file mode 100644 index 00000000..30cd84c6 --- /dev/null +++ b/.github/workflows/graal.yml @@ -0,0 +1,44 @@ +name: Build Graal Native Image + +on: + workflow_dispatch: + push: + pull_request: + types: [opened, reopened] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - uses: graalvm/setup-graalvm@v1 + with: + java-version: '23' + distribution: 'graalvm' + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Output Graal Info + run: | + echo "GRAALVM_HOME: $GRAALVM_HOME" + echo "JAVA_HOME: $JAVA_HOME" + java --version + native-image --version + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build with Gradle + run: | + ./gradlew -Phmc_graal_build=true headlessmc-launcher:nativeCompile + + - name: List files + run: ls headlessmc-launcher/build/native/nativeCompile + + - name: Publish Artifact + uses: actions/upload-artifact@v4 + with: + name: HeadlessMc Native image files + path: | + ./headlessmc-launcher/build/native/nativeCompile/* diff --git a/build.gradle b/build.gradle index 12a5c437..0db2ad51 100644 --- a/build.gradle +++ b/build.gradle @@ -42,12 +42,17 @@ allprojects { } } - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - - compileJava { - if (JavaVersion.current().isJava9Compatible()) { - options.compilerArgs.addAll(['--release', '8']) + if (rootProject.hmc_graal_build) { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } else { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + + compileJava { + if (JavaVersion.current().isJava9Compatible()) { + options.compilerArgs.addAll(['--release', '8']) + } } } diff --git a/gradle.properties b/gradle.properties index 66928264..ae30c24d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,3 +2,5 @@ project_version=2.4.1 org.gradle.jvmargs=-Xmx2048m # set to true if you want to run the headlessmc-launcher-wrapper integration tests hmc_integration_test_enabled=false +# set to true if you want to build a graalvm image of the headlessmc-launcher +hmc_graal_build=false diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 19cfad96..e1adfb49 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/headlessmc-launcher/build.gradle b/headlessmc-launcher/build.gradle index e3298988..72579980 100644 --- a/headlessmc-launcher/build.gradle +++ b/headlessmc-launcher/build.gradle @@ -1,10 +1,11 @@ plugins { id 'application' + id 'org.graalvm.buildtools.native' version '0.10.4' } def MAIN_CLASS = 'me.earth.headlessmc.launcher.Main' application { - mainClass = MAIN_CLASS + mainClass.set(MAIN_CLASS) } run { diff --git a/headlessmc-modlauncher/build.gradle b/headlessmc-modlauncher/build.gradle index 2e4575ea..cda149b4 100644 --- a/headlessmc-modlauncher/build.gradle +++ b/headlessmc-modlauncher/build.gradle @@ -1,7 +1,9 @@ -sourceSets { - java9stub - main { - compileClasspath += java9stub.compileClasspath + java9stub.output +if (!JavaVersion.current().isJava9Compatible()) { + sourceSets { + java9stub + main { + compileClasspath += java9stub.compileClasspath + java9stub.output + } } }