Skip to content

Commit 1c343a2

Browse files
zakkakjerboaa
authored andcommitted
Add MANDREL-Readme and workflows
1 parent 78238a5 commit 1c343a2

File tree

11 files changed

+132
-9
lines changed

11 files changed

+132
-9
lines changed

.github/workflows/mandrel.yml

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
name: Mandrel-Quarkus tests
2+
3+
on:
4+
push:
5+
paths-ignore:
6+
- '.github/workflows/main.yml'
7+
- '.github/workflows/quarkus.yml'
8+
- '**.md'
9+
pull_request:
10+
paths-ignore:
11+
- '.github/workflows/main.yml'
12+
- '.github/workflows/quarkus.yml'
13+
- '**.md'
14+
workflow_dispatch:
15+
16+
# The following aims to reduce CI CPU cycles by:
17+
# 1. Cancelling any previous builds of this PR when pushing new changes to it
18+
# 2. Cancelling any previous builds of a branch when pushing new changes to it in a fork
19+
# 3. Cancelling any pending builds, but not active ones, when pushing to a branch in the main
20+
# repository. This prevents us from constantly cancelling CI runs, while being able to skip
21+
# intermediate builds. E.g., if we perform two pushes the first one will start a CI job and
22+
# the second one will add another one to the queue; if we perform a third push while the
23+
# first CI job is still running the previously queued CI job (for the second push) will be
24+
# cancelled and a new CI job will be queued for the latest (third) push.
25+
concurrency:
26+
group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}"
27+
cancel-in-progress: ${{ github.event_name == 'pull_request' || github.repository != 'graalvm/mandrel' }}
28+
29+
jobs:
30+
q-main-ea:
31+
name: "Q main M 24.0 EA"
32+
uses: graalvm/mandrel/.github/workflows/base.yml@default
33+
with:
34+
quarkus-version: "main"
35+
repo: ${{ github.repository }}
36+
version: ${{ github.ref }}
37+
mandrel-packaging-version: "24.0"
38+
jdk: "22/ea"
39+
q-main-ea-win:
40+
name: "Q main M 24.0 windows EA"
41+
uses: graalvm/mandrel/.github/workflows/base-windows.yml@default
42+
with:
43+
quarkus-version: "main"
44+
repo: ${{ github.repository }}
45+
version: ${{ github.ref }}
46+
mandrel-packaging-version: "24.0"
47+
jdk: "22/ea"

