enso/build
Pavel Marek 5a7ad6bfe4
Upgrade enso to GraalVM for jdk 21 (#7991)
Upgrade to GraalVM JDK 21.
```
> java -version
openjdk version "21" 2023-09-19
OpenJDK Runtime Environment GraalVM CE 21+35.1 (build 21+35-jvmci-23.1-b15)
OpenJDK 64-Bit Server VM GraalVM CE 21+35.1 (build 21+35-jvmci-23.1-b15, mixed mode, sharing)
```

With SDKMan, download with `sdk install java 21-graalce`.

# Important Notes
- After this PR, one can theoretically run enso with any JRE with version at least 21.
- Removed `sbt bootstrap` hack and all the other build time related hacks related to the handling of GraalVM distribution.
- `project-manager` remains backward compatible - it can open older engines with runtimes. New engines now do no longer require a separate runtime to be downloaded.
- sbt does not support compilation of `module-info.java` files in mixed projects - https://github.com/sbt/sbt/issues/3368
- Which means that we can have `module-info.java` files only for Java-only projects.
- Anyway, we need just a single `module-info.class` in the resulting `runtime.jar` fat jar.
- `runtime.jar` is assembled in `runtime-with-instruments` with a custom merge strategy (`sbt-assembly` plugin). Caching is disabled for custom merge strategies, which means that re-assembly of `runtime.jar` will be more frequent.
- Engine distribution contains multiple JAR archives (modules) in `component` directory, along with `runner/runner.jar` that is hidden inside a nested directory.
- The new entry point to the engine runner is [EngineRunnerBootLoader](https://github.com/enso-org/enso/pull/7991/files#diff-9ab172d0566c18456472aeb95c4345f47e2db3965e77e29c11694d3a9333a2aa) that contains a custom ClassLoader - to make sure that everything that does not have to be loaded from a module is loaded from `runner.jar`, which is not a module.
- The new command line for launching the engine runner is in [distribution/bin/enso](https://github.com/enso-org/enso/pull/7991/files#diff-0b66983403b2c329febc7381cd23d45871d4d555ce98dd040d4d1e879c8f3725)
- [Newest version of Frgaal](https://repo1.maven.org/maven2/org/frgaal/compiler/20.0.1/) (20.0.1) does not recognize `--source 21` option, only `--source 20`.
2023-11-17 18:02:36 +00:00
..
base Force newDashboard default on the CI-built packages. (#6680) 2023-05-15 04:03:09 +02:00
build Upgrade enso to GraalVM for jdk 21 (#7991) 2023-11-17 18:02:36 +00:00
ci_utils Upgrade enso to GraalVM for jdk 21 (#7991) 2023-11-17 18:02:36 +00:00
ci-gen New GUI/IDE build script support (#7832) 2023-10-03 20:07:20 +02:00
cli CI improvements / IDE2 releasing (#8059) 2023-10-16 14:18:17 +02:00
deprecated impr(cloud-v2#494): Remove OpenSSL as a dependency (#7404) 2023-08-02 12:11:53 +02:00
enso-formatter New node design (#7311) 2023-07-27 13:00:47 +00:00
intellij-run-config-gen Eager shader compilation (#5606) 2023-02-22 00:29:48 +01:00
macros Introduce new focus APIs, and use for CB (#7167) 2023-07-26 22:13:48 +00:00
shader-tools Shaders precompilation (#4003) 2023-01-27 01:09:09 +01:00
.gitignore Build script merge (#3743) 2022-10-10 23:38:48 +02:00
README.md Build script merge (#3743) 2022-10-10 23:38:48 +02:00


Enso Language

[WIP] Enso CI Build Scripts

The code under this directory is under ongoing intensive development. As such it has not been reviewed or cleaned up yet.

General principles

  • Written in Rust.
  • Portable. Works on any platform that Enso targets.
  • Do not duplicate functionality that is already available in tools being part of our tech stack.
  • Supports both developers and CI use-cases (and environments). Developers can call it locally to do anything that CI does.
  • Does not require much setup work. Where feasible sets things up for the user.

Concepts

Target

  • Can be built locally from sources. Building yields artifacts.
  • Artifacts are self-contained to a single filesystem directory.
  • Artifacts can be downloaded from a remote location rather than built with the same effect.
  • Can contain other targets.
  • Artifacts can be platform-specific.
  • Artifacts must be releasable as CI run artifacts or release assets.

Usage

While the script is invoked using cargo run, the convenience run script is provided in the repository root.

The general usage form is:

./run <command> [options]

The command itself is usually a combination of target name and subcommand, like ide build or backend test.

At every layer, the --help command can be used to get more information. Note that the information depends on the command, so running ./run --help will not give you the same information as ./run ide --help nor ./run ide build --help.

Targets

IDE

IDE is the top level target for our project. It consists of GUI and Backend targets.

Sources consist mostly of TS code for the Electron client and packaging.

Artifacts are platform specific and consist of the single image file.

GUI

GUI is the front-end part of the project. It consists of WASM target.

Sources consist mostly of TS code for the web page that embeds the WASM binaries.

Artifacts are portable across the platforms and consist of the web page that can be served either using Electron client (as IDE does) or using a web server (like the Cloud version of Enso).

WASM

This is the core of GUI, written in Rust. It has no external dependencies.

Artifacts are portable across the platforms and consist of the single WASM binary accompanied by the JS snippets and glue.

Backend

Backend is the back-end part of the project, as seen from the IDE perspective. It contains a Project Manager bundle that includes:

  • Project Manager native image;
  • Enso Engine distribution (with the Standard Library);
  • GraalVM distribution.

These components are not represented as "Targets" (in terms of build script) but could be and likely will be in the future.