diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1902bcbfe..e924acd4b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -58,3 +58,38 @@ jobs: - uses: codecov/codecov-action@v1 if: matrix.os == env.MAIN_OS && matrix.java == env.MAIN_JAVA continue-on-error: true + native-image: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + fetch-depth: 0 + - uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'temurin' + - uses: graalvm/setup-graalvm@v1 + with: + version: '21.3.0' + java-version: '17' + components: 'native-image' + github-token: ${{ secrets.GITHUB_TOKEN }} + set-java-home: false + - run: echo "org.gradle.java.installations.fromEnv=GRAALVM_HOME" >> gradle.properties + - run: sudo apt-get install -y build-essential libz-dev zlib1g-dev + - run: | + echo $LD_LIBRARY_PATH + sudo ldconfig + - uses: gradle/gradle-build-action@v2 + with: + arguments: --quiet javaToolchains + - uses: gradle/gradle-build-action@v2 + with: + arguments: --stacktrace alpha-cli-app:nativeCompile --exclude-task test + - run: ./alpha-cli-app/build/native/nativeCompile/alpha --help + - run: ./alpha-cli-app/build/native/nativeCompile/alpha -str 'a.' + - uses: actions/upload-artifact@v2 + with: + name: alpha + path: alpha-cli-app/build/native-image/alpha diff --git a/alpha-cli-app/build.gradle.kts b/alpha-cli-app/build.gradle.kts index a62227309..e68b7dd90 100644 --- a/alpha-cli-app/build.gradle.kts +++ b/alpha-cli-app/build.gradle.kts @@ -1,5 +1,6 @@ plugins { id("alpha.java-application-conventions") + id("org.graalvm.buildtools.native") version "0.9.8" } dependencies { @@ -71,3 +72,22 @@ tasks.create("bundledJar") { tasks.test { useJUnitPlatform() } + +graalvmNative { + binaries { + named("main") { + imageName.set("alpha") + mainClass.set(main) + buildArgs.addAll( + "--no-fallback", + "-H:Log=registerResource", + "-H:+ReportExceptionStackTraces", + "--report-unsupported-elements-at-runtime" + ) + javaLauncher.set(javaToolchains.launcherFor { + languageVersion.set(JavaLanguageVersion.of(17)) + vendor.set(JvmVendorSpec.matching("GraalVM")) + }) + } + } +} diff --git a/alpha-cli-app/src/main/resources/META-INF/native-image/resource-config.json b/alpha-cli-app/src/main/resources/META-INF/native-image/resource-config.json new file mode 100644 index 000000000..3c9328fa7 --- /dev/null +++ b/alpha-cli-app/src/main/resources/META-INF/native-image/resource-config.json @@ -0,0 +1,13 @@ +{ + "resources": { + "includes": [ + { + "pattern": "^stringtemplates/aggregate-encodings.stg$" + }, + { + "pattern": "^simplelogger.properties$" + } + ] + }, + "bundles": [] +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 28bf10ac3..4ffa44b28 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,2 +1,9 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + } +} + rootProject.name = "alpha" -include("alpha-api", "alpha-cli-app", "alpha-core", "alpha-solver", "alpha-commons") \ No newline at end of file +include("alpha-api", "alpha-cli-app", "alpha-core", "alpha-solver", "alpha-commons")