README-Mandrel.md

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Mandrel
2+
3+
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/).
4+
Mandrel's main goal is to provide a `native-image` release specifically to support [Quarkus](https://quarkus.io).
5+
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.
6+
Mandrel can best be described as a distribution of a regular OpenJDK with a specially packaged GraalVM Native Image builder (`native-image`).
7+
8+
## How Does Mandrel Differ From Graal
9+
10+
Mandrel releases are built from a code base derived from the upstream GraalVM code base, with only minor changes but some significant exclusions.
11+
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.
12+
Mandrel is the small subset of that functionality we support for the `native-image` use-case.
13+
14+
Mandrel's `native-image` also doesn't include the following features:
15+
* The experimental image-build server, i.e., the `--experimental-build-server` option.
16+
* The LLVM backend, i.e., the `-H:CompilerBackend=llvm` option.
17+
* The musl libc implementation, i.e., the `--libc=musl` option.
18+
* Support for generating static native images, i.e., the `--static` option.
19+
* Support for non JVM-based languages and polyglot, i.e., the `--language:<languageId>` option.
20+
21+
Mandrel is also built slightly differently to GraalVM, using the standard OpenJDK project release of jdk17u.
22+
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.
23+
Most of these enhancements are to the JVMCI module that allows the Graal compiler to be run inside OpenJDK.
24+
The others are small cosmetic changes to behaviour.
25+
These enhancements may in some cases cause minor differences in the progress of native image generation.
26+
They should not cause the resulting images themselves to execute in a noticeably different manner.
27+
28+
## Communication Channels
29+
30+
* [Slack](https://www.graalvm.org/slack-invitation) - Join `#mandrel` channel at graalvm's slack workspace
31+
* [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)
32+
* [GitHub issues](https://github.com/graalvm/mandrel/issues) for bug reports, questions, or requests for enhancements.
33+
34+
Please report security vulnerabilities according to the [Reporting Vulnerabilities guide](https://www.oracle.com/corporate/security-practices/assurance/vulnerability/reporting.html).
35+
36+
## Getting Started
37+
38+
Mandrel distributions can be downloaded from [the repository's releases](https://github.com/graalvm/mandrel/releases)
39+
and container images are available at [quay.io](https://quay.io/repository/quarkus/ubi-quarkus-mandrel-builder-image?tag=latest&tab=tags).
40+
41+
### Prerequisites
42+
43+
Mandrel's `native-image` depends on the following packages:
44+
* freetype-devel
45+
* gcc
46+
* glibc-devel
47+
* libstdc++-static
48+
* zlib-devel
49+
50+
On Fedora/CentOS/RHEL they can be installed with:
51+
```bash
52+
dnf install glibc-devel zlib-devel gcc freetype-devel libstdc++-static
53+
```
54+
55+
**Note**: The package might be called `glibc-static` or `libstdc++-devel` instead of `libstdc++-static` depending on your system.
56+
If the system is missing stdc++, `gcc-c++` package is needed too.
57+
58+
On Ubuntu-like systems with:
59+
```bash
60+
apt install g++ zlib1g-dev libfreetype6-dev
61+
```
62+
63+
## Building Mandrel From Source
64+
65+
For building Mandrel from source please see [mandrel-packaging](https://github.com/graalvm/mandrel-packaging)
66+
and consult [Repository Structure in CONTRIBUTING.md](CONTRIBUTING.md#repository-structure) regarding which branch of Mandrel to use.
67+
68+
# Community
69+
Empowering Software Development with Works on Arm Initiative
70+
![Works on Arm logo](img/works_on_arm_900x77.png)
71+
[Works on Arm](https://www.arm.com/solutions/infrastructure/works-on-arm) is a strategic initiative to enable and accelerate the
72+
software ecosystem for Arm64.
73+
74+
[GraalVM's](https://www.graalvm.org/) [Mandrel](https://github.com/graalvm/mandrel) distribution that
75+
powers [Quarkus Native](https://quarkus.io/guides/building-native-image) proudly counts itself among the libraries and
76+
tools that successfully leveraged the resources from Works on Arm.

compiler/mx.compiler/suite.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"sourceinprojectwhitelist" : [],
55

66
"groupId" : "org.graalvm.compiler",
7-
"version" : "24.0.0",
7+
"version" : "24.0.0.0",
88
"release" : True,
99
"url" : "http://www.graalvm.org/",
1010
"developer" : {

espresso/mx.espresso/suite.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
suite = {
2525
"mxversion": "6.44.0",
2626
"name": "espresso",
27-
"version" : "24.0.0",
27+
"version" : "24.0.0.0",
2828
"release" : True,
2929
"groupId" : "org.graalvm.espresso",
3030
"url" : "https://www.graalvm.org/reference-manual/java-on-truffle/",

regex/mx.regex/suite.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444
"name" : "regex",
4545

46-
"version" : "24.0.0",
46+
"version" : "24.0.0.0",
4747
"release" : True,
4848
"groupId" : "org.graalvm.regex",
4949
"url" : "http://www.graalvm.org/",

sdk/mx.sdk/suite.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
suite = {
4242
"mxversion": "6.53.2",
4343
"name" : "sdk",
44-
"version" : "24.0.0",
44+
"version" : "24.0.0.0",
4545
"release" : True,
4646
"sourceinprojectwhitelist" : [],
4747
"url" : "https://github.com/oracle/graal",

substratevm/mx.substratevm/suite.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
suite = {
33
"mxversion": "6.27.1",
44
"name": "substratevm",
5-
"version" : "24.0.0",
5+
"version" : "24.0.0.0",
66
"release" : True,
77
"url" : "https://github.com/oracle/graal/tree/master/substratevm",
88

tools/mx.tools/suite.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"defaultLicense" : "GPLv2-CPE",
2727

2828
"groupId" : "org.graalvm.tools",
29-
"version" : "24.0.0",
29+
"version" : "24.0.0.0",
3030
"release" : True,
3131
"url" : "http://openjdk.java.net/projects/graal",
3232
"developer" : {

truffle/mx.truffle/suite.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
suite = {
4242
"mxversion": "7.0.3",
4343
"name" : "truffle",
44-
"version" : "24.0.0",
44+
"version" : "24.0.0.0",
4545
"release" : True,
4646
"groupId" : "org.graalvm.truffle",
4747
"sourceinprojectwhitelist" : [],

vm/mx.vm/suite.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
suite = {
22
"name": "vm",
3-
"version" : "24.0.0",
3+
"version" : "24.0.0.0",
44
"mxversion": "6.41.0",
55
"release" : True,
66
"groupId" : "org.graalvm",

wasm/mx.wasm/suite.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"mxversion": "6.41.0",
4343
"name" : "wasm",
4444
"groupId" : "org.graalvm.wasm",
45-
"version" : "24.0.0",
45+
"version" : "24.0.0.0",
4646
"versionConflictResolution" : "latest",
4747
"url" : "http://graalvm.org/",
4848
"developer" : {

0 commit comments

Comments
 (0)