diff --git a/.github/workflows/mandrel.yml b/.github/workflows/mandrel.yml new file mode 100644 index 000000000000..1b1e08ccf12e --- /dev/null +++ b/.github/workflows/mandrel.yml @@ -0,0 +1,47 @@ +name: Mandrel-Quarkus tests + +on: + push: + paths-ignore: + - '.github/workflows/main.yml' + - '.github/workflows/quarkus.yml' + - '**.md' + pull_request: + paths-ignore: + - '.github/workflows/main.yml' + - '.github/workflows/quarkus.yml' + - '**.md' + workflow_dispatch: + +# The following aims to reduce CI CPU cycles by: +# 1. Cancelling any previous builds of this PR when pushing new changes to it +# 2. Cancelling any previous builds of a branch when pushing new changes to it in a fork +# 3. Cancelling any pending builds, but not active ones, when pushing to a branch in the main +# repository. This prevents us from constantly cancelling CI runs, while being able to skip +# intermediate builds. E.g., if we perform two pushes the first one will start a CI job and +# the second one will add another one to the queue; if we perform a third push while the +# first CI job is still running the previously queued CI job (for the second push) will be +# cancelled and a new CI job will be queued for the latest (third) push. +concurrency: + group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}" + cancel-in-progress: ${{ github.event_name == 'pull_request' || github.repository != 'graalvm/mandrel' }} + +jobs: + q-main-ea: + name: "Q main M 24.0 EA" + uses: graalvm/mandrel/.github/workflows/base.yml@default + with: + quarkus-version: "main" + repo: ${{ github.repository }} + version: ${{ github.ref }} + mandrel-packaging-version: "24.0" + jdk: "22/ea" + q-main-ea-win: + name: "Q main M 24.0 windows EA" + uses: graalvm/mandrel/.github/workflows/base-windows.yml@default + with: + quarkus-version: "main" + repo: ${{ github.repository }} + version: ${{ github.ref }} + mandrel-packaging-version: "24.0" + jdk: "22/ea" diff --git a/README-Mandrel.md b/README-Mandrel.md new file mode 100644 index 000000000000..2774ce27ae06 --- /dev/null +++ b/README-Mandrel.md @@ -0,0 +1,76 @@ +# Mandrel + +Mandrel is [a downstream distribution of the GraalVM community edition](https://developers.redhat.com/blog/2020/06/05/mandrel-a-community-distribution-of-graalvm-for-the-red-hat-build-of-quarkus/). +Mandrel's main goal is to provide a `native-image` release specifically to support [Quarkus](https://quarkus.io). +The aim is to align the `native-image` capabilities from GraalVM with OpenJDK and Red Hat Enterprise Linux libraries to improve maintainability for native Quarkus applications. +Mandrel can best be described as a distribution of a regular OpenJDK with a specially packaged GraalVM Native Image builder (`native-image`). + +## How Does Mandrel Differ From Graal + +Mandrel releases are built from a code base derived from the upstream GraalVM code base, with only minor changes but some significant exclusions. +A full distribution of GraalVM is much more than `native-image`: it has polyglot support, the Truffle framework which allows for efficient implementation of interpreters, an LLVM compiler back end for native image, the libgraal JIT compiler as a replacement for Hotspot’s C2 server compiler and much more. +Mandrel is the small subset of that functionality we support for the `native-image` use-case. + +Mandrel's `native-image` also doesn't include the following features: +* The experimental image-build server, i.e., the `--experimental-build-server` option. +* The LLVM backend, i.e., the `-H:CompilerBackend=llvm` option. +* The musl libc implementation, i.e., the `--libc=musl` option. +* Support for generating static native images, i.e., the `--static` option. +* Support for non JVM-based languages and polyglot, i.e., the `--language:` option. + +Mandrel is also built slightly differently to GraalVM, using the standard OpenJDK project release of jdk17u. +This means it does not profit from a few small enhancements that Oracle have added to the version of OpenJDK used to build their own GraalVM downloads. +Most of these enhancements are to the JVMCI module that allows the Graal compiler to be run inside OpenJDK. +The others are small cosmetic changes to behaviour. +These enhancements may in some cases cause minor differences in the progress of native image generation. +They should not cause the resulting images themselves to execute in a noticeably different manner. + +## Communication Channels + +* [Slack](https://www.graalvm.org/slack-invitation) - Join `#mandrel` channel at graalvm's slack workspace +* [graalvm-dev@oss.oracle.com](mailto:graalvm-dev@oss.oracle.com?subject=[MANDREL]) mailing list - Subscribe [here](https://oss.oracle.com/mailman/listinfo/graalvm-dev) +* [GitHub issues](https://github.com/graalvm/mandrel/issues) for bug reports, questions, or requests for enhancements. + +Please report security vulnerabilities according to the [Reporting Vulnerabilities guide](https://www.oracle.com/corporate/security-practices/assurance/vulnerability/reporting.html). + +## Getting Started + +Mandrel distributions can be downloaded from [the repository's releases](https://github.com/graalvm/mandrel/releases) +and container images are available at [quay.io](https://quay.io/repository/quarkus/ubi-quarkus-mandrel-builder-image?tag=latest&tab=tags). + +### Prerequisites + +Mandrel's `native-image` depends on the following packages: +* freetype-devel +* gcc +* glibc-devel +* libstdc++-static +* zlib-devel + +On Fedora/CentOS/RHEL they can be installed with: +```bash +dnf install glibc-devel zlib-devel gcc freetype-devel libstdc++-static +``` + +**Note**: The package might be called `glibc-static` or `libstdc++-devel` instead of `libstdc++-static` depending on your system. +If the system is missing stdc++, `gcc-c++` package is needed too. + +On Ubuntu-like systems with: +```bash +apt install g++ zlib1g-dev libfreetype6-dev +``` + +## Building Mandrel From Source + +For building Mandrel from source please see [mandrel-packaging](https://github.com/graalvm/mandrel-packaging) +and consult [Repository Structure in CONTRIBUTING.md](CONTRIBUTING.md#repository-structure) regarding which branch of Mandrel to use. + +# Community +Empowering Software Development with Works on Arm Initiative +![Works on Arm logo](img/works_on_arm_900x77.png) +[Works on Arm](https://www.arm.com/solutions/infrastructure/works-on-arm) is a strategic initiative to enable and accelerate the +software ecosystem for Arm64. + +[GraalVM's](https://www.graalvm.org/) [Mandrel](https://github.com/graalvm/mandrel) distribution that +powers [Quarkus Native](https://quarkus.io/guides/building-native-image) proudly counts itself among the libraries and +tools that successfully leveraged the resources from Works on Arm. diff --git a/compiler/mx.compiler/suite.py b/compiler/mx.compiler/suite.py index f4adb1f98377..c970fc733cb2 100644 --- a/compiler/mx.compiler/suite.py +++ b/compiler/mx.compiler/suite.py @@ -4,7 +4,7 @@ "sourceinprojectwhitelist" : [], "groupId" : "org.graalvm.compiler", - "version" : "24.0.0", + "version" : "24.0.0.0", "release" : True, "url" : "http://www.graalvm.org/", "developer" : { diff --git a/espresso/mx.espresso/suite.py b/espresso/mx.espresso/suite.py index 92bbe879a0ef..141dfc62fedd 100644 --- a/espresso/mx.espresso/suite.py +++ b/espresso/mx.espresso/suite.py @@ -24,7 +24,7 @@ suite = { "mxversion": "6.44.0", "name": "espresso", - "version" : "24.0.0", + "version" : "24.0.0.0", "release" : True, "groupId" : "org.graalvm.espresso", "url" : "https://www.graalvm.org/reference-manual/java-on-truffle/", diff --git a/regex/mx.regex/suite.py b/regex/mx.regex/suite.py index 14c8744d5dc5..3c3d40f3a3c6 100644 --- a/regex/mx.regex/suite.py +++ b/regex/mx.regex/suite.py @@ -43,7 +43,7 @@ "name" : "regex", - "version" : "24.0.0", + "version" : "24.0.0.0", "release" : True, "groupId" : "org.graalvm.regex", "url" : "http://www.graalvm.org/", diff --git a/sdk/mx.sdk/suite.py b/sdk/mx.sdk/suite.py index cac3b6038762..f1add7265437 100644 --- a/sdk/mx.sdk/suite.py +++ b/sdk/mx.sdk/suite.py @@ -41,7 +41,7 @@ suite = { "mxversion": "6.53.2", "name" : "sdk", - "version" : "24.0.0", + "version" : "24.0.0.0", "release" : True, "sourceinprojectwhitelist" : [], "url" : "https://github.com/oracle/graal", diff --git a/substratevm/mx.substratevm/suite.py b/substratevm/mx.substratevm/suite.py index 610f0cf4b63c..2773197b8628 100644 --- a/substratevm/mx.substratevm/suite.py +++ b/substratevm/mx.substratevm/suite.py @@ -2,7 +2,7 @@ suite = { "mxversion": "6.27.1", "name": "substratevm", - "version" : "24.0.0", + "version" : "24.0.0.0", "release" : True, "url" : "https://github.com/oracle/graal/tree/master/substratevm", diff --git a/tools/mx.tools/suite.py b/tools/mx.tools/suite.py index ba78f0cadf50..86d1abcb29d3 100644 --- a/tools/mx.tools/suite.py +++ b/tools/mx.tools/suite.py @@ -26,7 +26,7 @@ "defaultLicense" : "GPLv2-CPE", "groupId" : "org.graalvm.tools", - "version" : "24.0.0", + "version" : "24.0.0.0", "release" : True, "url" : "http://openjdk.java.net/projects/graal", "developer" : { diff --git a/truffle/mx.truffle/suite.py b/truffle/mx.truffle/suite.py index 8c7bbae03b0b..ef3cab263cd5 100644 --- a/truffle/mx.truffle/suite.py +++ b/truffle/mx.truffle/suite.py @@ -41,7 +41,7 @@ suite = { "mxversion": "7.0.3", "name" : "truffle", - "version" : "24.0.0", + "version" : "24.0.0.0", "release" : True, "groupId" : "org.graalvm.truffle", "sourceinprojectwhitelist" : [], diff --git a/vm/mx.vm/suite.py b/vm/mx.vm/suite.py index 8153ed9a9aae..4e7164b3ec84 100644 --- a/vm/mx.vm/suite.py +++ b/vm/mx.vm/suite.py @@ -1,6 +1,6 @@ suite = { "name": "vm", - "version" : "24.0.0", + "version" : "24.0.0.0", "mxversion": "6.41.0", "release" : True, "groupId" : "org.graalvm", diff --git a/wasm/mx.wasm/suite.py b/wasm/mx.wasm/suite.py index 8f59c3649b79..93a02d1e99b5 100644 --- a/wasm/mx.wasm/suite.py +++ b/wasm/mx.wasm/suite.py @@ -42,7 +42,7 @@ "mxversion": "6.41.0", "name" : "wasm", "groupId" : "org.graalvm.wasm", - "version" : "24.0.0", + "version" : "24.0.0.0", "versionConflictResolution" : "latest", "url" : "http://graalvm.org/", "developer" : {