From 0860c278e49b624af105868403e71c82893ba1d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleksandar=20Pejovi=C4=87?= Date: Thu, 27 Apr 2023 22:51:07 +0200 Subject: [PATCH 01/72] Fix handling of JavaTimeSupplementary resource bundles (cherry picked from commit 7156ae53d11bf263f0c13ac71719933bce002d24) --- .../jdk/localization/LocalizationFeature.java | 66 ++++++++++++++----- 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/localization/LocalizationFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/localization/LocalizationFeature.java index f2a9eea2e216..95ad68ce665c 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/localization/LocalizationFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/localization/LocalizationFeature.java @@ -49,6 +49,7 @@ import java.util.ServiceLoader; import java.util.Set; import java.util.concurrent.ForkJoinPool; +import java.util.function.BiFunction; import java.util.function.Function; import java.util.spi.CalendarDataProvider; import java.util.spi.CalendarNameProvider; @@ -96,6 +97,7 @@ import sun.util.locale.provider.LocaleProviderAdapter; import sun.util.locale.provider.ResourceBundleBasedAdapter; import sun.util.resources.LocaleData; +import sun.util.resources.ParallelListResourceBundle; /** * LocalizationFeature is the core class of SVM localization support. It contains all the options @@ -466,24 +468,57 @@ private void addProviders() { } } + /* List of getters to query `LocaleData` for resource bundles. */ + private static final List> localeDataBundleGetters = List.of( + LocaleData::getCalendarData, + LocaleData::getCurrencyNames, + LocaleData::getLocaleNames, + LocaleData::getTimeZoneNames, + LocaleData::getBreakIteratorInfo, + LocaleData::getBreakIteratorResources, + LocaleData::getCollationData, + LocaleData::getDateFormatData, + LocaleData::getNumberFormatData); + @Platforms(Platform.HOSTED_ONLY.class) protected void addResourceBundles() { - for (Locale locale : allLocales) { - prepareBundle(localeData(java.util.spi.CalendarDataProvider.class, locale).getCalendarData(locale), locale); - prepareBundle(localeData(java.util.spi.CurrencyNameProvider.class, locale).getCurrencyNames(locale), locale); - prepareBundle(localeData(java.util.spi.LocaleNameProvider.class, locale).getLocaleNames(locale), locale); - prepareBundle(localeData(java.util.spi.TimeZoneNameProvider.class, locale).getTimeZoneNames(locale), locale); - prepareBundle(localeData(java.text.spi.BreakIteratorProvider.class, locale).getBreakIteratorInfo(locale), locale); - prepareBundle(localeData(java.text.spi.BreakIteratorProvider.class, locale).getCollationData(locale), locale); - prepareBundle(localeData(java.text.spi.DateFormatProvider.class, locale).getDateFormatData(locale), locale); - prepareBundle(localeData(java.text.spi.NumberFormatProvider.class, locale).getNumberFormatData(locale), locale); - prepareBundle(localeData(java.text.spi.BreakIteratorProvider.class, locale).getBreakIteratorResources(locale), locale); + /* + * The lookup of localized objects may require the use of more than one + * `LocaleProviderAdapter`, so we need resource bundles from all of them. + */ + LocaleProviderAdapter.getAdapterPreference().stream() + .map(LocaleProviderAdapter::forType) + .filter(ResourceBundleBasedAdapter.class::isInstance) + .map(ResourceBundleBasedAdapter.class::cast) + .map(ResourceBundleBasedAdapter::getLocaleData) + .forEach(localeData -> { + for (var locale : allLocales) { + for (var localeDataBundleGetter : localeDataBundleGetters) { + ResourceBundle bundle; + try { + bundle = localeDataBundleGetter.apply(localeData, locale); + } catch (MissingResourceException e) { + continue; /* No bundle for this `locale`. */ + } + if (bundle instanceof ParallelListResourceBundle) { + /* Make sure the `bundle` content is complete. */ + localeData.setSupplementary((ParallelListResourceBundle) bundle); + } + prepareBundle(bundle, locale); + } + } + }); + + if (!optimizedMode && !substituteLoadLookup) { + /* + * No eager loading of bundle content, so we need to include the + * `sun.text.resources.FormatData` bundle supplement as well. + */ + prepareBundle("sun.text.resources.JavaTimeSupplementary"); } final String[] alwaysRegisteredResourceBundles = new String[]{ - "sun.text.resources.FormatData", - "sun.util.logging.resources.logging", - "sun.util.resources.TimeZoneNames" + "sun.util.logging.resources.logging" }; for (String bundleName : alwaysRegisteredResourceBundles) { prepareBundle(bundleName); @@ -494,11 +529,6 @@ protected void addResourceBundles() { } } - @Platforms(Platform.HOSTED_ONLY.class) - protected LocaleData localeData(Class providerClass, Locale locale) { - return ((ResourceBundleBasedAdapter) LocaleProviderAdapter.getAdapter(providerClass, locale)).getLocaleData(); - } - @Platforms(Platform.HOSTED_ONLY.class) private void processRequestedBundle(String input) { int splitIndex = input.indexOf('_'); From 381aa782a025f77d2d1842a802f2f64473a35f5a Mon Sep 17 00:00:00 2001 From: Lesia Chaban Date: Wed, 7 Jun 2023 15:39:50 +0300 Subject: [PATCH 02/72] Add new publications (cherry picked from commit eb7b761ba75473bcd4faf8565ad1303cb5a7515b) --- docs/Publications.md | 54 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/docs/Publications.md b/docs/Publications.md index f1bba027f036..7cf377687d32 100644 --- a/docs/Publications.md +++ b/docs/Publications.md @@ -63,7 +63,17 @@ SPLASH 2012, October 19-26, Tucson, AZ ## Truffle Papers -### 2021 +### 2022 + +- Daniele Bonetta, Lukas Stadler, David Leopoldseder, Hanspeter Moessenboeck, Jacob Kreindl +[**TruffleTaint: Polyglot Dynamic Taint Analysis on GraalVM**](https://apexapps.oracle.com/pls/apex/f?p=94065:10:116444111260916:8758) +In _Proceedings of the 19th International Conference on Managed Programming Languages & Runtimes (MPLR'22)_ + +### 2021 + +- Josef Haider, Benoit Daloze +[**Just-in-Time Compiling Ruby Regexps on TruffleRuby**](https://www.youtube.com/watch?v=JuVklIz1gts) +In _Proceedings of the VLDB Endowment RubyKaigi 2021_ - David Justo, Shaoqing Yi, Lukas Stadler, Nadia Polikarpova, Arun Kumar [**Towards a polyglot framework for factorized ML**](https://dl.acm.org/doi/abs/10.14778/3476311.3476372) @@ -292,12 +302,46 @@ Describes the design of self-optimizing and self-specializing interpreter, and t ## GraalVM Compiler Papers +### 2023 + +- David Leopoldseder, Daniele Bonetta, Lukas Stadler, Hanspeter Moessenboeck, Sebastian Kloibhofer, Lukas Makor +[**Control Flow Duplication for Columnar Arrays in a Dynamic Compiler**](https://doi.org/10.22152/programming-journal.org/2023/7/9) +In _Proceedings of the 2023 Journal and Conference_ + +### 2022 + +- Gergo Barany, David Leopoldseder, Hanspeter Moessenboeck, Raphael Mosaner +[**Improving Vectorization Heuristics in a Dynamic Compiler with Learned Models**](https://doi.org/10.1145/3563838.3567679) +In _Proceedings of the Virtual Machines and Language Implementations Workshop Co-located with SPLASH 2022_ + +- Stefan Marr, Humphrey Burchell, Fabio Niephaus +[**Execution vs. Parse-Based Language Servers: Tradeoffs and Opportunities for Language-Agnostic Tooling for Dynamic Languages**](https://doi.org/10.1145/3563834.3567537) +In _Proceedings of the 18th Dynamic Languages Symposium (DLS) at SPLASH 2022_ + +- David Leopoldseder, Daniele Bonetta, Lukas Stadler, Hanspeter Moessenboeck, Lukas Makor, Sebastian Kloibhofer +[**Automatic Array Transformation to Columnar Storage at Run Time**](https://doi.org/10.1145/3546918.3546919) +In _Proceedings of the 19th International Conference on Managed Programming Languages & Runtimes (MPLR'22)_ + +- David Leopoldseder, Lukas Stadler, Hanspeter Moessenboeck, Raphael Mosaner, Wolfgang Kisling +[**Machine-Learning-Based Self-Optimizing Compiler Heuristics**](https://doi.org/10.1145/3546918.3546921) +In _Proceedings of the 19th International Conference on Managed Programming Languages & Runtimes (MPLR'22)_ + +- Matthias Neugschwandtner, Gergo Barany, Felix Berlakovich +[**Constant Blinding on GraalVM**](https://dl.acm.org/doi/abs/10.1145/3517208.3523751) +In _Proceedings of the 15th EUROPEAN WORKSHOP ON SYSTEMS SECURITY_ + +- Stefan Reschke, Toni Mattis, Fabio Niephaus, Robert Hirschfeld +[**Toward Just-in-time and Language-agnostic Mutation Testing**](https://doi.org/10.1145/3532512.3532514) +In _Proceedings of the MoreVMs’22 workshop at ‹Programming› 2022_ + ### 2021 -- Rodrigo Bruno, Vojin Jovanovic, Christian Wimmer, Gustavo Alonso [**Compiler-Assisted Object Inlining with Value Fields**](https://dl.acm.org/doi/10.1145/3453483.3454034) +- Rodrigo Bruno, Vojin Jovanovic, Christian Wimmer, Gustavo Alonso +[**Compiler-Assisted Object Inlining with Value Fields**](https://dl.acm.org/doi/10.1145/3453483.3454034) In _Proceedings of the 42nd ACM SIGPLAN International Conference on Programming Language Design and Implementation (PLDI 2021)_ -- Raphael Mosaner, David Leopoldseder, Lukas Stadler, Hanspeter Moessenboeck [**Using Machine Learning to Predict the Code Size Impact of Duplication Heuristics in a Dynamic Compiler**](https://doi.org/10.1145/3475738.3480943) +- Raphael Mosaner, David Leopoldseder, Lukas Stadler, Hanspeter Moessenboeck +[**Using Machine Learning to Predict the Code Size Impact of Duplication Heuristics in a Dynamic Compiler**](https://doi.org/10.1145/3475738.3480943) In _Proceedings of the 18th ACM SIGPLAN International Conference on Managed Programming Languages and Runtimes (MPLR 2021)_ - Jacob Kreindl, Daniele Bonetta, Lukas Stadler, David Leopoldseder, Hanspeter Moessenboeck [**Low-Overhead Multi-Language Dynamic Taint Analysis through Speculative Optimization and Dynamic Compilation**](https://doi.org/10.1145/3475738.3480939) @@ -315,8 +359,8 @@ In _Proceedings of SPLASH Companion 2021_ - Lukas Makor [**Run-time data analysis in dynamic runtimes**](https://dl.acm.org/doi/10.1145/3484271.3484974) In _Proceedings of SPLASH Companion 2021_ - +- Hugo Guiroux, Jean-Pierre Lozi, Peterson Yuhala, Jämes Ménétrey, Pascal Felber, Valerio Schiavoni, Alain Tchana, Gaël Thomas [**Montsalvat: Intel SGX Shielding for GraalVM Native Images**](https://doi.org/10.1145/3464298.3493406) +In _Proceedings of MIDDLEWARE 2021 - 22nd ACM/IFIP International Conference 2021_ ### 2020 From d7cd709b94f0e23748d8b270fcd5abd45f87da0b Mon Sep 17 00:00:00 2001 From: Lesia Chaban Date: Mon, 12 Jun 2023 12:29:02 +0300 Subject: [PATCH 03/72] Update publications.md (cherry picked from commit 6e841cde32e80d2d8f75697fb00ab49eb9675665) --- docs/Publications.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/docs/Publications.md b/docs/Publications.md index 7cf377687d32..9f2cccf075f9 100644 --- a/docs/Publications.md +++ b/docs/Publications.md @@ -67,14 +67,10 @@ SPLASH 2012, October 19-26, Tucson, AZ - Daniele Bonetta, Lukas Stadler, David Leopoldseder, Hanspeter Moessenboeck, Jacob Kreindl [**TruffleTaint: Polyglot Dynamic Taint Analysis on GraalVM**](https://apexapps.oracle.com/pls/apex/f?p=94065:10:116444111260916:8758) -In _Proceedings of the 19th International Conference on Managed Programming Languages & Runtimes (MPLR'22)_ +In _Proceedings of the 19th International Conference on Managed Programming Languages and Runtimes (MPLR'22)_ ### 2021 -- Josef Haider, Benoit Daloze -[**Just-in-Time Compiling Ruby Regexps on TruffleRuby**](https://www.youtube.com/watch?v=JuVklIz1gts) -In _Proceedings of the VLDB Endowment RubyKaigi 2021_ - - David Justo, Shaoqing Yi, Lukas Stadler, Nadia Polikarpova, Arun Kumar [**Towards a polyglot framework for factorized ML**](https://dl.acm.org/doi/abs/10.14778/3476311.3476372) In _Proceedings of the VLDB Endowment 14, Issue 12 (VLDB 2021 Industry Track)_ @@ -320,11 +316,11 @@ In _Proceedings of the 18th Dynamic Languages Symposium (DLS) at SPLASH 2022_ - David Leopoldseder, Daniele Bonetta, Lukas Stadler, Hanspeter Moessenboeck, Lukas Makor, Sebastian Kloibhofer [**Automatic Array Transformation to Columnar Storage at Run Time**](https://doi.org/10.1145/3546918.3546919) -In _Proceedings of the 19th International Conference on Managed Programming Languages & Runtimes (MPLR'22)_ +In _Proceedings of the 19th International Conference on Managed Programming Languages and Runtimes (MPLR'22)_ - David Leopoldseder, Lukas Stadler, Hanspeter Moessenboeck, Raphael Mosaner, Wolfgang Kisling [**Machine-Learning-Based Self-Optimizing Compiler Heuristics**](https://doi.org/10.1145/3546918.3546921) -In _Proceedings of the 19th International Conference on Managed Programming Languages & Runtimes (MPLR'22)_ +In _Proceedings of the 19th International Conference on Managed Programming Languages and Runtimes (MPLR'22)_ - Matthias Neugschwandtner, Gergo Barany, Felix Berlakovich [**Constant Blinding on GraalVM**](https://dl.acm.org/doi/abs/10.1145/3517208.3523751) From 131623830a1f916720805f13e5d6f710730bfb8f Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 6 Jun 2023 12:36:27 +0300 Subject: [PATCH 04/72] Accentuate that tools are for GraalVM languages (cherry picked from commit ddb181a1f310e9e833180193a1da1d8f1ef2a9bb) --- docs/tools/tools.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/tools/tools.md b/docs/tools/tools.md index 0ffb2c618956..aaaf326d7250 100644 --- a/docs/tools/tools.md +++ b/docs/tools/tools.md @@ -1,14 +1,14 @@ --- layout: docs toc_group: tools -link_title: Debugging and Monitoring Tools +link_title: Tools for GraalVM Languages permalink: /tools/ redirect_from: /docs/tools/ --- -# GraalVM Debugging and Monitoring Tools +# Tools for GraalVM Languages -GraalVM provides a set of tools for developers to debug and monitor deployed applications, as well as the GraalVM platform itself. +Here you can find a set of tools for GraalVM languages, to debug and monitor deployed applications, as well as the GraalVM platform itself. Traditional tools may not be ready to diagnose polyglot applications. GraalVM tools, however, are implemented to inspect single or multi-language applications by debugging via numerous clients, profiling, statement counting, dynamic analysis, and much more. @@ -19,7 +19,6 @@ Learn more about each of the tools: * [GraalVM Insight](insight/README.md) * [Profiling Command Line Tools](profiling.md) * [Code Coverage Command Line Tool](code-coverage.md) -* [Ideal Graph Visualizer](ideal-graph-visualizer.md) * [Chrome Debugger](chrome-debugger.md) * [Language Server Protocol](lsp.md) * [Debug Adapter Protocol](dap.md) From f35a575f147518a72c89b63820793b2e299f2aca Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 6 Jun 2023 13:57:33 +0300 Subject: [PATCH 05/72] Refactor GraalVM Overview page for graalvm.org website (cherry picked from commit 1079748a2915d100a97941e89589234c9dec664e) --- docs/introduction.md | 124 +++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 81 deletions(-) diff --git a/docs/introduction.md b/docs/introduction.md index 31d4b9739992..8092b84d6cd9 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -1,106 +1,57 @@ --- layout: docs toc_group: docs -title: Architecture Overview +title: Overview permalink: /docs/introduction/ redirect_from: /$version/docs/introduction/ --- -# Introduction to GraalVM +# GraalVM Overview -GraalVM is a high-performance JDK distribution designed to accelerate Java applications using the advanced Graal compiler. -In addition to the standard just-in-time (JIT) setup on HotSpot, Graal can also be used as an ahead-of-time (AOT) compiler. -This enables a new execution mode that makes applications smaller, leaner, and more secure, without compromising run-time performance. -Moreover, GraalVM also provides runtimes for JavaScript, Python, and several other languages that can interoperate with Java and between each other. +GraalVM compiles your Java applications ahead of time into standalone binaries. These binaries are smaller, start up to 100x faster, provide peak performance with no warmup, and use less memory and CPU than applications running on a Java Virtual Machine (JVM). -Here you can find information about an architectural overview of GraalVM, its runtime modes, supported platforms, available distributions, core and additional functionalities, and support levels for various features. +GraalVM reduces the attack surface of your application. It excludes unused classes, methods and fields from the application binary. It restricts reflection and other dynamic Java language features to build time only. It does not load any unknown code at run time. -* [Architecture](#architecture) -* [Runtime Modes](#runtime-modes) -* [Available Distributions](#available-distributions) -* [Distribution Components List](#distribution-components-list) -* [Licensing and Support](#licensing-and-support) -* [Features Support](#features-support) -* [What to Read Next](#what-to-read-next) - -## Architecture - -![GraalVM architecture](/img/graalvm_architecture_community.png) - -GraalVM adds an [advanced just-in-time (JIT) optimizing compiler](https://github.com/oracle/graal/tree/master/compiler), which is written in Java, to the HotSpot Java Virtual Machine. - -GraalVM includes [Native Image](reference-manual/native-image/README.md): a technology to build Java code into a native binary for a specific operating system and architecture. - -In addition to running Java and JVM-based languages, [GraalVM's language implementation framework (Truffle)](../truffle/docs/README.md) makes it possible to run JavaScript, Ruby, Python, and a number of other popular languages on the JVM. -With Truffle, Java and other supported languages can directly interoperate with each other and pass data back and forth in the same memory space. - -## Runtime Modes +Popular microservices frameworks such as Spring Boot, Micronaut, Helidon, and Quarkus, and cloud platforms such as Oracle Cloud Infrastructure, Amazon Web Services, Google Cloud Platform, and Microsoft Azure all support GraalVM. -GraalVM is unique as a runtime environment offering several modes of operation: JVM runtime mode, Native Image, Java on Truffle (the same Java applications can be run on either). +With profile-guided optimization and the G1 (Garbage-First) garbage collector, you can get lower latency and on-par or better peak performance and throughput compared to applications running on a Java Virtual Machine (JVM). -#### JVM Runtime Mode -When running programs on the HotSpot JVM, GraalVM defaults to the [Graal compiler](reference-manual/java/compiler.md) as the top-tier JIT compiler. -At runtime, an application is loaded and executed normally on the JVM. -The JVM passes bytecodes for Java or any other JVM-native language to the compiler, which compiles that to the machine code and returns it to the JVM. -Interpreters for supported languages, written on top of the [Truffle framework](../truffle/docs/README.md), are themselves Java programs that run on the JVM. +You can use GraalVM just like any other Java Development Kit in your IDE. -#### Native Image -[Native Image](reference-manual/native-image/README.md) is an innovative technology that compiles Java code into a standalone native executable or a native shared library. -The Java bytecode that is processed during the build of a native executable includes all application classes, dependencies, third party dependent libraries, and any JDK classes that are required. -A generated self-contained native executable is specific to the operating system and machine architecture that does not require a JVM to run. - -#### Java on Truffle -[Java on Truffle](reference-manual/java-on-truffle/README.md) is an implementation of the Java Virtual Machine Specification, built with [Truffle](../truffle/docs/README.md). -It is a complete Java VM that includes all core components, implements the same API as the Java Runtime Environment library, and reuses all JARs and native libraries from GraalVM. +* [Available Distributions](#available-distributions) +* [Features Support](#features-support) +* [Licensing and Support](#licensing-and-support) +* [What to Read Next](#what-to-read-next) ## Available Distributions GraalVM is available as **Oracle GraalVM** and **GraalVM Community Edition**. Oracle GraalVM is based on Oracle JDK while GraalVM Community Edition is based on OpenJDK. -GraalVM is available for Linux and macOS on x64 and AArch64 architectures, and for Windows on the x64 architecture. -Depending on the platform, the distributions are shipped as *.tar.gz* or *.zip* archives. -See the [Getting Started guide](getting-started/graalvm-community/get-started-graalvm-community.md) for installation instructions. - -## Distribution Components List - -GraalVM consists of core and additional components. -The core components enable using GraalVM as a runtime platform for programs written in JVM-based languages or embeddable polyglot applications. - -### Core Components - -* Java HotSpot VM -* [Graal compiler](reference-manual/java/compiler.md) -- the top-tier JIT compiler -* [Native Image](reference-manual/native-image/README.md) -- a technology to compile a Java application ahead-of-time into a binary -* [GraalVM Updater](reference-manual/graalvm-updater.md) -- a utility to install additional functionalities -* Polyglot API – the APIs for combining programming languages in a shared runtime - -### Additional Components - -GraalVM core installation can be extended with more language runtimes and utilities. - -* [GraalWasm](reference-manual/wasm/README.md) -- WebAssembly (Wasm) -* [JavaScript](reference-manual/js/README.md) -- REPL with the JavaScript interpreter -* [Java on Truffle](reference-manual/java-on-truffle/README.md) -- a JVM implementation built upon [Truffle](../truffle/docs/README.md) to run Java via a Java bytecode interpreter -* [LLVM toolchain](reference-manual/llvm/README.md) -- a set of tools and APIs for compiling native programs to bitcode -* [LLVM](reference-manual/llvm/README.md) -- LLVM runtime with `lli` tool to directly execute programs from LLVM bitcode -* [Node.js](reference-manual/js/NodeJS.md) -- the Node.js runtime for JavaScript -* [Python](reference-manual/python/README.md) -- Python 3.8.x compatible runtime -* [Ruby](reference-manual/ruby/README.md) -- Ruby 3.x runtime - -## Licensing and Support - -GraalVM Community Edition is open-source software built from the sources available on [GitHub](https://github.com/oracle/graal) and distributed under [version 2 of the GNU General Public License with the “Classpath” Exception](https://github.com/oracle/graal/blob/master/LICENSE), which are the same terms as for Java. -Check the [licenses](https://github.com/oracle/graal#license) of individual GraalVM components which are generally derivative of the license of a particular language and may differ. -GraalVM Community Edition is free to use for any purpose and comes with no strings attached, but also no guarantees or support. +GraalVM is available for Linux and macOS on x64 and AArch64 architectures, and for Windows on the x64 architecture. +See the [installation guide](getting-started/graalvm-community/get-started-graalvm-community.md) for installation instructions. ## Features Support -GraalVM technologies are distributed as stable and experimental. +GraalVM technologies are distributed as supported and experimental. Experimental features are being considered for future versions of GraalVM and are not meant to be used in production. The development team welcomes feedback on experimental features, but users should be aware that experimental features might never be included in a final version, or might change significantly before being considered stable. +The following table lists fully supported and experimental features in Oracle GraalVM by platform. + +| Feature | Linux x64 | Linux AArch64 | macOS x64 | macOS AArch64 | Windows x64 | +|-----------------|---------------|---------------|---------------|---------------|---------------| +| Native Image | supported | supported | supported | supported | supported | +| LLVM runtime | supported | supported | supported | supported | experimental | +| LLVM toolchain | supported | supported | supported | supported | experimental | +| JavaScript | supported | supported | supported | supported | supported | +| Node.js | supported | supported | supported | supported | supported | +| Java on Truffle | supported | experimental | experimental | experimental | experimental | +| Python | experimental | experimental | experimental | experimental | not available | +| Ruby | experimental | experimental | experimental | experimental | not available | +| WebAssembly | experimental | experimental | experimental | experimental | experimental | + The following table lists stable and experimental features in GraalVM Community Edition by platform. | Feature | Linux AMD64 | Linux AArch64 | macOS AMD64 | macOS AArch64 | Windows AMD64 | @@ -115,13 +66,24 @@ The following table lists stable and experimental features in GraalVM Community | Ruby | experimental | experimental | experimental | experimental | not available | | WebAssembly | experimental | experimental | experimental | not available | experimental | +## Licensing and Support + +Oracle GraalVM is licensed under [Graal Free Terms and Conditions (GFTC) including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). +Oracle GraalVM is free to use on Oracle Cloud Infrastructure. For more information about Oracle GraalVM licensing, see the [Oracle Java SE Licensing FAQ](https://www.oracle.com/java/technologies/javase/jdk-faqs.html). + +GraalVM Community Edition is open-source software built from the sources available on [GitHub](https://github.com/oracle/graal) and distributed under [version 2 of the GNU General Public License with the “Classpath” Exception](https://github.com/oracle/graal/blob/master/LICENSE), which are the same terms as for Java. +Check the [licenses](https://github.com/oracle/graal#license) of individual GraalVM components which are generally derivative of the license of a particular language and may differ. +GraalVM Community Edition is free to use for any purpose and comes with no strings attached, but also no guarantees or support. + ## What to Read Next -Whether you are new to GraalVM or have little experience using it, continue to [Get Started with GraalVM](getting-started/graalvm-community/get-started-graalvm-community.md). -Install GraalVM on your local machine, try running the examples provided in the guide, or test GraalVM with your workload. -After that we suggest you to look at more complex [GraalVM Demos on GitHub](https://github.com/graalvm/graalvm-demos). +Start with installing GraalVM by following the [installation guide](getting-started/graalvm-community/get-started-graalvm-community.md). + +Whether you are new to GraalVM and Native Image or have little experience using it, continue to [Getting Started](reference-manual/native-image/README.md). + +After that we suggest you to take look at [User Guides](reference-manual/native-image/guides/guides.md). -Developers who have GraalVM already installed or have experience using, can skip the getting started guide and proceed to the [Reference Manuals](reference-manual/reference-manuals.md) for in-depth coverage of GraalVM technologies. +Developers who have experience using GraalVM and Native Image can proceed to the [Reference Manuals](reference-manual/reference-manuals.md) for in-depth coverage. To start coding with the GraalVM Polyglot APIs, check the [GraalVM SDK Java API Reference](http://www.graalvm.org/sdk/javadoc). From 69304e311a5cfce982af9ba6bb5387b3ad452a31 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 6 Jun 2023 17:29:11 +0300 Subject: [PATCH 06/72] Refactor overview and support docs for Oracle GraalVM at OHC (cherry picked from commit d38616ed726c7caffd53e1438216d0ba21ef8dff) --- .../architecture-overview.md | 83 ++++++------------- .../enterprise-overview/solutions-overview.md | 63 ++------------ docs/enterprise-overview/support.md | 18 ++-- docs/introduction.md | 35 ++++---- 4 files changed, 54 insertions(+), 145 deletions(-) diff --git a/docs/enterprise-overview/architecture-overview.md b/docs/enterprise-overview/architecture-overview.md index eea448b3536d..99167c4b5056 100644 --- a/docs/enterprise-overview/architecture-overview.md +++ b/docs/enterprise-overview/architecture-overview.md @@ -1,75 +1,40 @@ --- layout: ohc -permalink: /overview/architecture/ +permalink: /overview/ --- -# Oracle GraalVM Architecture Overview +# Oracle GraalVM -Oracle GraalVM is a high-performance JDK distribution designed to accelerate Java applications using the advanced Graal compiler. -In addition to the standard just-in-time (JIT) setup on HotSpot, Graal can also be used as an ahead-of-time (AOT) compiler. -This enables a new execution mode that makes applications smaller, leaner, and more secure, without compromising run-time performance. -Moreover, Oracle GraalVM also provides runtimes for JavaScript, Python, and several other languages that can interoperate with Java and between each other. +Oracle GraalVM compiles your Java applications ahead of time into standalone binaries. +These binaries are smaller, start up to 100x faster, provide peak performance with no warmup, and use less memory and CPU than applications running on a Java Virtual Machine (JVM). -Here you can find information about the architectural overview of Oracle GraalVM, runtime modes, certified platforms, available distributions, core and additional components, and support levels for various features. -The conceptual overview and advantages of Oracle GraalVM are described on the [Solutions Overview](solutions-overview.md) page. +GraalVM reduces the attack surface of your application. +It excludes unused classes, methods and fields from the application binary. +It restricts reflection and other dynamic Java language features to build time only. +It does not load any unknown code at run time. -* [Architecture](#graalvm-enterprise-architecture) -* [Runtime Modes](#runtime-modes) -* [Distribution Components List](#distribution-components-list) -* [What to Read Next](#what-to-read-next) +Popular microservices frameworks such as Spring Boot, Micronaut, Helidon, and Quarkus, and cloud platforms such as Oracle Cloud Infrastructure, Amazon Web Services, Google Cloud Platform, and Microsoft Azure all support GraalVM. -## Architecture +With profile-guided optimization and the G1 (Garbage-First) garbage collector, you can get lower latency and on-par or better peak performance and throughput compared to applications running on a Java Virtual Machine (JVM). -Oracle GraalVM adds an [advanced just-in-time (JIT) optimizing compiler](../reference-manual/java/compiler.md), which is written in Java, to the HotSpot Java Virtual Machine. +You can use the GraalVM JDK just like any other Java Development Kit in your IDE. -Oracle GraalVM includes [Native Image](../reference-manual/native-image/README.md): a technology that can compile Java applications into binaries for a specific operating system and architecture. +## Key Benefits -In addition to running Java and JVM-based languages, [Oracle GraalVM's language implementation framework (Truffle)](../../truffle/docs/README.md), makes it possible to run JavaScript, Ruby, Python, and a number of other popular languages on the JVM. -With Truffle, Java and other supported languages can directly interoperate with each other and pass data back and forth in the same memory space. +Oracle GraalVM's key benefits are: -## Runtime Modes +* **Low Resource Usage**: Java applications compiled ahead-of-time by GraalVM require less memory and CPU to run. No memory and CPU cycles are spent on just-in-time compilation. As a result, your applications need fewer resources to run and are cheaper to operate at scale. +* **Fast Startup**: With GraalVM, you can start your Java applications faster by initializing parts of the application at build time instead of run time, and instantly achieve predictable peak performance with no warmup. +* **Compact Packaging**: Java applications compiled ahead-of-time by GraalVM are small and can be easily packaged into lightweight container images for fast and efficient deployment. +* **Improved Security**: GraalVM reduces the attack surface of your Java application by excluding the following from the binary: unreachable code (unused classes, methods, and fields), the just-in-time compilation infrastructure, and build-time initialized code. GraalVM's closed world assumption prevents your application from loading unknown code by disabling dynamic features such as reflection, serialization, and so on at run time, and requires an explicit include list of such classes, methods, and fields at build time. GraalVM can embed a software bill of materials (SBOM) in your binary making it easier for you to use common security scanners to check your Java application binaries for published CVEs (Common Vulnerabilities and Exposures). +* **Easily Build Cloud Native Microservices**: Popular microservices frameworks such as Spring Boot, Micronaut, Helidon, and Quarkus, and cloud platforms such as Oracle Cloud Infrastructure (OCI), Amazon Web Services (AWS), Google Cloud Platform (GCP), and Microsoft Azure all support GraalVM. This makes it easy for you to build cloud native Java microservices, compiled as binaries, packaged in small containers, and run on cloud platforms - OCI, AWS, GCP and Azure. +* **Extend your Java Application with Python and Other Languages**: With GraalVM you can embed languages such as Python, JavaScript, and others to extend your Java application. +* **Use Existing Development and Monitoring Tools**: Your existing Java application development and monitoring tools work with GraalVM application binaries. GraalVM provides build plugins for Maven and Gradle, and GitHub Actions for CI/CD. GraalVM supports Java Flight Recorder (JFR), Java Management Extensions (JMX), heap dumps, VisualVM, and other monitoring tools. GraalVM works with existing Java editors/IDEs, and unit test frameworks such as JUnit. -Oracle GraalVM is unique as a runtime environment offering several modes of operation: JVM runtime mode, Native Image, Java on Truffle (the same Java application can be run on either). - -#### JVM Runtime Mode -When running programs on the HotSpot JVM, GraalVM defaults to the [Graal compiler](../reference-manual/java/compiler.md) as the last-tier JIT compiler. -At runtime, an application is loaded and executed normally on the JVM. -The JVM passes bytecodes for Java or any other JVM-native language to the compiler, which compiles that to the machine code and returns it to the JVM. -Interpreters for supported languages, written on top of the [Truffle framework](../../truffle/docs/README.md), are themselves Java programs that run on the JVM. - -#### Native Image -[Native Image](../reference-manual/native-image/README.md) is an innovative technology that compiles Java code into a standalone binary executable or a native shared library. -The Java bytecode that is processed when building a native executable includes all application classes, dependencies, third-party dependent libraries, and any JDK classes that are required. -A self-contained native executable is generated specifically for one operating system and machine architecture and no longer requires a JVM to run. - -#### Java on Truffle -[Java on Truffle](../reference-manual/java-on-truffle/README.md) is an implementation of the Java Virtual Machine Specification, built with the [Truffle framework](../../truffle/docs/README.md). -It is a complete Java VM that includes all core components, implements the same API as the Java Runtime Environment library, and reuses all JARs and native libraries from GraalVM. - -## Distribution Components List - -Oracle GraalVM consists of core and additional functionalities. - -### Core Components - -* Java HotSpot VM -* [Graal compiler](..reference-manual/java/compiler.md) -- the top-tier JIT compiler -* [Native Image](../reference-manual/native-image/README.md) -- a technology to compile a Java application ahead-of-time into a binary -* [GraalVM Updater](../reference-manual/graalvm-updater.md) -- a utility to install additional features -* Polyglot API – the APIs for combining programming languages in a shared runtime - -### Additional Functionalities - -Oracle GraalVM JDK installation can be extended with more language runtimes and utilities. - -* [JavaScript](../reference-manual/js/README.md) -- REPL with the JavaScript interpreter -* [Java on Truffle](../reference-manual/java-on-truffle/README.md) -- a JVM implementation built upon the [Truffle framework](../../truffle/docs/README.md) to run Java via a Java bytecode interpreter -* [LLVM toolchain](../reference-manual/llvm/README.md) -- a set of tools and APIs for compiling native programs to bitcode -* [LLVM](../reference-manual/llvm/README.md) -- LLVM runtime with `lli` tool to directly execute programs from LLVM bitcode -* [Node.js](../../reference-manual/js/NodeJS.md) -- the Node.js 16.14.2 runtime for JavaScript ## What to Read Next -Users who are new to Oracle GraalVM or have little experience using it, continue to [Getting Started with Oracle GraalVM](../getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md). -Download and install Oracle GraalVM on your local machine, try running the examples provided in the guide, or test Oracle GraalVM with your workload. +Start with installing Oracle GraalVM by following the [installation guide](../getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md). + +Whether you are new to Oracle GraalVM and Native Image or have little experience using it, continue to [Getting Started](../reference-manual/native-image/README.md). -Developers, who have Oracle GraalVM already installed or have experience using it in the past, can skip the getting started guide and proceed to the [Reference Manuals](../reference-manual/reference-manuals.md) for in-depth coverage of Oracle GraalVM technologies. +Developers, who have Oracle GraalVM already installed or have experience using it in the past, can proceed to the [Reference Manuals](../reference-manual/reference-manuals.md) for in-depth coverage. diff --git a/docs/enterprise-overview/solutions-overview.md b/docs/enterprise-overview/solutions-overview.md index 11c2da748e1b..b30d6e2b4aae 100644 --- a/docs/enterprise-overview/solutions-overview.md +++ b/docs/enterprise-overview/solutions-overview.md @@ -1,6 +1,6 @@ --- layout: ohc -permalink: /overview/ +permalink: /solutions-overview/ --- # Oracle GraalVM @@ -15,7 +15,7 @@ innovative approaches to running a business either on premises or on the cloud. Speed, dexterity, and leanness are key, then, to commanding the modern online marketplace. -## Faster, Leaner Applications +## Faster, Smaller, Leaner Applications Oracle GraalVM is a foundation for innovation and improvement for both large enterprise applications and microservices alike. @@ -30,59 +30,8 @@ additional hardware. Thus Oracle GraalVM's reduction of required compute resources can lower capital cost expenditures on premise and lower operation costs on cloud. -GraalVM's key advantages: -* Innovative compiler -* Native Image technology -* Language interoperability -* Built on Oracle Java SE -* Trusted Oracle support and updates +## Trusted Oracle Support and Updates -### Innovative Compiler -GraalVM’s just-in-time (JIT) compiler accelerates the performance of any Java -or JVM-based application - out of the box and without any code changes. - -Across the board, applications running on Oracle GraalVM exhibit lower -latency. Request response times are reduced. Applications run faster, freeing up -CPU and memory sooner, allowing them to handle other requests or other -applications running on the same server. - -### Native Image Technology -Oracle GraalVM also incorporates its optimizing compiler into an -advanced ahead-of-time (AOT) compilation technology: Native Image. The industry-leading native -image builder translates Java and JVM-based applications into native platform -executables that enjoy incredibly fast startup times since the program initialization -is done at build time so, when tasked, the application is already compiled. - -Utilizing Native Image, Java applications consume a fraction of the resources -they would if running on a JVM, making Oracle GraalVM ideal for cloud -deployments large and small. - -### Language Interoperability -Oracle GraalVM breaks the barriers between programming languages. - -Java is the most popular language for building enterprise applications but -JavaScript, Python, Ruby, R, and other programming languages have carved out niches -in specific areas, e.g., machine learning. Many have accompanying libraries that provide -unique and valuable features. Hence, developers often use different languages -for specialized applications. - -Oracle GraalVM provides high-performance runtime support for a number of -languages beyond Java, allowing different languages and -libraries to interoperate with no performance penalty. This improves developer -productivity by letting them use the right language or library for a given task. - -Key to Oracle GraalVM’s polyglot support is language compliance. For each of -the supported languages, Oracle GraalVM strictly adheres to the -specification for each language and runs their compliance test suites to ensure -compatibility. - -Oracle GraalVM also tracks changes through Oracle’s participation in a -number of standards bodies like Ecma International. GraalVM innovations are in -turn influencing specifications, like the recent announcement of the OpenJDK’s -Project Leyden, which seeks to provide a standard specification for Java binary -executables pioneered by the Native Image technology. - -### Trusted Oracle Support and Updates Oracle GraalVM customers take advantage of 24/7 access to the experienced Oracle GraalVM support team who work closely with the Oracle Java support team. @@ -90,9 +39,9 @@ Oracle GraalVM releases include all Oracle Java critical patch updates (CPUs) which are released on a regular schedule to remedy defects and known vulnerabilities. -### Get Started with Oracle GraalVM +### Summary -[Get started with Oracle GraalVM](../getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md) and: +Start using Oracle GraalVM and: * reduce IT and storage costs * provide customers with quicker response time * employ fewer resources, freeing up CPU @@ -101,4 +50,4 @@ vulnerabilities. * receive regularly scheduled updates * rest assured with the security and stability of Java -Test Oracle GraalVM with your workload and see for yourself the advantages it brings. +Test Oracle GraalVM with your workload and see for yourself the advantages it brings. \ No newline at end of file diff --git a/docs/enterprise-overview/support.md b/docs/enterprise-overview/support.md index 86b74f28eed3..8922c876f460 100644 --- a/docs/enterprise-overview/support.md +++ b/docs/enterprise-overview/support.md @@ -3,7 +3,7 @@ layout: ohc permalink: /support/ --- -## Support +# Support ## Available Distributions @@ -11,7 +11,6 @@ Oracle GraalVM distributions are based on Oracle JDK 17 and Oracle JDK 20. Oracle GraalVM releases include all Oracle Java critical patch updates (CPUs), which are released on a regular schedule to remedy defects and known vulnerabilities. Oracle GraalVM is available for Linux, macOS, and Windows platforms on x64 systems, for Linux and macOS on AArch64 architecture. -Depending on the platform, the distributions are shipped as *.tar.gz* or *.zip* archives. ## Certified Platforms @@ -19,12 +18,12 @@ The following are the certified platforms for Oracle GraalVM: | Operating System | Version | Architecture | Installation Guide | |------------------------------------ |-------------- |-------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Oracle Linux | 7, 8 | x64, AArch64| [Installation Guide for Linux](../getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md) | +| Oracle Linux | 7, 8 | x64, AArch64| [Installation Guide for Oracle Linux](../getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md) | | Red Hat Enterprise Linux(RHEL) | 7, 8 | x64 | [Installation Guide for Linux](../getting-started/graalvm-enterprise/installation-linux.md) | | macOS | 10.14 (Mojave), 10.15 (Catalina), 11 (Big Sur), 12.4 (Monterey), 13.2 (Ventura) | x64, AArch64 | [Installation Guide for macOS](../getting-started/graalvm-enterprise/installation-macos.md) | | Microsoft Windows | Server 2016, 2019 | x64 | [Installation Guide for Windows](../getting-started/graalvm-enterprise/installation-windows.md) | -## Experimental Features +## Features Support Oracle GraalVM features are distributed as fully supported and experimental. @@ -32,7 +31,8 @@ Experimental features are being considered for future versions of Oracle GraalVM They are not meant to be used in production and are not supported by Oracle. The development team welcomes feedback on experimental features, but users should be aware that experimental features might never be included in a final version, or might change significantly before being considered production-ready. -For more information, check the [Oracle Technology Network License Agreement for GraalVM Enterprise Edition](https://www.oracle.com/downloads/licenses/graalvm-otn-license.html). +For more information, check the [Graal Free Terms and Conditions (GFTC) including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). + The following table lists supported and experimental features in Oracle GraalVM by platform. @@ -50,9 +50,11 @@ The following table lists supported and experimental features in Oracle GraalVM ## Licensing and Support -Oracle GraalVM is licensed under the [Oracle Technology Network License Agreement for GraalVM Enterprise Edition](https://www.oracle.com/downloads/licenses/graalvm-otn-license.html) for developing, testing, prototyping, and demonstrating Your application. +Oracle GraalVM is licensed under [Graal Free Terms and Conditions (GFTC) including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). + +Oracle GraalVM is free to use on Oracle Cloud Infrastructure. -For production use, Oracle GraalVM is available as part of the [Oracle Java SE Subscription](https://www.oracle.com/uk/java/java-se-subscription/) which includes 24x7x365 [Oracle premier support](https://www.oracle.com/support/premier/) and access to [My Oracle Support (MOS)](https://www.oracle.com/support/). +For production use, Oracle GraalVM is available as part of the [Oracle Java SE Subscription](https://www.oracle.com/uk/java/java-se-subscription/) which includes 24x7x365 [Oracle premier support](https://www.oracle.com/support/premier/) and access to [My Oracle Support (MOS)](https://www.oracle.com/support/). For more information about Oracle GraalVM licensing, see the [Oracle Java SE Licensing FAQ](https://www.oracle.com/java/technologies/javase/jdk-faqs.html). Oracle GraalVM focuses on support for Java LTS releases for production deployments. -See the [release calendar](../../release-notes/enterprise/graalvm-ee-release-calendar.md) for more information. +See the [release calendar](../../release-notes/enterprise/oracle-graalvm-release-calendar.md) for more information. diff --git a/docs/introduction.md b/docs/introduction.md index 8092b84d6cd9..8832f26356e8 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -8,15 +8,19 @@ redirect_from: /$version/docs/introduction/ # GraalVM Overview -GraalVM compiles your Java applications ahead of time into standalone binaries. These binaries are smaller, start up to 100x faster, provide peak performance with no warmup, and use less memory and CPU than applications running on a Java Virtual Machine (JVM). +GraalVM compiles your Java applications ahead of time into standalone binaries. +These binaries are smaller, start up to 100x faster, provide peak performance with no warmup, and use less memory and CPU than applications running on a Java Virtual Machine (JVM). -GraalVM reduces the attack surface of your application. It excludes unused classes, methods and fields from the application binary. It restricts reflection and other dynamic Java language features to build time only. It does not load any unknown code at run time. +GraalVM reduces the attack surface of your application. +It excludes unused classes, methods, and fields from the application binary. +It restricts reflection and other dynamic Java language features to build time only. +It does not load any unknown code at run time. Popular microservices frameworks such as Spring Boot, Micronaut, Helidon, and Quarkus, and cloud platforms such as Oracle Cloud Infrastructure, Amazon Web Services, Google Cloud Platform, and Microsoft Azure all support GraalVM. With profile-guided optimization and the G1 (Garbage-First) garbage collector, you can get lower latency and on-par or better peak performance and throughput compared to applications running on a Java Virtual Machine (JVM). -You can use GraalVM just like any other Java Development Kit in your IDE. +You can use the GraalVM JDK just like any other Java Development Kit in your IDE. * [Available Distributions](#available-distributions) * [Features Support](#features-support) @@ -38,20 +42,6 @@ GraalVM technologies are distributed as supported and experimental. Experimental features are being considered for future versions of GraalVM and are not meant to be used in production. The development team welcomes feedback on experimental features, but users should be aware that experimental features might never be included in a final version, or might change significantly before being considered stable. -The following table lists fully supported and experimental features in Oracle GraalVM by platform. - -| Feature | Linux x64 | Linux AArch64 | macOS x64 | macOS AArch64 | Windows x64 | -|-----------------|---------------|---------------|---------------|---------------|---------------| -| Native Image | supported | supported | supported | supported | supported | -| LLVM runtime | supported | supported | supported | supported | experimental | -| LLVM toolchain | supported | supported | supported | supported | experimental | -| JavaScript | supported | supported | supported | supported | supported | -| Node.js | supported | supported | supported | supported | supported | -| Java on Truffle | supported | experimental | experimental | experimental | experimental | -| Python | experimental | experimental | experimental | experimental | not available | -| Ruby | experimental | experimental | experimental | experimental | not available | -| WebAssembly | experimental | experimental | experimental | experimental | experimental | - The following table lists stable and experimental features in GraalVM Community Edition by platform. | Feature | Linux AMD64 | Linux AArch64 | macOS AMD64 | macOS AArch64 | Windows AMD64 | @@ -66,12 +56,15 @@ The following table lists stable and experimental features in GraalVM Community | Ruby | experimental | experimental | experimental | experimental | not available | | WebAssembly | experimental | experimental | experimental | not available | experimental | + +For Oracle GraalVM, check the features support list [here](enterprise-overview/support.md#features-support). + ## Licensing and Support Oracle GraalVM is licensed under [Graal Free Terms and Conditions (GFTC) including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). Oracle GraalVM is free to use on Oracle Cloud Infrastructure. For more information about Oracle GraalVM licensing, see the [Oracle Java SE Licensing FAQ](https://www.oracle.com/java/technologies/javase/jdk-faqs.html). -GraalVM Community Edition is open-source software built from the sources available on [GitHub](https://github.com/oracle/graal) and distributed under [version 2 of the GNU General Public License with the “Classpath” Exception](https://github.com/oracle/graal/blob/master/LICENSE), which are the same terms as for Java. +GraalVM Community Edition is open-source software built from the sources available on [GitHub](https://github.com/oracle/graal) and distributed under [version 2 of the GNU General Public License with the “Classpath” Exception](https://github.com/oracle/graal/blob/master/LICENSE), which are the same terms as for Java. Check the [licenses](https://github.com/oracle/graal#license) of individual GraalVM components which are generally derivative of the license of a particular language and may differ. GraalVM Community Edition is free to use for any purpose and comes with no strings attached, but also no guarantees or support. @@ -79,12 +72,12 @@ GraalVM Community Edition is free to use for any purpose and comes with no strin Start with installing GraalVM by following the [installation guide](getting-started/graalvm-community/get-started-graalvm-community.md). -Whether you are new to GraalVM and Native Image or have little experience using it, continue to [Getting Started](reference-manual/native-image/README.md). +Whether you are new to GraalVM Native Image or have little experience using it, continue to [Getting Started](reference-manual/native-image/README.md). After that we suggest you to take look at [User Guides](reference-manual/native-image/guides/guides.md). Developers who have experience using GraalVM and Native Image can proceed to the [Reference Manuals](reference-manual/reference-manuals.md) for in-depth coverage. -To start coding with the GraalVM Polyglot APIs, check the [GraalVM SDK Java API Reference](http://www.graalvm.org/sdk/javadoc). +To start coding with GraalVM APIs, check the [GraalVM SDK Java API Reference](http://www.graalvm.org/sdk/javadoc). -If you cannot find the answer you need in the available documentation or have a troubleshooting query, you can ask for help in a [slack channel](/slack-invitation/) or [submit a GitHub issue](https://github.com/oracle/graal/issues). +If you cannot find the answer you need in the available documentation or have a troubleshooting query, you can ask for help in a [Slack channel](/slack-invitation/) or [submit a GitHub issue](https://github.com/oracle/graal/issues). From fdc7497ea32a6def178136b4486ee013b2a30e97 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 6 Jun 2023 22:33:06 +0300 Subject: [PATCH 07/72] Refactor GraalVM installation guides for graalvm.org website (cherry picked from commit 1c1b7337973ef30fd5deb174d7f824db872ce468) --- .../graalvm-ce-container-images.md | 2 +- .../get-started-graalvm-community.md | 290 ++---------------- .../graalvm-community/linux.md | 31 +- .../graalvm-community/macos.md | 35 +-- .../graalvm-community/windows.md | 15 +- 5 files changed, 45 insertions(+), 328 deletions(-) diff --git a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md index e116038fb338..19af65b6d69e 100644 --- a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md +++ b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md @@ -87,4 +87,4 @@ Version: truffleruby 22.3.1, like ruby 3.0.3, GraalVM CE Native [x86_64-darwin] Check what other configuration types of container images are available [here](https://github.com/graalvm/container). -If you look for Oracle GraalVM container images, they are published in the [Oracle Container Registry](https://container-registry.oracle.com/ords/f?p=113:10::::::). See [here](https://docs.oracle.com/en/graalvm/enterprise/22/docs/getting-started/container-images/) to learn more. \ No newline at end of file +If you look for Oracle GraalVM container images, they are published in the [Oracle Container Registry](https://container-registry.oracle.com/ords/f?p=113:10::::::). \ No newline at end of file diff --git a/docs/getting-started/graalvm-community/get-started-graalvm-community.md b/docs/getting-started/graalvm-community/get-started-graalvm-community.md index d7773f8c26d8..434a05587b6d 100644 --- a/docs/getting-started/graalvm-community/get-started-graalvm-community.md +++ b/docs/getting-started/graalvm-community/get-started-graalvm-community.md @@ -1,21 +1,20 @@ --- layout: docs toc_group: getting-started -link_title: Getting Started -permalink: /docs/getting-started/ +link_title: GraalVM Installation +permalink: /docs/installation/ +redirect_from: /docs/getting-started/ --- -# Get Started with GraalVM +# GraalVM Installation -Get started with GraalVM -- a high-performance JDK designed to accelerate Java application performance while consuming fewer resources. -Here you will find information about installing GraalVM Community Edition, running basic applications with it, and adding support for accompanying features. -Further, you will learn about the polyglot capabilities of GraalVM and see how to build platform-specific native executables of Java applications. +GraalVM compiles your Java applications ahead of time into standalone binaries that start instantly, provide peak performance with no warmup, and use fewer resources. -If you are new to GraalVM, we recommend starting with the [introduction to GraalVM](../../introduction.md), where you will find information about GraalVM's architecture, distributions available, supported platforms, core and additional features, and much more. +Here you will find information about installing GraalVM and running basic applications with it. -If you have GraalVM already installed and have experience using it, you can skip this getting started guide and proceed to the in-depth [Reference Manuals](../../reference-manual/reference-manuals.md). +If you are new to GraalVM, we recommend starting with the [introduction to GraalVM](../../introduction.md), where you will find information about GraalVM's benefits, distributions available, supported platforms, features support, and licensing. -## Install GraalVM +If you have GraalVM already installed and have experience using it, you can skip this page and proceed to the in-depth [reference manuals](../../reference-manual/reference-manuals.md). Choose your operating system and proceed to the installation steps for your specific platform: @@ -26,13 +25,8 @@ Choose your operating system and proceed to the installation steps for your spec ## Start Running Applications -The core distribution of GraalVM includes the JDK, the Graal compiler, and Native Image. -Having installed GraalVM, you can already run any Java application unmodified. - -Other features can be installed on request, using **gu**&emdash;the GraalVM Updater tool to install additional language runtimes and utilities. -Further below you will find information on how to add other optionally available language runtimes including JavaScript and Node.js. - -### Java +The core distribution of GraalVM includes the Java Development Kit (JDK), the just-in-time compiler (the Graal compiler), Native Image, and others. +You can use the GraalVM JDK just like any other JDK in your IDE, so having installed GraalVM, you can run any Java application unmodified. The `java` launcher runs the JVM with Graal as the last-tier compiler. Check the installed Java version: @@ -40,7 +34,9 @@ Check the installed Java version: $JAVA_HOME/bin/java -version ``` -Take a look at this typical `HelloWorld` class: +Using [GraalVM Native Image](../../reference-manual/native-image/README.md) you can compile Java bytecode into a platform-specific, self-contained native executable to achieve faster startup and a smaller footprint for your application. + +Compile this simplest _HelloWorld.java_ application to bytecode and then build a native executable: ```java public class HelloWorld { public static void main(String[] args) { @@ -49,35 +45,10 @@ public class HelloWorld { } ``` -Run the following commands to compile this class to bytecode and then run it: ```shell javac HelloWorld.java -java HelloWorld -Hello World! ``` - -You can find many larger Java examples in [GraalVM Demos on GitHub](https://github.com/graalvm/graalvm-demos). -For more information on the Graal compiler, see the [compiler documentation](../../reference-manual/java/compiler.md). -For more extensive documentation on running Java, check [this reference documentation](../../reference-manual/java/README.md). - -### Native Image - -With [Native Image](../../reference-manual/native-image/README.md) you can compile Java bytecode into a platform-specific, self-contained native executable to achieve faster startup and a smaller footprint for your application. - -The `HelloWorld` example from above is used here to demonstrate how to generate a native executable: -```java -public class HelloWorld { - public static void main(String[] args) { - System.out.println("Hello, World!"); - } -} -``` - -> Note: For compilation `native-image` depends on the local toolchain. Make sure your system meets the [prerequisites](../../reference-manual/native-image/README.md#prerequisites). - -Compile _HelloWorld.java_ to bytecode and then build a native executable: ```shell -javac HelloWorld.java native-image HelloWorld ``` @@ -88,237 +59,24 @@ Invoking it runs the natively compiled code of the `HelloWorld` class as follows Hello, World! ``` -Learn more in the [Native Image reference manuals and user guides](../../reference-manual/native-image/README.md). - -### JavaScript and Node.js - -GraalVM supports running JavaScript applications. -The JavaScript runtime is optionally available and can be installed with this command: -```shell -gu install js -``` - -It installs the `js` launcher in the `$JAVA_HOME/bin` directory. -With the JavaScript runtime installed, you can run plain JavaScript code, both in REPL mode and by running script files directly: -```shell -$JAVA_HOME/bin/js -> 1 + 2 -3 -``` - -GraalVM also supports running Node.js applications. -The Node.js runtime is not installed by default, but can be easily added with this command: -```shell -gu install nodejs -``` - -Both `node` and `npm` launchers then become available in the `$JAVA_HOME/bin` directory. - -```shell -$JAVA_HOME/bin/node -v -$JAVA_HOME/bin/npm show version -``` - -More than 100,000 npm packages are regularly tested and are compatible with Oracle GraalVM, including modules such as express, react, async, request, browserify, grunt, mocha, and underscore. -To install a Node.js module, use the `npm` executable from the _$JAVA_HOME/bin_ directory, which is installed together with `node`. -The `npm` command is equivalent to the default Node.js command and supports all Node.js APIs. - -Install the modules `colors`, `ansispan`, and `express` using `npm install`. -After the modules are installed, you can use them from your application. -```shell -$JAVA_HOME/bin/npm install colors ansispan express -``` - -Copy the following code snippet and save it as a file named _app.js_ in the same directory where you installed the Node.js modules: -```js -const http = require("http"); -const span = require("ansispan"); -require("colors"); - -http.createServer(function (request, response) { - response.writeHead(200, {"Content-Type": "text/html"}); - response.end(span("Hello Graal.js!".green)); -}).listen(8000, function() { console.log("Graal.js server running at http://127.0.0.1:8000/".red); }); - -setTimeout(function() { console.log("DONE!"); process.exit(); }, 2000); -``` - -Run _app.js_ on GraalVM using the `node` command: -```shell -$JAVA_HOME/bin/node app.js -``` - -For more detailed documentation and information on compatibility with Node.js, proceed to [JavaScript and Node.js](../../reference-manual/js/README.md). - -### Python - -With GraalVM you can run Python applications in the Python 3 runtime environment. -The support is not available by default, but you can quickly add it to GraalVM with this command: -```shell -gu install python -``` - -It installs the `graalpy` launcher. Check the version, and you can already run Python programs: -```shell -$JAVA_HOME/bin/graalpy --version -``` - -```shell -$JAVA_HOME/bin/graalpy -... ->>> 1 + 2 -3 ->>> exit() -``` - -More examples and additional information on Python support in GraalVM can be found in the [Python reference manual](../../reference-manual/python/README.md). - -### Ruby - -GraalVM provides a high-performance Ruby runtime environment including the `gem` command that allows you to interact with RubyGems, Ruby Bundler, and much more. -The Ruby runtime is not available by default in GraalVM, but can be easily added with this command: -```shell -gu install ruby -``` - -Once it is installed, Ruby launchers like `ruby`, `gem`, `irb`, `rake`, `rdoc`, and `ri` become available to run Ruby programs: -```shell -$JAVA_HOME/bin/ruby [options] program.rb -``` - -GraalVM runtime for Ruby uses the [same options as the standard implementation of Ruby](../../reference-manual/ruby/options.md), with some additions. -For example: -```shell -gem install chunky_png -$JAVA_HOME/bin/ruby -r chunky_png -e "puts ChunkyPNG::Color.to_hex(ChunkyPNG::Color('mintcream @ 0.5'))" -#f5fffa80 -``` - -More examples and in-depth documentation can be found in the [Ruby reference manual](../../reference-manual/ruby/README.md). - -### R (FastR) - -GraalVM provides a GNU-compatible environment to run R programs directly or in the REPL mode. -Although the R language support is not available by default, you can add it to GraalVM with this command: -```shell -gu install R -``` - -When the language is installed, you can execute R scripts and use the R REPL: -```shell -$JAVA_HOME/bin/R -... - -> 1 + 1 -[1] 2 -``` - -More examples and in-depth documentation can be found in the [R reference manual](../../reference-manual/r/README.md). - -### WebAssembly - -With GraalVM you can run programs compiled to WebAssembly. -The support is not available by default, but you can add it to GraalVM with this command: -```shell -gu install wasm -``` -Then the `wasm` launcher, that can run compiled WebAssembly binary code, becomes available. - -For example, put the following C program in a file named _floyd.c_: -```c -#include - -int main() { - int number = 1; - int rows = 10; - for (int i = 1; i <= rows; i++) { - for (int j = 1; j <= i; j++) { - printf("%d ", number); - ++number; - } - printf(".\n"); - } - return 0; -} -``` - -Compile it using the most recent [Emscripten compiler frontend](https://emscripten.org/docs/tools_reference/emcc.html) version. It should produce a standalone _floyd.wasm_ file in the current working directory: -```shell -emcc -o floyd.wasm floyd.c -``` - -Then you can run the compiled WebAssembly binary on GraalVM as follows: -```shell -$JAVA_HOME/bin/wasm --Builtins=wasi_snapshot_preview1 floyd.wasm -``` - -More details can be found in the [WebAssembly reference manual](../../reference-manual/wasm/README.md). - -### LLVM Languages - -The GraalVM LLVM runtime can execute C/C++, Rust, and other programming languages that can be compiled to LLVM bitcode. - -The LLVM runtime is optionally available and can be installed with this command: -```shell -$JAVA_HOME/bin/gu install llvm -``` - -It installs the GraalVM implementation of `lli` in the `$JAVA_HOME/bin` directory. -Check the version upon the installation: - -```shell -$JAVA_HOME/bin/lli --version -``` - -With the LLVM runtime installed, you can execute programs in LLVM bitcode format on GraalVM. -To compile a native program to LLVM bitcode, you use some LLVM frontend, for example `clang`. - -Besides the LLVM runtime, GraalVM also provides the LLVM frontend (toolchain) that you can set up as follows: - -```shell -gu install llvm-toolchain -export LLVM_TOOLCHAIN=$(lli --print-toolchain-path) -``` - -Then the C/C++ code can be compiled to LLVM bitcode using `clang` shipped with GraalVM. -For example, put this C code into a file named `hello.c`: -```c -#include - -int main() { - printf("Hello from GraalVM!\n"); - return 0; -} -``` - -Compile `hello.c` to an executable `hello` with embedded LLVM bitcode and run it: -```shell -$LLVM_TOOLCHAIN/clang hello.c -o hello -lli hello -``` - -For in-depth documentation about the GraalVM LLVM runtime, go to [LLVM languages](../../reference-manual/llvm/README.md). - -## Combine Languages - -GraalVM allows you to call one programming language into another and exchange data between them. -To enable interoperability, GraalVM provides the `--polyglot` flag. +> Note: For compilation `native-image` depends on the local toolchain. Make sure your system meets the [prerequisites](../../reference-manual/native-image/README.md#prerequisites). -For example, running `js --jvm --polyglot example.js` executes `example.js` in a polyglot context. -If the program calls any code in other supported languages, GraalVM executes that code in the same runtime as the `example.js` application. -For more information on running polyglot applications, see [Polyglot Programming](../../reference-manual/polyglot-programming.md). +Larger Java examples can be found in the [GraalVM Demos repository on GitHub](https://github.com/graalvm/graalvm-demos). ## What to Read Next ### New Users -Since this guide is intended mainly for users new to GraalVM, or users who are familiar with GraalVM but may have little experience using it, please consider investigating more complex [Example Applications](https://github.com/graalvm/graalvm-demos). -We also recommend checking our [GraalVM Team Blog](https://medium.com/graalvm). + +Continue to [Native Image basics](../../reference-manual/native-image/NativeImageBasics.md) to gradually educate yourself about the technology. +For users who are familiar with GraalVM Native Image but may have little experience using it, proceed to [User Guides](../../reference-manual/native-image/guides/guides.md). + +For more information on the Graal compiler, see the [compiler documentation](../../reference-manual/java/compiler.md). +Larger Java examples can be found in the [GraalVM Demos repository on GitHub](https://github.com/graalvm/graalvm-demos). ### Advanced Users -If you are mostly interested in GraalVM support for a specific language, or want more in-depth details about GraalVM's diverse technologies, proceed to [Reference Manuals](../../reference-manual/reference-manuals.md). -If you are looking for the tooling support GraalVM offers, proceed to [Debugging and Monitoring Tools](../../tools/tools.md). +Developers who are more experienced with GraalVM or want to do more with GraalVM can proceed directly to [Reference Manuals](../../reference-manual/reference-manuals.md) for in-depth documentation. -If you are considering GraalVM as a platform for your future language or tool implementation, go to [GraalVM as a Platform](../../../truffle/docs/README.md). +You can find information on GraalVM's security model in the [Security Guide](../../security/security-guide.md), and rich API documentation in the [GraalVM SDK Javadoc](https://www.graalvm.org/sdk/javadoc/) and [Truffle Javadoc](https://www.graalvm.org/truffle/javadoc/). -You can find information on GraalVM's security model in the [Security Guide](../../security/security-guide.md), and rich API documentation in [GraalVM SDK Javadoc](https://www.graalvm.org/sdk/javadoc/) and [Truffle Javadoc](https://www.graalvm.org/truffle/javadoc/). +We also recommend checking our [GraalVM Team Blog](https://medium.com/graalvm). \ No newline at end of file diff --git a/docs/getting-started/graalvm-community/linux.md b/docs/getting-started/graalvm-community/linux.md index 13d20e195435..b46ec69b2784 100644 --- a/docs/getting-started/graalvm-community/linux.md +++ b/docs/getting-started/graalvm-community/linux.md @@ -7,19 +7,20 @@ permalink: /docs/getting-started/linux/ ## Installation on Linux Platforms -GraalVM Community Edition is available for Linux on x64 and AArch64 architectures. +GraalVM is available for Linux on x64 and AArch64 architectures. -You can install GraalVM Community on Linux from an archive (_.tar.gz_) for the current user into any location, without affecting other JDK installations. +You can install GraalVM on Linux from an archive (_.tar.gz_) for the current user into any location, without affecting other JDK installations. -Follow these steps to install GraalVM Community Edition on the Linux operating system. +Follow these steps to install GraalVM: -1. Navigate to the [GraalVM Releases repository on GitHub](https://github.com/graalvm/graalvm-ce-builds/releases). Select **17** or **19** for the Java version, **Linux** for the operating system, **x64** or **aarch64** for the architecture, and download. +1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **Linux** for the operating system, **x64** or **aarch64** for the architecture, and download. It will download Oracle GraalVM. +To download GraalVM Community Edition, go to the [GraalVM Releases repository on GitHub](https://github.com/graalvm/graalvm-ce-builds/releases). 2. Change directory to the location where you want to install GraalVM, then move the _.tar.gz_ file to that directory. 3. Unzip the archive: ```shell - tar -xzf graalvm-ce-java-linux--.tar.gz + tar -xzf graalvm-ce-jdk-_linux-.tar.gz ``` 4. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment: - Point the `PATH` environment variable to the GraalVM _bin_ directory: @@ -32,22 +33,4 @@ Follow these steps to install GraalVM Community Edition on the Linux operating s ``` 5. To check whether the installation was successful, run the `java -version` command. -Optionally, you can specify GraalVM as the default JRE or JDK installation in your Java IDE. - -## Supported Functionalities - -The base distribution of GraalVM Community Edition for Linux platforms includes the JDK, the Graal compiler, and Native Image. -The base installation can be additionally extended with language runtimes: - -Language runtimes: -* [Java on Truffle](../../reference-manual/java-on-truffle/README.md) -* [JavaScript](../../reference-manual/js/README.md) -* [Node.js](../../reference-manual/js/NodeJS.md) -* [LLVM](../../reference-manual/llvm/README.md) -* [Python](../../reference-manual/python/README.md) -* [Ruby](../../reference-manual/ruby/README.md) -* [R](/../../reference-manual/r/README.md) -* [Wasm](../../reference-manual/wasm/README.md) - -To assist you with installation, GraalVM includes **GraalVM Updater**, a command line utility to install and manage additional functionalities. -Proceed to the [installation steps](../../reference-manual/graalvm-updater.md#component-installation) to add any necessary language runtime or utility to GraalVM. +Optionally, you can specify GraalVM as the default JRE or JDK installation in your Java IDE. \ No newline at end of file diff --git a/docs/getting-started/graalvm-community/macos.md b/docs/getting-started/graalvm-community/macos.md index 2541b0c45243..264128fb43bc 100644 --- a/docs/getting-started/graalvm-community/macos.md +++ b/docs/getting-started/graalvm-community/macos.md @@ -7,17 +7,18 @@ permalink: /docs/getting-started/macos/ ## Installation on macOS Platforms -GraalVM Community Edition is available for macOS on x64 and AArch64 architectures. +GraalVM is available for macOS on x64 and AArch64 architectures. -Note that in macOS, the JDK installation path is: `/Library/Java/JavaVirtualMachines//Contents/Home`. +Note that on macOS the JDK installation path is: `/Library/Java/JavaVirtualMachines//Contents/Home`. -Follow these steps to install GraalVM Community on the macOS operating system: +Follow these steps to install GraalVM: -1. Navigate to [GraalVM Releases repository on GitHub](https://github.com/graalvm/graalvm-ce-builds/releases). Select **17** or **19** for the Java version, **macOS** for the operating system **x64** or **aarch64** for the architecture, and download. +1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **macOS** for the operating system, **x64** or **aarch64** for the architecture, and download. It will download Oracle GraalVM. +To download GraalVM Community Edition, go to the [GraalVM Releases repository on GitHub](https://github.com/graalvm/graalvm-ce-builds/releases). 2. Unzip the archive. ```shell - tar -xzf graalvm-ce-java-darwin--.tar.gz + tar -xzf graalvm-ce-jdk-_linux-.tar.gz ``` Alternatively, open the file in Finder. > Note: If you are using macOS Catalina and later you may need to remove the quarantine attribute: @@ -46,30 +47,10 @@ Follow these steps to install GraalVM Community on the macOS operating system: Optionally, you can specify GraalVM as the default JRE or JDK installation in your Java IDE. -For Oracle GraalVM users, find the installation instructions [here](https://docs.oracle.com/en/graalvm/enterprise/22/docs/getting-started/installation-macos/). - ## Installation Notes ### On JAVA_HOME Command The information property file, _Info.plist_, is in the top level _Contents_ folder. -This means that Oracle GraalVM participates in the macOS-specific `/usr/libexec/java_home` mechanism. Depending on other JDK installation(s) available, it is now possible that `/usr/libexec/java_home -v17` returns `/Library/Java/JavaVirtualMachines//Contents/Home`. +This means that GraalVM participates in the macOS-specific `/usr/libexec/java_home` mechanism. Depending on other JDK installation(s) available, it is now possible that `/usr/libexec/java_home -v17` returns `/Library/Java/JavaVirtualMachines//Contents/Home`. You can run `/usr/libexec/java_home -v17 -V` to see the complete list of JDK 17 JVMs available to the `java_home` command. This command sorts the JVMs in decreasing version order and chooses the top one as the default for the specified version. -Within a specific version, the sort order appears to be stable but is unspecified. - -## Supported Functionalities - -The base distribution of GraalVM Community Edition for macOS platforms includes the JDK, the Graal compiler, and Native Image. -The base installation can be additionally extended with language runtimes: - -Language runtimes: -* [Java on Truffle](../../reference-manual/java-on-truffle/README.md) -* [JavaScript](../../reference-manual/js/README.md) -* [Node.js](../../reference-manual/js/NodeJS.md) -* [LLVM](../../reference-manual/llvm/README.md) -* [Python](../../reference-manual/python/README.md) -* [Ruby](../../reference-manual/ruby/README.md) -* [R](/../../reference-manual/r/README.md) -* [Wasm](../../reference-manual/wasm/README.md) - -To assist you with installation, GraalVM includes **GraalVM Updater**, a command line utility to install and manage additional functionalities. -Proceed to the [installation steps](../../reference-manual/graalvm-updater.md#component-installation) to add any necessary language runtime or utility to GraalVM. +Within a specific version, the sort order appears to be stable but is unspecified. \ No newline at end of file diff --git a/docs/getting-started/graalvm-community/windows.md b/docs/getting-started/graalvm-community/windows.md index ca68afcd4cb0..6d6c87c8f3af 100644 --- a/docs/getting-started/graalvm-community/windows.md +++ b/docs/getting-started/graalvm-community/windows.md @@ -10,9 +10,10 @@ permalink: /docs/getting-started/windows/ GraalVM Community Edition is available for Windows on the x64 architecture. You can install it on Windows from an archive file (_zip_). -Follow these steps: +Follow these steps to install GraalVM: -1. Navigate to the [GraalVM Releases repository on GitHub](https://github.com/graalvm/graalvm-ce-builds/releases). Select Java **17** or **19** based distribution for Windows, and download. +1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **Windows** for the operating system, and download. It will download Oracle GraalVM. +To download GraalVM Community Edition, go to the [GraalVM Releases repository on GitHub](https://github.com/graalvm/graalvm-ce-builds/releases). 2. Change the directory to the location where you want to install GraalVM, then move the _.zip_ archive file to it. @@ -46,15 +47,9 @@ Alternatively, you can set up environment variables through a Windows GUI: Repeat the same for the `PATH` environment variable. -## Installation Note +Optionally, you can specify GraalVM as the default JRE or JDK installation in your Java IDE. -To run GraalVM Community Edition based on OpenJDK 8u292 on a Windows platform, the **MSVCR100.dll** redistributable package needs to be installed (for more details, see issue [#3187](https://github.com/oracle/graal/issues/3187#issuecomment-784234990)). - -## Supported Functionalities - -Currently, the GraalVM environment on Windows can be extended with [Java on Truffle](../../reference-manual/java-on-truffle/README.md), [LLVM runtime](../../reference-manual/llvm/README.md), WebAssembly, JavaScript, and Node.js support. - -## Prerequisites for Using Native Image on Windows +## Prerequisites for Using GraalVM Native Image on Windows On Windows, Native Image requires Visual Studio and Microsoft Visual C++(MSVC). You can use Visual Studio 2022 version 17.1.0 or later. There are two installation options: From f3df9e388aa8a54eb25d460e4019f8a4f79e03cd Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 6 Jun 2023 22:57:08 +0300 Subject: [PATCH 08/72] Refactor GraalVM installation guides for OHC (cherry picked from commit 5bad0de33e7d4a4d6d365c7a156c13ffce08a614) --- .../get-started-graalvm-community.md | 2 - .../graalvm-community/macos.md | 6 +- .../get-started-graalvm-enterprise.md | 144 ++++-------------- .../graalvm-enterprise/installation-linux.md | 41 ++--- .../graalvm-enterprise/installation-macos.md | 41 ++--- .../installation-windows.md | 25 +-- 6 files changed, 56 insertions(+), 203 deletions(-) diff --git a/docs/getting-started/graalvm-community/get-started-graalvm-community.md b/docs/getting-started/graalvm-community/get-started-graalvm-community.md index 434a05587b6d..5246083450ea 100644 --- a/docs/getting-started/graalvm-community/get-started-graalvm-community.md +++ b/docs/getting-started/graalvm-community/get-started-graalvm-community.md @@ -61,8 +61,6 @@ Hello, World! > Note: For compilation `native-image` depends on the local toolchain. Make sure your system meets the [prerequisites](../../reference-manual/native-image/README.md#prerequisites). -Larger Java examples can be found in the [GraalVM Demos repository on GitHub](https://github.com/graalvm/graalvm-demos). - ## What to Read Next ### New Users diff --git a/docs/getting-started/graalvm-community/macos.md b/docs/getting-started/graalvm-community/macos.md index 264128fb43bc..0853803d2cca 100644 --- a/docs/getting-started/graalvm-community/macos.md +++ b/docs/getting-started/graalvm-community/macos.md @@ -9,7 +9,7 @@ permalink: /docs/getting-started/macos/ GraalVM is available for macOS on x64 and AArch64 architectures. -Note that on macOS the JDK installation path is: `/Library/Java/JavaVirtualMachines//Contents/Home`. +Note that on macOS the JDK installation path is: _/Library/Java/JavaVirtualMachines//Contents/Home_. Follow these steps to install GraalVM: @@ -18,7 +18,7 @@ To download GraalVM Community Edition, go to the [GraalVM Releases repository on 2. Unzip the archive. ```shell - tar -xzf graalvm-ce-jdk-_linux-.tar.gz + tar -xzf graalvm-ce-jdk-_macos-.tar.gz ``` Alternatively, open the file in Finder. > Note: If you are using macOS Catalina and later you may need to remove the quarantine attribute: @@ -28,7 +28,7 @@ To download GraalVM Community Edition, go to the [GraalVM Releases repository on 3. Move the downloaded package to its proper location, the `/Library/Java/JavaVirtualMachines` directory. Since this is a system directory, `sudo` is required: ```shell - sudo mv graalvm-ce-java- /Library/Java/JavaVirtualMachines + sudo mv graalvm-ce-jdk-_macos- /Library/Java/JavaVirtualMachines ``` To verify if the move is successful and to get a list of all installed JDKs, run `/usr/libexec/java_home -V`. diff --git a/docs/getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md b/docs/getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md index 3ab682d3a73e..f74c474d3097 100644 --- a/docs/getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md +++ b/docs/getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md @@ -1,27 +1,24 @@ --- layout: ohc -permalink: /getting-started/ +permalink: /installation/ --- -# Get Started with Oracle GraalVM +# Oracle GraalVM Installation -Here you will find information about downloading and installing Oracle GraalVM, running basic applications with it, and adding support for its accompanying features. -You will also learn about the polyglot capabilities of Oracle GraalVM and see how to build a platform-specific native executable from a JVM-based application. +Oracle GraalVM compiles your Java applications ahead of time into standalone binaries that start instantly, provide peak performance with no warmup, and use fewer resources. -If you are new to Oracle GraalVM or have little experience using it, we recommend you to start with the [Oracle GraalVM Overview](../../enterprise-overview/architecture-overview.md) page. -It provides information about Oracle GraalVM's architecture, available distributions, supported platforms, licensing and support, core and additional features, and much more. +Here you will find information about installing Oracle GraalVM and running basic applications with it. -If you have already installed Oracle GraalVM and have experience using it, you can skip this getting started guide and proceed to the in-depth [Reference Manuals](../../reference-manual/reference-manuals.md). +If you are new to Oracle GraalVM, we recommend starting with the [GraalVM Overview](../../introduction.md), where you will find information about GraalVM's benefits, distributions available, supported platforms, features support, and licensing. -## Download Oracle GraalVM +If you have Oracle GraalVM already installed and have experience using it, you can skip this page and proceed to the in-depth [reference manuals](../../reference-manual/reference-manuals.md). +## How Can I Get Oracle GraalVM? You can get Oracle GraalVM by: -- downloading from [Oracle GraalVM Downloads](https://www.oracle.com/downloads/graalvm-downloads.html). +- downloading from [Oracle Java Downloads](https://www.oracle.com/uk/java/technologies/downloads/). - subscribing to [Oracle Java SE Subscription and Oracle Java SE Desktop Subscription](https://www.oracle.com/uk/java/java-se-subscription/). The subscription includes entitlement to Oracle GraalVM. - subscribing to [Oracle Cloud](https://www.oracle.com/cloud). Oracle GraalVM is free to use, including support, for Oracle Cloud subscribers. -## Install Oracle GraalVM - Choose your operating system and proceed to the installation steps for your specific platform: * Oracle Cloud (OCI) @@ -34,15 +31,10 @@ Choose your operating system and proceed to the installation steps for your spec * [Windows](installation-windows.md) * [Container Images](container-images/graalvm-ee-container-images.md) -## Running Applications - -The core distribution of GraalVM includes the JDK, the Graal compiler, and Native Image. -Having installed GraalVM, you can already run any Java application unmodified. +## Start Running Applications -Other features can be installed on request, using **gu**&emdash;the GraalVM Updater tool to install additional language runtimes and utilities. -Further below you will find information on how to add other optionally available language runtimes including JavaScript and Node.js. - -### Java +The core distribution of Oracle GraalVM includes the Java Development Kit (JDK), the just-in-time compiler (the Graal compiler), Native Image, and others. +You can use the GraalVM JDK just like any other JDK in your IDE, so having installed Oracle GraalVM, you can run any Java application unmodified. The `java` launcher runs the JVM with Graal as the last-tier compiler. Check the installed Java version: @@ -50,7 +42,9 @@ Check the installed Java version: $JAVA_HOME/bin/java -version ``` -Take a look at this typical `HelloWorld` class: +Using [GraalVM Native Image](../../reference-manual/native-image/README.md) you can compile Java bytecode into a platform-specific, self-contained native executable to achieve faster startup and a smaller footprint for your application. + +Compile this simplest _HelloWorld.java_ application to bytecode and then build a native executable: ```java public class HelloWorld { public static void main(String[] args) { @@ -59,35 +53,10 @@ public class HelloWorld { } ``` -Run the following commands to compile this class to bytecode and then run it: ```shell javac HelloWorld.java -java HelloWorld -Hello World! ``` - -You can find many larger Java examples in [GraalVM Demos on GitHub](https://github.com/graalvm/graalvm-demos). -For more information on the Graal compiler, see the [compiler documentation](../../reference-manual/java/compiler.md). -For more extensive documentation on running Java, check [this reference documentation](../../reference-manual/java/README.md). - -### Native Image - -With [Native Image](../../reference-manual/native-image/README.md) you can compile Java bytecode into a platform-specific, self-contained, native executable to achieve faster startup and a smaller footprint for your application. - -The `HelloWorld` example from above is used here to demonstrate how to generate a native executable: -```java -public class HelloWorld { - public static void main(String[] args) { - System.out.println("Hello, World!"); - } -} -``` - -> Note: For compilation `native-image` depends on the local toolchain. Make sure your system meets the [prerequisites](../../reference-manual/native-image/README.md#prerequisites). - -Compile _HelloWorld.java_ to bytecode and then build a native executable: ```shell -javac HelloWorld.java native-image HelloWorld ``` @@ -98,88 +67,27 @@ Invoking it runs the natively compiled code of the `HelloWorld` class as follows Hello, World! ``` -More detailed documentation on this innovative technology is available in the [Native Image reference manual](../../reference-manual/native-image/README.md). - -### JavaScript and Node.js - -GraalVM supports running JavaScript applications. -The JavaScript runtime is optionally available and can be installed with this command: -```shell -gu install js -``` - -It installs the `js` launcher in the `$JAVA_HOME/bin` directory. -With the JavaScript runtime installed, you can run plain JavaScript code, both in REPL mode and by running script files directly: -```shell -$JAVA_HOME/bin/js -> 1 + 2 -3 -``` - -GraalVM also supports running Node.js applications. -The Node.js runtime is not installed by default, but can be easily added with this command: -```shell -gu install nodejs -``` - -Both `node` and `npm` launchers then become available in the `$JAVA_HOME/bin` directory. - -```shell -$JAVA_HOME/bin/node -v -$JAVA_HOME/bin/npm show version -``` - -More than 100,000 npm packages are regularly tested and are compatible with Oracle GraalVM, including modules such as express, react, async, request, browserify, grunt, mocha, and underscore. -To install a Node.js module, use the `npm` executable from the _$JAVA_HOME/bin_ directory, which is installed together with `node`. -The `npm` command is equivalent to the default Node.js command and supports all Node.js APIs. - -Install the modules `colors`, `ansispan`, and `express` using `npm install`. -After the modules are installed, you can use them from your application. -```shell -$JAVA_HOME/bin/npm install colors ansispan express -``` - -Copy the following code snippet and save it as a file named _app.js_ in the same directory where you installed the Node.js modules: -```js -const http = require("http"); -const span = require("ansispan"); -require("colors"); - -http.createServer(function (request, response) { - response.writeHead(200, {"Content-Type": "text/html"}); - response.end(span("Hello Graal.js!".green)); -}).listen(8000, function() { console.log("Graal.js server running at http://127.0.0.1:8000/".red); }); - -setTimeout(function() { console.log("DONE!"); process.exit(); }, 2000); -``` - -Run _app.js_ on Oracle GraalVM using the `node` command: - -```shell -$JAVA_HOME/bin/node app.js -``` - -For more detailed documentation and information on compatibility with Node.js, see [JavaScript and Node.js](../../reference-manual/js/README.md). - -## Combine Languages - -Oracle GraalVM allows you to call one programming language into another and exchange data between them. -For example, running `js --jvm --polyglot example.js` runs `example.js` in a polyglot context. -If the program calls any code in other supported languages, Oracle GraalVM runs that code in the same runtime as the `example.js` application. -For more information on running polyglot applications, see [Polyglot Programming](../../reference-manual/polyglot-programming.md). +> Note: For compilation `native-image` depends on the local toolchain. Make sure your system meets the [prerequisites](../../reference-manual/native-image/README.md#prerequisites). ## What to Read Next ### New Users -Since this guide is intended mainly for users new to Oracle GraalVM, or users who are familiar with Oracle GraalVM but may have little experience using it, consider investigating more complex [example applications](https://github.com/graalvm/graalvm-demos). + +Continue to [Native Image basics](../../reference-manual/native-image/NativeImageBasics.md) to gradually educate yourself about the technology. +For users who are familiar with GraalVM Native Image but may have little experience using it, proceed to [User Guides](../../reference-manual/native-image/guides/guides.md). + +For more information on the Graal compiler, see the [compiler documentation](../../reference-manual/java/compiler.md). +Larger Java examples can be found in the [GraalVM Demos repository on GitHub](https://github.com/graalvm/graalvm-demos). ### Oracle Cloud Users + Oracle Cloud users considering Oracle GraalVM for their cloud workloads are invited to read [Oracle GraalVM on OCI](oci/installation-compute-instance-with-OL.md). This page focuses on using Oracle GraalVM with an Oracle Cloud Infrastructure Compute instance. ### Advanced Users -If you are mostly interested in Oracle GraalVM support for a specific language, or want more in-depth details about Oracle GraalVM's diverse features, proceed to [Reference Manuals](../../reference-manual/reference-manuals.md). -If you are considering Oracle GraalVM as a platform for your future language or tool implementation, go to [Oracle GraalVM as a Platform](../../../truffle/docs/README.md). +Developers who are more experienced with GraalVM or want to do more with GraalVM can proceed directly to [Reference Manuals](../../reference-manual/reference-manuals.md) for in-depth documentation. + +You can find information on GraalVM's security model in the [Security Guide](../../security/security-guide.md), and rich API documentation in the [Oracle GraalVM Java API Reference](https://docs.oracle.com/en/graalvm/jdk/17/sdk/). -You can find information on Oracle GraalVM's security model in the [Security Guide](../../security/security-guide.md), and rich API documentation in [GraalVM SDK Javadoc](https://docs.oracle.com/en/graalvm/enterprise/22/sdk/index.html). +We also recommend checking the [GraalVM Team Blog](https://medium.com/graalvm). diff --git a/docs/getting-started/graalvm-enterprise/installation-linux.md b/docs/getting-started/graalvm-enterprise/installation-linux.md index a38a16975a41..e6ba17388460 100644 --- a/docs/getting-started/graalvm-enterprise/installation-linux.md +++ b/docs/getting-started/graalvm-enterprise/installation-linux.md @@ -11,23 +11,18 @@ You can install Oracle GraalVM on Linux from an archive (_.tar.gz_) for the curr ### Note on AArch64 Distribution This distribution can be installed on Oracle Linux and Red Hat Enterprise Linux(RHEL) systems for the AArch64 architecture. -Follow these steps to install Oracle GraalVM on a Linux operating system: +Follow these steps to install Oracle GraalVM: -1. Navigate to [Oracle GraalVM Downloads](https://www.oracle.com/downloads/graalvm-downloads.html). +1. Navigate to [Oracle Java Downloads](https://www.oracle.com/uk/java/technologies/downloads/). +Select the preferred Oracle GraalVM version, **17** or **20** for the Java version, **Linux** for the operating system, and the architecture. Start downloading. -2. Select the preferred Oracle GraalVM version in the Release Version dropdown, **17** or **19** for the Java version, **Linux** for the operating system, and **x64** or **aarch64** for the architecture. +2. Change directory to the location where you want to install Oracle GraalVM, then move the _.tar.gz_ file to that directory. -3. Click on the **Oracle GraalVM JDK** download link. Before you download a file, you must accept the [Oracle License Agreement](https://www.oracle.com/downloads/licenses/graalvm-otn-license.html) in the popup window. - -4. When the download button becomes active, click it to start downloading. - -5. Change directory to the location where you want to install Oracle GraalVM, then move the _.tar.gz_ file to that directory. - -6. Unzip the archive: +3. Unzip the archive: ```shell - tar -xzf graalvm-ee-java-linux--.tar.gz + tar -xzf graalvm-jdk-_linux-.tar.gz ``` -7. There can be multiple JDKs installed on your machine. The next step is to configure your runtime environment: +4. There can be multiple JDKs installed on your machine. The next step is to configure your runtime environment: - Point the `PATH` environment variable to the Oracle GraalVM _bin_ directory: ```shell export PATH=/path/to//bin:$PATH @@ -36,24 +31,6 @@ Follow these steps to install Oracle GraalVM on a Linux operating system: ```shell export JAVA_HOME=/path/to/ ``` -8. To check whether the installation was successful, run the `java -version` command. - -Optionally, you can specify Oracle GraalVM as the default JRE or JDK installation in your Java IDE. - -## Supported Functionalities - -The base distribution of GraalVM Community Edition for Linux platforms includes the JDK, the Graal compiler, and Native Image. -The base installation can be additionally extended with language runtimes: - -* [Java on Truffle](../../reference-manual/java-on-truffle/README.md) -* [JavaScript](../../reference-manual/js/README.md) -* [Node.js](../../reference-manual/js/NodeJS.md) -* [LLVM](../../reference-manual/llvm/README.md) -* [Python](../../reference-manual/python/README.md) -* [Ruby](../../reference-manual/ruby/README.md) -* [Wasm](../../reference-manual/wasm/README.md) - -To assist you with installation, GraalVM includes **GraalVM Updater**, a command line utility to install and manage additional functionalities. -Proceed to the [installation steps](../../reference-manual/graalvm-updater.md#component-installation) to add any necessary language runtime or utility to GraalVM. +5. To check whether the installation was successful, run the `java -version` command. -> Note: Runtimes for Python, R, and Ruby languages are not available for the Oracle GraalVM Linux AArch64 distribution. \ No newline at end of file +Optionally, you can specify Oracle GraalVM as the default JRE or JDK installation in your Java IDE. \ No newline at end of file diff --git a/docs/getting-started/graalvm-enterprise/installation-macos.md b/docs/getting-started/graalvm-enterprise/installation-macos.md index e67663903634..d30a331e04ba 100644 --- a/docs/getting-started/graalvm-enterprise/installation-macos.md +++ b/docs/getting-started/graalvm-enterprise/installation-macos.md @@ -9,19 +9,14 @@ Oracle GraalVM is available for macOS on x64 and AArch64 architectures. Note that in macOS, the JDK installation path is: _/Library/Java/JavaVirtualMachines//Contents/Home_. -Follow these steps to install Oracle GraalVM on a macOS operating system: +Follow these steps to install Oracle GraalVM: -1. Navigate to [Oracle GraalVM Downloads](https://www.oracle.com/downloads/graalvm-downloads.html). +1. Navigate to [Oracle Java Downloads](https://www.oracle.com/uk/java/technologies/downloads/). +Select the preferred Oracle GraalVM version, **17** or **20** for the Java version, **macOS** for the operating system, and the architecture. Start downloading. -2. Select the preferred Oracle GraalVM version in the Release Version dropdown, **17** or **19** for the Java version, **macOS** for the operating system and **x64** or **aarch64** for the architecture. - -3. Click on the **Oracle GraalVM JDK** download link. Before you download a file, you must accept the [Oracle License Agreement](https://www.oracle.com/downloads/licenses/graalvm-otn-license.html) in the popup window. - -4. When the download button becomes active, click it to start downloading. - -5. Unzip the archive: +2. Unzip the archive: ```shell - tar -xzf graalvm-ee-java-darwin--.tar.gz + tar -xzf graalvm-jdk-_macos-.tar.gz ``` Alternatively, open the file in the Finder. > Note: If you are using macOS Catalina and later you may need to remove the quarantine attribute: @@ -29,14 +24,14 @@ Follow these steps to install Oracle GraalVM on a macOS operating system: sudo xattr -r -d com.apple.quarantine /path/to/graalvm ``` -6. Move the downloaded package to its proper location, the _/Library/Java/JavaVirtualMachines_ directory. Since this is a system directory, `sudo` is required: +3. Move the downloaded package to its proper location, the _/Library/Java/JavaVirtualMachines_ directory. Since this is a system directory, `sudo` is required: ```shell - sudo mv graalvm-ee-java- /Library/Java/JavaVirtualMachines + sudo mv graalvm-jdk-_macos- /Library/Java/JavaVirtualMachines ``` To verify if the move is successful and to get a list of all installed JDKs, run `/usr/libexec/java_home -V`. -7. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment: +4. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment: - Point the `PATH` environment variable to the Oracle GraalVM _bin_ directory: ```shell export PATH=/Library/Java/JavaVirtualMachines//Contents/Home/bin:$PATH @@ -46,7 +41,7 @@ To verify if the move is successful and to get a list of all installed JDKs, run export JAVA_HOME=/Library/Java/JavaVirtualMachines//Contents/Home ``` -8. To check whether the installation was successful, run the `java -version` command. +5. To check whether the installation was successful, run the `java -version` command. Optionally, you can specify Oracle GraalVM as the default JRE or JDK installation in your Java IDE. @@ -56,20 +51,4 @@ Optionally, you can specify Oracle GraalVM as the default JRE or JDK installatio The information property file, _Info.plist_, is in the top level _Contents_ folder. This means that Oracle GraalVM participates in the macOS-specific `/usr/libexec/java_home` mechanism. Depending on other JDK 17 installation(s) available, it is now possible that `/usr/libexec/java_home -v17` returns `/Library/Java/JavaVirtualMachines//Contents/Home`. You can run `/usr/libexec/java_home -v17 -V` to see the complete list of JDK17 JVMs available to the `java_home` command. This command sorts the JVMs in decreasing version order and chooses the top one as the default for the specified version. -Within a specific version, the sort order appears to be stable but is unspecified. - -## Supported Functionalities - -The base distribution of Oracle GraalVM for macOS platforms includes the JDK, the Graal compiler, and Native Image. -The base installation can be additionally extended with language runtimes: - -* [Java on Truffle](../../reference-manual/java-on-truffle/README.md) -* [JavaScript](../../reference-manual/js/README.md) -* [Node.js](../../reference-manual/js/NodeJS.md) -* [LLVM](../../reference-manual/llvm/README.md) -* [Python](../../reference-manual/python/README.md) -* [Ruby](../../reference-manual/ruby/README.md) -* [Wasm](../../reference-manual/wasm/README.md) - -To assist you with installation, GraalVM includes **GraalVM Updater**, a command line utility to install and manage additional functionalities. -Proceed to the [installation steps](../../reference-manual/graalvm-updater.md#component-installation) to add any necessary language runtime or utility to GraalVM. +Within a specific version, the sort order appears to be stable but is unspecified. \ No newline at end of file diff --git a/docs/getting-started/graalvm-enterprise/installation-windows.md b/docs/getting-started/graalvm-enterprise/installation-windows.md index 69eb5cc3f06d..c239383e6d0b 100644 --- a/docs/getting-started/graalvm-enterprise/installation-windows.md +++ b/docs/getting-started/graalvm-enterprise/installation-windows.md @@ -7,21 +7,16 @@ permalink: /getting-started/installation-windows/ Oracle GraalVM is available for Windows on the x64 architecture. -Follow these steps: +Follow these steps to install Oracle GraalVM: -1. Navigate to [Oracle GraalVM Downloads](https://www.oracle.com/downloads/graalvm-downloads.html). +1. Navigate to [Oracle Java Downloads](https://www.oracle.com/uk/java/technologies/downloads/). +Select the preferred Oracle GraalVM version, **17** or **20** for the Java version, and **Windows** for the operating system. Start downloading. -2. Select the preferred Oracle GraalVM version in the Release Version dropdown, **17** or **19** for the Java version, and **Windows** for the operating system. +2. Change the directory to the location where you want to install GraalVM, then move the _.zip_ archive file to it. -3. Click on the **Oracle GraalVM JDK** download link. Before you download a file, you must accept the [Oracle License Agreement](https://www.oracle.com/downloads/licenses/graalvm-otn-license.html) in the popup window. +3. Unzip the archive to your file system. -4. When the download button becomes active, click it to start downloading. - -5. Change the directory to the location where you want to install Oracle GraalVM, then move the _.zip_ archive to that directory. - -6. Unzip the archive to your file system. - -7. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment. Setting environment variables via the command line will work the same way for Windows 8, 10, and 11. +4. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment. Setting environment variables via the command line will work the same way for Windows 8, 10, and 11. - Point the `PATH` environment variable to the Oracle GraalVM _bin_ directory: ```shell setx /M PATH "C:\Progra~1\Java\\bin;%PATH%" @@ -32,7 +27,7 @@ Follow these steps: ``` Note that the `/M` flag, equivalent to `-m`, requires elevated user privileges. -8. Restart Command Prompt to reload the environment variables. Then use the following command to check whether the variables were set correctly: +5. Restart Command Prompt to reload the environment variables. Then use the following command to check whether the variables were set correctly: ```shell echo %PATH% echo %JAVA_HOME% @@ -49,10 +44,6 @@ Alternatively, you can set up environment variables through a Windows GUI: Repeat the same for the `PATH` environment variable. -## Supported Functionalities - -Currently, the GraalVM environment on Windows can be extended with [Java on Truffle](../../reference-manual/java-on-truffle/README.md), [LLVM runtime](../../reference-manual/llvm/README.md), WebAssembly, JavaScript, and Node.js support. - ## Prerequisites for Using Native Image on Windows On Windows, Native Image requires Visual Studio and Microsoft Visual C++(MSVC). You can use Visual Studio 2022 version 17.1.0 or later. @@ -60,4 +51,4 @@ There are two installation options: - Install the Visual Studio Build Tools with the Windows 10 SDK - Install Visual Studio with the Windows 10 SDK -Step-by-step instructions on installing Visual Studio Build Tools and Windows 10 SDK, and starting using Native Image can be found [here](https://medium.com/graalvm/using-graalvm-and-native-image-on-windows-10-9954dc071311). +Step-by-step instructions on installing Visual Studio Build Tools and Windows 10 SDK, and starting using Native Image can be found [here](https://medium.com/graalvm/using-graalvm-and-native-image-on-windows-10-9954dc071311). \ No newline at end of file From 0d144f48967a87a57e4cd3760519a31b64b47802 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 6 Jun 2023 23:07:09 +0300 Subject: [PATCH 09/72] Rename filenames to installation.md and update rel paths (cherry picked from commit 02ac1ff357cfcfb35b3156d4dc25012e1f326b12) --- .../{architecture-overview.md => overview.md} | 2 +- .../{solutions-overview.md => solutions.md} | 0 .../{get-started-graalvm-community.md => installation.md} | 0 .../{get-started-graalvm-enterprise.md => installation.md} | 0 docs/introduction.md | 4 ++-- docs/tools/vscode/graalvm/README.md | 4 ++-- 6 files changed, 5 insertions(+), 5 deletions(-) rename docs/enterprise-overview/{architecture-overview.md => overview.md} (98%) rename docs/enterprise-overview/{solutions-overview.md => solutions.md} (100%) rename docs/getting-started/graalvm-community/{get-started-graalvm-community.md => installation.md} (100%) rename docs/getting-started/graalvm-enterprise/{get-started-graalvm-enterprise.md => installation.md} (100%) diff --git a/docs/enterprise-overview/architecture-overview.md b/docs/enterprise-overview/overview.md similarity index 98% rename from docs/enterprise-overview/architecture-overview.md rename to docs/enterprise-overview/overview.md index 99167c4b5056..48f21779ebea 100644 --- a/docs/enterprise-overview/architecture-overview.md +++ b/docs/enterprise-overview/overview.md @@ -33,7 +33,7 @@ Oracle GraalVM's key benefits are: ## What to Read Next -Start with installing Oracle GraalVM by following the [installation guide](../getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md). +Start with installing Oracle GraalVM by following the [installation guide](../getting-started/graalvm-enterprise/installation.md). Whether you are new to Oracle GraalVM and Native Image or have little experience using it, continue to [Getting Started](../reference-manual/native-image/README.md). diff --git a/docs/enterprise-overview/solutions-overview.md b/docs/enterprise-overview/solutions.md similarity index 100% rename from docs/enterprise-overview/solutions-overview.md rename to docs/enterprise-overview/solutions.md diff --git a/docs/getting-started/graalvm-community/get-started-graalvm-community.md b/docs/getting-started/graalvm-community/installation.md similarity index 100% rename from docs/getting-started/graalvm-community/get-started-graalvm-community.md rename to docs/getting-started/graalvm-community/installation.md diff --git a/docs/getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md b/docs/getting-started/graalvm-enterprise/installation.md similarity index 100% rename from docs/getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md rename to docs/getting-started/graalvm-enterprise/installation.md diff --git a/docs/introduction.md b/docs/introduction.md index 8832f26356e8..0332fe80475c 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -33,7 +33,7 @@ GraalVM is available as **Oracle GraalVM** and **GraalVM Community Edition**. Oracle GraalVM is based on Oracle JDK while GraalVM Community Edition is based on OpenJDK. GraalVM is available for Linux and macOS on x64 and AArch64 architectures, and for Windows on the x64 architecture. -See the [installation guide](getting-started/graalvm-community/get-started-graalvm-community.md) for installation instructions. +See the [installation guide](getting-started/graalvm-community/installation.md) for installation instructions. ## Features Support @@ -70,7 +70,7 @@ GraalVM Community Edition is free to use for any purpose and comes with no strin ## What to Read Next -Start with installing GraalVM by following the [installation guide](getting-started/graalvm-community/get-started-graalvm-community.md). +Start with installing GraalVM by following the [installation guide](getting-started/graalvm-community/installation.md). Whether you are new to GraalVM Native Image or have little experience using it, continue to [Getting Started](reference-manual/native-image/README.md). diff --git a/docs/tools/vscode/graalvm/README.md b/docs/tools/vscode/graalvm/README.md index 474b505d1ccd..59bace03108a 100644 --- a/docs/tools/vscode/graalvm/README.md +++ b/docs/tools/vscode/graalvm/README.md @@ -14,7 +14,7 @@ permalink: /tools/vscode/graalvm-extension/ * [Native Image Support](#native-image-support) * [Extension Settings](#extension-settings) -[GraalVM Tools for Java](https://marketplace.visualstudio.com/items?itemName=oracle-labs-graalvm.graalvm) extension provides capabilities to manage GraalVM installations and its components in VS Code and/or locally. +[GraalVM Tools for Java](https://marketplace.visualstudio.com/items?itemName=oracle-labs-graalvm.graalvm) extension provides capabilities to manage GraalVM installations and its components in Visual Studio (VS) Code and/or locally. The extension ships a GraalVM installation and configuration wizard. You can conveniently set up the default Java runtime to GraalVM JDK which comes with both just-in-time ([Graal](../../../reference-manual/java/compiler.md)) and ahead-of-time ([Native Image](../../../reference-manual/native-image/README.md)) compilers, making VS Code a comfortable and convenient integrated environment. @@ -58,7 +58,7 @@ The installation starts immediately. If you are installing Oracle GraalVM, the installation wizard downloads a package from Oracle's storage point and displays progress. If you are installing GraalVM Community Edition, the wizard downloads the package from [Github](https://github.com/graalvm/graalvm-ce-builds/releases) and displays progress. -> Note: This installation option offers the latest verion of GraalVM. If you would like to install an older version, follow [these steps](../../../getting-started/graalvm-community/get-started-graalvm-community.md#install-graalvm). +> Note: This installation option offers the latest verion of GraalVM. If you would like to install an older version, follow [these steps](../../../getting-started/graalvm-community/installation.md). Once the installation completes, the **Install Optional GraalVM Components** window pops up prompting you to install additional language runtimes and utilities (Java on Truffle, JavaScript, Node.js, LLVM toolchain, Python, etc.): From d4443a63f607acbd27f45e5c677132e4fc78bdd0 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 6 Jun 2023 23:10:10 +0300 Subject: [PATCH 10/72] Change /native-image/guides/ to /guides/; Review reference-manuals.md (cherry picked from commit 2db539b8ad012ce578461a1668a1730f2ec64125) --- docs/reference-manual/native-image/README.md | 1 - docs/reference-manual/native-image/guides/guides.md | 10 ++++++---- docs/reference-manual/reference-manuals.md | 6 ++---- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/reference-manual/native-image/README.md b/docs/reference-manual/native-image/README.md index bf5c264b2a15..ccaf8a8a72c9 100644 --- a/docs/reference-manual/native-image/README.md +++ b/docs/reference-manual/native-image/README.md @@ -31,7 +31,6 @@ To get used to Native Image terminology and get better understanding of the tech * [Build a Native Executable](#build-a-native-executable) * [Configuring Native Image with Third-Party Libraries](#configuring-native-image-with-third-party-libraries) -* [License](#license) * [Further Reading](#further-reading) ### Prerequisites diff --git a/docs/reference-manual/native-image/guides/guides.md b/docs/reference-manual/native-image/guides/guides.md index 7a126b52dc11..5aba1c6903e4 100644 --- a/docs/reference-manual/native-image/guides/guides.md +++ b/docs/reference-manual/native-image/guides/guides.md @@ -1,12 +1,14 @@ --- layout: ni-docs-landing toc_group: how-to-guides -link_title: User Guides -permalink: /native-image/guides/ -redirect_from: /reference-manual/native-image/guides/ +link_title: Guides +permalink: /guides/ +redirect_from: + - /native-image/guides/ + - /reference-manual/native-image/guides/ --- -# Native Image User Guides +# Guides These guides help developers get started with GraalVM Native Image, acquaint them with available features, and describe potential usage scenarios. Here you will learn how to: diff --git a/docs/reference-manual/reference-manuals.md b/docs/reference-manual/reference-manuals.md index 90d0bc2593d2..9ec9b9cb84c9 100644 --- a/docs/reference-manual/reference-manuals.md +++ b/docs/reference-manual/reference-manuals.md @@ -9,8 +9,7 @@ redirect_from: /$version/docs/reference-manual/ # GraalVM Reference Manuals Here you will find the in-depth documentation for technologies offered by GraalVM. -These manuals are aimed at software engineers and developers who already work with GraalVM, or are considering it as an -environment for their workloads. +These manuals are aimed at software engineers and developers who already work with GraalVM, or are considering it as an environment for their workloads. ## Technologies @@ -28,10 +27,9 @@ environment for their workloads. If you are mostly interested in the GraalVM support for a specific language, here you can find the most extensive documentation: -* [Java](java/README.md) * [JavaScript and Node.js](js/README.md) * [LLVM Languages](llvm/README.md) * [Python](python/README.md) * [R](r/README.md) * [Ruby](ruby/README.md) -* [WebAssembly](wasm/README.md) +* [WebAssembly](wasm/README.md) \ No newline at end of file From 2a013c6833b454f758a76e05023d6f00d8ded936 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 6 Jun 2023 23:24:28 +0300 Subject: [PATCH 11/72] Review languages.md (cherry picked from commit b7b8d2b02f6da498bb5ff94f3d8a05e5013a2854) --- docs/reference-manual/languages.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/reference-manual/languages.md b/docs/reference-manual/languages.md index 9d760a282871..41f7cf8d21b5 100644 --- a/docs/reference-manual/languages.md +++ b/docs/reference-manual/languages.md @@ -7,11 +7,11 @@ permalink: /reference-manual/languages/ # Languages References -GraalVM is designed to accelerate the execution of applications written in Java and other JVM languages while also providing a high-performance runtime for JavaScript, Ruby, Python, and a number of other popular languages. +GraalVM provides runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM's polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs. If you are mostly interested in GraalVM's support for a specific language, here you can find the most extensive documentation: -* [Java](java/README.md) + * [Java on Truffle](java-on-truffle/README.md) * [JavaScript and Node.js](https://github.com/oracle/graaljs/blob/master/docs/user/README.md) * [LLVM Languages](llvm/README.md) From 4465022cc8716b757308b3a857e930d1fff2f799 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Wed, 7 Jun 2023 10:37:04 +0300 Subject: [PATCH 12/72] Revert /getting-started/ permalink back because it is now hardcoded for OHC (cherry picked from commit 9a30eac56e2bb8ae7af1c0e4e51adcb04bb871cc) --- docs/getting-started/graalvm-enterprise/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/graalvm-enterprise/installation.md b/docs/getting-started/graalvm-enterprise/installation.md index f74c474d3097..f2b64f10f805 100644 --- a/docs/getting-started/graalvm-enterprise/installation.md +++ b/docs/getting-started/graalvm-enterprise/installation.md @@ -1,6 +1,6 @@ --- layout: ohc -permalink: /installation/ +permalink: /getting-started/ --- # Oracle GraalVM Installation From f9a382c0fb41f09cf857ba92ee124b162b48a17d Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Wed, 7 Jun 2023 11:05:34 +0000 Subject: [PATCH 13/72] Follow reviewers suggestions (cherry picked from commit aa7eeda688a5428b1c116f1e83e87b9a230fa586) --- docs/enterprise-overview/overview.md | 2 +- docs/enterprise-overview/solutions.md | 25 +++++++++---------- docs/enterprise-overview/support.md | 10 ++++---- .../graalvm-ce-container-images.md | 2 +- .../graalvm-community/installation.md | 6 ++--- .../graalvm-community/linux.md | 5 ++-- .../graalvm-community/macos.md | 5 ++-- .../graalvm-community/windows.md | 11 ++++---- .../graalvm-enterprise/installation-linux.md | 4 +-- .../graalvm-enterprise/installation-macos.md | 2 +- .../installation-windows.md | 2 +- docs/introduction.md | 4 +-- 12 files changed, 37 insertions(+), 41 deletions(-) diff --git a/docs/enterprise-overview/overview.md b/docs/enterprise-overview/overview.md index 48f21779ebea..1019b6fa5094 100644 --- a/docs/enterprise-overview/overview.md +++ b/docs/enterprise-overview/overview.md @@ -37,4 +37,4 @@ Start with installing Oracle GraalVM by following the [installation guide](../ge Whether you are new to Oracle GraalVM and Native Image or have little experience using it, continue to [Getting Started](../reference-manual/native-image/README.md). -Developers, who have Oracle GraalVM already installed or have experience using it in the past, can proceed to the [Reference Manuals](../reference-manual/reference-manuals.md) for in-depth coverage. +Developers who already have Oracle GraalVM installed, or have experience using it, should proceed to the [Reference Manuals](../reference-manual/reference-manuals.md) for in-depth coverage. diff --git a/docs/enterprise-overview/solutions.md b/docs/enterprise-overview/solutions.md index b30d6e2b4aae..50c8b77010dc 100644 --- a/docs/enterprise-overview/solutions.md +++ b/docs/enterprise-overview/solutions.md @@ -5,19 +5,19 @@ permalink: /solutions-overview/ # Oracle GraalVM -## Challenges Today’s Businesses Face +## Challenges Faced By Today’s Businesses -Today’s online global enterprises and microservices alike face the same needs: -achieving better performance, and reducing ever-increasing infrastructure costs. +Today’s online global enterprises and microservices alike face the same challenges: +achieve better performance, and reduce ever-increasing infrastructure costs. The evolution from older, layered architectures to microservices requires new, -innovative approaches to running a business either on premises or on the cloud. +innovative approaches to running a business either on premises or in the cloud. -Speed, dexterity, and leanness are key, then, to commanding the modern +Speed, dexterity, and leanness are key, then, to command the modern online marketplace. ## Faster, Smaller, Leaner Applications -Oracle GraalVM is a foundation for innovation and improvement for both large +Oracle GraalVM is the foundation for innovation and improvement for both large enterprise applications and microservices alike. Built on trusted and secure Oracle Java SE, Oracle GraalVM accelerates @@ -28,25 +28,24 @@ In data centers with ever-growing workloads, being able to service more requests with the same computing infrastructure reduces the need to purchase additional hardware. Thus Oracle GraalVM's reduction of required compute resources can lower capital cost expenditures on premise and lower operation -costs on cloud. +costs in the cloud. ## Trusted Oracle Support and Updates -Oracle GraalVM customers take advantage of 24/7 access to the experienced Oracle GraalVM +Oracle GraalVM customers can take advantage of 24/7 access to the experienced Oracle GraalVM support team who work closely with the Oracle Java support team. Oracle GraalVM releases include all Oracle Java critical patch updates -(CPUs) which are released on a regular schedule to remedy defects and known -vulnerabilities. +(CPUs) which are released on a regular schedule to remedy defects and known vulnerabilities. ### Summary Start using Oracle GraalVM and: -* reduce IT and storage costs -* provide customers with quicker response time +* reduce your IT and storage costs +* provide your customers with quicker response times * employ fewer resources, freeing up CPU * enjoy seamless language interoperability -* take advantage of full support +* take advantage of Oracle's full support * receive regularly scheduled updates * rest assured with the security and stability of Java diff --git a/docs/enterprise-overview/support.md b/docs/enterprise-overview/support.md index 8922c876f460..6a72cf745684 100644 --- a/docs/enterprise-overview/support.md +++ b/docs/enterprise-overview/support.md @@ -14,7 +14,7 @@ Oracle GraalVM is available for Linux, macOS, and Windows platforms on x64 syste ## Certified Platforms -The following are the certified platforms for Oracle GraalVM: +The following platforms are certified for Oracle GraalVM: | Operating System | Version | Architecture | Installation Guide | |------------------------------------ |-------------- |-------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -25,11 +25,11 @@ The following are the certified platforms for Oracle GraalVM: ## Features Support -Oracle GraalVM features are distributed as fully supported and experimental. +Oracle GraalVM features are distributed as _fully supported_ or _experimental_. -Experimental features are being considered for future versions of Oracle GraalVM. -They are not meant to be used in production and are not supported by Oracle. -The development team welcomes feedback on experimental features, but users should be aware that experimental features might never be included in a final version, or might change significantly before being considered production-ready. +_Experimental_ features are being considered for future versions of Oracle GraalVM. +They are not meant for use in production and are **not** supported by Oracle. +The development team welcomes feedback on experimental features, but users should be aware that experimental features may not be included in a final version, or may change significantly before being considered production-ready. For more information, check the [Graal Free Terms and Conditions (GFTC) including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). diff --git a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md index 19af65b6d69e..2ee240f6b9ea 100644 --- a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md +++ b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md @@ -87,4 +87,4 @@ Version: truffleruby 22.3.1, like ruby 3.0.3, GraalVM CE Native [x86_64-darwin] Check what other configuration types of container images are available [here](https://github.com/graalvm/container). -If you look for Oracle GraalVM container images, they are published in the [Oracle Container Registry](https://container-registry.oracle.com/ords/f?p=113:10::::::). \ No newline at end of file +If you are looking for Oracle GraalVM container images, they are published in the [Oracle Container Registry](https://container-registry.oracle.com/ords/f?p=113:10::::::). \ No newline at end of file diff --git a/docs/getting-started/graalvm-community/installation.md b/docs/getting-started/graalvm-community/installation.md index 5246083450ea..f4d9366948a6 100644 --- a/docs/getting-started/graalvm-community/installation.md +++ b/docs/getting-started/graalvm-community/installation.md @@ -6,7 +6,7 @@ permalink: /docs/installation/ redirect_from: /docs/getting-started/ --- -# GraalVM Installation +# Getting Started with GraalVM GraalVM compiles your Java applications ahead of time into standalone binaries that start instantly, provide peak performance with no warmup, and use fewer resources. @@ -36,7 +36,7 @@ $JAVA_HOME/bin/java -version Using [GraalVM Native Image](../../reference-manual/native-image/README.md) you can compile Java bytecode into a platform-specific, self-contained native executable to achieve faster startup and a smaller footprint for your application. -Compile this simplest _HelloWorld.java_ application to bytecode and then build a native executable: +Compile this simple _HelloWorld.java_ application to bytecode and then build a native executable: ```java public class HelloWorld { public static void main(String[] args) { @@ -65,7 +65,7 @@ Hello, World! ### New Users -Continue to [Native Image basics](../../reference-manual/native-image/NativeImageBasics.md) to gradually educate yourself about the technology. +Continue to [Native Image basics](../../reference-manual/native-image/NativeImageBasics.md) for more information about the technology. For users who are familiar with GraalVM Native Image but may have little experience using it, proceed to [User Guides](../../reference-manual/native-image/guides/guides.md). For more information on the Graal compiler, see the [compiler documentation](../../reference-manual/java/compiler.md). diff --git a/docs/getting-started/graalvm-community/linux.md b/docs/getting-started/graalvm-community/linux.md index b46ec69b2784..9a560f267a85 100644 --- a/docs/getting-started/graalvm-community/linux.md +++ b/docs/getting-started/graalvm-community/linux.md @@ -14,16 +14,15 @@ You can install GraalVM on Linux from an archive (_.tar.gz_) for the current use Follow these steps to install GraalVM: 1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **Linux** for the operating system, **x64** or **aarch64** for the architecture, and download. It will download Oracle GraalVM. -To download GraalVM Community Edition, go to the [GraalVM Releases repository on GitHub](https://github.com/graalvm/graalvm-ce-builds/releases). -2. Change directory to the location where you want to install GraalVM, then move the _.tar.gz_ file to that directory. +2. Change to directory where you want to install GraalVM, then move the _.tar.gz_ file to that directory. 3. Unzip the archive: ```shell tar -xzf graalvm-ce-jdk-_linux-.tar.gz ``` 4. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment: - - Point the `PATH` environment variable to the GraalVM _bin_ directory: + - Set the value of the `PATH` environment variable to the GraalVM _bin_ directory: ```shell export PATH=/path/to//bin:$PATH ``` diff --git a/docs/getting-started/graalvm-community/macos.md b/docs/getting-started/graalvm-community/macos.md index 0853803d2cca..b66d437aa0dc 100644 --- a/docs/getting-started/graalvm-community/macos.md +++ b/docs/getting-started/graalvm-community/macos.md @@ -13,8 +13,7 @@ Note that on macOS the JDK installation path is: _/Library/Java/JavaVirtualMachi Follow these steps to install GraalVM: -1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **macOS** for the operating system, **x64** or **aarch64** for the architecture, and download. It will download Oracle GraalVM. -To download GraalVM Community Edition, go to the [GraalVM Releases repository on GitHub](https://github.com/graalvm/graalvm-ce-builds/releases). +1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **macOS** for the operating system, **x64** or **aarch64** for the architecture, and download. It will download Oracle GraalVM. 2. Unzip the archive. ```shell @@ -34,7 +33,7 @@ To download GraalVM Community Edition, go to the [GraalVM Releases repository on To verify if the move is successful and to get a list of all installed JDKs, run `/usr/libexec/java_home -V`. 4. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment: - - Point the `PATH` environment variable to the GraalVM _bin_ directory: + - Set the value of the `PATH` environment variable to the GraalVM _bin_ directory: ```shell export PATH=/Library/Java/JavaVirtualMachines//Contents/Home/bin:$PATH ``` diff --git a/docs/getting-started/graalvm-community/windows.md b/docs/getting-started/graalvm-community/windows.md index 6d6c87c8f3af..b84984064693 100644 --- a/docs/getting-started/graalvm-community/windows.md +++ b/docs/getting-started/graalvm-community/windows.md @@ -12,15 +12,14 @@ You can install it on Windows from an archive file (_zip_). Follow these steps to install GraalVM: -1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **Windows** for the operating system, and download. It will download Oracle GraalVM. -To download GraalVM Community Edition, go to the [GraalVM Releases repository on GitHub](https://github.com/graalvm/graalvm-ce-builds/releases). +1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **Windows** for the operating system, and download. It will download Oracle GraalVM. -2. Change the directory to the location where you want to install GraalVM, then move the _.zip_ archive file to it. +2. Change to the directory where you want to install GraalVM, then move the _.zip_ archive file to it. 3. Unzip the archive to your file system. 4. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment. Setting environment variables via the command line will work the same way for Windows 8, 10, and 11. - - Point the `PATH` environment variable to the GraalVM _bin_ directory: + - Set the value of the `PATH` environment variable to the GraalVM _bin_ directory: ```shell setx /M PATH "C:\Progra~1\Java\\bin;%PATH%" ``` @@ -39,11 +38,11 @@ To download GraalVM Community Edition, go to the [GraalVM Releases repository on Alternatively, you can set up environment variables through a Windows GUI: 1. Go to Windows Start Menu - Settings - ... - Advanced. -2. Click **Environment Variables**. In the section System Variables find the `JAVA_HOME` variable and select it. +2. Click **Environment Variables**. In the section "System Variables" find the `JAVA_HOME` variable and select it. 3. Click **Edit**. 4. Click **New**. 5. Click **Browse** to find the directory to add. Confirm by clicking **OK**. -6. Restart Command Prompt to reload the environment variables. +6. Restart the Command Prompt to reload the environment variables. Repeat the same for the `PATH` environment variable. diff --git a/docs/getting-started/graalvm-enterprise/installation-linux.md b/docs/getting-started/graalvm-enterprise/installation-linux.md index e6ba17388460..e08f1fba9ef9 100644 --- a/docs/getting-started/graalvm-enterprise/installation-linux.md +++ b/docs/getting-started/graalvm-enterprise/installation-linux.md @@ -9,7 +9,7 @@ Oracle GraalVM is available for Linux on x64 and AArch64 architectures. You can install Oracle GraalVM on Linux from an archive (_.tar.gz_) for the current user into any location, without affecting other JDK installations. ### Note on AArch64 Distribution -This distribution can be installed on Oracle Linux and Red Hat Enterprise Linux(RHEL) systems for the AArch64 architecture. +This distribution can be installed on Oracle Linux and Red Hat Enterprise Linux (RHEL) systems for the AArch64 architecture. Follow these steps to install Oracle GraalVM: @@ -23,7 +23,7 @@ Select the preferred Oracle GraalVM version, **17** or **20** for the Java versi tar -xzf graalvm-jdk-_linux-.tar.gz ``` 4. There can be multiple JDKs installed on your machine. The next step is to configure your runtime environment: - - Point the `PATH` environment variable to the Oracle GraalVM _bin_ directory: + - Set the value of the `PATH` environment variable to the GraalVM _bin_ directory: ```shell export PATH=/path/to//bin:$PATH ``` diff --git a/docs/getting-started/graalvm-enterprise/installation-macos.md b/docs/getting-started/graalvm-enterprise/installation-macos.md index d30a331e04ba..e5d402032f1f 100644 --- a/docs/getting-started/graalvm-enterprise/installation-macos.md +++ b/docs/getting-started/graalvm-enterprise/installation-macos.md @@ -32,7 +32,7 @@ Select the preferred Oracle GraalVM version, **17** or **20** for the Java versi To verify if the move is successful and to get a list of all installed JDKs, run `/usr/libexec/java_home -V`. 4. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment: - - Point the `PATH` environment variable to the Oracle GraalVM _bin_ directory: + - Set the value of the `PATH` environment variable to the GraalVM _bin_ directory: ```shell export PATH=/Library/Java/JavaVirtualMachines//Contents/Home/bin:$PATH ``` diff --git a/docs/getting-started/graalvm-enterprise/installation-windows.md b/docs/getting-started/graalvm-enterprise/installation-windows.md index c239383e6d0b..fc1e1bc910a8 100644 --- a/docs/getting-started/graalvm-enterprise/installation-windows.md +++ b/docs/getting-started/graalvm-enterprise/installation-windows.md @@ -17,7 +17,7 @@ Select the preferred Oracle GraalVM version, **17** or **20** for the Java versi 3. Unzip the archive to your file system. 4. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment. Setting environment variables via the command line will work the same way for Windows 8, 10, and 11. - - Point the `PATH` environment variable to the Oracle GraalVM _bin_ directory: + - Set the value of the `PATH` environment variable to the GraalVM _bin_ directory: ```shell setx /M PATH "C:\Progra~1\Java\\bin;%PATH%" ``` diff --git a/docs/introduction.md b/docs/introduction.md index 0332fe80475c..614cd8a7c421 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -37,9 +37,9 @@ See the [installation guide](getting-started/graalvm-community/installation.md) ## Features Support -GraalVM technologies are distributed as supported and experimental. +GraalVM technologies are distributed as _supported_ or _experimental_. -Experimental features are being considered for future versions of GraalVM and are not meant to be used in production. +_Experimental_ features are being considered for future versions of GraalVM and are **not** meant to be used in production. The development team welcomes feedback on experimental features, but users should be aware that experimental features might never be included in a final version, or might change significantly before being considered stable. The following table lists stable and experimental features in GraalVM Community Edition by platform. From 28e748fc2464a85c5ba115ad44c619aac700751c Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Wed, 7 Jun 2023 14:33:40 +0300 Subject: [PATCH 14/72] Revert Installation to Getting Started (cherry picked from commit f4adc2793dcdafe634a9190ee2b8e059e3f13c4e) --- docs/enterprise-overview/overview.md | 2 +- .../graalvm-community/{installation.md => getting-started.md} | 0 docs/getting-started/graalvm-community/windows.md | 2 +- .../{installation.md => getting-started.md} | 2 +- docs/getting-started/graalvm-enterprise/installation-linux.md | 4 ++-- docs/getting-started/graalvm-enterprise/installation-macos.md | 2 +- .../graalvm-enterprise/installation-windows.md | 2 +- docs/introduction.md | 4 ++-- docs/tools/tools.md | 1 + docs/tools/vscode/graalvm/README.md | 2 +- 10 files changed, 11 insertions(+), 10 deletions(-) rename docs/getting-started/graalvm-community/{installation.md => getting-started.md} (100%) rename docs/getting-started/graalvm-enterprise/{installation.md => getting-started.md} (99%) diff --git a/docs/enterprise-overview/overview.md b/docs/enterprise-overview/overview.md index 1019b6fa5094..64fd9c195e94 100644 --- a/docs/enterprise-overview/overview.md +++ b/docs/enterprise-overview/overview.md @@ -33,7 +33,7 @@ Oracle GraalVM's key benefits are: ## What to Read Next -Start with installing Oracle GraalVM by following the [installation guide](../getting-started/graalvm-enterprise/installation.md). +Start with installing Oracle GraalVM by following the [installation guide](../getting-started/graalvm-enterprise/getting-started.md). Whether you are new to Oracle GraalVM and Native Image or have little experience using it, continue to [Getting Started](../reference-manual/native-image/README.md). diff --git a/docs/getting-started/graalvm-community/installation.md b/docs/getting-started/graalvm-community/getting-started.md similarity index 100% rename from docs/getting-started/graalvm-community/installation.md rename to docs/getting-started/graalvm-community/getting-started.md diff --git a/docs/getting-started/graalvm-community/windows.md b/docs/getting-started/graalvm-community/windows.md index b84984064693..6664e8a46ad0 100644 --- a/docs/getting-started/graalvm-community/windows.md +++ b/docs/getting-started/graalvm-community/windows.md @@ -10,7 +10,7 @@ permalink: /docs/getting-started/windows/ GraalVM Community Edition is available for Windows on the x64 architecture. You can install it on Windows from an archive file (_zip_). -Follow these steps to install GraalVM: +Follow these steps to install GraalVM: 1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **Windows** for the operating system, and download. It will download Oracle GraalVM. diff --git a/docs/getting-started/graalvm-enterprise/installation.md b/docs/getting-started/graalvm-enterprise/getting-started.md similarity index 99% rename from docs/getting-started/graalvm-enterprise/installation.md rename to docs/getting-started/graalvm-enterprise/getting-started.md index f2b64f10f805..950f332a5ebc 100644 --- a/docs/getting-started/graalvm-enterprise/installation.md +++ b/docs/getting-started/graalvm-enterprise/getting-started.md @@ -3,7 +3,7 @@ layout: ohc permalink: /getting-started/ --- -# Oracle GraalVM Installation +# Getting Started with Oracle GraalVM Oracle GraalVM compiles your Java applications ahead of time into standalone binaries that start instantly, provide peak performance with no warmup, and use fewer resources. diff --git a/docs/getting-started/graalvm-enterprise/installation-linux.md b/docs/getting-started/graalvm-enterprise/installation-linux.md index e08f1fba9ef9..4a8c9bf25188 100644 --- a/docs/getting-started/graalvm-enterprise/installation-linux.md +++ b/docs/getting-started/graalvm-enterprise/installation-linux.md @@ -13,7 +13,7 @@ This distribution can be installed on Oracle Linux and Red Hat Enterprise Linux Follow these steps to install Oracle GraalVM: -1. Navigate to [Oracle Java Downloads](https://www.oracle.com/uk/java/technologies/downloads/). +1. Navigate to [Oracle Java Downloads](https://www.oracle.com/java/technologies/downloads/). Select the preferred Oracle GraalVM version, **17** or **20** for the Java version, **Linux** for the operating system, and the architecture. Start downloading. 2. Change directory to the location where you want to install Oracle GraalVM, then move the _.tar.gz_ file to that directory. @@ -33,4 +33,4 @@ Select the preferred Oracle GraalVM version, **17** or **20** for the Java versi ``` 5. To check whether the installation was successful, run the `java -version` command. -Optionally, you can specify Oracle GraalVM as the default JRE or JDK installation in your Java IDE. \ No newline at end of file +Optionally, you can use Oracle GraalVM as the default JRE or JDK installation in your Java IDE. \ No newline at end of file diff --git a/docs/getting-started/graalvm-enterprise/installation-macos.md b/docs/getting-started/graalvm-enterprise/installation-macos.md index e5d402032f1f..66d4e2f1dab1 100644 --- a/docs/getting-started/graalvm-enterprise/installation-macos.md +++ b/docs/getting-started/graalvm-enterprise/installation-macos.md @@ -11,7 +11,7 @@ Note that in macOS, the JDK installation path is: _/Library/Java/JavaVirtualMach Follow these steps to install Oracle GraalVM: -1. Navigate to [Oracle Java Downloads](https://www.oracle.com/uk/java/technologies/downloads/). +1. Navigate to [Oracle Java Downloads](https://www.oracle.com/java/technologies/downloads/). Select the preferred Oracle GraalVM version, **17** or **20** for the Java version, **macOS** for the operating system, and the architecture. Start downloading. 2. Unzip the archive: diff --git a/docs/getting-started/graalvm-enterprise/installation-windows.md b/docs/getting-started/graalvm-enterprise/installation-windows.md index fc1e1bc910a8..bfd930da662a 100644 --- a/docs/getting-started/graalvm-enterprise/installation-windows.md +++ b/docs/getting-started/graalvm-enterprise/installation-windows.md @@ -9,7 +9,7 @@ Oracle GraalVM is available for Windows on the x64 architecture. Follow these steps to install Oracle GraalVM: -1. Navigate to [Oracle Java Downloads](https://www.oracle.com/uk/java/technologies/downloads/). +1. Navigate to [Oracle Java Downloads](https://www.oracle.com/java/technologies/downloads/). Select the preferred Oracle GraalVM version, **17** or **20** for the Java version, and **Windows** for the operating system. Start downloading. 2. Change the directory to the location where you want to install GraalVM, then move the _.zip_ archive file to it. diff --git a/docs/introduction.md b/docs/introduction.md index 614cd8a7c421..a0b3eb4c5fd8 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -33,7 +33,7 @@ GraalVM is available as **Oracle GraalVM** and **GraalVM Community Edition**. Oracle GraalVM is based on Oracle JDK while GraalVM Community Edition is based on OpenJDK. GraalVM is available for Linux and macOS on x64 and AArch64 architectures, and for Windows on the x64 architecture. -See the [installation guide](getting-started/graalvm-community/installation.md) for installation instructions. +See the [installation guide](getting-started/graalvm-community/getting-started.md) for installation instructions. ## Features Support @@ -70,7 +70,7 @@ GraalVM Community Edition is free to use for any purpose and comes with no strin ## What to Read Next -Start with installing GraalVM by following the [installation guide](getting-started/graalvm-community/installation.md). +Start with installing GraalVM by following the [installation guide](getting-started/graalvm-community/getting-started.md). Whether you are new to GraalVM Native Image or have little experience using it, continue to [Getting Started](reference-manual/native-image/README.md). diff --git a/docs/tools/tools.md b/docs/tools/tools.md index aaaf326d7250..789e3861aaa8 100644 --- a/docs/tools/tools.md +++ b/docs/tools/tools.md @@ -19,6 +19,7 @@ Learn more about each of the tools: * [GraalVM Insight](insight/README.md) * [Profiling Command Line Tools](profiling.md) * [Code Coverage Command Line Tool](code-coverage.md) +* [Ideal Graph Visualizer](ideal-graph-visualizer.md) * [Chrome Debugger](chrome-debugger.md) * [Language Server Protocol](lsp.md) * [Debug Adapter Protocol](dap.md) diff --git a/docs/tools/vscode/graalvm/README.md b/docs/tools/vscode/graalvm/README.md index 59bace03108a..ee3306babed8 100644 --- a/docs/tools/vscode/graalvm/README.md +++ b/docs/tools/vscode/graalvm/README.md @@ -58,7 +58,7 @@ The installation starts immediately. If you are installing Oracle GraalVM, the installation wizard downloads a package from Oracle's storage point and displays progress. If you are installing GraalVM Community Edition, the wizard downloads the package from [Github](https://github.com/graalvm/graalvm-ce-builds/releases) and displays progress. -> Note: This installation option offers the latest verion of GraalVM. If you would like to install an older version, follow [these steps](../../../getting-started/graalvm-community/installation.md). +> Note: This installation option offers the latest verion of GraalVM. If you would like to install an older version, follow [these steps](../../../getting-started/graalvm-community/getting-started.md). Once the installation completes, the **Install Optional GraalVM Components** window pops up prompting you to install additional language runtimes and utilities (Java on Truffle, JavaScript, Node.js, LLVM toolchain, Python, etc.): From cae0b125f6938d5871f78c1a010a9062f7e50703 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Wed, 7 Jun 2023 14:46:36 +0300 Subject: [PATCH 15/72] Change filenames from installation-.md to .md; Update rel paths (cherry picked from commit 8478188fdcecfa27e2070daa944a5d1616f12a70) --- docs/enterprise-overview/support.md | 6 +++--- docs/getting-started/graalvm-enterprise/getting-started.md | 6 +++--- .../graalvm-enterprise/{installation-linux.md => linux.md} | 0 .../graalvm-enterprise/{installation-macos.md => macos.md} | 0 .../{installation-windows.md => windows.md} | 0 5 files changed, 6 insertions(+), 6 deletions(-) rename docs/getting-started/graalvm-enterprise/{installation-linux.md => linux.md} (100%) rename docs/getting-started/graalvm-enterprise/{installation-macos.md => macos.md} (100%) rename docs/getting-started/graalvm-enterprise/{installation-windows.md => windows.md} (100%) diff --git a/docs/enterprise-overview/support.md b/docs/enterprise-overview/support.md index 6a72cf745684..00631d538117 100644 --- a/docs/enterprise-overview/support.md +++ b/docs/enterprise-overview/support.md @@ -19,9 +19,9 @@ The following platforms are certified for Oracle GraalVM: | Operating System | Version | Architecture | Installation Guide | |------------------------------------ |-------------- |-------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Oracle Linux | 7, 8 | x64, AArch64| [Installation Guide for Oracle Linux](../getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md) | -| Red Hat Enterprise Linux(RHEL) | 7, 8 | x64 | [Installation Guide for Linux](../getting-started/graalvm-enterprise/installation-linux.md) | -| macOS | 10.14 (Mojave), 10.15 (Catalina), 11 (Big Sur), 12.4 (Monterey), 13.2 (Ventura) | x64, AArch64 | [Installation Guide for macOS](../getting-started/graalvm-enterprise/installation-macos.md) | -| Microsoft Windows | Server 2016, 2019 | x64 | [Installation Guide for Windows](../getting-started/graalvm-enterprise/installation-windows.md) | +| Red Hat Enterprise Linux(RHEL) | 7, 8 | x64 | [Installation Guide for Linux](../getting-started/graalvm-enterprise/linux.md) | +| macOS | 10.14 (Mojave), 10.15 (Catalina), 11 (Big Sur), 12.4 (Monterey), 13.2 (Ventura) | x64, AArch64 | [Installation Guide for macOS](../getting-started/graalvm-enterprise/macos.md) | +| Microsoft Windows | Server 2016, 2019 | x64 | [Installation Guide for Windows](../getting-started/graalvm-enterprise/windows.md) | ## Features Support diff --git a/docs/getting-started/graalvm-enterprise/getting-started.md b/docs/getting-started/graalvm-enterprise/getting-started.md index 950f332a5ebc..2fa581cb0b91 100644 --- a/docs/getting-started/graalvm-enterprise/getting-started.md +++ b/docs/getting-started/graalvm-enterprise/getting-started.md @@ -26,9 +26,9 @@ Choose your operating system and proceed to the installation steps for your spec * [Cloud Shell](oci/cloud-shell.md) * [Compute with Oracle Linux 7/8](oci/installation-compute-instance-with-OL.md) * [DevOps Build Pipelines](oci/installation-devops-build-pipeline.md) -* [Linux](installation-linux.md) -* [macOS](installation-macos.md) -* [Windows](installation-windows.md) +* [Linux](linux.md) +* [macOS](macos.md) +* [Windows](windows.md) * [Container Images](container-images/graalvm-ee-container-images.md) ## Start Running Applications diff --git a/docs/getting-started/graalvm-enterprise/installation-linux.md b/docs/getting-started/graalvm-enterprise/linux.md similarity index 100% rename from docs/getting-started/graalvm-enterprise/installation-linux.md rename to docs/getting-started/graalvm-enterprise/linux.md diff --git a/docs/getting-started/graalvm-enterprise/installation-macos.md b/docs/getting-started/graalvm-enterprise/macos.md similarity index 100% rename from docs/getting-started/graalvm-enterprise/installation-macos.md rename to docs/getting-started/graalvm-enterprise/macos.md diff --git a/docs/getting-started/graalvm-enterprise/installation-windows.md b/docs/getting-started/graalvm-enterprise/windows.md similarity index 100% rename from docs/getting-started/graalvm-enterprise/installation-windows.md rename to docs/getting-started/graalvm-enterprise/windows.md From 6f6c113301affa62334d82189259bc69a6823b76 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Wed, 7 Jun 2023 15:47:36 +0300 Subject: [PATCH 16/72] Remove extra information in CE installation guides (cherry picked from commit 011acc3d8b48049aeba7532c06dbf54f6cb8acb4) --- docs/getting-started/graalvm-community/linux.md | 6 +++--- docs/getting-started/graalvm-community/macos.md | 2 +- docs/getting-started/graalvm-community/windows.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/getting-started/graalvm-community/linux.md b/docs/getting-started/graalvm-community/linux.md index 9a560f267a85..e4e1fb693632 100644 --- a/docs/getting-started/graalvm-community/linux.md +++ b/docs/getting-started/graalvm-community/linux.md @@ -13,7 +13,7 @@ You can install GraalVM on Linux from an archive (_.tar.gz_) for the current use Follow these steps to install GraalVM: -1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **Linux** for the operating system, **x64** or **aarch64** for the architecture, and download. It will download Oracle GraalVM. +1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **Linux** for the operating system, **x64** or **aarch64** for the architecture, and download. 2. Change to directory where you want to install GraalVM, then move the _.tar.gz_ file to that directory. @@ -26,10 +26,10 @@ Follow these steps to install GraalVM: ```shell export PATH=/path/to//bin:$PATH ``` - - Set the `JAVA_HOME` environment variable to resolve to the installation directory: + - Set the value of the `JAVA_HOME` environment variable to the installation directory: ```shell export JAVA_HOME=/path/to/ ``` -5. To check whether the installation was successful, run the `java -version` command. +5. To confirm that the installation was successful, run the `java -version` command. Optionally, you can specify GraalVM as the default JRE or JDK installation in your Java IDE. \ No newline at end of file diff --git a/docs/getting-started/graalvm-community/macos.md b/docs/getting-started/graalvm-community/macos.md index b66d437aa0dc..0afae18acfa0 100644 --- a/docs/getting-started/graalvm-community/macos.md +++ b/docs/getting-started/graalvm-community/macos.md @@ -13,7 +13,7 @@ Note that on macOS the JDK installation path is: _/Library/Java/JavaVirtualMachi Follow these steps to install GraalVM: -1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **macOS** for the operating system, **x64** or **aarch64** for the architecture, and download. It will download Oracle GraalVM. +1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **macOS** for the operating system, **x64** or **aarch64** for the architecture, and download. 2. Unzip the archive. ```shell diff --git a/docs/getting-started/graalvm-community/windows.md b/docs/getting-started/graalvm-community/windows.md index 6664e8a46ad0..eba35126c187 100644 --- a/docs/getting-started/graalvm-community/windows.md +++ b/docs/getting-started/graalvm-community/windows.md @@ -12,7 +12,7 @@ You can install it on Windows from an archive file (_zip_). Follow these steps to install GraalVM: -1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **Windows** for the operating system, and download. It will download Oracle GraalVM. +1. Navigate to the [GraalVM Downloads page](https://www.graalvm.org/downloads/). Select **17** or **20** for the Java version, **Windows** for the operating system, and download. 2. Change to the directory where you want to install GraalVM, then move the _.zip_ archive file to it. From 077b3cb36f9cfbe67ba216220b2d3149b21b2a11 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Wed, 7 Jun 2023 18:40:37 +0300 Subject: [PATCH 17/72] Use regular docs layout for everything except NI Guides (cherry picked from commit f6980f0a3abe10c62c8dbb16a359f33b03380be4) --- .../native-image/AutomaticMetadataCollection.md | 2 +- docs/reference-manual/native-image/BuildConfiguration.md | 2 +- docs/reference-manual/native-image/BuildOptions.md | 2 +- docs/reference-manual/native-image/BuildOutput.md | 2 +- docs/reference-manual/native-image/BuildOverview.md | 2 +- docs/reference-manual/native-image/Bundles.md | 2 +- docs/reference-manual/native-image/C-API.md | 2 +- docs/reference-manual/native-image/CertificateManagement.md | 2 +- docs/reference-manual/native-image/ClassInitialization.md | 2 +- docs/reference-manual/native-image/Compatibility.md | 2 +- docs/reference-manual/native-image/DebugInfo.md | 2 +- docs/reference-manual/native-image/DebuggingAndDiagnostics.md | 2 +- docs/reference-manual/native-image/DynamicFeatures.md | 2 +- docs/reference-manual/native-image/DynamicProxy.md | 2 +- docs/reference-manual/native-image/ExperimentalAgentOptions.md | 2 +- docs/reference-manual/native-image/HostedvsRuntimeOptions.md | 2 +- docs/reference-manual/native-image/InspectTool.md | 2 +- docs/reference-manual/native-image/InteropWithNativeCode.md | 2 +- docs/reference-manual/native-image/JCASecurityServices.md | 2 +- docs/reference-manual/native-image/JFR.md | 2 +- docs/reference-manual/native-image/JNI.md | 2 +- docs/reference-manual/native-image/JNIInvocationAPI.md | 2 +- docs/reference-manual/native-image/LLVMBackend.md | 2 +- docs/reference-manual/native-image/MemoryManagement.md | 2 +- docs/reference-manual/native-image/NativeImageBasics.md | 2 +- .../native-image/OptimizationsAndPerformance.md | 2 +- docs/reference-manual/native-image/README.md | 2 +- docs/reference-manual/native-image/ReachabilityMetadata.md | 2 +- docs/reference-manual/native-image/Reflection.md | 2 +- docs/reference-manual/native-image/Resources.md | 2 +- docs/reference-manual/native-image/StaticAnalysisReports.md | 2 +- docs/reference-manual/native-image/URLProtocols.md | 2 +- docs/reference-manual/native-image/WorkshopsAndLabs.md | 2 +- docs/reference-manual/native-image/contribute/CodeStyle.md | 2 +- docs/reference-manual/native-image/contribute/Contributing.md | 2 +- docs/security/JipherJCE.md | 2 +- 36 files changed, 36 insertions(+), 36 deletions(-) diff --git a/docs/reference-manual/native-image/AutomaticMetadataCollection.md b/docs/reference-manual/native-image/AutomaticMetadataCollection.md index 87667ec20b14..de258e3c700e 100644 --- a/docs/reference-manual/native-image/AutomaticMetadataCollection.md +++ b/docs/reference-manual/native-image/AutomaticMetadataCollection.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: metadata link_title: Collect Metadata with the Tracing Agent permalink: /reference-manual/native-image/metadata/AutomaticMetadataCollection/ diff --git a/docs/reference-manual/native-image/BuildConfiguration.md b/docs/reference-manual/native-image/BuildConfiguration.md index 0a7ab9a691ca..9aac30b6f340 100644 --- a/docs/reference-manual/native-image/BuildConfiguration.md +++ b/docs/reference-manual/native-image/BuildConfiguration.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: build-overview link_title: Build Configuration permalink: /reference-manual/native-image/overview/BuildConfiguration/ diff --git a/docs/reference-manual/native-image/BuildOptions.md b/docs/reference-manual/native-image/BuildOptions.md index 995ffb606252..bf4aa06a6118 100644 --- a/docs/reference-manual/native-image/BuildOptions.md +++ b/docs/reference-manual/native-image/BuildOptions.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: build-overview link_title: Build Options permalink: /reference-manual/native-image/overview/BuildOptions/ diff --git a/docs/reference-manual/native-image/BuildOutput.md b/docs/reference-manual/native-image/BuildOutput.md index 976a843be2a3..8885599a074c 100644 --- a/docs/reference-manual/native-image/BuildOutput.md +++ b/docs/reference-manual/native-image/BuildOutput.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: build-overview link_title: Build Output permalink: /reference-manual/native-image/overview/BuildOutput/ diff --git a/docs/reference-manual/native-image/BuildOverview.md b/docs/reference-manual/native-image/BuildOverview.md index a04c490556b0..d7d36c4e2ca8 100644 --- a/docs/reference-manual/native-image/BuildOverview.md +++ b/docs/reference-manual/native-image/BuildOverview.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: build-overview link_title: Build Overview permalink: /reference-manual/native-image/overview/Build-Overview/ diff --git a/docs/reference-manual/native-image/Bundles.md b/docs/reference-manual/native-image/Bundles.md index c3f98d4a23ea..593e6669a7de 100644 --- a/docs/reference-manual/native-image/Bundles.md +++ b/docs/reference-manual/native-image/Bundles.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: build-overview link_title: Native Image Bundles permalink: /reference-manual/native-image/overview/Bundles/ diff --git a/docs/reference-manual/native-image/C-API.md b/docs/reference-manual/native-image/C-API.md index 5e0ced23260b..3b8ac828bf41 100644 --- a/docs/reference-manual/native-image/C-API.md +++ b/docs/reference-manual/native-image/C-API.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: native-code-interoperability link_title: C API permalink: /reference-manual/native-image/native-code-interoperability/C-API/ diff --git a/docs/reference-manual/native-image/CertificateManagement.md b/docs/reference-manual/native-image/CertificateManagement.md index 3a9b42d1d871..784a9da11a5c 100644 --- a/docs/reference-manual/native-image/CertificateManagement.md +++ b/docs/reference-manual/native-image/CertificateManagement.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: dynamic-features link_title: Certificate Management permalink: /reference-manual/native-image/dynamic-features/CertificateManagement/ diff --git a/docs/reference-manual/native-image/ClassInitialization.md b/docs/reference-manual/native-image/ClassInitialization.md index de1e26275b69..73f1b5c37a21 100644 --- a/docs/reference-manual/native-image/ClassInitialization.md +++ b/docs/reference-manual/native-image/ClassInitialization.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: optimizations-and-performance link_title: Class Initialization permalink: /reference-manual/native-image/optimizations-and-performance/ClassInitialization/ diff --git a/docs/reference-manual/native-image/Compatibility.md b/docs/reference-manual/native-image/Compatibility.md index 633be781d3a8..85f16c865fea 100644 --- a/docs/reference-manual/native-image/Compatibility.md +++ b/docs/reference-manual/native-image/Compatibility.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: metadata link_title: Compatibility Guide permalink: /reference-manual/native-image/metadata/Compatibility/ diff --git a/docs/reference-manual/native-image/DebugInfo.md b/docs/reference-manual/native-image/DebugInfo.md index 9d7e41ea5bfe..09ede78e2a52 100644 --- a/docs/reference-manual/native-image/DebugInfo.md +++ b/docs/reference-manual/native-image/DebugInfo.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: debugging-and-diagnostics link_title: Debug Info Feature permalink: /reference-manual/native-image/debugging-and-diagnostics/DebugInfo/ diff --git a/docs/reference-manual/native-image/DebuggingAndDiagnostics.md b/docs/reference-manual/native-image/DebuggingAndDiagnostics.md index 012498370d60..039663677e15 100644 --- a/docs/reference-manual/native-image/DebuggingAndDiagnostics.md +++ b/docs/reference-manual/native-image/DebuggingAndDiagnostics.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: debugging-and-diagnostics link_title: Debugging and Diagnostics permalink: /reference-manual/native-image/debugging-and-diagnostics/ diff --git a/docs/reference-manual/native-image/DynamicFeatures.md b/docs/reference-manual/native-image/DynamicFeatures.md index 5c3675dbff56..221fcd049177 100644 --- a/docs/reference-manual/native-image/DynamicFeatures.md +++ b/docs/reference-manual/native-image/DynamicFeatures.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: dynamic-features link_title: Dynamic Features permalink: /reference-manual/native-image/dynamic-features/ diff --git a/docs/reference-manual/native-image/DynamicProxy.md b/docs/reference-manual/native-image/DynamicProxy.md index 6807e00ee6c4..bfe8577d711c 100644 --- a/docs/reference-manual/native-image/DynamicProxy.md +++ b/docs/reference-manual/native-image/DynamicProxy.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: dynamic-features link_title: Dynamic Proxy permalink: /reference-manual/native-image/dynamic-features/DynamicProxy/ diff --git a/docs/reference-manual/native-image/ExperimentalAgentOptions.md b/docs/reference-manual/native-image/ExperimentalAgentOptions.md index 2a43017a8c38..72d2c42ae987 100644 --- a/docs/reference-manual/native-image/ExperimentalAgentOptions.md +++ b/docs/reference-manual/native-image/ExperimentalAgentOptions.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: metadata link_title: Experimental Agent Options permalink: /reference-manual/native-image/metadata/ExperimentalAgentOptions/ diff --git a/docs/reference-manual/native-image/HostedvsRuntimeOptions.md b/docs/reference-manual/native-image/HostedvsRuntimeOptions.md index e3a498e4d9f7..b6521ef2e328 100644 --- a/docs/reference-manual/native-image/HostedvsRuntimeOptions.md +++ b/docs/reference-manual/native-image/HostedvsRuntimeOptions.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: contributing link_title: Hosted and Runtime Options permalink: /reference-manual/native-image/overview/HostedvsRuntimeOptions/ diff --git a/docs/reference-manual/native-image/InspectTool.md b/docs/reference-manual/native-image/InspectTool.md index 62c420b43bc7..c52dd4af5f32 100644 --- a/docs/reference-manual/native-image/InspectTool.md +++ b/docs/reference-manual/native-image/InspectTool.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: debugging-and-diagnostics link_title: Inspection Tool permalink: /reference-manual/native-image/debugging-and-diagnostics/InspectTool/ diff --git a/docs/reference-manual/native-image/InteropWithNativeCode.md b/docs/reference-manual/native-image/InteropWithNativeCode.md index 92cbac434390..0b2e5d880e9d 100644 --- a/docs/reference-manual/native-image/InteropWithNativeCode.md +++ b/docs/reference-manual/native-image/InteropWithNativeCode.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: native-code-interoperability link_title: Interoperability with Native Code permalink: /reference-manual/native-image/native-code-interoperability/ diff --git a/docs/reference-manual/native-image/JCASecurityServices.md b/docs/reference-manual/native-image/JCASecurityServices.md index 3aa508bc33d9..9abb01107da4 100644 --- a/docs/reference-manual/native-image/JCASecurityServices.md +++ b/docs/reference-manual/native-image/JCASecurityServices.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: dynamic-features link_title: JCA Security Services permalink: /reference-manual/native-image/dynamic-features/JCASecurityServices/ diff --git a/docs/reference-manual/native-image/JFR.md b/docs/reference-manual/native-image/JFR.md index cfe23e25a106..7fe5e0bd3848 100644 --- a/docs/reference-manual/native-image/JFR.md +++ b/docs/reference-manual/native-image/JFR.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: debugging-and-diagnostics link_title: JDK Flight Recorder permalink: /reference-manual/native-image/debugging-and-diagnostics/JFR/ diff --git a/docs/reference-manual/native-image/JNI.md b/docs/reference-manual/native-image/JNI.md index 5918a794854a..1ce2af9b3172 100644 --- a/docs/reference-manual/native-image/JNI.md +++ b/docs/reference-manual/native-image/JNI.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: dynamic-features link_title: Java Native Interface permalink: /reference-manual/native-image/dynamic-features/JNI/ diff --git a/docs/reference-manual/native-image/JNIInvocationAPI.md b/docs/reference-manual/native-image/JNIInvocationAPI.md index 0aaacbba1604..05fe8dffe698 100644 --- a/docs/reference-manual/native-image/JNIInvocationAPI.md +++ b/docs/reference-manual/native-image/JNIInvocationAPI.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: native-code-interoperability link_title: JNI Invocation API permalink: /reference-manual/native-image/native-code-interoperability/JNIInvocationAPI/ diff --git a/docs/reference-manual/native-image/LLVMBackend.md b/docs/reference-manual/native-image/LLVMBackend.md index 64bc885b1686..93b749a74b34 100644 --- a/docs/reference-manual/native-image/LLVMBackend.md +++ b/docs/reference-manual/native-image/LLVMBackend.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: native-image link_title: LLVM Backend permalink: /reference-manual/native-image/LLVMBackend/ diff --git a/docs/reference-manual/native-image/MemoryManagement.md b/docs/reference-manual/native-image/MemoryManagement.md index 7cef44583232..d37c03e168b7 100644 --- a/docs/reference-manual/native-image/MemoryManagement.md +++ b/docs/reference-manual/native-image/MemoryManagement.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: optimizations-and-performance link_title: Memory Management permalink: /reference-manual/native-image/optimizations-and-performance/MemoryManagement/ diff --git a/docs/reference-manual/native-image/NativeImageBasics.md b/docs/reference-manual/native-image/NativeImageBasics.md index 08a007bc2793..640a726f4955 100644 --- a/docs/reference-manual/native-image/NativeImageBasics.md +++ b/docs/reference-manual/native-image/NativeImageBasics.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: native-image link_title: Native Image Basics permalink: /reference-manual/native-image/basics/ diff --git a/docs/reference-manual/native-image/OptimizationsAndPerformance.md b/docs/reference-manual/native-image/OptimizationsAndPerformance.md index 10ce05a61ac5..7f2323e25b75 100644 --- a/docs/reference-manual/native-image/OptimizationsAndPerformance.md +++ b/docs/reference-manual/native-image/OptimizationsAndPerformance.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: optimizations-and-performance link_title: Optimizations and Performance permalink: /reference-manual/native-image/optimizations-and-performance/ diff --git a/docs/reference-manual/native-image/README.md b/docs/reference-manual/native-image/README.md index ccaf8a8a72c9..8f5df0d32424 100644 --- a/docs/reference-manual/native-image/README.md +++ b/docs/reference-manual/native-image/README.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: native-image link_title: Native Image permalink: /reference-manual/native-image/ diff --git a/docs/reference-manual/native-image/ReachabilityMetadata.md b/docs/reference-manual/native-image/ReachabilityMetadata.md index e298778e0302..94ddca5db9ab 100644 --- a/docs/reference-manual/native-image/ReachabilityMetadata.md +++ b/docs/reference-manual/native-image/ReachabilityMetadata.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: metadata link_title: Reachability Metadata permalink: /reference-manual/native-image/metadata/ diff --git a/docs/reference-manual/native-image/Reflection.md b/docs/reference-manual/native-image/Reflection.md index 1903e1df3042..1e4cacfbaf7b 100644 --- a/docs/reference-manual/native-image/Reflection.md +++ b/docs/reference-manual/native-image/Reflection.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: dynamic-features link_title: Reflection permalink: /reference-manual/native-image/dynamic-features/Reflection/ diff --git a/docs/reference-manual/native-image/Resources.md b/docs/reference-manual/native-image/Resources.md index 35244324face..2e2c1a62e872 100644 --- a/docs/reference-manual/native-image/Resources.md +++ b/docs/reference-manual/native-image/Resources.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: dynamic-features link_title: Accessing Resources permalink: /reference-manual/native-image/dynamic-features/Resources/ diff --git a/docs/reference-manual/native-image/StaticAnalysisReports.md b/docs/reference-manual/native-image/StaticAnalysisReports.md index d849799aceef..1c6df41e05eb 100644 --- a/docs/reference-manual/native-image/StaticAnalysisReports.md +++ b/docs/reference-manual/native-image/StaticAnalysisReports.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: debugging-and-diagnostics link_title: Points-to Analysis Reports permalink: /reference-manual/native-image/debugging-and-diagnostics/StaticAnalysisReports/ diff --git a/docs/reference-manual/native-image/URLProtocols.md b/docs/reference-manual/native-image/URLProtocols.md index 54577527cfca..ff2e9d756ac4 100644 --- a/docs/reference-manual/native-image/URLProtocols.md +++ b/docs/reference-manual/native-image/URLProtocols.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: dynamic-features link_title: URL Protocols permalink: /reference-manual/native-image/dynamic-features/URLProtocols/ diff --git a/docs/reference-manual/native-image/WorkshopsAndLabs.md b/docs/reference-manual/native-image/WorkshopsAndLabs.md index f8f7ed9e330a..83bb6c3ba5d3 100644 --- a/docs/reference-manual/native-image/WorkshopsAndLabs.md +++ b/docs/reference-manual/native-image/WorkshopsAndLabs.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: native-image link_title: Workshops and Labs permalink: /reference-manual/native-image/workshops/ diff --git a/docs/reference-manual/native-image/contribute/CodeStyle.md b/docs/reference-manual/native-image/contribute/CodeStyle.md index 9b0dba3efede..ff920972b5ef 100644 --- a/docs/reference-manual/native-image/contribute/CodeStyle.md +++ b/docs/reference-manual/native-image/contribute/CodeStyle.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: contributing link_title: Code Style permalink: /reference-manual/native-image/contributing/CodeStyle/ diff --git a/docs/reference-manual/native-image/contribute/Contributing.md b/docs/reference-manual/native-image/contribute/Contributing.md index 81ff84d04383..a9ca792d9667 100644 --- a/docs/reference-manual/native-image/contribute/Contributing.md +++ b/docs/reference-manual/native-image/contribute/Contributing.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: contributing link_title: Contributing permalink: /reference-manual/native-image/contributing/ diff --git a/docs/security/JipherJCE.md b/docs/security/JipherJCE.md index 4a463d573d0b..e8387584fe75 100644 --- a/docs/security/JipherJCE.md +++ b/docs/security/JipherJCE.md @@ -1,5 +1,5 @@ --- -layout: ni-docs +layout: docs toc_group: security-guide link_title: Jipher JCE with Native Image permalink: /security-guide/native-image/Jipher/ From 9da52924f14f5e0d59f6a82aa595be08272d22b8 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Thu, 8 Jun 2023 17:20:05 +0300 Subject: [PATCH 18/72] Revert filename change because it is not propagated to docs in other languages repo (cherry picked from commit 463ae6f60bb33698d353ce84944efe2925ae97fd) --- docs/enterprise-overview/overview.md | 2 +- .../{getting-started.md => get-started-graalvm-community.md} | 0 .../{getting-started.md => get-started-graalvm-enterprise.md} | 0 docs/introduction.md | 4 ++-- docs/tools/vscode/graalvm/README.md | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) rename docs/getting-started/graalvm-community/{getting-started.md => get-started-graalvm-community.md} (100%) rename docs/getting-started/graalvm-enterprise/{getting-started.md => get-started-graalvm-enterprise.md} (100%) diff --git a/docs/enterprise-overview/overview.md b/docs/enterprise-overview/overview.md index 64fd9c195e94..37f10658c56b 100644 --- a/docs/enterprise-overview/overview.md +++ b/docs/enterprise-overview/overview.md @@ -33,7 +33,7 @@ Oracle GraalVM's key benefits are: ## What to Read Next -Start with installing Oracle GraalVM by following the [installation guide](../getting-started/graalvm-enterprise/getting-started.md). +Start with installing Oracle GraalVM by following the [installation guide](../getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md). Whether you are new to Oracle GraalVM and Native Image or have little experience using it, continue to [Getting Started](../reference-manual/native-image/README.md). diff --git a/docs/getting-started/graalvm-community/getting-started.md b/docs/getting-started/graalvm-community/get-started-graalvm-community.md similarity index 100% rename from docs/getting-started/graalvm-community/getting-started.md rename to docs/getting-started/graalvm-community/get-started-graalvm-community.md diff --git a/docs/getting-started/graalvm-enterprise/getting-started.md b/docs/getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md similarity index 100% rename from docs/getting-started/graalvm-enterprise/getting-started.md rename to docs/getting-started/graalvm-enterprise/get-started-graalvm-enterprise.md diff --git a/docs/introduction.md b/docs/introduction.md index a0b3eb4c5fd8..fc3449ebe677 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -33,7 +33,7 @@ GraalVM is available as **Oracle GraalVM** and **GraalVM Community Edition**. Oracle GraalVM is based on Oracle JDK while GraalVM Community Edition is based on OpenJDK. GraalVM is available for Linux and macOS on x64 and AArch64 architectures, and for Windows on the x64 architecture. -See the [installation guide](getting-started/graalvm-community/getting-started.md) for installation instructions. +See the [installation guide](getting-started/graalvm-community/get-started-graalvm-community.md) for installation instructions. ## Features Support @@ -70,7 +70,7 @@ GraalVM Community Edition is free to use for any purpose and comes with no strin ## What to Read Next -Start with installing GraalVM by following the [installation guide](getting-started/graalvm-community/getting-started.md). +Start with installing GraalVM by following the [installation guide](getting-started/graalvm-community/get-started-graalvm-community.md). Whether you are new to GraalVM Native Image or have little experience using it, continue to [Getting Started](reference-manual/native-image/README.md). diff --git a/docs/tools/vscode/graalvm/README.md b/docs/tools/vscode/graalvm/README.md index ee3306babed8..4829009c7068 100644 --- a/docs/tools/vscode/graalvm/README.md +++ b/docs/tools/vscode/graalvm/README.md @@ -58,7 +58,7 @@ The installation starts immediately. If you are installing Oracle GraalVM, the installation wizard downloads a package from Oracle's storage point and displays progress. If you are installing GraalVM Community Edition, the wizard downloads the package from [Github](https://github.com/graalvm/graalvm-ce-builds/releases) and displays progress. -> Note: This installation option offers the latest verion of GraalVM. If you would like to install an older version, follow [these steps](../../../getting-started/graalvm-community/getting-started.md). +> Note: This installation option offers the latest verion of GraalVM. If you would like to install an older version, follow [these steps](../../../getting-started/graalvm-community/get-started-graalvm-community.md). Once the installation completes, the **Install Optional GraalVM Components** window pops up prompting you to install additional language runtimes and utilities (Java on Truffle, JavaScript, Node.js, LLVM toolchain, Python, etc.): From 5de951b8379b7217ccd663ef8df5f3f3855e8221 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Thu, 8 Jun 2023 18:14:48 +0300 Subject: [PATCH 19/72] Use an absolute path for OHC links (cherry picked from commit da4f324cf7207bfbabf58e4b0cfd79a4ab1d9412) --- docs/introduction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/introduction.md b/docs/introduction.md index fc3449ebe677..8b0114b54a31 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -57,7 +57,7 @@ The following table lists stable and experimental features in GraalVM Community | WebAssembly | experimental | experimental | experimental | not available | experimental | -For Oracle GraalVM, check the features support list [here](enterprise-overview/support.md#features-support). +For Oracle GraalVM, check the features support list [here](https://docs.oracle.com/en/graalvm/jdk/20/docs/support/#features-support). ## Licensing and Support From c28f4d42a5f5e01fd75be6313807de93d40ff32d Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Mon, 12 Jun 2023 11:18:46 +0300 Subject: [PATCH 20/72] Improve CE install guides (cherry picked from commit 188268f012356d730c695fc5cb34abb5add580e2) --- ...md => get-started-graalvm-community.md.md} | 3 +- .../graalvm-community/linux.md | 2 +- .../graalvm-community/macos.md | 5 ++- .../graalvm-enterprise/macos.md | 3 +- docs/introduction.md | 31 +------------------ 5 files changed, 6 insertions(+), 38 deletions(-) rename docs/getting-started/graalvm-community/{get-started-graalvm-community.md => get-started-graalvm-community.md.md} (98%) diff --git a/docs/getting-started/graalvm-community/get-started-graalvm-community.md b/docs/getting-started/graalvm-community/get-started-graalvm-community.md.md similarity index 98% rename from docs/getting-started/graalvm-community/get-started-graalvm-community.md rename to docs/getting-started/graalvm-community/get-started-graalvm-community.md.md index f4d9366948a6..e8c642b65316 100644 --- a/docs/getting-started/graalvm-community/get-started-graalvm-community.md +++ b/docs/getting-started/graalvm-community/get-started-graalvm-community.md.md @@ -2,8 +2,7 @@ layout: docs toc_group: getting-started link_title: GraalVM Installation -permalink: /docs/installation/ -redirect_from: /docs/getting-started/ +permalink: /docs/getting-started/ --- # Getting Started with GraalVM diff --git a/docs/getting-started/graalvm-community/linux.md b/docs/getting-started/graalvm-community/linux.md index e4e1fb693632..980294c28b91 100644 --- a/docs/getting-started/graalvm-community/linux.md +++ b/docs/getting-started/graalvm-community/linux.md @@ -19,7 +19,7 @@ Follow these steps to install GraalVM: 3. Unzip the archive: ```shell - tar -xzf graalvm-ce-jdk-_linux-.tar.gz + tar -xzf graalvm-jdk-_linux-.tar.gz ``` 4. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment: - Set the value of the `PATH` environment variable to the GraalVM _bin_ directory: diff --git a/docs/getting-started/graalvm-community/macos.md b/docs/getting-started/graalvm-community/macos.md index 0afae18acfa0..f86abf937e31 100644 --- a/docs/getting-started/graalvm-community/macos.md +++ b/docs/getting-started/graalvm-community/macos.md @@ -17,7 +17,7 @@ Follow these steps to install GraalVM: 2. Unzip the archive. ```shell - tar -xzf graalvm-ce-jdk-_macos-.tar.gz + tar -xzf graalvm-jdk-_macos-.tar.gz ``` Alternatively, open the file in Finder. > Note: If you are using macOS Catalina and later you may need to remove the quarantine attribute: @@ -29,8 +29,7 @@ Follow these steps to install GraalVM: ```shell sudo mv graalvm-ce-jdk-_macos- /Library/Java/JavaVirtualMachines ``` - - To verify if the move is successful and to get a list of all installed JDKs, run `/usr/libexec/java_home -V`. + To verify if the move is successful and to get a list of all installed JDKs, run `/usr/libexec/java_home -V`. 4. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment: - Set the value of the `PATH` environment variable to the GraalVM _bin_ directory: diff --git a/docs/getting-started/graalvm-enterprise/macos.md b/docs/getting-started/graalvm-enterprise/macos.md index 66d4e2f1dab1..d6c17ee29e75 100644 --- a/docs/getting-started/graalvm-enterprise/macos.md +++ b/docs/getting-started/graalvm-enterprise/macos.md @@ -28,8 +28,7 @@ Select the preferred Oracle GraalVM version, **17** or **20** for the Java versi ```shell sudo mv graalvm-jdk-_macos- /Library/Java/JavaVirtualMachines ``` - -To verify if the move is successful and to get a list of all installed JDKs, run `/usr/libexec/java_home -V`. + To verify if the move is successful and to get a list of all installed JDKs, run `/usr/libexec/java_home -V`. 4. There can be multiple JDKs installed on the machine. The next step is to configure the runtime environment: - Set the value of the `PATH` environment variable to the GraalVM _bin_ directory: diff --git a/docs/introduction.md b/docs/introduction.md index 8b0114b54a31..e4ce073808e6 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -22,11 +22,6 @@ With profile-guided optimization and the G1 (Garbage-First) garbage collector, y You can use the GraalVM JDK just like any other Java Development Kit in your IDE. -* [Available Distributions](#available-distributions) -* [Features Support](#features-support) -* [Licensing and Support](#licensing-and-support) -* [What to Read Next](#what-to-read-next) - ## Available Distributions GraalVM is available as **Oracle GraalVM** and **GraalVM Community Edition**. @@ -35,33 +30,9 @@ Oracle GraalVM is based on Oracle JDK while GraalVM Community Edition is based o GraalVM is available for Linux and macOS on x64 and AArch64 architectures, and for Windows on the x64 architecture. See the [installation guide](getting-started/graalvm-community/get-started-graalvm-community.md) for installation instructions. -## Features Support - -GraalVM technologies are distributed as _supported_ or _experimental_. - -_Experimental_ features are being considered for future versions of GraalVM and are **not** meant to be used in production. -The development team welcomes feedback on experimental features, but users should be aware that experimental features might never be included in a final version, or might change significantly before being considered stable. - -The following table lists stable and experimental features in GraalVM Community Edition by platform. - -| Feature | Linux AMD64 | Linux AArch64 | macOS AMD64 | macOS AArch64 | Windows AMD64 | -|-----------------|--------------|---------------|--------------|---------------|---------------| -| Native Image | stable | stable | stable | stable | stable | -| LLVM runtime | stable | stable | stable | stable | not available | -| LLVM toolchain | stable | stable | stable | stable | not available | -| JavaScript | stable | stable | stable | stable | stable | -| Node.js | stable | stable | stable | stable | stable | -| Java on Truffle | stable | experimental | experimental | experimental | experimental | -| Python | experimental | experimental | experimental | experimental | not available | -| Ruby | experimental | experimental | experimental | experimental | not available | -| WebAssembly | experimental | experimental | experimental | not available | experimental | - - -For Oracle GraalVM, check the features support list [here](https://docs.oracle.com/en/graalvm/jdk/20/docs/support/#features-support). - ## Licensing and Support -Oracle GraalVM is licensed under [Graal Free Terms and Conditions (GFTC) including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). +Oracle GraalVM is licensed under [Graal Free Terms and Conditions including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). Oracle GraalVM is free to use on Oracle Cloud Infrastructure. For more information about Oracle GraalVM licensing, see the [Oracle Java SE Licensing FAQ](https://www.oracle.com/java/technologies/javase/jdk-faqs.html). GraalVM Community Edition is open-source software built from the sources available on [GitHub](https://github.com/oracle/graal) and distributed under [version 2 of the GNU General Public License with the “Classpath” Exception](https://github.com/oracle/graal/blob/master/LICENSE), which are the same terms as for Java. From 581d3a9813fcfa30b9047d25925c87d2b2849093 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Mon, 12 Jun 2023 11:56:05 +0300 Subject: [PATCH 21/72] Improve Get Started with GraalVM (cherry picked from commit 702ed417a80dcd17e26c4a60b2bdd878ca53592d) --- ...m-community.md.md => get-started-graalvm-community.md} | 0 docs/getting-started/graalvm-community/macos.md | 2 +- docs/introduction.md | 8 -------- 3 files changed, 1 insertion(+), 9 deletions(-) rename docs/getting-started/graalvm-community/{get-started-graalvm-community.md.md => get-started-graalvm-community.md} (100%) diff --git a/docs/getting-started/graalvm-community/get-started-graalvm-community.md.md b/docs/getting-started/graalvm-community/get-started-graalvm-community.md similarity index 100% rename from docs/getting-started/graalvm-community/get-started-graalvm-community.md.md rename to docs/getting-started/graalvm-community/get-started-graalvm-community.md diff --git a/docs/getting-started/graalvm-community/macos.md b/docs/getting-started/graalvm-community/macos.md index f86abf937e31..05395277daa0 100644 --- a/docs/getting-started/graalvm-community/macos.md +++ b/docs/getting-started/graalvm-community/macos.md @@ -27,7 +27,7 @@ Follow these steps to install GraalVM: 3. Move the downloaded package to its proper location, the `/Library/Java/JavaVirtualMachines` directory. Since this is a system directory, `sudo` is required: ```shell - sudo mv graalvm-ce-jdk-_macos- /Library/Java/JavaVirtualMachines + sudo mv graalvm-jdk-_macos- /Library/Java/JavaVirtualMachines ``` To verify if the move is successful and to get a list of all installed JDKs, run `/usr/libexec/java_home -V`. diff --git a/docs/introduction.md b/docs/introduction.md index e4ce073808e6..70d379c8df84 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -22,14 +22,6 @@ With profile-guided optimization and the G1 (Garbage-First) garbage collector, y You can use the GraalVM JDK just like any other Java Development Kit in your IDE. -## Available Distributions - -GraalVM is available as **Oracle GraalVM** and **GraalVM Community Edition**. -Oracle GraalVM is based on Oracle JDK while GraalVM Community Edition is based on OpenJDK. - -GraalVM is available for Linux and macOS on x64 and AArch64 architectures, and for Windows on the x64 architecture. -See the [installation guide](getting-started/graalvm-community/get-started-graalvm-community.md) for installation instructions. - ## Licensing and Support Oracle GraalVM is licensed under [Graal Free Terms and Conditions including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). From 4aba7f2f0dcb276f34535ff0cb8e4696dd51a6c9 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Mon, 12 Jun 2023 22:00:05 +0300 Subject: [PATCH 22/72] Update GraalVM overview (cherry picked from commit 3c79ab0c5fa0d979f595d422ddba968a47bb506a) --- docs/enterprise-overview/support.md | 11 ++++++----- .../get-started-graalvm-community.md | 2 +- docs/introduction.md | 6 ++++-- docs/reference-manual/native-image/README.md | 2 +- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/docs/enterprise-overview/support.md b/docs/enterprise-overview/support.md index 00631d538117..07d756a79c22 100644 --- a/docs/enterprise-overview/support.md +++ b/docs/enterprise-overview/support.md @@ -31,7 +31,7 @@ _Experimental_ features are being considered for future versions of Oracle Graal They are not meant for use in production and are **not** supported by Oracle. The development team welcomes feedback on experimental features, but users should be aware that experimental features may not be included in a final version, or may change significantly before being considered production-ready. -For more information, check the [Graal Free Terms and Conditions (GFTC) including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). +For more information, check the [GraalVM Free Terms and Conditions including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). The following table lists supported and experimental features in Oracle GraalVM by platform. @@ -50,11 +50,12 @@ The following table lists supported and experimental features in Oracle GraalVM ## Licensing and Support -Oracle GraalVM is licensed under [Graal Free Terms and Conditions (GFTC) including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). +Oracle GraalVM is licensed under [GraalVM Free Terms and Conditions (GFTC) including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). +Subject to the conditions in the license, including the License for Early Adopter Versions, the GFTC is intended to permit use by any user including commercial and production use. Redistribution is permitted as long as it is not for a fee. +Oracle GraalVM is also free to use on Oracle Cloud Infrastructure. +For more information about Oracle GraalVM licensing, see the [Oracle Java SE Licensing FAQ](https://www.oracle.com/java/technologies/javase/jdk-faqs.html#GraalVM-licensing). -Oracle GraalVM is free to use on Oracle Cloud Infrastructure. - -For production use, Oracle GraalVM is available as part of the [Oracle Java SE Subscription](https://www.oracle.com/uk/java/java-se-subscription/) which includes 24x7x365 [Oracle premier support](https://www.oracle.com/support/premier/) and access to [My Oracle Support (MOS)](https://www.oracle.com/support/). For more information about Oracle GraalVM licensing, see the [Oracle Java SE Licensing FAQ](https://www.oracle.com/java/technologies/javase/jdk-faqs.html). +Oracle GraalVM is available as part of the [Oracle Java SE Subscription](https://www.oracle.com/java/java-se-subscription/) which includes 24x7x365 [Oracle premier support](https://www.oracle.com/support/premier/) and access to [My Oracle Support (MOS)](https://www.oracle.com/support/). Oracle GraalVM focuses on support for Java LTS releases for production deployments. See the [release calendar](../../release-notes/enterprise/oracle-graalvm-release-calendar.md) for more information. diff --git a/docs/getting-started/graalvm-community/get-started-graalvm-community.md b/docs/getting-started/graalvm-community/get-started-graalvm-community.md index e8c642b65316..b7aa010e3ee3 100644 --- a/docs/getting-started/graalvm-community/get-started-graalvm-community.md +++ b/docs/getting-started/graalvm-community/get-started-graalvm-community.md @@ -1,7 +1,7 @@ --- layout: docs toc_group: getting-started -link_title: GraalVM Installation +link_title: Getting Started permalink: /docs/getting-started/ --- diff --git a/docs/introduction.md b/docs/introduction.md index 70d379c8df84..5d4a540f79e5 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -24,8 +24,10 @@ You can use the GraalVM JDK just like any other Java Development Kit in your IDE ## Licensing and Support -Oracle GraalVM is licensed under [Graal Free Terms and Conditions including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). -Oracle GraalVM is free to use on Oracle Cloud Infrastructure. For more information about Oracle GraalVM licensing, see the [Oracle Java SE Licensing FAQ](https://www.oracle.com/java/technologies/javase/jdk-faqs.html). +Oracle GraalVM is licensed under [GraalVM Free Terms and Conditions (GFTC) including License for Early Adopter Versions](https://www.oracle.com/downloads/licenses/graal-free-license.html). +Subject to the conditions in the license, including the License for Early Adopter Versions, the GFTC is intended to permit use by any user including commercial and production use. Redistribution is permitted as long as it is not for a fee. +Oracle GraalVM is also free to use on Oracle Cloud Infrastructure. +For more information about Oracle GraalVM licensing, see the [Oracle Java SE Licensing FAQ](https://www.oracle.com/java/technologies/javase/jdk-faqs.html#GraalVM-licensing). GraalVM Community Edition is open-source software built from the sources available on [GitHub](https://github.com/oracle/graal) and distributed under [version 2 of the GNU General Public License with the “Classpath” Exception](https://github.com/oracle/graal/blob/master/LICENSE), which are the same terms as for Java. Check the [licenses](https://github.com/oracle/graal#license) of individual GraalVM components which are generally derivative of the license of a particular language and may differ. diff --git a/docs/reference-manual/native-image/README.md b/docs/reference-manual/native-image/README.md index 8f5df0d32424..6e3b33ee33a2 100644 --- a/docs/reference-manual/native-image/README.md +++ b/docs/reference-manual/native-image/README.md @@ -5,7 +5,7 @@ link_title: Native Image permalink: /reference-manual/native-image/ --- -# Getting Started +# Getting Started with Native Image Native Image is a technology to compile Java code ahead-of-time to a binary -- a **native executable**. A native executable includes only the code required at run time, that is the application classes, standard-library classes, the language runtime, and statically-linked native code from the JDK. From 4399ceb247be59a038edb0ee99554919378bdc94 Mon Sep 17 00:00:00 2001 From: Lesia Chaban Date: Mon, 12 Jun 2023 18:19:44 +0300 Subject: [PATCH 23/72] Update and remove duplicate publication (cherry picked from commit 337f75f328324fb4da23afb7715df846b331db84) --- docs/Publications.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/Publications.md b/docs/Publications.md index 9f2cccf075f9..fb9ddc692d82 100644 --- a/docs/Publications.md +++ b/docs/Publications.md @@ -306,6 +306,10 @@ In _Proceedings of the 2023 Journal and Conference_ ### 2022 +- Felix Berlakovich, Matthias Neugschwandtner, Gergö Barany +[**Look Ma, no constants: practical constant blinding in GraalVM**](https://dl.acm.org/doi/10.1145/3517208.3523751) +In _Proceedings of the 15th European Workshop on Systems Security (EuroSec '22)_ + - Gergo Barany, David Leopoldseder, Hanspeter Moessenboeck, Raphael Mosaner [**Improving Vectorization Heuristics in a Dynamic Compiler with Learned Models**](https://doi.org/10.1145/3563838.3567679) In _Proceedings of the Virtual Machines and Language Implementations Workshop Co-located with SPLASH 2022_ @@ -322,10 +326,6 @@ In _Proceedings of the 19th International Conference on Managed Programming Lang [**Machine-Learning-Based Self-Optimizing Compiler Heuristics**](https://doi.org/10.1145/3546918.3546921) In _Proceedings of the 19th International Conference on Managed Programming Languages and Runtimes (MPLR'22)_ -- Matthias Neugschwandtner, Gergo Barany, Felix Berlakovich -[**Constant Blinding on GraalVM**](https://dl.acm.org/doi/abs/10.1145/3517208.3523751) -In _Proceedings of the 15th EUROPEAN WORKSHOP ON SYSTEMS SECURITY_ - - Stefan Reschke, Toni Mattis, Fabio Niephaus, Robert Hirschfeld [**Toward Just-in-time and Language-agnostic Mutation Testing**](https://doi.org/10.1145/3532512.3532514) In _Proceedings of the MoreVMs’22 workshop at ‹Programming› 2022_ From 45e0cdc4cbecdb540cffbbaacc92be88a24eb1c8 Mon Sep 17 00:00:00 2001 From: Marouane El Hallaoui Date: Fri, 16 Jun 2023 09:28:48 +0100 Subject: [PATCH 24/72] update to jvmci-23.0-b13 --- common.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/common.json b/common.json index 7c9eaae52d39..03bb0c069087 100644 --- a/common.json +++ b/common.json @@ -14,9 +14,9 @@ "labsjdk-ce-17": {"name": "labsjdk", "version": "ce-17.0.7+7-jvmci-23.0-b12", "platformspecific": true }, "labsjdk-ce-17Debug": {"name": "labsjdk", "version": "ce-17.0.7+7-jvmci-23.0-b12-debug", "platformspecific": true }, "labsjdk-ce-17-llvm": {"name": "labsjdk", "version": "ce-17.0.7+7-jvmci-23.0-b12-sulong", "platformspecific": true }, - "labsjdk-ee-17": {"name": "labsjdk", "version": "ee-17.0.7+8-jvmci-23.0-b12", "platformspecific": true }, - "labsjdk-ee-17Debug": {"name": "labsjdk", "version": "ee-17.0.7+8-jvmci-23.0-b12-debug", "platformspecific": true }, - "labsjdk-ee-17-llvm": {"name": "labsjdk", "version": "ee-17.0.7+8-jvmci-23.0-b12-sulong", "platformspecific": true }, + "labsjdk-ee-17": {"name": "labsjdk", "version": "ee-17.0.8+8-jvmci-23.0-b13", "platformspecific": true }, + "labsjdk-ee-17Debug": {"name": "labsjdk", "version": "ee-17.0.8+8-jvmci-23.0-b13-debug", "platformspecific": true }, + "labsjdk-ee-17-llvm": {"name": "labsjdk", "version": "ee-17.0.8+8-jvmci-23.0-b13-sulong", "platformspecific": true }, "oraclejdk19": {"name": "jpg-jdk", "version": "19", "build_id": "26", "release": true, "platformspecific": true, "extrabundles": ["static-libs"]}, "labsjdk-ce-19": {"name": "labsjdk", "version": "ce-19.0.1+10-jvmci-23.0-b04", "platformspecific": true }, @@ -30,9 +30,9 @@ "labsjdk-ce-20": {"name": "labsjdk", "version": "ce-20.0.1+9-jvmci-23.0-b12", "platformspecific": true }, "labsjdk-ce-20Debug": {"name": "labsjdk", "version": "ce-20.0.1+9-jvmci-23.0-b12-debug", "platformspecific": true }, "labsjdk-ce-20-llvm": {"name": "labsjdk", "version": "ce-20.0.1+9-jvmci-23.0-b12-sulong", "platformspecific": true }, - "labsjdk-ee-20": {"name": "labsjdk", "version": "ee-20.0.1+9-jvmci-23.0-b12", "platformspecific": true }, - "labsjdk-ee-20Debug": {"name": "labsjdk", "version": "ee-20.0.1+9-jvmci-23.0-b12-debug", "platformspecific": true }, - "labsjdk-ee-20-llvm": {"name": "labsjdk", "version": "ee-20.0.1+9-jvmci-23.0-b12-sulong", "platformspecific": true } + "labsjdk-ee-20": {"name": "labsjdk", "version": "ee-20.0.2+8-jvmci-23.0-b13", "platformspecific": true }, + "labsjdk-ee-20Debug": {"name": "labsjdk", "version": "ee-20.0.2+8-jvmci-23.0-b13-debug", "platformspecific": true }, + "labsjdk-ee-20-llvm": {"name": "labsjdk", "version": "ee-20.0.2+8-jvmci-23.0-b13-sulong", "platformspecific": true } }, "eclipse": { From 4c223dd6da7fccfc9afc7dcec0d30ea59eb3f665 Mon Sep 17 00:00:00 2001 From: Tomas Zezula Date: Mon, 19 Jun 2023 11:48:14 +0200 Subject: [PATCH 25/72] [GR-46669] The org.graalvm.truffle:truffle-api JAR contains JDK-19 specific files which are compiled with JDK 20. --- truffle/mx.truffle/suite.py | 8 ++++---- .../src/com/oracle/truffle/api/impl/JDKAccessor.java | 0 .../src/com/oracle/truffle/api/impl/JDKAccessorImpl.java | 0 3 files changed, 4 insertions(+), 4 deletions(-) rename truffle/src/{com.oracle.truffle.api.jdk19 => com.oracle.truffle.api.jdk20}/src/com/oracle/truffle/api/impl/JDKAccessor.java (100%) rename truffle/src/{com.oracle.truffle.api.jdk19 => com.oracle.truffle.api.jdk20}/src/com/oracle/truffle/api/impl/JDKAccessorImpl.java (100%) diff --git a/truffle/mx.truffle/suite.py b/truffle/mx.truffle/suite.py index 945e51a1ca1a..e23f29160f61 100644 --- a/truffle/mx.truffle/suite.py +++ b/truffle/mx.truffle/suite.py @@ -204,17 +204,17 @@ "workingSets" : "API,Truffle", }, - "com.oracle.truffle.api.jdk19" : { + "com.oracle.truffle.api.jdk20" : { "subDir" : "src", "sourceDirs" : ["src"], "dependencies" : [ ], "overlayTarget" : "com.oracle.truffle.api", "checkPackagePrefix" : "false", - "multiReleaseJarVersion" : "19", + "multiReleaseJarVersion" : "20", "checkstyle" : "com.oracle.truffle.api", - "javaCompliance" : "19+", - "javaPreviewNeeded": "19+", + "javaCompliance" : "20+", + "javaPreviewNeeded": "20", "workingSets" : "API,Truffle", }, diff --git a/truffle/src/com.oracle.truffle.api.jdk19/src/com/oracle/truffle/api/impl/JDKAccessor.java b/truffle/src/com.oracle.truffle.api.jdk20/src/com/oracle/truffle/api/impl/JDKAccessor.java similarity index 100% rename from truffle/src/com.oracle.truffle.api.jdk19/src/com/oracle/truffle/api/impl/JDKAccessor.java rename to truffle/src/com.oracle.truffle.api.jdk20/src/com/oracle/truffle/api/impl/JDKAccessor.java diff --git a/truffle/src/com.oracle.truffle.api.jdk19/src/com/oracle/truffle/api/impl/JDKAccessorImpl.java b/truffle/src/com.oracle.truffle.api.jdk20/src/com/oracle/truffle/api/impl/JDKAccessorImpl.java similarity index 100% rename from truffle/src/com.oracle.truffle.api.jdk19/src/com/oracle/truffle/api/impl/JDKAccessorImpl.java rename to truffle/src/com.oracle.truffle.api.jdk20/src/com/oracle/truffle/api/impl/JDKAccessorImpl.java From 0fd9297350034ea70887239f495d5fe78c1cee1b Mon Sep 17 00:00:00 2001 From: Jakub Chaloupka Date: Wed, 14 Jun 2023 12:47:38 +0200 Subject: [PATCH 26/72] Fix InteropLibrary#asBigInteger JavaDoc. (cherry picked from commit 7c6be37eba2e2885688977bbef12193e4fd1f39b) --- .../src/com/oracle/truffle/api/interop/InteropLibrary.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/truffle/src/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/InteropLibrary.java b/truffle/src/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/InteropLibrary.java index 8717a762ff37..23120feb9f28 100644 --- a/truffle/src/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/InteropLibrary.java +++ b/truffle/src/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/InteropLibrary.java @@ -604,8 +604,8 @@ public long asLong(Object receiver) throws UnsupportedMessageException { * @throws UnsupportedMessageException if and only if the receiver is not a * {@link #isNumber(Object)} or it does not fit without loss of precision. * @see #isNumber(Object) - * @see #fitsInLong(Object) - * @since 19.0 + * @see #fitsInBigInteger(Object) + * @since 23.0 */ @Abstract(ifExportedAsWarning = "isNumber") public BigInteger asBigInteger(Object receiver) throws UnsupportedMessageException { From ea9bb6d94bbd07451d5bef3229ea0c21bea03c72 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Fri, 16 Jun 2023 23:57:56 +0300 Subject: [PATCH 27/72] Revert links to language docs (cherry picked from commit 0a8851c5885b99cd6ca662a279048df48d7cddef) --- docs/reference-manual/languages.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/reference-manual/languages.md b/docs/reference-manual/languages.md index 41f7cf8d21b5..b43a98ed4834 100644 --- a/docs/reference-manual/languages.md +++ b/docs/reference-manual/languages.md @@ -17,5 +17,5 @@ If you are mostly interested in GraalVM's support for a specific language, here * [LLVM Languages](llvm/README.md) * [Python](https://github.com/oracle/graalpython/blob/master/docs/user/README.md) * [R](https://github.com/oracle/fastr/blob/master/documentation/user/README.md) -* [Ruby](https://github.com/oracle/truffleruby/blob/master/README.md) -* [WebAssembly](wasm/README.md) +* [Ruby](https://github.com/oracle/truffleruby/blob/master/doc/user/README.md) +* [WebAssembly](wasm/README.md) \ No newline at end of file From b29f1bafcedc8af1a5272bb1194e377e93fb00ae Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Sat, 17 Jun 2023 00:01:22 +0300 Subject: [PATCH 28/72] Update Java reference title (cherry picked from commit adcc78854e5f38e7f6e6d923a2c2007320421bf5) --- docs/reference-manual/java/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/reference-manual/java/README.md b/docs/reference-manual/java/README.md index e763b7a4a8c0..16dc43a6cf59 100644 --- a/docs/reference-manual/java/README.md +++ b/docs/reference-manual/java/README.md @@ -1,11 +1,11 @@ --- layout: docs toc_group: java -link_title: Java Reference +link_title: Java and JVM permalink: /reference-manual/java/ --- -# Java Reference +# Java and JVM Any JVM-based application that runs on Java HotSpot VM can run on GraalVM. GraalVM is based on Java HotSpot VM, but integrates an advanced just-in-time (JIT) compiler, written in Java - the Graal compiler. From b657f8bfb6f19b49434a9e1d0813e4f302e0b73d Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 20 Jun 2023 20:52:13 +0200 Subject: [PATCH 29/72] Use absolute links to sieve.js and agent-fib.js (cherry picked from commit 346e113c4f45002ed4cf31c45ce81fa91acf4870) --- docs/tools/insight/Insight-Manual.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/tools/insight/Insight-Manual.md b/docs/tools/insight/Insight-Manual.md index f0793decc906..4a4145b50da1 100644 --- a/docs/tools/insight/Insight-Manual.md +++ b/docs/tools/insight/Insight-Manual.md @@ -191,7 +191,7 @@ insight.on('enter', function(ev) { }); ``` -Run it on top of [sieve.js](../../../vm/benchmarks/agentscript/sieve.js). +Run it on top of [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js). It is a sample script which uses a variant of the Sieve of Erathostenes to compute one hundred thousand of prime numbers: ```bash @@ -248,7 +248,7 @@ class Roots: insight.on("enter", onEnter, Roots()) ``` -Apply this script to [agent-fib.js](../../../vm/tests/all/agentscript/agent-fib.js) using the following command: +Apply this script to [agent-fib.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/tests/all/agentscript/agent-fib.js) using the following command: ```bash `js --polyglot --insight=agent.py agent-fib.js` @@ -695,7 +695,7 @@ insight.on('enter', function(ev) { insight.on('close', dumpCount); ``` -Use the script on fifty iterations of the [sieve.js](../../../vm/benchmarks/agentscript/sieve.js) sample which uses a variant of the Sieve of Erathostenes to compute one hundred thousand of prime numbers. +Use the script on fifty iterations of the [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js) sample which uses a variant of the Sieve of Erathostenes to compute one hundred thousand of prime numbers. Repeating the computation fifty times gives the runtime a chance to warm up and properly optimize. Here is the optimal run: @@ -725,7 +725,7 @@ The `count++` invocation becomes a natural part of the application at all the pl GraalVM Insight is capable to access local variables, almost "for free". GraalVM Insight code, accessing local variables, blends with the actual function code defining them and there is no visible slowdown. -This can be demonstrated with this [sieve.js](../../../vm/benchmarks/agentscript/sieve.js) algorithm to compute hundred thousand of prime numbers. +This can be demonstrated with this [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js) algorithm to compute hundred thousand of prime numbers. It keeps the found prime numbers in a linked list constructed via following function: ```js @@ -844,7 +844,7 @@ insight.on('return', (ctx, frame) => { ``` Save the code snippet as a `dump.js` file. -Get the [sieve.js](../../../vm/benchmarks/agentscript/sieve.js) file and launch it as: +Get the [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js) file and launch it as: ```bash graalvm/bin/js --insight=dump.js --heap.dump=dump.hprof --file sieve.js @@ -857,7 +857,7 @@ Inspect the generated `.hprof` file with regular tools like [VisualVM](https://w ![Heap Inspect](img/Insight-HeapInspect.png) -The previous picture shows the heap dump taken at the end of the `measure` function in the [sieve.js](../../../vm/benchmarks/agentscript/sieve.js) script. +The previous picture shows the heap dump taken at the end of the `measure` function in the [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js) script. The function has just computed one hundred thousand (count available in variable `cnt`) prime numbers. The picture shows a linked list `Filter` holding prime numbers from `2` to `17`. The rest of the linked list is hidden (only references up to depth `10` were requested) behind `unreachable` object. From 950538358cda3c5d9764bae8e34f8024b9d1e2a0 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Wed, 21 Jun 2023 11:13:16 +0200 Subject: [PATCH 30/72] Make links open in a new tab (cherry picked from commit d72f93b410d06210540075cdd95280df3516c4ed) --- docs/tools/insight/Insight-Manual.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/tools/insight/Insight-Manual.md b/docs/tools/insight/Insight-Manual.md index 4a4145b50da1..f576aed988fb 100644 --- a/docs/tools/insight/Insight-Manual.md +++ b/docs/tools/insight/Insight-Manual.md @@ -191,7 +191,7 @@ insight.on('enter', function(ev) { }); ``` -Run it on top of [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js). +Run it on top of [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js){:target="_blank"}. It is a sample script which uses a variant of the Sieve of Erathostenes to compute one hundred thousand of prime numbers: ```bash @@ -248,7 +248,7 @@ class Roots: insight.on("enter", onEnter, Roots()) ``` -Apply this script to [agent-fib.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/tests/all/agentscript/agent-fib.js) using the following command: +Apply this script to [agent-fib.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/tests/all/agentscript/agent-fib.js){:target="_blank"} using the following command: ```bash `js --polyglot --insight=agent.py agent-fib.js` @@ -314,7 +314,7 @@ insight.on("enter", -> (ctx, frame) { }) ``` -The above Ruby script example prints out value of variable `n` when a function `minusOne` in the [agent-fib.js](../../../vm/tests/all/agentscript/agent-fib.js) program is called: +The above Ruby script example prints out value of variable `n` when a function `minusOne` in the [agent-fib.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/tests/all/agentscript/agent-fib.js){:target="_blank"} program is called: ```bash graalvm/bin/node --js.print --experimental-options --polyglot --insight=agent.rb agent-fib.js minusOne 4 @@ -695,7 +695,7 @@ insight.on('enter', function(ev) { insight.on('close', dumpCount); ``` -Use the script on fifty iterations of the [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js) sample which uses a variant of the Sieve of Erathostenes to compute one hundred thousand of prime numbers. +Use the script on fifty iterations of the [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js){:target="_blank"} sample which uses a variant of the Sieve of Erathostenes to compute one hundred thousand of prime numbers. Repeating the computation fifty times gives the runtime a chance to warm up and properly optimize. Here is the optimal run: @@ -725,7 +725,7 @@ The `count++` invocation becomes a natural part of the application at all the pl GraalVM Insight is capable to access local variables, almost "for free". GraalVM Insight code, accessing local variables, blends with the actual function code defining them and there is no visible slowdown. -This can be demonstrated with this [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js) algorithm to compute hundred thousand of prime numbers. +This can be demonstrated with this [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js){:target="_blank"} algorithm to compute hundred thousand of prime numbers. It keeps the found prime numbers in a linked list constructed via following function: ```js @@ -844,7 +844,7 @@ insight.on('return', (ctx, frame) => { ``` Save the code snippet as a `dump.js` file. -Get the [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js) file and launch it as: +Get the [sieve.js](https://github.com/oracle/graal/blob/5ec71a206aa422078ac21be9949f8eb8918b3d3c/vm/benchmarks/agentscript/sieve.js){:target="_blank"} file and launch it as: ```bash graalvm/bin/js --insight=dump.js --heap.dump=dump.hprof --file sieve.js From fe80cf6052f17d24ced165dc764e13ca50a038b9 Mon Sep 17 00:00:00 2001 From: Lesia Chaban Date: Wed, 14 Jun 2023 13:26:00 +0300 Subject: [PATCH 31/72] Replace invalid links to OHC (cherry picked from commit 03f5fef7be1892fbaccdc31cbaa5823674ccf255) --- .../oci/installation-compute-instance-with-OL.md | 4 ++-- docs/reference-manual/embedding/embed-languages.md | 7 ++++--- docs/reference-manual/graalvm-updater.md | 8 +++----- .../java-on-truffle/ImplementationDetails.md | 2 +- docs/reference-manual/java/README.md | 2 +- docs/reference-manual/java/compiler.md | 2 +- docs/reference-manual/native-image/BuildOptions.md | 2 +- docs/reference-manual/native-image/BuildOutput.md | 1 - docs/reference-manual/native-image/Compatibility.md | 2 +- docs/reference-manual/native-image/InspectTool.md | 2 +- docs/reference-manual/native-image/JNI.md | 2 +- .../native-image/contribute/DevelopingNativeImage.md | 2 +- .../guides/build-static-and-mostly-static-executable.md | 2 +- .../guides/containerise-native-executable-with-docker.md | 2 +- .../guides/create-heap-dump-from-native-executable.md | 2 +- docs/security/native-image.md | 2 +- truffle/docs/HostCompilation.md | 2 +- truffle/docs/Inlining.md | 2 +- truffle/docs/TraversingCompilationQueue.md | 8 ++++---- 19 files changed, 27 insertions(+), 29 deletions(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md index ec0ca28b03a9..2375d678971b 100644 --- a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md +++ b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md @@ -89,7 +89,7 @@ Now you have a ready-to-go OCI Compute instance with Oracle GraalVM installed. ## Install Additional Features Oracle GraalVM consists of several features and components&emdash;JDK, Native Image, Javascript runtime, and Node.js runtime&emdash;each of which can be installed separately or as an add-on. -See the [Distribution Components List](https://docs.oracle.com/en/graalvm/enterprise/23/docs/overview/architecture/#distribution-components-list) for more information. +See the [Distribution Components List](https://docs.oracle.com/en/graalvm/jdk/20/docs/support/#certified-platforms) for more information. To add additional features to Oracle GraalVM, use the `yum install ` command. @@ -169,7 +169,7 @@ The `yum` package manager for Oracle Linux can be used to update an existing Gra java -version ``` -The **graalvm22-ee-17-jdk** package is installed alongside **graalvm22-ee-17-jdk** in the _/usr/lib64/graalvm_ directory. Note that regardless the version printed to the console, the `PATH` and `JAVA_HOME` environment variables still point to the old version. Reset the variables as described in [Install Oracle GraalVM](#install-graalvm-enterprise), step 3. +The **graalvm22-ee-17-jdk** package is installed alongside **graalvm22-ee-17-jdk** in the _/usr/lib64/graalvm_ directory. Note that regardless the version printed to the console, the `PATH` and `JAVA_HOME` environment variables still point to the old version. Reset the variables as described in step 3. ### Note on `yum upgrade` diff --git a/docs/reference-manual/embedding/embed-languages.md b/docs/reference-manual/embedding/embed-languages.md index 35e32f9bd478..5bc3fb42a39c 100644 --- a/docs/reference-manual/embedding/embed-languages.md +++ b/docs/reference-manual/embedding/embed-languages.md @@ -16,10 +16,11 @@ permalink: /reference-manual/embed-languages/ * [Host Access](#host-access) * [Build Native Executables from Polyglot Applications](#build-native-executables-from-polyglot-applications) * [Code Caching Across Multiple Contexts](#code-caching-across-multiple-contexts) -* [Embed languages in Guest Languages](#embed-languages-in-guest-languages) +* [Embed Guest Languages in Java](#embed-guest-languages-in-java) * [Build a Shell for Many Languages](#build-a-shell-for-many-languages) * [Step Through with Execution Listeners](#step-through-with-execution-listeners) -* [Dependency setup](#dependency-setup) +* [Setting the Heap Size](#setting-the-heap-size) +* [Dependency Setup](#dependency-setup) The GraalVM Polyglot API lets you embed and run code from guest languages in JVM-based host applications. @@ -526,7 +527,7 @@ with "js" language, which is the language identifier for JavaScript. an explicit engine assigned to it. All contexts associated with an engine share the code. - `context.eval(source).asInt()` evaluates the source and returns the result as `Value` instance. -## Embed Guest languages in Guest Languages +## Embed Guest Languages in Java The GraalVM Polyglot API can be used from within a guest language using Java interoperability. This can be useful if a script needs to run isolated from the parent context. diff --git a/docs/reference-manual/graalvm-updater.md b/docs/reference-manual/graalvm-updater.md index 85c8f2de380d..726e03ae5e3c 100644 --- a/docs/reference-manual/graalvm-updater.md +++ b/docs/reference-manual/graalvm-updater.md @@ -11,7 +11,7 @@ redirect_from: /$version/docs/graalvm-updater/ * [Check Available Components](#check-available-components) * [Install Components](#install-components) * [Install Components Manually](#install-components-manually) -* [Install Components from Local Collection](#install-cmponents-from-local-collection) +* [Install Components from Local Collection](#install-components-from-local-collection) * [Uninstall Components](#uninstall-components) * [Rebuild Images](#rebuild-images) * [Replace Components and Files](#replace-components-and-files) @@ -23,7 +23,7 @@ GraalVM Updater, `gu`, is a command-line tool for installing and managing option It is available in the GraalVM JDK. To assist you with the installation, language runtimes and utilities are pre-packaged as JAR files and referenced in the documentation as "components". GraalVM Updater can be also used to update your local GraalVM installation to a newer version or upgrade from GraalVM Community Edition to Oracle GraalVM. -Read more in [Upgrade GraalVM](#upgrade-graalvm). +Read more in [Upgrade GraalVM](#graalvm-updater-commands-overview). ## Check Available Components @@ -79,8 +79,6 @@ To see more verbose output during the installation, as the download progress bar If a component is installed that depends on another component, GraalVM Updater will search for the appropriate dependency and install it as well. If a required component cannot be found, the installation will fail. -> Note: See the [Install Components on GraalVM Enterprise guide](https://www.graalvm.org/22.3/reference-manual/graalvm-updater/#install-components-on-graalvm-enterprise) for information on installing components on older GraalVM Enterprise releases. - ## Install Components Manually You can install a component **from a local file**, in other words, manually. @@ -260,4 +258,4 @@ Additonal options: ### Related Documentation -Check the [GraalVM's components availability and support per platform](../introduction.md#features-support). \ No newline at end of file +Check the [GraalVM's components availability and support per platform](../introduction.md#licensing-and-support). \ No newline at end of file diff --git a/docs/reference-manual/java-on-truffle/ImplementationDetails.md b/docs/reference-manual/java-on-truffle/ImplementationDetails.md index 13cb3bcc99aa..8accb4689d55 100644 --- a/docs/reference-manual/java-on-truffle/ImplementationDetails.md +++ b/docs/reference-manual/java-on-truffle/ImplementationDetails.md @@ -35,6 +35,6 @@ This mode is not used when running in a native executable since there will be no * Java on Truffle does not implement the `java.lang.instrument` interface. As a result it does not support the `-javaagent` VM option. * Java on Truffle currently uses the standard native libraries from the Java core library. This requires allowing a polyglot `Context` native access. Because of the way these libraries are loaded (via [Truffle NFI](../../../truffle/docs/NFI.md)), running on top of HotSpot only works on Linux (with `glibc`). Running as part of a native executable works on Linux, Windows, and macOS but it currently limited to one context. * Support for [Java Management Extensions (JMX)](https://docs.oracle.com/javase/tutorial/jmx/index.html) is partial and some methods might return partial data. -* The [Debugger Protocol Implementation (JDWP)](https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/jdwp-spec.html) lacks some capabilities compared to HotSpot. It will correctly report the supported [capabilities](https://docs.oracle.com/javase/8/docs/platform/jpda/jdwp/jdwp-protocol.html#JDWP_VirtualMachine_Capabilities). In particular actions that require to enumerate all Java objects are not supported. However it does support a few hot reloading cases that HotSpot does not. See [Enhanced HotSwap Capabilities with Java on Truffle](Demos.md#enhanced-hotswap-capabilities-with-java-on-truffle). +* The [Debugger Protocol Implementation (JDWP)](https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/jdwp-spec.html) lacks some capabilities compared to HotSpot. It will correctly report the supported [capabilities](https://docs.oracle.com/javase/8/docs/platform/jpda/jdwp/jdwp-protocol.html#JDWP_VirtualMachine_Capabilities). In particular actions that require to enumerate all Java objects are not supported. However it does support a few hot reloading cases that HotSpot does not. * When the `java.MultiThreaded` option is set to "false", [reference processing](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ref/package-summary.html) will not happen. Depending on the application, this could create resource leaks. Note that this option is set to "false" automatically if Java on Truffle runs in a context where a single-threaded language is enabled (e.g., JavaScript). * Java on Truffle does not support the [Polyglot API](https://www.graalvm.org/sdk/javadoc/org/graalvm/polyglot/package-summary.html) yet. However, it provides a guest Java Polyglot API, described in `polyglot.jar`. For more information, see [Interoperability with Truffle Languages](Interoperability.md). diff --git a/docs/reference-manual/java/README.md b/docs/reference-manual/java/README.md index 16dc43a6cf59..85212b64f7b3 100644 --- a/docs/reference-manual/java/README.md +++ b/docs/reference-manual/java/README.md @@ -28,7 +28,7 @@ This is the default and recommended mode of operation. - **jargraal**: the Graal compiler goes through the same warm-up phase that the rest of the Java application does. That is, it is first interpreted before its hot methods are compiled. This mode is selected with the `-XX:-UseJVMCINativeLibrary` command-line option. This will delay the time to reach peak performance as the compiler itself needs to be compiled before it produces code quickly. -This mode allows you to [debug the Graal compiler with a Java debugger](Operations.md#troubleshooting-the-graalvm-compiler). +This mode allows you to [debug the Graal compiler with a Java debugger](Operations.md/#troubleshooting-the-graal-compiler). ## Interoperability diff --git a/docs/reference-manual/java/compiler.md b/docs/reference-manual/java/compiler.md index 6cadaf2746a6..eafc3f8eb180 100644 --- a/docs/reference-manual/java/compiler.md +++ b/docs/reference-manual/java/compiler.md @@ -24,7 +24,7 @@ GraalVM includes a version of the HotSpot JVM that supports JVMCI. The Graal compiler provides optimized performance for programs running on the JVM through unique approaches to code analysis and optimization. It includes multiple optimization algorithms (called “Phases”), like aggressive inlining, polymorphic inlining, and others. -Find some of the platform-independent compiler optimizations in GraalVM Community Edition [here](https://github.com/oracle/graal/blob/master/compiler/src/org.graalvm.compiler.core/src/org/graalvm/compiler/core/phases/CEOptimization.java). +Find some of the platform-independent compiler optimizations in GraalVM Community Edition [here](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/core/phases/CEOptimization.java). The Graal compiler can bring performance advantages for highly-abstracted programs. For example, it includes a [partial-escape-analysis optimization](https://www.javadoc.io/static/org.graalvm.compiler/compiler/22.3.1/org/graalvm/compiler/core/phases/CEOptimization.html#PartialEscapeAnalysis) that can remove costly allocations of certain objects. This optimization determines when a new object is accessible outside a compilation unit and only allocates it on paths that "escape" the compilation unit (e.g. the object is passed as a parameter, stored in a field, or returned from a method). This can greatly improve performance of an application by reducing the number of heap allocations. diff --git a/docs/reference-manual/native-image/BuildOptions.md b/docs/reference-manual/native-image/BuildOptions.md index bf4aa06a6118..682646d2553b 100644 --- a/docs/reference-manual/native-image/BuildOptions.md +++ b/docs/reference-manual/native-image/BuildOptions.md @@ -71,7 +71,7 @@ Depending on the GraalVM version, the options to the `native-image` builder may * `--tool:chromeinspector`: add debugging support to a GraalVM-supported language * `--tool:insightheap`: snapshot a region of image heap during the execution * `--tool:lsp`: add the Language Server Protocol support to later attach compatible debuggers to GraalVM in IDEs like Visual Studio Code -* `--tool:sandbox`: enables the Truffle sandbox resource limits. For more information, check the [dedicated documentation](../embedding/sandbox-options.md) +* `--tool:sandbox`: enables the Truffle sandbox resource limits. For more information, check the [dedicated documentation](../../security/polyglot-sandbox.md) * `--tool:profiler`: add profiling support to a GraalVM-supported language The `--language:js` `--language:nodejs`, `--language:python`, `--language:ruby`, `--language:R`, `--language:wasm`, `--language:llvm`, `--language:regex` (enables the Truffle Regular Expression engine) polyglot macro options become available once the corresponding languages are added to the base GraalVM JDK. diff --git a/docs/reference-manual/native-image/BuildOutput.md b/docs/reference-manual/native-image/BuildOutput.md index 8885599a074c..2ced5eee1e17 100644 --- a/docs/reference-manual/native-image/BuildOutput.md +++ b/docs/reference-manual/native-image/BuildOutput.md @@ -11,7 +11,6 @@ redirect_from: /$version/reference-manual/native-image/BuildOutput/ * [Build Stages](#build-stages) * [Resource Usage Statistics](#resource-usage-statistics) * [Machine-Readable Build Output](#machine-readable-build-output) -* [Build Output Options](#build-output-options) Here you will find information about the build output of GraalVM Native Image. Below is the example output when building a native executable of the `HelloWorld` class: diff --git a/docs/reference-manual/native-image/Compatibility.md b/docs/reference-manual/native-image/Compatibility.md index 85f16c865fea..9ae4db854479 100644 --- a/docs/reference-manual/native-image/Compatibility.md +++ b/docs/reference-manual/native-image/Compatibility.md @@ -15,7 +15,7 @@ The builder then compiles these (and only these) methods into an executable bina Because of this different compilation model, a Java application can behave somewhat differently when compiled into a native image. Native Image provides an optimization to reduce the memory footprint and startup time of an application. -This approach relies on a ["closed-world assumption"](NativeImageBasics.md#static-analysis-reachability-and-closed-world-assumption) in which all code is known at build time. That is, no new code is loaded at run time. +This approach relies on a ["closed-world assumption"](NativeImageBasics.md#static-analysis) in which all code is known at build time. That is, no new code is loaded at run time. As with most optimizations, not all applications are amenable to this approach. If the `native-image` builder is unable to optimize an application at build time, it generates a so-called "fallback file" that requires a Java VM to run. We recommend to check [Native Image Basics](NativeImageBasics.md) for a detailed description what happens with your Java application at build and run times. diff --git a/docs/reference-manual/native-image/InspectTool.md b/docs/reference-manual/native-image/InspectTool.md index c52dd4af5f32..b1ffb0c33cc3 100644 --- a/docs/reference-manual/native-image/InspectTool.md +++ b/docs/reference-manual/native-image/InspectTool.md @@ -8,7 +8,7 @@ redirect_from: /$version/reference-manual/native-image/inspect/ # Native Image Inspection Tool -Native Image provides the inspection tool to list all methods included in a native executable or a native shared library. Run the command `$JAVA_HOME/bin/native-image-inspect ` to list classes, methods, fields, and constructors in the JSON format that validates against the JSON schema defined in [`native-image-inspect-schema-v0.2.0.json`](../assets/native-image-inspect-schema-v0.2.0.json). +Native Image provides the inspection tool to list all methods included in a native executable or a native shared library. Run the command `$JAVA_HOME/bin/native-image-inspect ` to list classes, methods, fields, and constructors in the JSON format that validates against the JSON schema defined in [`native-image-inspect-schema-v0.2.0.json`](assets/native-image-inspect-schema-v0.2.0.json). > Note: The inspection tool is not available in GraalVM Community Edition. diff --git a/docs/reference-manual/native-image/JNI.md b/docs/reference-manual/native-image/JNI.md index 1ce2af9b3172..d6d5aff8c54b 100644 --- a/docs/reference-manual/native-image/JNI.md +++ b/docs/reference-manual/native-image/JNI.md @@ -72,7 +72,7 @@ class JNIRegistrationFeature implements Feature { } ``` To activate the custom feature `--features=` needs to be passed to native-image. -[Native Image Build Configuration](BuildConfiguration.md#embedding-a-configuration-file) explains how this can be automated with a `native-image.properties` file in `META-INF/native-image`. +[Native Image Build Configuration](BuildConfiguration.md#embed-a-configuration-file) explains how this can be automated with a `native-image.properties` file in `META-INF/native-image`. ### java.lang.reflect Support The JNI functions `FromReflectedMethod` and `ToReflectedMethod` can be used to obtain the corresponding `jmethodID` to a `java.lang.reflect.Method`, or to a `java.lang.reflect.Constructor` object, and vice versa. diff --git a/docs/reference-manual/native-image/contribute/DevelopingNativeImage.md b/docs/reference-manual/native-image/contribute/DevelopingNativeImage.md index d20a94eae792..cac6b090da2b 100644 --- a/docs/reference-manual/native-image/contribute/DevelopingNativeImage.md +++ b/docs/reference-manual/native-image/contribute/DevelopingNativeImage.md @@ -56,7 +56,7 @@ Use `mx native-image --debug-attach` to start native image generation so that it In Eclipse, use the debugging configuration _substratevm-localhost-8000_ to attach to it. This debugging configuration is automatically generated by `mx ideinit`. If you have to debug the compiler graphs that are built as part of an image, proceed to the [debugging](../../../../compiler/docs/Debugging.md) page. -You can use the [Ideal Graph Visualizer (IGV)](https://docs.oracle.com/en/graalvm/enterprise/20/docs/tools/igv/) tool to view individual compilation steps: +You can use the [Ideal Graph Visualizer (IGV)](https://www.graalvm.org/latest/tools/igv/) tool to view individual compilation steps: ```shell mx igv &>/dev/null & mx native-image HelloWorld -H:Dump= -H:MethodFilter=HelloWorld.* diff --git a/docs/reference-manual/native-image/guides/build-static-and-mostly-static-executable.md b/docs/reference-manual/native-image/guides/build-static-and-mostly-static-executable.md index 297b33a1cf0b..468d4e97b9a4 100644 --- a/docs/reference-manual/native-image/guides/build-static-and-mostly-static-executable.md +++ b/docs/reference-manual/native-image/guides/build-static-and-mostly-static-executable.md @@ -26,7 +26,7 @@ This guide shows how you can take advantage of Native Image linking options incl - [Prerequisites](#prerequisites-and-preparation) - [Build a Static Binary](#build-a-static-native-executable) -- [Build a Mostly Static Binary](#build-a-mostly-static-executable) +- [Build a Mostly Static Binary](#build-a-mostly-static-native-executable) ## Prerequisites and Preparation diff --git a/docs/reference-manual/native-image/guides/containerise-native-executable-with-docker.md b/docs/reference-manual/native-image/guides/containerise-native-executable-with-docker.md index c4b1c1d427a0..71c616341da3 100644 --- a/docs/reference-manual/native-image/guides/containerise-native-executable-with-docker.md +++ b/docs/reference-manual/native-image/guides/containerise-native-executable-with-docker.md @@ -117,5 +117,5 @@ With GraalVM Native Image you have the ability to build a statically linked nati ### Related Documentation * [GraalVM Native Image, Spring and Containerisation](https://luna.oracle.com/lab/fdfd090d-e52c-4481-a8de-dccecdca7d68) -* [GraalVM Community Images](../../../getting-started/graalvm-community/container-images/graalvm-ce-container-images.md) +* [GraalVM Community Images](https://github.com/graalvm/container/) * [Build a Static or Mostly-Static Native Executable](build-static-and-mostly-static-executable.md) \ No newline at end of file diff --git a/docs/reference-manual/native-image/guides/create-heap-dump-from-native-executable.md b/docs/reference-manual/native-image/guides/create-heap-dump-from-native-executable.md index 8f72fe87e312..8b6093748c51 100644 --- a/docs/reference-manual/native-image/guides/create-heap-dump-from-native-executable.md +++ b/docs/reference-manual/native-image/guides/create-heap-dump-from-native-executable.md @@ -174,7 +174,7 @@ Follow these steps to build a native executable that will produce a heap dump wh ## Create a Heap Dump from within a Native Executable -The following example shows how to create a heap dump from a running native executable using [`VMRuntime.dumpHeap()`](https://github.com/oracle/graal/blob/master/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/VMInspection.java) if some condition is met. +The following example shows how to create a heap dump from a running native executable using [`VMRuntime.dumpHeap()`](https://www.graalvm.org/sdk/javadoc/org/graalvm/nativeimage/VMRuntime.html#dumpHeap-java.lang.String-boolean-) if some condition is met. The condition to create a heap dump is provided as an option on the command line. 1. Save the code below in a file named _SVMHeapDumpAPI.java_. diff --git a/docs/security/native-image.md b/docs/security/native-image.md index fc73db1574b4..bf65c9177da6 100644 --- a/docs/security/native-image.md +++ b/docs/security/native-image.md @@ -84,7 +84,7 @@ You can then use this report to update any vulnerable dependencies found in your ## Java serialization in Native Image Native Image supports Serialization to help users deserialize the constructors for classes, contained in a native executable. -Unless picked up by native image analysis automatically, [these classes have to be pre-specified](https://www.graalvm.org/22.0/reference-manual/native-image/Reflection/#manual-configuration), as classes not contained in a native executable cannot be deserialized. +Unless picked up by native image analysis automatically, [these classes have to be pre-specified](../reference-manual/native-image/Reflection.md#manual-configuration), as classes not contained in a native executable cannot be deserialized. Native Image cannot prevent exploitation of deserialization vulnerabilities in isolation. The [serialization and deserialization Secure Coding Guidelines for Java SE](https://www.oracle.com/java/technologies/javase/seccodeguide.html#8) should be followed. diff --git a/truffle/docs/HostCompilation.md b/truffle/docs/HostCompilation.md index 8a24d6e3695a..ee1935de1db0 100644 --- a/truffle/docs/HostCompilation.md +++ b/truffle/docs/HostCompilation.md @@ -27,7 +27,7 @@ Truffle host inlining leverages these properties and forces inlining during host The general assumption is that code important for runtime compilation is also important for interpreter execution. Whenever a PE boundary is detected, the host inlining phase no longer makes any inlining decisions and defers them to later inlining phases better suited for regular Java code. -The source code for this phase can be found in [TruffleHostInliningPhase](https://github.com/oracle/graal/blob/master/compiler/src/org.graalvm.compiler.truffle.compiler/src/org/graalvm/compiler/truffle/compiler/phases/TruffleHostInliningPhase.java). +The source code for this phase can be found in [HostInliningPhase](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/truffle/compiler/host/HostInliningPhase.java). Truffle host inlining is applied when compiling a method annotated with `@HostCompilerDirectives.BytecodeInterpreterSwitch`. The maximum node cost for such methods can be configured using `-H:TruffleHostInliningByteCodeInterpreterBudget=100000` for native images and `-Dgraal.TruffleHostInliningByteCodeInterpreterBudget=100000` on HotSpot. diff --git a/truffle/docs/Inlining.md b/truffle/docs/Inlining.md index c624cd976978..17f21c17e21d 100644 --- a/truffle/docs/Inlining.md +++ b/truffle/docs/Inlining.md @@ -58,7 +58,7 @@ The following sections explain the states in which calls in the call tree can be ### Call Tree States -[Nodes](https://github.com/oracle/graal/blob/master/compiler/src/org.graalvm.compiler.truffle.compiler/src/org/graalvm/compiler/truffle/compiler/phases/inlining/CallNode.java) in the inline [call tree](https://github.com/oracle/graal/blob/master/compiler/src/org.graalvm.compiler.truffle.compiler/src/org/graalvm/compiler/truffle/compiler/phases/inlining/CallTree.java) +[Nodes](https://github.com/oracle/graal/blob/master/wasm/src/org.graalvm.wasm/src/org/graalvm/wasm/parser/ir/CallNode.java) in the inline [call tree](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/truffle/compiler/phases/inlining/CallTree.java) represent *calls* to particular targets. This means that if one target calls another twice, we will see this as two nodes despite it being the same call target. diff --git a/truffle/docs/TraversingCompilationQueue.md b/truffle/docs/TraversingCompilationQueue.md index edc8d19a55b9..8db841138dbe 100644 --- a/truffle/docs/TraversingCompilationQueue.md +++ b/truffle/docs/TraversingCompilationQueue.md @@ -13,7 +13,7 @@ This document gives motivation and an overview of this approach. During execution of guest code each Truffle call target counts how many times it was executed as well as how many loop iterations happened during those executions (i.e. the target's "call and loop count"). Once this counter reaches a certain threshold the call target is deemed "hot" and scheduled for compilation. -In order to minimize the impact this has on the execution of the guest code the notion that the target should be compiled is made concrete as a [compilation task](https://github.com/oracle/graal/blob/master/compiler/src/org.graalvm.compiler.truffle.runtime/src/org/graalvm/compiler/truffle/runtime/CompilationTask.java) and placed into a [compilation queue](https://github.com/oracle/graal/blob/master/compiler/src/org.graalvm.compiler.truffle.runtime/src/org/graalvm/compiler/truffle/runtime/BackgroundCompileQueue.java) to await compilation. +In order to minimize the impact this has on the execution of the guest code the notion that the target should be compiled is made concrete as a [compilation task](compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/hotspot/CompilationTask.java) and placed into a [compilation queue](compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/truffle/runtime/BackgroundCompileQueue.java) to await compilation. The Truffle runtime spawns several compiler threads (`--engine.CompilerThreads`) that take tasks from the queue and compile the specified call targets. The initial implementation of the compilation queue in Truffle was a straightforward FIFO queue. @@ -48,10 +48,10 @@ Using a FIFO queue, we would compile the `lowUsage` function first, even though ## Traversing Compilation Queue -The new compilation queue in Truffle, colloquially called ["Traversing Compilation Queue"](https://github.com/oracle/graal/blob/master/compiler/src/org.graalvm.compiler.truffle.runtime/src/org/graalvm/compiler/truffle/runtime/TraversingBlockingQueue.java), takes a more dynamic approach to selecting the order in which targets are compiled. +The new compilation queue in Truffle, colloquially called ["Traversing Compilation Queue"](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/truffle/runtime/TraversingBlockingQueue.java), takes a more dynamic approach to selecting the order in which targets are compiled. Every time a compiler thread requests the next compilation task the queue will traverse all the entries in the queue and pick the one with the highest priority. -A task's priority is [determined based on several factors](https://github.com/oracle/graal/blob/c7c061b3230852e9582badf788b3dab74a809ca9/compiler/src/org.graalvm.compiler.truffle.runtime/src/org/graalvm/compiler/truffle/runtime/CompilationTask.java#L209). +A task's priority is [determined based on several factors](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/hotspot/CompilationTask.java#L209). For starters, targets scheduled for [first-tier compilation](https://medium.com/graalvm/multi-tier-compilation-in-graalvm-5fbc65f92402) (i.e. first-tier tasks) always have higher priority than second-tier tasks. The rational behind this is that performance difference between executing code in the interpreter and executing it in first-tier compiled code is much greater then the difference between tier-one and tier-two compiled code, meaning that we get more benefit from compiling these targets sooner. @@ -78,7 +78,7 @@ One problem of the traversing compilation queue is that it needs to traverse all This does not have a significant performance impact as long as the size of the queue remains reasonable. This means that in order to always choose the highest priority task in a reasonable about of time we need to ensure that the queue does not grow indefinitely. -This is achieved by an approach we call ["dynamic compilation thresholds"](https://github.com/oracle/graal/blob/master/compiler/src/org.graalvm.compiler.truffle.runtime/src/org/graalvm/compiler/truffle/runtime/DynamicThresholdsQueue.java). +This is achieved by an approach we call ["dynamic compilation thresholds"](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/truffle/runtime/DynamicThresholdsQueue.java). Simply put, dynamic compilation thresholds means that the compilation threshold (the one each call target's call and loop count is compared against when determining whether to compile it) may change over time depending on the state of the queue. If the queue is overloaded we aim to increase the compilation thresholds to reduce the number of incoming compilation tasks, i.e. targets need to be "more hot" to get scheduled for compilation. On the other hand, if the queue is close to empty, we can reduce the compilation thresholds to allow more targets to get scheduled for compilation, i.e. the compilation threads are in danger of idling so let's give them even "less hot" targets to compile. From 0e1479e01817c9a97c8913b46e1196ede36be91e Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Thu, 22 Jun 2023 08:26:26 +0200 Subject: [PATCH 32/72] Use absolute links (cherry picked from commit 721102b2cc9efe1412df109375dbe8441ef4d785) --- truffle/docs/TraversingCompilationQueue.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/truffle/docs/TraversingCompilationQueue.md b/truffle/docs/TraversingCompilationQueue.md index 8db841138dbe..e7b5fa094f39 100644 --- a/truffle/docs/TraversingCompilationQueue.md +++ b/truffle/docs/TraversingCompilationQueue.md @@ -13,7 +13,7 @@ This document gives motivation and an overview of this approach. During execution of guest code each Truffle call target counts how many times it was executed as well as how many loop iterations happened during those executions (i.e. the target's "call and loop count"). Once this counter reaches a certain threshold the call target is deemed "hot" and scheduled for compilation. -In order to minimize the impact this has on the execution of the guest code the notion that the target should be compiled is made concrete as a [compilation task](compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/hotspot/CompilationTask.java) and placed into a [compilation queue](compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/truffle/runtime/BackgroundCompileQueue.java) to await compilation. +In order to minimize the impact this has on the execution of the guest code the notion that the target should be compiled is made concrete as a [compilation task](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/hotspot/CompilationTask.java) and placed into a [compilation queue](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/[…]rg/graalvm/compiler/truffle/runtime/BackgroundCompileQueue.java) to await compilation. The Truffle runtime spawns several compiler threads (`--engine.CompilerThreads`) that take tasks from the queue and compile the specified call targets. The initial implementation of the compilation queue in Truffle was a straightforward FIFO queue. From 05f99c364a542149faa40ca9ea5dce1976604ea3 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Fri, 16 Jun 2023 19:23:59 +0300 Subject: [PATCH 33/72] Rewrite Oracle GraalVM on OCI Compute Instances guide" (cherry picked from commit 6d7df5dfbb935fd201c1c8e7dea1fea358f7b4ed) --- .../installation-compute-instance-with-OL.md | 226 +++++++++--------- 1 file changed, 107 insertions(+), 119 deletions(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md index 2375d678971b..ac7b2287ecba 100644 --- a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md +++ b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md @@ -5,185 +5,173 @@ permalink: /getting-started/oci/compute-instance/ # Oracle GraalVM on OCI Compute Instances with Oracle Linux -This guide describes how to install Oracle GraalVM on an Oracle Cloud Infrastructure (OCI) Compute instance with Oracle Linux 7,8, and 9. -For users who prefer a Bare Metal Machine instance, see [this documentation](https://cloud.oracle.com/iaas/whitepapers/deploying_custom_os_images.pdf). -For complete beginners, [start with this tutorial to create and launch your first Linux instance](https://docs.cloud.oracle.com/iaas/Content/GSG/Reference/overviewworkflow.htm?tocpath=Getting%20Started%7CTutorial%20-%20Launching%20Your%20First%20Linux%20Instance%7C_____0). +This guide describes how to install Oracle GraalVM on an Oracle Cloud Infrastructure (OCI) Compute instance with Oracle Linux 7, 8, and 9. +For complete beginners, [start with this tutorial to create and launch your first Linux instance](https://docs.oracle.com/iaas/Content/GSG/Reference/overviewworkflow.htm). -> Note: [Oracle Cloud Infrastructure (OCI)](https://www.oracle.com/cloud) provides Oracle GraalVM to its customers for free. Oracle -GraalVM support is included in an Oracle Cloud subscription. +> Note: [Oracle Cloud Infrastructure (OCI)](https://www.oracle.com/cloud) provides Oracle GraalVM to its customers for free. The support is included in the Oracle Cloud subscription. ### Prerequisites -To replicate the steps in this guide, [create a Compute instance and connect to it](https://docs.cloud.oracle.com/iaas/Content/GSG/Reference/overviewworkflow.htm?tocpath=Getting%20Started%7CTutorial%20-%20Launching%20Your%20First%20Linux%20Instance%7C_____0). +To replicate the steps in this guide, [create a Compute instance and connect to it](https://docs.oracle.com/iaas/Content/GSG/Reference/overviewworkflow.htm). ## Install Oracle GraalVM For convenience, Oracle GraalVM RPMs are available in the Oracle YUM repository. -Each RPM is self-contained and will automatically pull in all required dependencies. +That means that OCI customers can use Oracle GraalVM in their compute instances, just like any other Java Development Kit, by installing it with `yum`, `dnf`, or `microdnf` default package managers, depending on the Oracle Linux version. -That means that OCI customers can use the Oracle GraalVM environment in their compute instances by installing it with `yum`&emdash;a package-management utility for the Linux operating system. +The following instructions have been tested on an OCI Compute Instance with **Oracle Linux 8** and **VM.Standard.E4.Flex** with 1 OCPU and 16 GB RAM. -The following instructions have been tested on an OCI Compute Instance with **Oracle Linux 7.9** and **VM.Standard.E4.Flex** with 1 OCPU and 16 GB RAM. Use the following command to connect to the OCI Compute Instance from a Unix-style system: ```shell ssh -i .ssh/id_rsa opc@INSTANCE_PUBLIC_IP ``` -`.ssh/id_rsa` is the full path and name of the file containing your private SSH key; `opc` is the default name for the Oracle Linux image; and `INSTANCE_PUBLIC_IP` is the instance IP address provisioned from the console. +Where `.ssh/id_rsa` is the full path and name of the file containing your private SSH key; `opc` is the default name for the Oracle Linux image; and `INSTANCE_PUBLIC_IP` is the instance IP address provisioned from the console. For more details, refer to the [Connecting to Your Linux Instance Using SSH](https://docs.cloud.oracle.com/iaas/Content/GSG/Tasks/testingconnection.htm) tutorial. -1. Having connected to the instance, verify which Oracle GraalVM RPMs are available for the installation, narrowing down the search to the latest release, and Java 17. Use the following command: +There are Oracle GraalVM RPMs for JDK 20 and JDK 17 with the following package names: `graalvm-17-native-image` and `graalvm-20-native-image`. +These Oracle GraalVM distributions include a JDK and Natime Image. +Each Oracle GraalVM RPM is self-contained and all required dependencies will be automatically resolved during the installation. - ```shell - sudo yum provides graalvm22-ee-17-jdk - ``` - The resulting list includes both current and previous versions of all of the core package and additional features. +The installation steps may differ per Oracle Linux version or package manager. -2. Find the appropriate RPM package name, and install Oracle GraalVM with `sudo yum install `. -For example, to install the latest version of "Oracle GraalVM JDK17 Java Development Kit", run: +### Oracle Linux 7 +1. Install newer devtoolset with GCC version 10 (required by Oracle GraalVM Native Image): ```shell - sudo yum install graalvm22-ee-17-jdk + sudo yum -y install oracle-softwarecollection-release-el7 ``` - Confirm that the installed package size is correct by entering `yes` at the prompt. - It will install the latest version of **graalvm22-ee-17-jdk** which includes the JVM runtime with the Graal compiler. - - After the installation, the Oracle GraalVM binary is placed in _/usr/lib64/graalvm_. You can check this with: - ```shell - ls /usr/lib64/graalvm + sudo yum install devtoolset-10 ``` +2. Enable the newer devtoolset by default: + ```shell + echo 'source scl_source enable devtoolset-10' >> ~/.bashrc + ``` +3. Enter a new bash session with the newer devtoolset enabled: + ``` + bash + ``` +4. Install Oracle GraalVM, for example, for JDK 20: + ``` + sudo yum install graalvm-20-native-image + ``` + Confirm that the installed package size is correct by entering `yes` at the prompt. -3. Configure environment variables to point to the Oracle GraalVM installation for this SSH session. After installation, the package files are placed in the _/usr/lib64/graalvm_ directory, and binaries in _bin_ accordingly. - - - Set the `PATH` and `JAVA_HOME` environment variables in the bash configuration to point to Oracle GraalVM with the following commands: - - ```shell - echo "export JAVA_HOME=/usr/lib64/graalvm/graalvm22-ee-java17" >> ~/.bashrc - ``` - - ```shell - echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc - ``` - - Activate this change: - - ```shell - source ~/.bashrc - ``` - - - Verify the values of `PATH` and `JAVA_HOME`: - - ```shell - echo $JAVA_HOME - echo $PATH - ``` - - Run the following command to confirm the version of Oracle GraalVM installed: - - ```shell - java -version - ``` +### Oracle Linux 8 and 9 + +On Oracle Linux 8 and 9 with the `yum` package manager, run these commands one by one: +```shell +sudo yum update -y oraclelinux-release-el8 +``` +```shell +sudo yum config-manager --set-enabled ol8_codeready_builder +``` +```shell +sudo yum install graalvm-20-native-image +``` +Confirm that the installed package size is correct by entering `yes` at the prompt. + +On Oracle Linux 8 and 9 with `dnf` or `microdnf` default package managers, run these commands one by one: +```shell +dnf update -y oraclelinux-release-el8 +``` +```shell +dnf config-manager --set-enabled ol8_codeready_builder +``` +```shell +dnf install graalvm-20-native-image +``` +Confirm that the installed package size is correct by entering `yes` at the prompt. + +### Configure Environment Variables + +Configure environment variables to point to the Oracle GraalVM installation for this SSH session. +After installation, the package files are placed in the _/usr/lib64/graalvm_ directory, and binaries in _bin_ accordingly. + +1. Set the `PATH` and `JAVA_HOME` environment variables in the bash configuration to point to Oracle GraalVM with the following commands: + ```shell + echo "export JAVA_HOME=/usr/lib64/graalvm/graalvm-jdk-20.0.1" >> ~/.bashrc + ``` + ```shell + echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc + ``` +2. Activate this change: + ```shell + source ~/.bashrc + ``` +3. Check the values of `PATH` and `JAVA_HOME`, and the Java version to confirm the installation was successful: + ```shell + echo $JAVA_HOME + ``` + ```shell + echo $PATH + ``` + ```shell + java -version + ``` Now you have a ready-to-go OCI Compute instance with Oracle GraalVM installed. ## Install Additional Features +<<<<<<< HEAD Oracle GraalVM consists of several features and components&emdash;JDK, Native Image, Javascript runtime, and Node.js runtime&emdash;each of which can be installed separately or as an add-on. See the [Distribution Components List](https://docs.oracle.com/en/graalvm/jdk/20/docs/support/#certified-platforms) for more information. To add additional features to Oracle GraalVM, use the `yum install ` command. +======= +Oracle GraalVM provides more technologies such as the Javascript runtime, Java on Truffle, etc., each of which can be installed as an add-on. +See the [Features Support list](https://docs.oracle.com/en/graalvm/jdk/20/docs/support/#features-support) for more information. +>>>>>>> 6fdbfcd0b54 (Rewrite Oracle GraalVM on OCI Compute Instances guide") 1. Check what additional features are available for your current Oracle GraalVM installation: ```shell - sudo yum provides graalvm22* + sudo yum list graalvm-20* ``` - The printed list is very large. If you are interested in a particular component, for example, the Python runtime, narrow down the search providing the exact package name: + ```shell + dnf list graalvm-20* + ``` + The printed list is very large. If you are interested in a particular feature, for example, the Python runtime, narrow down the search providing the exact package name: ```shell - sudo yum provides graalvm22-ee-17-python* + sudo yum list graalvm-20-python* + ``` + ```shell + dnf list graalvm-20-python* ``` -2. Add the component to Oracle GraalVM with the `yum install command` command. For example, to install the Python runtime, run: +2. Install the feature to Oracle GraalVM using its ``. For example, to install the Python runtime with `yum`, run: + ```shell + sudo yum install graalvm-20-python + ``` + With `dnf`: ```shell - sudo yum install graalvm22-ee-17-python + dnf install graalvm-20-python ``` Confirm that the installed package size is correct by entering `yes` at the prompt. -### Install Native Image - -[Native Image](../../../reference-manual/native-image/README.md) is a technology to turn your Java application into a standalone native executable and has to be added to the Oracle GraalVM JDK installation. - -1. Search for Native Image RPMs available for your installation: - - ```shell - sudo yum provides graalvm22-ee-17-native-image* - ``` -2. Install Native Image using the `yum install command` command. All required dependencies will be automatically resolved. - - - On Oracle Linux 7.9, run: - ```shell - # Install newer devtoolset with GCC version 10 (required by Native Image) - sudo yum -y install oracle-softwarecollection-release-el7 - sudo yum install devtoolset-10 - # Enable the newer devtoolset by default - echo 'source scl_source enable devtoolset-10' >> ~/.bashrc - # Enter a new bash session with the newer devtoolset enabled - bash - # Install Native Image - sudo yum install graalvm22-ee-17-native-image - ``` - Confirm that the installed package size is correct by entering `yes` at the prompt. - - - On Oracle Linux 8 and 9, run these commands one by one: - ```shell - sudo yum update -y oraclelinux-release-el8 - sudo yum config-manager --set-enabled ol8_codeready_builder - sudo yum install graalvm22-ee-17-native-image - ``` - Confirm that the installed package size is correct by entering `yes` at the prompt. - - - On Oracle Linux 8 and 9 with `dnf` or `microdnf` default package managers, run these commands one by one: - ```shell - dnf update -y oraclelinux-release-el8 - dnf config-manager --set-enabled ol8_codeready_builder - dnf install graalvm22-ee-17-native-image - ``` - Confirm that the installed package size is correct by entering `yes` at the prompt. - ## Update Oracle GraalVM -The `yum` package manager for Oracle Linux can be used to update an existing GraalVM installation or replace it with another version. +You can update an existing Oracle GraalVM or replace it with another version. -1. To update GraalVM, for example, from version 21.x to 22.x, run: +1. To replace with another version, for example, from JDK version 20 to 17, run: ```shell - sudo yum install graalvm22-ee-17-jdk + sudo yum install graalvm-17-native-image ``` 2. Confirm that the installed package size is correct by entering `yes` at the prompt. -3. Check the Java version to confirm that the update was successful: - - ```shell - java -version - ``` - -The **graalvm22-ee-17-jdk** package is installed alongside **graalvm22-ee-17-jdk** in the _/usr/lib64/graalvm_ directory. Note that regardless the version printed to the console, the `PATH` and `JAVA_HOME` environment variables still point to the old version. Reset the variables as described in step 3. -### Note on `yum upgrade` +The **graalvm-17-native-image** package is installed alongside **ggraalvm-20-native-image** in the _/usr/lib64/graalvm_ directory. Note that regardless the version printed to the console, the `PATH` and `JAVA_HOME` environment variables still point to the old version. Reset the variables as described in [Configure Environment Variables](#configure-environment-variables). -The `yum upgrade` command can be used to update on the same year package line, for example, to upgrade from Oracle GraalVM 22.3.1 to version 22.3.2 when this RPM package becomes available: - - ```shell - sudo yum upgrade graalvm22-ee-17-jdk - ``` - As there is no newer package available, you will see the `No packages marked for update` message. +### Related Documentation -It will update the whole system and remove any obsolete Oracle GraalVM installation. +- [Oracle GraalVM in OCI DevOps Build Pipelines](installation-devops-build-pipeline.md) -### Related Documentation +- [Oracle GraalVM in OCI Cloud Shell](cloud-shell.md) - [Get Started with GraalVM on Oracle Linux in OCI](https://luna.oracle.com/lab/3b0dcf97-22d0-489b-a049-5d269199fa00): Run the interactive workshop to install Oracle GraalVM on Oracle Linux 8 (all the necessary cloud resources are provisioned). - -- [Accelerate Applications in Oracle Cloud with Oracle GraalVM](https://luna.oracle.com/lab/d502417b-df66-45be-9fed-a3ac8e3f09b1): Run the interactive workshop to see how Oracle GraalVM accelerates Java applications in OCI. \ No newline at end of file From b897640a4ad348cb60176b280cb661232268f4b5 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Fri, 16 Jun 2023 19:34:04 +0300 Subject: [PATCH 34/72] Synchronize the message about GraalVM support at OCI (cherry picked from commit 7fe60a6e2931568535c7da5183deedde3fd6ef1a) --- docs/getting-started/graalvm-enterprise/oci/cloud-shell.md | 2 +- docs/getting-started/graalvm-enterprise/oci/code-editor.md | 3 +-- .../oci/installation-compute-instance-with-OL.md | 2 +- .../oci/installation-devops-build-pipeline.md | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md index 7cef920938fa..5121505ff8f6 100644 --- a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md +++ b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md @@ -11,7 +11,7 @@ This guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infr Oracle GraalVM for JDK 17 with Native Image are preinstalled in Cloud Shell. -> Note: Oracle GraalVM is available on Oracle Cloud Infrastructure at no additional cost. +> Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. ## Steps to Use Oracle GraalVM in Cloud Shell diff --git a/docs/getting-started/graalvm-enterprise/oci/code-editor.md b/docs/getting-started/graalvm-enterprise/oci/code-editor.md index 687c6c72a7bc..5e57470e25ac 100644 --- a/docs/getting-started/graalvm-enterprise/oci/code-editor.md +++ b/docs/getting-started/graalvm-enterprise/oci/code-editor.md @@ -11,8 +11,7 @@ This guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infr Oracle GraalVM for JDK 17 with Native Image is preinstalled in Cloud Shell, so you do not have to install and configure a development machine. Code Editor's integration with Cloud Shell gives you direct access to it. -> Note: Oracle GraalVM is available on Oracle Cloud Infrastructure at no additional cost. - +> Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. ## Create and Run a Java Application in OCI Code Editor ### Step 1: Open a Terminal in Code Editor diff --git a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md index ac7b2287ecba..c7431c3fc7a7 100644 --- a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md +++ b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md @@ -8,7 +8,7 @@ permalink: /getting-started/oci/compute-instance/ This guide describes how to install Oracle GraalVM on an Oracle Cloud Infrastructure (OCI) Compute instance with Oracle Linux 7, 8, and 9. For complete beginners, [start with this tutorial to create and launch your first Linux instance](https://docs.oracle.com/iaas/Content/GSG/Reference/overviewworkflow.htm). -> Note: [Oracle Cloud Infrastructure (OCI)](https://www.oracle.com/cloud) provides Oracle GraalVM to its customers for free. The support is included in the Oracle Cloud subscription. +> Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. ### Prerequisites diff --git a/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md b/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md index 2b3d64218f2f..5ef45fbf2f5d 100644 --- a/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md +++ b/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md @@ -8,7 +8,7 @@ permalink: /getting-started/oci/devops-build-pipeline/ This guide describes how to use Oracle GraalVM in the Oracle Cloud Infrastructure (OCI) DevOps service. [OCI DevOps](https://www.oracle.com/in/devops/devops-service/) is a continuous integration/continuous delivery (CI/CD) service that enables developers to automate the delivery and deployment of software to OCI compute platforms. -> Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. +> Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. OCI DevOps service provides build runners with Oracle Linux 7 as the base container image along with a number of [runtimes and tools](https://docs.oracle.com/en-us/iaas/Content/devops/using/runtime_details.htm). Oracle GraalVM is supported. From cedfc4c48118203c30ec67f0ebb9de905c73a94e Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Fri, 16 Jun 2023 19:41:55 +0300 Subject: [PATCH 35/72] Update Oracle GraalVM in OCI DevOps Build Pipelines guide (cherry picked from commit 4236dd1c84dd4c0c7dccb25e9551c05c8ea083e5) --- .../oci/installation-devops-build-pipeline.md | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md b/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md index 5ef45fbf2f5d..7db01dd34342 100644 --- a/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md +++ b/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md @@ -23,7 +23,11 @@ You can install and use Oracle GraalVM in DevOps Build Pipelines using the YUM p - [OCI Notification Topic](https://docs.oracle.com/en-us/iaas/Content/Notification/Tasks/managingtopicsandsubscriptions.htm#createTopic) - [OCI DevOps Build Pipeline](https://docs.oracle.com/en-us/iaas/Content/devops/using/create_buildpipeline.htm) -The way to work with a Build Pipeline is to add statements to a [build specification file](https://docs.oracle.com/en-us/iaas/Content/devops/using/build_specs.htm), _build-spec.yml_, then the DevOps CI/CD platform reads the file and runs the commands one by one. You do not run a YUM package manager command manually. +The way to work with a Build Pipeline is to add statements to a [build specification file](https://docs.oracle.com/en-us/iaas/Content/devops/using/build_specs.htm), _build-spec.yml_, then the DevOps CI/CD platform reads the file and runs the commands one by one. +You do not run a YUM package manager command manually. + +There are Oracle GraalVM RPMs for JDK 20 and JDK 17 with the following package names: `graalvm-17-native-image` and `graalvm-20-native-image`. +These Oracle GraalVM distributions include a JDK and Natime Image. To install and use Oracle GraalVM in your DevOps Build Pipeline, update your build specification file as follows: @@ -32,9 +36,9 @@ To install and use Oracle GraalVM in your DevOps Build Pipeline, update your bui ```yml steps: - type: Command - name: "Install GraalVM Enterprise 22.x Native Image for Java 17" + name: "Install Oracle GraalVM for JDK 20" command: | - yum -y install graalvm22-ee-17-native-image + yum -y install graalvm-20-native-image ``` 2. Add the command to set the `JAVA_HOME` environment variable: @@ -42,7 +46,7 @@ To install and use Oracle GraalVM in your DevOps Build Pipeline, update your bui ```yml env: variables: - "JAVA_HOME" : "/usr/lib64/graalvm/graalvm22-ee-java17" + "JAVA_HOME" : "/usr/lib64/graalvm/graalvm-jdk-20.0.1" ``` 3. Add the command to set the `PATH` environment variable: @@ -62,28 +66,17 @@ To install and use Oracle GraalVM in your DevOps Build Pipeline, update your bui Here is an example of a complete [build specification file](https://github.com/oracle-devrel/oci-devops-examples/blob/main/oci-build-examples/oci_devops_build_with_graalenterprise/build_spec.yaml). -Use the `yum list` command to get a list of the available RPMs. For instance, use the following command to list all the available Oracle GraalVM 22.x JDK17 components: +Oracle GraalVM provides more features, each of which can be installed as an add-on. +Use the `yum list` command to get a list of the available RPMs for your installation. +For instance, for Oracle GraalVM for JDK 20, run: ```shell -yum list graalvm22-ee-17* - -graalvm22-ee-17-native-image.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-espresso.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-javascript.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-jdk.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-libpolyglot.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-llvm.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-llvm-toolchain.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-nodejs.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-polyglot.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-python.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-ruby.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-tools.x86_64 22.3.2-1.el7 ol7_oci_included -graalvm22-ee-17-wasm.x86_64 22.3.2-1.el7 ol7_oci_included +yum list graalvm-20* ... ``` -To try this feature out, use the sample project: [Using Oracle GraalVM in OCI DevOps Build Pipelines](https://github.com/oracle-devrel/oci-devops-examples/tree/main/oci-build-examples/oci_devops_build_with_graalenterprise). It describes how to set up Oracle GraalVM in OCI DevOps service, create a Build Pipeline, add build stages, and so on. +To try this feature out, use the sample project: [Using Oracle GraalVM in OCI DevOps Build Pipelines](https://github.com/oracle-devrel/oci-devops-examples/tree/main/oci-build-examples/oci_devops_build_with_graalenterprise). +It describes how to set up Oracle GraalVM in OCI DevOps service, create a Build Pipeline, add build stages, and so on. ### Related Documentation From 2499a84d7cdeece14c5e310134f17afd103644d8 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Fri, 16 Jun 2023 19:55:02 +0300 Subject: [PATCH 36/72] Review OCI Code Editor and Cloud Shell guides (cherry picked from commit 19cfa442b3986d587473d70f88d4026d55719cf6) --- .../graalvm-enterprise/oci/cloud-shell.md | 14 ++++++-------- .../graalvm-enterprise/oci/code-editor.md | 13 ++++++------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md index 5121505ff8f6..ab1cd3403bd4 100644 --- a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md +++ b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md @@ -9,7 +9,8 @@ This guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infr [OCI Cloud Shell](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cloudshellintro.htm) is a browser-based terminal accessible from the Oracle Cloud Console. It provides access to a Linux shell with a pre-authenticated OCI Command Line Interface (CLI), preinstalled developer tools, and comes with 5GB of storage. -Oracle GraalVM for JDK 17 with Native Image are preinstalled in Cloud Shell. +Oracle GraalVM for JDK 17 is preinstalled in Cloud Shell. +It includes a JDK and Natime Image. > Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. @@ -24,16 +25,16 @@ Cloud Shell has several preinstalled JDKs, including Oracle GraalVM JDK. ```shell csruntimectl java list ``` - The output lists the JDKs preinstalled in Cloud Shell: GraalVM for JDK 17, Oracle JDK 11, and Oracle JDK 8. The JDK marked with an asterisk is the current JDK. + The output lists the JDKs preinstalled in Cloud Shell: Oracle GraalVM for JDK 17, Oracle JDK 11, and Oracle JDK 8. The JDK marked with an asterisk is the current JDK. -3. Select GraalVM for JDK 17 as the current JDK: +3. Select Oracle GraalVM for JDK 17 as the current JDK: ```shell csruntimectl java set graalvmeejdk-17 ``` You will see the confirmation message printed `The current managed java version is set to graalvmeejdk-17`. -4. Now confirm the values of the environment variables `PATH` and `JAVA_HOME`, and the version of `java`, the `native-image` generator: +4. Now confirm the values of the environment variables `PATH` and `JAVA_HOME`, and the version of `java`: ```shell echo $JAVA_HOME @@ -44,9 +45,6 @@ Cloud Shell has several preinstalled JDKs, including Oracle GraalVM JDK. ```shell java -version ``` - ```shell - native-image --version - ``` You are all set to run Java applications using Oracle GraalVM JDK in Cloud Shell. @@ -115,7 +113,7 @@ The [Spring AOT plugin](https://docs.spring.io/spring-native/docs/current/refere ``` Terminate the application by pressing Ctrl+c. -Congratulations! You have successfully used Oracle GraalVM JDK with Native Image to build and test a Spring Boot REST application in Cloud Shell. +Congratulations! You have successfully used Oracle GraalVM to build and test a Spring Boot REST application in Cloud Shell. Thus, you can easily use Oracle GraalVM in OCI Cloud Shell to build and test simple Java applications with Micronaut, Spring, and other microservice frameworks. diff --git a/docs/getting-started/graalvm-enterprise/oci/code-editor.md b/docs/getting-started/graalvm-enterprise/oci/code-editor.md index 5e57470e25ac..c720fef78f19 100644 --- a/docs/getting-started/graalvm-enterprise/oci/code-editor.md +++ b/docs/getting-started/graalvm-enterprise/oci/code-editor.md @@ -9,7 +9,9 @@ This guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infr [OCI Code Editor](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/code_editor_intro.htm) provides a rich, in-console editing environment that enables you to edit code without having to switch between the Oracle Cloud Console and your local development environment. The Code Editor enables you to edit and deploy code for OCI services directly from the OCI Console. -Oracle GraalVM for JDK 17 with Native Image is preinstalled in Cloud Shell, so you do not have to install and configure a development machine. Code Editor's integration with Cloud Shell gives you direct access to it. +Oracle GraalVM for JDK 17 is preinstalled in Cloud Shell, so you do not have to install and configure a development machine. +Oracle GraalVM includes a JDK and Natime Image. +Code Editor's integration with Cloud Shell gives you direct access to it. > Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. ## Create and Run a Java Application in OCI Code Editor @@ -19,14 +21,14 @@ Oracle GraalVM for JDK 17 with Native Image is preinstalled in Cloud Shell, so y 1. [Login to the Oracle Cloud Console and launch Code Editor](https://cloud.oracle.com/?bdcstate=maximized&codeeditor=true). 2. Open a Terminal in Code Editor, by clicking **New Terminal** from the **Terminal** menu. -### Step 2: Select GraalVM JDK as the Default JDK +### Step 2: Select Oracle GraalVM JDK as the Default JDK 1. List the installed JDKs using the `csruntimectl java list` command. ```shell csruntimectl java list ``` - The output lists the JDKs preinstalled in Cloud Shell: GraalVM for JDK 17, Oracle JDK 11, and Oracle JDK 8. The JDK marked with an asterisk is the current JDK. + The output lists the JDKs preinstalled in Cloud Shell: Oracle GraalVM for JDK 17, Oracle JDK 11, and Oracle JDK 8. The JDK marked with an asterisk is the current JDK. 2. Select GraalVM for JDK 17 as the current JDK: @@ -35,7 +37,7 @@ Oracle GraalVM for JDK 17 with Native Image is preinstalled in Cloud Shell, so y ``` You will see the confirmation message printed `The current managed java version is set to graalvmeejdk-17`. -3. Now confirm the values of the environment variables `PATH` and `JAVA_HOME`, and the version of `java`, the `native-image` generator: +3. Now confirm the values of the environment variables `PATH` and `JAVA_HOME`, and the version of `java`: ```shell echo $JAVA_HOME ``` @@ -45,9 +47,6 @@ Oracle GraalVM for JDK 17 with Native Image is preinstalled in Cloud Shell, so y ```shell java -version ``` - ```shell - native-image --version - ``` ## Step 3: Setup a Java Project and Run From 3010a6141ccc04d6d0133019169d9753921e0d56 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 20 Jun 2023 14:24:20 +0300 Subject: [PATCH 37/72] Correct the JAVA_HOME command (cherry picked from commit 613b633365bf33823beb293e2f292288b2561422) --- .../oci/installation-compute-instance-with-OL.md | 7 ++----- .../oci/installation-devops-build-pipeline.md | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md index c7431c3fc7a7..3d0c248146e4 100644 --- a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md +++ b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md @@ -19,8 +19,6 @@ To replicate the steps in this guide, [create a Compute instance and connect to For convenience, Oracle GraalVM RPMs are available in the Oracle YUM repository. That means that OCI customers can use Oracle GraalVM in their compute instances, just like any other Java Development Kit, by installing it with `yum`, `dnf`, or `microdnf` default package managers, depending on the Oracle Linux version. -The following instructions have been tested on an OCI Compute Instance with **Oracle Linux 8** and **VM.Standard.E4.Flex** with 1 OCPU and 16 GB RAM. - Use the following command to connect to the OCI Compute Instance from a Unix-style system: ```shell @@ -92,7 +90,7 @@ After installation, the package files are placed in the _/usr/lib64/graalvm_ dir 1. Set the `PATH` and `JAVA_HOME` environment variables in the bash configuration to point to Oracle GraalVM with the following commands: ```shell - echo "export JAVA_HOME=/usr/lib64/graalvm/graalvm-jdk-20.0.1" >> ~/.bashrc + echo "export JAVA_HOME=/usr/lib64/graalvm/graalvm-java20" >> ~/.bashrc ``` ```shell echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc @@ -134,7 +132,7 @@ See the [Features Support list](https://docs.oracle.com/en/graalvm/jdk/20/docs/s ```shell dnf list graalvm-20* ``` - The printed list is very large. If you are interested in a particular feature, for example, the Python runtime, narrow down the search providing the exact package name: + The printed list may be large. If you are interested in a particular feature, for example, the Python runtime, narrow down the search providing the exact package name: ```shell sudo yum list graalvm-20-python* @@ -143,7 +141,6 @@ See the [Features Support list](https://docs.oracle.com/en/graalvm/jdk/20/docs/s dnf list graalvm-20-python* ``` - 2. Install the feature to Oracle GraalVM using its ``. For example, to install the Python runtime with `yum`, run: ```shell sudo yum install graalvm-20-python diff --git a/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md b/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md index 7db01dd34342..70a576921e1b 100644 --- a/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md +++ b/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md @@ -46,7 +46,7 @@ To install and use Oracle GraalVM in your DevOps Build Pipeline, update your bui ```yml env: variables: - "JAVA_HOME" : "/usr/lib64/graalvm/graalvm-jdk-20.0.1" + "JAVA_HOME" : "/usr/lib64/graalvm/graalvm-java20" ``` 3. Add the command to set the `PATH` environment variable: From 2b087d20d56e3170aa1da94bdc6023ceeadc955d Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 20 Jun 2023 14:26:45 +0300 Subject: [PATCH 38/72] Revert "Review OCI Code Editor and Cloud Shell guides" This reverts commit 6c3bccd0e3d6fc7e63c3f6245bad26b0e627c784. (cherry picked from commit 1929da83499004d8289506d06ebc44589858cc78) --- .../graalvm-enterprise/oci/cloud-shell.md | 14 ++++++++------ .../graalvm-enterprise/oci/code-editor.md | 13 +++++++------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md index ab1cd3403bd4..5121505ff8f6 100644 --- a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md +++ b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md @@ -9,8 +9,7 @@ This guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infr [OCI Cloud Shell](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cloudshellintro.htm) is a browser-based terminal accessible from the Oracle Cloud Console. It provides access to a Linux shell with a pre-authenticated OCI Command Line Interface (CLI), preinstalled developer tools, and comes with 5GB of storage. -Oracle GraalVM for JDK 17 is preinstalled in Cloud Shell. -It includes a JDK and Natime Image. +Oracle GraalVM for JDK 17 with Native Image are preinstalled in Cloud Shell. > Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. @@ -25,16 +24,16 @@ Cloud Shell has several preinstalled JDKs, including Oracle GraalVM JDK. ```shell csruntimectl java list ``` - The output lists the JDKs preinstalled in Cloud Shell: Oracle GraalVM for JDK 17, Oracle JDK 11, and Oracle JDK 8. The JDK marked with an asterisk is the current JDK. + The output lists the JDKs preinstalled in Cloud Shell: GraalVM for JDK 17, Oracle JDK 11, and Oracle JDK 8. The JDK marked with an asterisk is the current JDK. -3. Select Oracle GraalVM for JDK 17 as the current JDK: +3. Select GraalVM for JDK 17 as the current JDK: ```shell csruntimectl java set graalvmeejdk-17 ``` You will see the confirmation message printed `The current managed java version is set to graalvmeejdk-17`. -4. Now confirm the values of the environment variables `PATH` and `JAVA_HOME`, and the version of `java`: +4. Now confirm the values of the environment variables `PATH` and `JAVA_HOME`, and the version of `java`, the `native-image` generator: ```shell echo $JAVA_HOME @@ -45,6 +44,9 @@ Cloud Shell has several preinstalled JDKs, including Oracle GraalVM JDK. ```shell java -version ``` + ```shell + native-image --version + ``` You are all set to run Java applications using Oracle GraalVM JDK in Cloud Shell. @@ -113,7 +115,7 @@ The [Spring AOT plugin](https://docs.spring.io/spring-native/docs/current/refere ``` Terminate the application by pressing Ctrl+c. -Congratulations! You have successfully used Oracle GraalVM to build and test a Spring Boot REST application in Cloud Shell. +Congratulations! You have successfully used Oracle GraalVM JDK with Native Image to build and test a Spring Boot REST application in Cloud Shell. Thus, you can easily use Oracle GraalVM in OCI Cloud Shell to build and test simple Java applications with Micronaut, Spring, and other microservice frameworks. diff --git a/docs/getting-started/graalvm-enterprise/oci/code-editor.md b/docs/getting-started/graalvm-enterprise/oci/code-editor.md index c720fef78f19..5e57470e25ac 100644 --- a/docs/getting-started/graalvm-enterprise/oci/code-editor.md +++ b/docs/getting-started/graalvm-enterprise/oci/code-editor.md @@ -9,9 +9,7 @@ This guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infr [OCI Code Editor](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/code_editor_intro.htm) provides a rich, in-console editing environment that enables you to edit code without having to switch between the Oracle Cloud Console and your local development environment. The Code Editor enables you to edit and deploy code for OCI services directly from the OCI Console. -Oracle GraalVM for JDK 17 is preinstalled in Cloud Shell, so you do not have to install and configure a development machine. -Oracle GraalVM includes a JDK and Natime Image. -Code Editor's integration with Cloud Shell gives you direct access to it. +Oracle GraalVM for JDK 17 with Native Image is preinstalled in Cloud Shell, so you do not have to install and configure a development machine. Code Editor's integration with Cloud Shell gives you direct access to it. > Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. ## Create and Run a Java Application in OCI Code Editor @@ -21,14 +19,14 @@ Code Editor's integration with Cloud Shell gives you direct access to it. 1. [Login to the Oracle Cloud Console and launch Code Editor](https://cloud.oracle.com/?bdcstate=maximized&codeeditor=true). 2. Open a Terminal in Code Editor, by clicking **New Terminal** from the **Terminal** menu. -### Step 2: Select Oracle GraalVM JDK as the Default JDK +### Step 2: Select GraalVM JDK as the Default JDK 1. List the installed JDKs using the `csruntimectl java list` command. ```shell csruntimectl java list ``` - The output lists the JDKs preinstalled in Cloud Shell: Oracle GraalVM for JDK 17, Oracle JDK 11, and Oracle JDK 8. The JDK marked with an asterisk is the current JDK. + The output lists the JDKs preinstalled in Cloud Shell: GraalVM for JDK 17, Oracle JDK 11, and Oracle JDK 8. The JDK marked with an asterisk is the current JDK. 2. Select GraalVM for JDK 17 as the current JDK: @@ -37,7 +35,7 @@ Code Editor's integration with Cloud Shell gives you direct access to it. ``` You will see the confirmation message printed `The current managed java version is set to graalvmeejdk-17`. -3. Now confirm the values of the environment variables `PATH` and `JAVA_HOME`, and the version of `java`: +3. Now confirm the values of the environment variables `PATH` and `JAVA_HOME`, and the version of `java`, the `native-image` generator: ```shell echo $JAVA_HOME ``` @@ -47,6 +45,9 @@ Code Editor's integration with Cloud Shell gives you direct access to it. ```shell java -version ``` + ```shell + native-image --version + ``` ## Step 3: Setup a Java Project and Run From e5caec864085c9ee02bbe49f23e6dfeb3f69cfc6 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 20 Jun 2023 20:32:13 +0200 Subject: [PATCH 39/72] Improve user experience at OHC (cherry picked from commit 829c2a86d63e2f2455b16914c1d3e504c799064b) --- docs/reference-manual/native-image/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/reference-manual/native-image/README.md b/docs/reference-manual/native-image/README.md index 6e3b33ee33a2..9b338517028e 100644 --- a/docs/reference-manual/native-image/README.md +++ b/docs/reference-manual/native-image/README.md @@ -1,11 +1,11 @@ --- layout: docs toc_group: native-image -link_title: Native Image +link_title: Getting Started with Native Image permalink: /reference-manual/native-image/ --- -# Getting Started with Native Image +# Native Image Native Image is a technology to compile Java code ahead-of-time to a binary -- a **native executable**. A native executable includes only the code required at run time, that is the application classes, standard-library classes, the language runtime, and statically-linked native code from the JDK. From 11cbff5c1afc13b3724886439937b487f6e2e89a Mon Sep 17 00:00:00 2001 From: Sachin Pikle Date: Wed, 21 Jun 2023 11:42:37 +0000 Subject: [PATCH 40/72] Follow review comments (cherry picked from commit a061733aaa8737db8d490e6997c8bb1b7ad6dc2a) --- .../graalvm-enterprise/oci/cloud-shell.md | 2 +- .../graalvm-enterprise/oci/code-editor.md | 3 ++- .../installation-compute-instance-with-OL.md | 12 +++++----- .../oci/installation-devops-build-pipeline.md | 22 +++++++++---------- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md index 5121505ff8f6..428e17574384 100644 --- a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md +++ b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md @@ -11,7 +11,7 @@ This guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infr Oracle GraalVM for JDK 17 with Native Image are preinstalled in Cloud Shell. -> Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. +> Note: Oracle GraalVM license and support are included in the Oracle Cloud Infrastructure subscription at no additional cost. ## Steps to Use Oracle GraalVM in Cloud Shell diff --git a/docs/getting-started/graalvm-enterprise/oci/code-editor.md b/docs/getting-started/graalvm-enterprise/oci/code-editor.md index 5e57470e25ac..c07f67cef8f5 100644 --- a/docs/getting-started/graalvm-enterprise/oci/code-editor.md +++ b/docs/getting-started/graalvm-enterprise/oci/code-editor.md @@ -11,7 +11,8 @@ This guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infr Oracle GraalVM for JDK 17 with Native Image is preinstalled in Cloud Shell, so you do not have to install and configure a development machine. Code Editor's integration with Cloud Shell gives you direct access to it. -> Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. +> Note: Oracle GraalVM license and support are included in the Oracle Cloud Infrastructure subscription at no additional cost. + ## Create and Run a Java Application in OCI Code Editor ### Step 1: Open a Terminal in Code Editor diff --git a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md index 3d0c248146e4..c756e2fd802d 100644 --- a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md +++ b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md @@ -8,7 +8,7 @@ permalink: /getting-started/oci/compute-instance/ This guide describes how to install Oracle GraalVM on an Oracle Cloud Infrastructure (OCI) Compute instance with Oracle Linux 7, 8, and 9. For complete beginners, [start with this tutorial to create and launch your first Linux instance](https://docs.oracle.com/iaas/Content/GSG/Reference/overviewworkflow.htm). -> Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. +> Note: Oracle GraalVM license and support are included in the Oracle Cloud Infrastructure subscription at no additional cost. ### Prerequisites @@ -16,7 +16,11 @@ To replicate the steps in this guide, [create a Compute instance and connect to ## Install Oracle GraalVM -For convenience, Oracle GraalVM RPMs are available in the Oracle YUM repository. +For convenience, Oracle GraalVM RPMs are available in the Oracle YUM repository. +RPMs for Oracle GraalVM for JDK 17 and Oracle GraalVM for JDK 20 are available with the package names `graalvm-17-native-image` and `graalvm-20-native-image` respectively. +These Oracle GraalVM distributions include a JDK and Natime Image. +Each Oracle GraalVM RPM is self-contained and all required dependencies will be automatically resolved during the installation. + That means that OCI customers can use Oracle GraalVM in their compute instances, just like any other Java Development Kit, by installing it with `yum`, `dnf`, or `microdnf` default package managers, depending on the Oracle Linux version. Use the following command to connect to the OCI Compute Instance from a Unix-style system: @@ -28,10 +32,6 @@ Use the following command to connect to the OCI Compute Instance from a Unix-sty Where `.ssh/id_rsa` is the full path and name of the file containing your private SSH key; `opc` is the default name for the Oracle Linux image; and `INSTANCE_PUBLIC_IP` is the instance IP address provisioned from the console. For more details, refer to the [Connecting to Your Linux Instance Using SSH](https://docs.cloud.oracle.com/iaas/Content/GSG/Tasks/testingconnection.htm) tutorial. -There are Oracle GraalVM RPMs for JDK 20 and JDK 17 with the following package names: `graalvm-17-native-image` and `graalvm-20-native-image`. -These Oracle GraalVM distributions include a JDK and Natime Image. -Each Oracle GraalVM RPM is self-contained and all required dependencies will be automatically resolved during the installation. - The installation steps may differ per Oracle Linux version or package manager. ### Oracle Linux 7 diff --git a/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md b/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md index 70a576921e1b..f691da642f81 100644 --- a/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md +++ b/docs/getting-started/graalvm-enterprise/oci/installation-devops-build-pipeline.md @@ -8,10 +8,9 @@ permalink: /getting-started/oci/devops-build-pipeline/ This guide describes how to use Oracle GraalVM in the Oracle Cloud Infrastructure (OCI) DevOps service. [OCI DevOps](https://www.oracle.com/in/devops/devops-service/) is a continuous integration/continuous delivery (CI/CD) service that enables developers to automate the delivery and deployment of software to OCI compute platforms. -> Note: Oracle GraalVM is available on Oracle Cloud Infrastructure (OCI) at no additional cost. The support is included in the Oracle Cloud subscription. +> Note: Oracle GraalVM license and support are included in the Oracle Cloud Infrastructure subscription at no additional cost. OCI DevOps service provides build runners with Oracle Linux 7 as the base container image along with a number of [runtimes and tools](https://docs.oracle.com/en-us/iaas/Content/devops/using/runtime_details.htm). -Oracle GraalVM is supported. Oracle GraalVM RPMs are available in the Oracle YUM repository. Each RPM is self-contained and will automatically pull in all its required dependencies. @@ -23,15 +22,16 @@ You can install and use Oracle GraalVM in DevOps Build Pipelines using the YUM p - [OCI Notification Topic](https://docs.oracle.com/en-us/iaas/Content/Notification/Tasks/managingtopicsandsubscriptions.htm#createTopic) - [OCI DevOps Build Pipeline](https://docs.oracle.com/en-us/iaas/Content/devops/using/create_buildpipeline.htm) -The way to work with a Build Pipeline is to add statements to a [build specification file](https://docs.oracle.com/en-us/iaas/Content/devops/using/build_specs.htm), _build-spec.yml_, then the DevOps CI/CD platform reads the file and runs the commands one by one. -You do not run a YUM package manager command manually. +To work with a Build Pipeline, add statements to a [build specification file](https://docs.oracle.com/en-us/iaas/Content/devops/using/build_specs.htm), _build-spec.yml_. +The DevOps CI/CD platform reads the file and runs the commands one by one. +You do not need to run a YUM package manager command manually. -There are Oracle GraalVM RPMs for JDK 20 and JDK 17 with the following package names: `graalvm-17-native-image` and `graalvm-20-native-image`. -These Oracle GraalVM distributions include a JDK and Natime Image. +RPMs for Oracle GraalVM for JDK 17 and Oracle GraalVM for JDK 20 are available with the package names `graalvm-17-native-image` and `graalvm-20-native-image` respectively. +Each package includes both JDK and Natime Image. -To install and use Oracle GraalVM in your DevOps Build Pipeline, update your build specification file as follows: +To install and use Oracle GraalVM in your DevOps Build Pipeline, update your build specification file as shown in the following example. -1. Add the command to install Oracle GraalVM with Native Image and Java Development Kit (JDK): +1. Add the command to install Oracle GraalVM for JDK 20 with Native Image and Java Development Kit (JDK): ```yml steps: @@ -41,7 +41,7 @@ To install and use Oracle GraalVM in your DevOps Build Pipeline, update your bui yum -y install graalvm-20-native-image ``` -2. Add the command to set the `JAVA_HOME` environment variable: +2. Add the command to set the `JAVA_HOME` environment variable for Oracle GraalVM for JDK 20: ```yml env: @@ -64,7 +64,7 @@ To install and use Oracle GraalVM in your DevOps Build Pipeline, update your bui export PATH=$JAVA_HOME/bin:$PATH ``` -Here is an example of a complete [build specification file](https://github.com/oracle-devrel/oci-devops-examples/blob/main/oci-build-examples/oci_devops_build_with_graalenterprise/build_spec.yaml). +Here is an example of a complete [build specification file](https://github.com/oracle-devrel/oci-devops-examples/blob/main/oci-build-examples/oci_devops_build_with_graalenterprise/build_spec_oracle_graalvm_jdk20.yaml). Oracle GraalVM provides more features, each of which can be installed as an add-on. Use the `yum list` command to get a list of the available RPMs for your installation. @@ -82,4 +82,4 @@ It describes how to set up Oracle GraalVM in OCI DevOps service, create a Build * [OCI DevOps: Using Oracle GraalVM in DevOps Build Pipelines](https://docs.oracle.com/en-us/iaas/Content/devops/using/graalvm.htm) * [OCI Build Examples: Using Oracle GraalVM in OCI DevOps Build Pipelines](https://github.com/oracle-devrel/oci-devops-examples/tree/main/oci-build-examples/oci_devops_build_with_graalenterprise) -* [OCI Build Examples: Using Oracle GraalVM in OCI DevOps to build a Micronaut REST App](https://github.com/oracle-devrel/oci-devops-examples/tree/main/oci-build-examples/oci_devops_graalee_micronaut) \ No newline at end of file +* [OCI Build Examples: Using Oracle GraalVM in OCI DevOps to build a Micronaut REST App](https://github.com/oracle-devrel/oci-devops-examples/tree/main/oci-build-examples/oci_devops_graalee_micronaut) From e7e041202d4c85e7e1bb3a8b0593f979e62de094 Mon Sep 17 00:00:00 2001 From: Sachin Pikle Date: Thu, 22 Jun 2023 07:06:34 +0000 Subject: [PATCH 41/72] Minor text changes (cherry picked from commit d679200706a7233e6c6b2568dc8532cfa7d7549a) --- docs/getting-started/graalvm-enterprise/oci/cloud-shell.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md index 428e17574384..93e1b1ec338f 100644 --- a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md +++ b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md @@ -9,7 +9,7 @@ This guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infr [OCI Cloud Shell](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cloudshellintro.htm) is a browser-based terminal accessible from the Oracle Cloud Console. It provides access to a Linux shell with a pre-authenticated OCI Command Line Interface (CLI), preinstalled developer tools, and comes with 5GB of storage. -Oracle GraalVM for JDK 17 with Native Image are preinstalled in Cloud Shell. +Oracle GraalVM JDK 17 with Native Image is preinstalled in Cloud Shell. > Note: Oracle GraalVM license and support are included in the Oracle Cloud Infrastructure subscription at no additional cost. From 11e95084c39435c3c045d5db17d8dc8154632b54 Mon Sep 17 00:00:00 2001 From: Sachin Pikle Date: Thu, 22 Jun 2023 07:08:25 +0000 Subject: [PATCH 42/72] Minor text changes (cherry picked from commit 14377d30925923d9b5482a4c11d3f3de4249b2c4) --- docs/getting-started/graalvm-enterprise/oci/cloud-shell.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md index 93e1b1ec338f..c91999c8e467 100644 --- a/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md +++ b/docs/getting-started/graalvm-enterprise/oci/cloud-shell.md @@ -9,7 +9,7 @@ This guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infr [OCI Cloud Shell](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cloudshellintro.htm) is a browser-based terminal accessible from the Oracle Cloud Console. It provides access to a Linux shell with a pre-authenticated OCI Command Line Interface (CLI), preinstalled developer tools, and comes with 5GB of storage. -Oracle GraalVM JDK 17 with Native Image is preinstalled in Cloud Shell. +Oracle GraalVM JDK 17 with Native Image is preinstalled in Cloud Shell, so you do not have to install and configure a development machine. > Note: Oracle GraalVM license and support are included in the Oracle Cloud Infrastructure subscription at no additional cost. From 9aa427c28e9ab5b5f2067b0e0b0a3f0f30a391d4 Mon Sep 17 00:00:00 2001 From: Sachin Pikle Date: Thu, 22 Jun 2023 07:09:17 +0000 Subject: [PATCH 43/72] Minor text change (cherry picked from commit aa69b0f47e4a332813834dda5a1dbeaecffbb72f) --- docs/getting-started/graalvm-enterprise/oci/code-editor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/code-editor.md b/docs/getting-started/graalvm-enterprise/oci/code-editor.md index c07f67cef8f5..b1be705a6957 100644 --- a/docs/getting-started/graalvm-enterprise/oci/code-editor.md +++ b/docs/getting-started/graalvm-enterprise/oci/code-editor.md @@ -9,7 +9,7 @@ This guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infr [OCI Code Editor](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/code_editor_intro.htm) provides a rich, in-console editing environment that enables you to edit code without having to switch between the Oracle Cloud Console and your local development environment. The Code Editor enables you to edit and deploy code for OCI services directly from the OCI Console. -Oracle GraalVM for JDK 17 with Native Image is preinstalled in Cloud Shell, so you do not have to install and configure a development machine. Code Editor's integration with Cloud Shell gives you direct access to it. +Oracle GraalVM JDK 17 with Native Image is preinstalled in Cloud Shell, so you do not have to install and configure a development machine. Code Editor's integration with Cloud Shell gives you direct access to it. > Note: Oracle GraalVM license and support are included in the Oracle Cloud Infrastructure subscription at no additional cost. From c9a9a8b57e02764c10ec59cc47aad1c107b68a5d Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Thu, 22 Jun 2023 13:28:01 +0200 Subject: [PATCH 44/72] Add summary (cherry picked from commit e8ccf508dd7f1b13e2c6704f58a0ff5c145ed81a) --- .../installation-compute-instance-with-OL.md | 21 +------------------ 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md index c756e2fd802d..6e8e8f6249b2 100644 --- a/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md +++ b/docs/getting-started/graalvm-enterprise/oci/installation-compute-instance-with-OL.md @@ -114,15 +114,8 @@ Now you have a ready-to-go OCI Compute instance with Oracle GraalVM installed. ## Install Additional Features -<<<<<<< HEAD -Oracle GraalVM consists of several features and components&emdash;JDK, Native Image, Javascript runtime, and Node.js runtime&emdash;each of which can be installed separately or as an add-on. -See the [Distribution Components List](https://docs.oracle.com/en/graalvm/jdk/20/docs/support/#certified-platforms) for more information. - -To add additional features to Oracle GraalVM, use the `yum install ` command. -======= Oracle GraalVM provides more technologies such as the Javascript runtime, Java on Truffle, etc., each of which can be installed as an add-on. See the [Features Support list](https://docs.oracle.com/en/graalvm/jdk/20/docs/support/#features-support) for more information. ->>>>>>> 6fdbfcd0b54 (Rewrite Oracle GraalVM on OCI Compute Instances guide") 1. Check what additional features are available for your current Oracle GraalVM installation: @@ -151,19 +144,7 @@ See the [Features Support list](https://docs.oracle.com/en/graalvm/jdk/20/docs/s ``` Confirm that the installed package size is correct by entering `yes` at the prompt. -## Update Oracle GraalVM - -You can update an existing Oracle GraalVM or replace it with another version. - -1. To replace with another version, for example, from JDK version 20 to 17, run: - - ```shell - sudo yum install graalvm-17-native-image - ``` - -2. Confirm that the installed package size is correct by entering `yes` at the prompt. - -The **graalvm-17-native-image** package is installed alongside **ggraalvm-20-native-image** in the _/usr/lib64/graalvm_ directory. Note that regardless the version printed to the console, the `PATH` and `JAVA_HOME` environment variables still point to the old version. Reset the variables as described in [Configure Environment Variables](#configure-environment-variables). +Congratulations! You have installed Oracle GraalVM on the Compute instance with the Oracle Linux image, and can use it as any other Java Development Kit. ### Related Documentation From 9462813b3e1a30bbfc20e83f2632bb567a62ae4e Mon Sep 17 00:00:00 2001 From: Lesia Chaban Date: Fri, 23 Jun 2023 13:30:42 +0300 Subject: [PATCH 45/72] Fix absolute link (cherry picked from commit dc03be1c529d531b8dad2f508ae53109174fc577) --- truffle/docs/TraversingCompilationQueue.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/truffle/docs/TraversingCompilationQueue.md b/truffle/docs/TraversingCompilationQueue.md index e7b5fa094f39..cf21a618561f 100644 --- a/truffle/docs/TraversingCompilationQueue.md +++ b/truffle/docs/TraversingCompilationQueue.md @@ -13,7 +13,7 @@ This document gives motivation and an overview of this approach. During execution of guest code each Truffle call target counts how many times it was executed as well as how many loop iterations happened during those executions (i.e. the target's "call and loop count"). Once this counter reaches a certain threshold the call target is deemed "hot" and scheduled for compilation. -In order to minimize the impact this has on the execution of the guest code the notion that the target should be compiled is made concrete as a [compilation task](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/hotspot/CompilationTask.java) and placed into a [compilation queue](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/[…]rg/graalvm/compiler/truffle/runtime/BackgroundCompileQueue.java) to await compilation. +In order to minimize the impact this has on the execution of the guest code the notion that the target should be compiled is made concrete as a [compilation task](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/hotspot/CompilationTask.java) and placed into a [compilation queue](https://github.com/oracle/graal/blob/master/compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/truffle/runtime/BackgroundCompileQueue.java) to await compilation. The Truffle runtime spawns several compiler threads (`--engine.CompilerThreads`) that take tasks from the queue and compile the specified call targets. The initial implementation of the compilation queue in Truffle was a straightforward FIFO queue. From a5b812e93008bf0b9199ad43ab65b3e66b3796c7 Mon Sep 17 00:00:00 2001 From: Yudi Zheng Date: Fri, 23 Jun 2023 22:43:07 +0200 Subject: [PATCH 46/72] Enhance AES performance. --- .../aarch64/AArch64CounterModeAESCryptOp.java | 49 +++++++++++++------ 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/compiler/src/org.graalvm.compiler.lir.aarch64/src/org/graalvm/compiler/lir/aarch64/AArch64CounterModeAESCryptOp.java b/compiler/src/org.graalvm.compiler.lir.aarch64/src/org/graalvm/compiler/lir/aarch64/AArch64CounterModeAESCryptOp.java index e7883dcbb694..324c5280cab6 100644 --- a/compiler/src/org.graalvm.compiler.lir.aarch64/src/org/graalvm/compiler/lir/aarch64/AArch64CounterModeAESCryptOp.java +++ b/compiler/src/org.graalvm.compiler.lir.aarch64/src/org/graalvm/compiler/lir/aarch64/AArch64CounterModeAESCryptOp.java @@ -238,16 +238,17 @@ public void emitCode(CompilationResultBuilder crb, AArch64MacroAssembler masm) { // Setup the counter masm.neon.moveVI(ASIMDSize.FullReg, ElementSize.Word, v4, 0); masm.neon.moveVI(ASIMDSize.FullReg, ElementSize.Word, v5, 1); - masm.neon.insXX(ElementSize.Word, v4, 3, v5, 3); - // v4 contains { 0, 0, 0, 1 } + masm.neon.insXX(ElementSize.Word, v4, 2, v5, 2); + // v4 contains { 0, 1 } - // Load the counter into v0 + // 128-bit big-endian increment masm.fldr(128, v0, AArch64Address.createBaseRegisterOnlyAddress(128, counter)); - masm.neon.rev32VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v0); - masm.neon.addVVV(ASIMDSize.FullReg, ElementSize.Word, v16, v16, v4); - masm.neon.rev32VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v16); - // Save the incremented counter back + masm.neon.rev64VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v0); + beAdd128x64(masm, v16, v16, v4, v5); + masm.neon.rev64VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v16); masm.fstr(128, v16, AArch64Address.createBaseRegisterOnlyAddress(128, counter)); + // Previous counter value is in v0 + // v4 contains { 0, 1 } // We have fewer than bulk_width blocks of data left. Encrypt // them one by one until there is less than a full block @@ -277,9 +278,9 @@ public void emitCode(CompilationResultBuilder crb, AArch64MacroAssembler masm) { // Increment the counter, store it back masm.neon.orrVVV(ASIMDSize.FullReg, v0, v16, v16); - masm.neon.rev32VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v16); - masm.neon.addVVV(ASIMDSize.FullReg, ElementSize.Word, v16, v16, v4); - masm.neon.rev32VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v16); + masm.neon.rev64VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v16); + beAdd128x64(masm, v16, v16, v4, v5); + masm.neon.rev64VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v16); // Save the incremented counter back masm.fstr(128, v16, AArch64Address.createBaseRegisterOnlyAddress(128, counter)); @@ -311,6 +312,22 @@ public void emitCode(CompilationResultBuilder crb, AArch64MacroAssembler masm) { masm.mov(32, result, savedLen); } + // Big-endian 128-bit + 64-bit -> 128-bit addition. + // Inputs: 128-bits. in is preserved. + // The least-significant 64-bit word is in the upper dword of each vector. + // inc (the 64-bit increment) is preserved. Its lower dword must be zero. + // Output: result + private static void beAdd128x64(AArch64MacroAssembler masm, Register result, Register in, Register inc, Register tmp) { + // Add inc to the least-significant dword of input + masm.neon.addVVV(ASIMDSize.FullReg, ElementSize.DoubleWord, result, in, inc); + // Check for result overflowing + masm.neon.cmhiVVV(ASIMDSize.FullReg, ElementSize.DoubleWord, tmp, inc, result); + // Swap LSD of comparison result to MSD and MSD == 0 (must be!) to LSD + masm.neon.extVVV(ASIMDSize.FullReg, tmp, tmp, tmp, 0x08); + // Subtract -1 from MSD if there was an overflow + masm.neon.subVVV(ASIMDSize.FullReg, ElementSize.DoubleWord, result, result, tmp); + } + private static void emitCTRLargeBlock(AArch64MacroAssembler masm, int bulkWidth, Register in, Register out, Register counter, Register usedPtr, Register len, Register used, Register offset, Register keylen) { GraalError.guarantee(bulkWidth == 4 || bulkWidth == 8, "bulk_width must be 4 or 8"); @@ -337,7 +354,7 @@ private static void emitCTRLargeBlock(AArch64MacroAssembler masm, int bulkWidth, // v0 contains the first counter masm.fldr(128, v0, AArch64Address.createBaseRegisterOnlyAddress(128, counter)); // v16 contains byte-reversed counter - masm.neon.rev32VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v0); + masm.neon.rev64VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v0); // AES/CTR loop masm.bind(labelCTRLoop); @@ -345,12 +362,12 @@ private static void emitCTRLargeBlock(AArch64MacroAssembler masm, int bulkWidth, // Setup the counters masm.neon.moveVI(ASIMDSize.FullReg, ElementSize.Word, v8, 0); masm.neon.moveVI(ASIMDSize.FullReg, ElementSize.Word, v9, 1); - masm.neon.insXX(ElementSize.Word, v8, 3, v9, 3); - // v8 contains { 0, 0, 0, 1 } + masm.neon.insXX(ElementSize.Word, v8, 2, v9, 2); + // v8 contains { 0, 1 } for (int i = 0; i < bulkWidth; i++) { - masm.neon.rev32VV(ASIMDSize.FullReg, ElementSize.Byte, asFloatRegister(v0, i), v16); - masm.neon.addVVV(ASIMDSize.FullReg, ElementSize.Word, v16, v16, v8); + masm.neon.rev64VV(ASIMDSize.FullReg, ElementSize.Byte, asFloatRegister(v0, i), v16); + beAdd128x64(masm, v16, v16, v8, v9); } masm.neon.ld1MultipleVVVV(ASIMDSize.FullReg, ElementSize.Byte, v8, v9, v10, v11, @@ -381,7 +398,7 @@ private static void emitCTRLargeBlock(AArch64MacroAssembler masm, int bulkWidth, masm.cbnz(32, len, labelCTRLoop); // Save the counter back where it goes - masm.neon.rev32VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v16); + masm.neon.rev64VV(ASIMDSize.FullReg, ElementSize.Byte, v16, v16); masm.fstr(128, v16, AArch64Address.createBaseRegisterOnlyAddress(128, counter)); masm.neon.ld1MultipleVVVV(ASIMDSize.FullReg, ElementSize.Byte, v8, v9, v10, v11, From a8a5766c98d895bda79ebc2e411e461bd331ade9 Mon Sep 17 00:00:00 2001 From: Robert Toyonaga Date: Wed, 14 Jun 2023 12:06:42 -0400 Subject: [PATCH 47/72] fix traceID bug (cherry picked from commit 1debc6e3293acfe8dde647022367da0553575267) --- .../svm/core/jfr/JfrStackTraceRepository.java | 2 +- .../svm/core/jfr/JfrSymbolRepository.java | 2 +- .../test/jfr/TestSymbolTraceIdUniqueness.java | 98 +++++++++++++++++++ 3 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrStackTraceRepository.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrStackTraceRepository.java index 172a694c41cd..689c3c37f9a0 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrStackTraceRepository.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrStackTraceRepository.java @@ -301,7 +301,7 @@ public interface JfrStackTraceTableEntry extends JfrVisited { } public static final class JfrStackTraceTable extends AbstractUninterruptibleHashtable { - private long nextId; + private static long nextId; @Override @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrSymbolRepository.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrSymbolRepository.java index a1286836d58d..0d17658f8ad6 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrSymbolRepository.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrSymbolRepository.java @@ -177,7 +177,7 @@ private interface JfrSymbol extends UninterruptibleEntry { } private static class JfrSymbolHashtable extends AbstractUninterruptibleHashtable { - private long nextId; + private static long nextId; @Override @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) diff --git a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java new file mode 100644 index 000000000000..981a7f7f0e50 --- /dev/null +++ b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2023, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2023, Red Hat Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.svm.test.jfr; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.LockSupport; + +import org.graalvm.compiler.serviceprovider.JavaVersionUtil; +import org.junit.Before; +import org.junit.Test; + +import com.oracle.svm.core.jfr.JfrEvent; + +import jdk.jfr.Recording; +import jdk.jfr.consumer.RecordedClass; +import jdk.jfr.consumer.RecordedEvent; + +/** + * This test checks if symbol table JFR trace IDs get reused across successive epochs. If they are + * reused/duplicated, the validation step will fail because the trace ID key associated with + * com.oracle.svm.test.jfr.AbstractJfrTest$MonitorWaitHelper will also be associated with another + * value that was serialized during a prior epoch. + */ +public class TestSymbolTraceIdUniqueness extends JfrRecordingTest { + private final MonitorWaitHelper helper = new MonitorWaitHelper(); + + @Before + public void checkJavaVersion() { + assumeTrue("skipping JFR virtual thread tests", JavaVersionUtil.JAVA_SPEC >= 19); + } + + @Test + public void test() throws Throwable { + String[] events = new String[]{JfrEvent.JavaMonitorWait.getName(), JfrEvent.ThreadPark.getName()}; + + // Turn off flushing to simplify testing + Map settings = new HashMap<>(); + settings.put("flush-interval", "0"); + Recording recording = startRecording(events, getDefaultConfiguration(), settings); + + // Generate some symbol table entries and trace IDs. + for (Class clazz : com.oracle.svm.core.heap.Heap.getHeap().getLoadedClasses()) { + LockSupport.parkNanos(clazz, 1); + } + + // Invoke chunk rotation. + recording.dump(createTempJfrFile()); + + // Emit event that will insert a new symbol table entry who's ID is under test. + helper.doEvent(); + + stopRecording(recording, this::validateEvents); + } + + private void validateEvents(List events) { + boolean found = false; + for (RecordedEvent event : events) { + if (event.getEventType().getName().equals(JfrEvent.JavaMonitorWait.getName())) { + System.out.println("------ Wait: " + event. getValue("monitorClass").getName() + "| Thread: " + event.getThread().getJavaName()); + if (event.getClass("monitorClass").getName().equals(MonitorWaitHelper.class.getName())) { + found = true; + break; + } + + } + } + assertTrue("Class " + MonitorWaitHelper.class.getName() + " has shared duplicate trace ID with another symbol constant pool entry.", found); + } +} From 9b5e55f180792e080d84589fe3ce55deedc99570 Mon Sep 17 00:00:00 2001 From: Robert Toyonaga Date: Wed, 14 Jun 2023 14:11:55 -0400 Subject: [PATCH 48/72] remove debugging print (cherry picked from commit eb34e05401547649cbb0d9dfb0598e73f01c0037) --- .../src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java | 1 - 1 file changed, 1 deletion(-) diff --git a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java index 981a7f7f0e50..3285084812c2 100644 --- a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java +++ b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java @@ -85,7 +85,6 @@ private void validateEvents(List events) { boolean found = false; for (RecordedEvent event : events) { if (event.getEventType().getName().equals(JfrEvent.JavaMonitorWait.getName())) { - System.out.println("------ Wait: " + event. getValue("monitorClass").getName() + "| Thread: " + event.getThread().getJavaName()); if (event.getClass("monitorClass").getName().equals(MonitorWaitHelper.class.getName())) { found = true; break; From aa99b44112bf0b215d3e756870f7a8f0e57756c6 Mon Sep 17 00:00:00 2001 From: Marouane El Hallaoui Date: Tue, 27 Jun 2023 13:36:44 +0100 Subject: [PATCH 49/72] unused imports --- .../svm/test/jfr/TestSymbolTraceIdUniqueness.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java index 3285084812c2..cc7850f304db 100644 --- a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java +++ b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java @@ -27,21 +27,18 @@ package com.oracle.svm.test.jfr; import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeTrue; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.locks.LockSupport; -import org.graalvm.compiler.serviceprovider.JavaVersionUtil; -import org.junit.Before; + import org.junit.Test; import com.oracle.svm.core.jfr.JfrEvent; import jdk.jfr.Recording; -import jdk.jfr.consumer.RecordedClass; import jdk.jfr.consumer.RecordedEvent; /** @@ -53,11 +50,6 @@ public class TestSymbolTraceIdUniqueness extends JfrRecordingTest { private final MonitorWaitHelper helper = new MonitorWaitHelper(); - @Before - public void checkJavaVersion() { - assumeTrue("skipping JFR virtual thread tests", JavaVersionUtil.JAVA_SPEC >= 19); - } - @Test public void test() throws Throwable { String[] events = new String[]{JfrEvent.JavaMonitorWait.getName(), JfrEvent.ThreadPark.getName()}; From b3ddcaa9999736b3f3eb48ef0f266f0b77061cf7 Mon Sep 17 00:00:00 2001 From: Robert Toyonaga Date: Wed, 14 Jun 2023 15:00:47 -0400 Subject: [PATCH 50/72] use import (cherry picked from commit f9ddff4bf6dfb0483b1515c568226a2beb5fedae) --- .../com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java index cc7850f304db..1b484f9e2aa3 100644 --- a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java +++ b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java @@ -37,6 +37,7 @@ import org.junit.Test; import com.oracle.svm.core.jfr.JfrEvent; +import com.oracle.svm.core.heap.Heap; import jdk.jfr.Recording; import jdk.jfr.consumer.RecordedEvent; @@ -60,7 +61,7 @@ public void test() throws Throwable { Recording recording = startRecording(events, getDefaultConfiguration(), settings); // Generate some symbol table entries and trace IDs. - for (Class clazz : com.oracle.svm.core.heap.Heap.getHeap().getLoadedClasses()) { + for (Class clazz : Heap.getHeap().getLoadedClasses()) { LockSupport.parkNanos(clazz, 1); } From bcf57255b42f2295c8f6f9f217dfcd845ebc30bd Mon Sep 17 00:00:00 2001 From: Christian Haeubl Date: Thu, 15 Jun 2023 10:18:14 +0200 Subject: [PATCH 51/72] Cleanups. (cherry picked from commit 6139e6cf655122e836c5fde7c945e1c4e3d27781) --- .../svm/test/jfr/TestSymbolTraceIdUniqueness.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java index 1b484f9e2aa3..f2a0baef38e5 100644 --- a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java +++ b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java @@ -36,8 +36,8 @@ import org.junit.Test; -import com.oracle.svm.core.jfr.JfrEvent; import com.oracle.svm.core.heap.Heap; +import com.oracle.svm.core.jfr.JfrEvent; import jdk.jfr.Recording; import jdk.jfr.consumer.RecordedEvent; @@ -45,8 +45,8 @@ /** * This test checks if symbol table JFR trace IDs get reused across successive epochs. If they are * reused/duplicated, the validation step will fail because the trace ID key associated with - * com.oracle.svm.test.jfr.AbstractJfrTest$MonitorWaitHelper will also be associated with another - * value that was serialized during a prior epoch. + * {@link com.oracle.svm.test.jfr.AbstractJfrTest.MonitorWaitHelper} will also be associated with + * another value that was serialized during a prior epoch. */ public class TestSymbolTraceIdUniqueness extends JfrRecordingTest { private final MonitorWaitHelper helper = new MonitorWaitHelper(); @@ -71,10 +71,10 @@ public void test() throws Throwable { // Emit event that will insert a new symbol table entry who's ID is under test. helper.doEvent(); - stopRecording(recording, this::validateEvents); + stopRecording(recording, TestSymbolTraceIdUniqueness::validateEvents); } - private void validateEvents(List events) { + private static void validateEvents(List events) { boolean found = false; for (RecordedEvent event : events) { if (event.getEventType().getName().equals(JfrEvent.JavaMonitorWait.getName())) { From fa86f48632f6fe2daf673ca6dc6ac54ec80fc394 Mon Sep 17 00:00:00 2001 From: Marouane El Hallaoui Date: Wed, 28 Jun 2023 10:25:29 +0100 Subject: [PATCH 52/72] fix style --- .../src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java | 1 - 1 file changed, 1 deletion(-) diff --git a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java index f2a0baef38e5..eb290bd6a450 100644 --- a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java +++ b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSymbolTraceIdUniqueness.java @@ -33,7 +33,6 @@ import java.util.Map; import java.util.concurrent.locks.LockSupport; - import org.junit.Test; import com.oracle.svm.core.heap.Heap; From 0c1341af422a95ad80926196f5cbda82edf939f0 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 27 Jun 2023 12:21:48 +0300 Subject: [PATCH 53/72] Rename subtitles to avoid duplication in TOC (cherry picked from commit 55a5e203bb72f91f33b31cf22bd1880e7ba0711e) --- docs/reference-manual/native-image/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/reference-manual/native-image/README.md b/docs/reference-manual/native-image/README.md index 9b338517028e..94e6f15aae74 100644 --- a/docs/reference-manual/native-image/README.md +++ b/docs/reference-manual/native-image/README.md @@ -180,7 +180,7 @@ REM Open an info dialog box with text native-image.exe -jar App.jar & msg "%username%" GraalVM Native Image build completed ``` -## Build Overview +## Build Configuration There many options you can pass to the `native-image` builder to configure the build process. Run `native-image --help` to see the full list. The options passed to `native-image` are evaluated left-to-right. @@ -189,7 +189,7 @@ For different build tweaks and to learn more about build time configuration, see Native Image will output the progress and various statistics during the build. To learn more about the output and the different build phases, see [Build Output](BuildOutput.md). -## Configuring Native Image with Third-Party Libraries +## Native Image and Third-Party Libraries For more complex applications that use external libraries, you must provide the `native-image` builder with metadata. From 52e9da0936c9a4fadfaefad90ef2997ad0e5ae71 Mon Sep 17 00:00:00 2001 From: Josef Haider Date: Wed, 12 Apr 2023 12:03:20 +0200 Subject: [PATCH 54/72] Fix erroneous shift in java.lang.StringCoding.implEncodeISOArray intrinsic --- .../aarch64/AArch64GraphBuilderPlugins.java | 46 ++++------- .../amd64/AMD64GraphBuilderPlugins.java | 46 ++++------- .../replacements/test/EncodeArrayTest.java | 77 ++++++++++++------- .../replacements/test/StringGetBytesTest.java | 69 +++++++++++++++++ 4 files changed, 147 insertions(+), 91 deletions(-) create mode 100644 compiler/src/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/StringGetBytesTest.java diff --git a/compiler/src/org.graalvm.compiler.replacements.aarch64/src/org/graalvm/compiler/replacements/aarch64/AArch64GraphBuilderPlugins.java b/compiler/src/org.graalvm.compiler.replacements.aarch64/src/org/graalvm/compiler/replacements/aarch64/AArch64GraphBuilderPlugins.java index 1cef46c55e42..25faa832dc06 100644 --- a/compiler/src/org.graalvm.compiler.replacements.aarch64/src/org/graalvm/compiler/replacements/aarch64/AArch64GraphBuilderPlugins.java +++ b/compiler/src/org.graalvm.compiler.replacements.aarch64/src/org/graalvm/compiler/replacements/aarch64/AArch64GraphBuilderPlugins.java @@ -40,7 +40,6 @@ import org.graalvm.compiler.core.common.calc.Condition; import org.graalvm.compiler.core.common.memory.BarrierType; import org.graalvm.compiler.core.common.memory.MemoryOrderMode; -import org.graalvm.compiler.nodes.ComputeObjectAddressNode; import org.graalvm.compiler.nodes.ConstantNode; import org.graalvm.compiler.nodes.NamedLocationIdentity; import org.graalvm.compiler.nodes.NodeView; @@ -90,7 +89,6 @@ import jdk.vm.ci.code.Architecture; import jdk.vm.ci.code.CodeUtil; import jdk.vm.ci.meta.JavaKind; -import jdk.vm.ci.meta.MetaAccessProvider; import jdk.vm.ci.meta.ResolvedJavaMethod; public class AArch64GraphBuilderPlugins implements TargetGraphBuilderPlugins { @@ -507,45 +505,31 @@ private static void registerStringCodingPlugins(InvocationPlugins plugins, Repla @Override public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode sa, ValueNode sp, ValueNode da, ValueNode dp, ValueNode len) { - MetaAccessProvider metaAccess = b.getMetaAccess(); - int byteArrayBaseOffset = metaAccess.getArrayBaseOffset(JavaKind.Byte); - - ValueNode srcOffset = AddNode.create(ConstantNode.forInt(byteArrayBaseOffset), new LeftShiftNode(sp, ConstantNode.forInt(2)), NodeView.DEFAULT); - ValueNode dstOffset = AddNode.create(ConstantNode.forInt(byteArrayBaseOffset), dp, NodeView.DEFAULT); - - ComputeObjectAddressNode src = b.add(new ComputeObjectAddressNode(sa, srcOffset)); - ComputeObjectAddressNode dst = b.add(new ComputeObjectAddressNode(da, dstOffset)); - - b.addPush(JavaKind.Int, new EncodeArrayNode(src, dst, len, ISO_8859_1, JavaKind.Byte)); - return true; + try (InvocationPluginHelper helper = new InvocationPluginHelper(b, targetMethod)) { + int charElementShift = CodeUtil.log2(b.getMetaAccess().getArrayIndexScale(JavaKind.Char)); + ValueNode src = helper.arrayElementPointer(sa, JavaKind.Byte, LeftShiftNode.create(sp, ConstantNode.forInt(charElementShift), NodeView.DEFAULT)); + ValueNode dst = helper.arrayElementPointer(da, JavaKind.Byte, dp); + b.addPush(JavaKind.Int, new EncodeArrayNode(src, dst, len, ISO_8859_1, JavaKind.Byte)); + return true; + } } }); r.register(new InvocationPlugin("implEncodeAsciiArray", char[].class, int.class, byte[].class, int.class, int.class) { @Override public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode sa, ValueNode sp, ValueNode da, ValueNode dp, ValueNode len) { - MetaAccessProvider metaAccess = b.getMetaAccess(); - int charArrayBaseOffset = metaAccess.getArrayBaseOffset(JavaKind.Char); - int byteArrayBaseOffset = metaAccess.getArrayBaseOffset(JavaKind.Byte); - - int charElementShift = CodeUtil.log2(metaAccess.getArrayIndexScale(JavaKind.Char)); - - ValueNode srcOffset = AddNode.create(ConstantNode.forInt(charArrayBaseOffset), new LeftShiftNode(sp, ConstantNode.forInt(charElementShift)), NodeView.DEFAULT); - ValueNode dstOffset = AddNode.create(ConstantNode.forInt(byteArrayBaseOffset), dp, NodeView.DEFAULT); - - ComputeObjectAddressNode src = b.add(new ComputeObjectAddressNode(sa, srcOffset)); - ComputeObjectAddressNode dst = b.add(new ComputeObjectAddressNode(da, dstOffset)); - - b.addPush(JavaKind.Int, new EncodeArrayNode(src, dst, len, ASCII, JavaKind.Char)); - return true; + try (InvocationPluginHelper helper = new InvocationPluginHelper(b, targetMethod)) { + ValueNode src = helper.arrayElementPointer(sa, JavaKind.Char, sp); + ValueNode dst = helper.arrayElementPointer(da, JavaKind.Byte, dp); + b.addPush(JavaKind.Int, new EncodeArrayNode(src, dst, len, ASCII, JavaKind.Char)); + return true; + } } }); r.register(new InvocationPlugin("hasNegatives", byte[].class, int.class, int.class) { @Override public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode ba, ValueNode off, ValueNode len) { try (InvocationPluginHelper helper = new InvocationPluginHelper(b, targetMethod)) { - MetaAccessProvider metaAccess = b.getMetaAccess(); - int byteArrayBaseOffset = metaAccess.getArrayBaseOffset(JavaKind.Byte); helper.intrinsicRangeCheck(off, Condition.LT, ConstantNode.forInt(0)); helper.intrinsicRangeCheck(len, Condition.LT, ConstantNode.forInt(0)); @@ -553,9 +537,7 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec ValueNode limit = b.add(AddNode.create(off, len, NodeView.DEFAULT)); helper.intrinsicRangeCheck(arrayLength, Condition.LT, limit); - ValueNode arrayOffset = AddNode.create(ConstantNode.forInt(byteArrayBaseOffset), off, NodeView.DEFAULT); - ComputeObjectAddressNode array = b.add(new ComputeObjectAddressNode(ba, arrayOffset)); - + ValueNode array = helper.arrayElementPointer(ba, JavaKind.Byte, off); b.addPush(JavaKind.Boolean, new HasNegativesNode(array, len)); return true; } diff --git a/compiler/src/org.graalvm.compiler.replacements.amd64/src/org/graalvm/compiler/replacements/amd64/AMD64GraphBuilderPlugins.java b/compiler/src/org.graalvm.compiler.replacements.amd64/src/org/graalvm/compiler/replacements/amd64/AMD64GraphBuilderPlugins.java index 4bc52bd7fa22..c230cc6189fb 100644 --- a/compiler/src/org.graalvm.compiler.replacements.amd64/src/org/graalvm/compiler/replacements/amd64/AMD64GraphBuilderPlugins.java +++ b/compiler/src/org.graalvm.compiler.replacements.amd64/src/org/graalvm/compiler/replacements/amd64/AMD64GraphBuilderPlugins.java @@ -43,7 +43,6 @@ import org.graalvm.compiler.core.common.calc.Condition; import org.graalvm.compiler.core.common.memory.BarrierType; import org.graalvm.compiler.core.common.memory.MemoryOrderMode; -import org.graalvm.compiler.nodes.ComputeObjectAddressNode; import org.graalvm.compiler.nodes.ConstantNode; import org.graalvm.compiler.nodes.NamedLocationIdentity; import org.graalvm.compiler.nodes.NodeView; @@ -101,7 +100,6 @@ import jdk.vm.ci.code.Architecture; import jdk.vm.ci.code.CodeUtil; import jdk.vm.ci.meta.JavaKind; -import jdk.vm.ci.meta.MetaAccessProvider; import jdk.vm.ci.meta.ResolvedJavaMethod; public class AMD64GraphBuilderPlugins implements TargetGraphBuilderPlugins { @@ -597,25 +595,19 @@ private static void registerStringCodingPlugins(InvocationPlugins plugins, Repla @Override public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode sa, ValueNode sp, ValueNode da, ValueNode dp, ValueNode len) { - MetaAccessProvider metaAccess = b.getMetaAccess(); - int byteArrayBaseOffset = metaAccess.getArrayBaseOffset(JavaKind.Byte); - - ValueNode srcOffset = AddNode.create(ConstantNode.forInt(byteArrayBaseOffset), new LeftShiftNode(sp, ConstantNode.forInt(2)), NodeView.DEFAULT); - ValueNode dstOffset = AddNode.create(ConstantNode.forInt(byteArrayBaseOffset), dp, NodeView.DEFAULT); - - ComputeObjectAddressNode src = b.add(new ComputeObjectAddressNode(sa, srcOffset)); - ComputeObjectAddressNode dst = b.add(new ComputeObjectAddressNode(da, dstOffset)); - - b.addPush(JavaKind.Int, new EncodeArrayNode(src, dst, len, ISO_8859_1, JavaKind.Byte)); - return true; + try (InvocationPluginHelper helper = new InvocationPluginHelper(b, targetMethod)) { + int charElementShift = CodeUtil.log2(b.getMetaAccess().getArrayIndexScale(JavaKind.Char)); + ValueNode src = helper.arrayElementPointer(sa, JavaKind.Byte, LeftShiftNode.create(sp, ConstantNode.forInt(charElementShift), NodeView.DEFAULT)); + ValueNode dst = helper.arrayElementPointer(da, JavaKind.Byte, dp); + b.addPush(JavaKind.Int, new EncodeArrayNode(src, dst, len, ISO_8859_1, JavaKind.Byte)); + return true; + } } }); r.register(new InvocationPlugin("hasNegatives", byte[].class, int.class, int.class) { @Override public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode ba, ValueNode off, ValueNode len) { try (InvocationPluginHelper helper = new InvocationPluginHelper(b, targetMethod)) { - MetaAccessProvider metaAccess = b.getMetaAccess(); - int byteArrayBaseOffset = metaAccess.getArrayBaseOffset(JavaKind.Byte); helper.intrinsicRangeCheck(off, Condition.LT, ConstantNode.forInt(0)); helper.intrinsicRangeCheck(len, Condition.LT, ConstantNode.forInt(0)); @@ -623,9 +615,7 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec ValueNode limit = b.add(AddNode.create(off, len, NodeView.DEFAULT)); helper.intrinsicRangeCheck(arrayLength, Condition.LT, limit); - ValueNode arrayOffset = AddNode.create(ConstantNode.forInt(byteArrayBaseOffset), off, NodeView.DEFAULT); - ComputeObjectAddressNode array = b.add(new ComputeObjectAddressNode(ba, arrayOffset)); - + ValueNode array = helper.arrayElementPointer(ba, JavaKind.Byte, off); b.addPush(JavaKind.Boolean, new HasNegativesNode(array, len)); return true; } @@ -635,20 +625,12 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec @Override public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode sa, ValueNode sp, ValueNode da, ValueNode dp, ValueNode len) { - MetaAccessProvider metaAccess = b.getMetaAccess(); - int charArrayBaseOffset = metaAccess.getArrayBaseOffset(JavaKind.Char); - int byteArrayBaseOffset = metaAccess.getArrayBaseOffset(JavaKind.Byte); - - int charElementShift = CodeUtil.log2(metaAccess.getArrayIndexScale(JavaKind.Char)); - - ValueNode srcOffset = AddNode.create(ConstantNode.forInt(charArrayBaseOffset), new LeftShiftNode(sp, ConstantNode.forInt(charElementShift)), NodeView.DEFAULT); - ValueNode dstOffset = AddNode.create(ConstantNode.forInt(byteArrayBaseOffset), dp, NodeView.DEFAULT); - - ComputeObjectAddressNode src = b.add(new ComputeObjectAddressNode(sa, srcOffset)); - ComputeObjectAddressNode dst = b.add(new ComputeObjectAddressNode(da, dstOffset)); - - b.addPush(JavaKind.Int, new EncodeArrayNode(src, dst, len, ASCII, JavaKind.Char)); - return true; + try (InvocationPluginHelper helper = new InvocationPluginHelper(b, targetMethod)) { + ValueNode src = helper.arrayElementPointer(sa, JavaKind.Char, sp); + ValueNode dst = helper.arrayElementPointer(da, JavaKind.Byte, dp); + b.addPush(JavaKind.Int, new EncodeArrayNode(src, dst, len, ASCII, JavaKind.Char)); + return true; + } } }); diff --git a/compiler/src/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/EncodeArrayTest.java b/compiler/src/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/EncodeArrayTest.java index fc053aea8086..1f4e7250d3a6 100644 --- a/compiler/src/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/EncodeArrayTest.java +++ b/compiler/src/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/EncodeArrayTest.java @@ -28,7 +28,6 @@ import org.graalvm.compiler.core.test.GraalCompilerTest; import org.graalvm.compiler.nodes.StructuredGraph; import org.graalvm.compiler.test.AddExports; -import org.junit.Assume; import org.junit.Test; import jdk.vm.ci.code.InstalledCode; @@ -80,37 +79,51 @@ public void testStringCodingISO() throws ClassNotFoundException { UNSAFE.copyMemory(value, UNSAFE.arrayBaseOffset(char[].class), sa, UNSAFE.arrayBaseOffset(byte[].class), sa.length); byte[] daExpected = new byte[len]; byte[] daActual = new byte[len]; - Result expected = executeExpected(method, null, sa, 0, daExpected, 0, len); - Result actual = executeCompiledMethod(compiledMethod, sa, 0, daActual, 0, len); - assertEquals(expected, actual); - assertDeepEquals(daExpected, daActual); + int sp = 0; + int dp = 0; + while (sp < value.length) { + Result expected = executeExpected(method, null, sa, sp, daExpected, dp, len); + Result actual = executeCompiledMethod(compiledMethod, sa, sp, daActual, dp, len); + assertEquals(expected, actual); + assertDeepEquals(daExpected, daActual); + int ret = (int) actual.returnValue; + sp += ret; + dp += ret; + while (sp < value.length && value[sp++] > 0xff) { + dp++; + } + } } } @Test public void testStringCodingAscii() throws ClassNotFoundException { - try { - Class klass = Class.forName("java.lang.StringCoding"); - ResolvedJavaMethod method = getResolvedJavaMethod(klass, "implEncodeAsciiArray"); - StructuredGraph graph = getReplacements().getIntrinsicGraph(method, CompilationIdentifier.INVALID_COMPILATION_ID, getDebugContext(), StructuredGraph.AllowAssumptions.YES, null); - InstalledCode compiledMethod = getCode(method, graph); + Class klass = Class.forName("java.lang.StringCoding"); + ResolvedJavaMethod method = getResolvedJavaMethod(klass, "implEncodeAsciiArray"); + StructuredGraph graph = getReplacements().getIntrinsicGraph(method, CompilationIdentifier.INVALID_COMPILATION_ID, getDebugContext(), StructuredGraph.AllowAssumptions.YES, null); + InstalledCode compiledMethod = getCode(method, graph); - // Caller of the tested method should guarantee the indexes are within the range -- - // there is no need for boundary-value testing. - for (String input : testData) { - char[] value = input.toCharArray(); - int len = value.length; - byte[] sa = new byte[len << 1]; - UNSAFE.copyMemory(value, UNSAFE.arrayBaseOffset(char[].class), sa, UNSAFE.arrayBaseOffset(byte[].class), sa.length); - byte[] daExpected = new byte[len]; - byte[] daActual = new byte[len]; - Result expected = executeExpected(method, null, sa, 0, daExpected, 0, len); - Result actual = executeCompiledMethod(compiledMethod, sa, 0, daActual, 0, len); + // Caller of the tested method should guarantee the indexes are within the range -- + // there is no need for boundary-value testing. + for (String input : testData) { + char[] value = input.toCharArray(); + int len = value.length; + byte[] daExpected = new byte[len]; + byte[] daActual = new byte[len]; + int sp = 0; + int dp = 0; + while (sp < value.length) { + Result expected = executeExpected(method, null, value, sp, daExpected, dp, len); + Result actual = executeCompiledMethod(compiledMethod, value, sp, daActual, dp, len); assertEquals(expected, actual); assertDeepEquals(daExpected, daActual); + int ret = (int) actual.returnValue; + sp += ret; + dp += ret; + while (sp < value.length && value[sp++] > 0x7f) { + dp++; + } } - } catch (RuntimeException e) { - Assume.assumeNoException(e); } } @@ -128,10 +141,20 @@ public void testISOEncoding() throws ClassNotFoundException { int len = sa.length; byte[] daExpected = new byte[len]; byte[] daActual = new byte[len]; - Result expected = executeExpected(method, null, sa, 0, daExpected, 0, len); - Result actual = executeCompiledMethod(compiledMethod, sa, 0, daActual, 0, len); - assertEquals(expected, actual); - assertDeepEquals(daExpected, daActual); + int sp = 0; + int dp = 0; + while (sp < sa.length) { + Result expected = executeExpected(method, null, sa, sp, daExpected, dp, len); + Result actual = executeCompiledMethod(compiledMethod, sa, sp, daActual, dp, len); + assertEquals(expected, actual); + assertDeepEquals(daExpected, daActual); + int ret = (int) actual.returnValue; + sp += ret; + dp += ret; + while (sp < sa.length && sa[sp++] > 0xff) { + dp++; + } + } } } } diff --git a/compiler/src/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/StringGetBytesTest.java b/compiler/src/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/StringGetBytesTest.java new file mode 100644 index 000000000000..16e9a63d0501 --- /dev/null +++ b/compiler/src/org.graalvm.compiler.replacements.test/src/org/graalvm/compiler/replacements/test/StringGetBytesTest.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package org.graalvm.compiler.replacements.test; + +import java.nio.charset.StandardCharsets; + +import org.graalvm.compiler.graph.Node; +import org.graalvm.compiler.nodes.StructuredGraph; +import org.graalvm.compiler.replacements.nodes.EncodeArrayNode; +import org.junit.Assert; +import org.junit.Test; + +public class StringGetBytesTest extends MethodSubstitutionTest { + + private static final String BAD_STRING = "\u8020\000\000\020"; + + @Test + public void getBytesNonConst() { + test("getBytesNonConstSnippet", BAD_STRING); + } + + public static int getBytesNonConstSnippet(String s) { + byte[] arr = s.getBytes(StandardCharsets.ISO_8859_1); + return arr[2]; // expected 0 + } + + @Test + public void getBytesConst() { + test("getBytesConstSnippet"); + } + + public static int getBytesConstSnippet() { + String s = BAD_STRING; + byte[] arr = s.getBytes(StandardCharsets.ISO_8859_1); + return arr[2]; // expected 0 + } + + @Override + protected void checkLowTierGraph(StructuredGraph graph) { + for (Node node : graph.getNodes()) { + if (node instanceof EncodeArrayNode) { + return; + } + } + Assert.fail("intrinsic not found in graph!"); + } +} From 00a5a9f12cb1db914bb769797033b20549613a58 Mon Sep 17 00:00:00 2001 From: Marouane El Hallaoui Date: Tue, 27 Jun 2023 23:21:59 +0100 Subject: [PATCH 55/72] update to jvmci-23.0-b14 --- common.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/common.json b/common.json index 03bb0c069087..59a137e5913d 100644 --- a/common.json +++ b/common.json @@ -14,9 +14,9 @@ "labsjdk-ce-17": {"name": "labsjdk", "version": "ce-17.0.7+7-jvmci-23.0-b12", "platformspecific": true }, "labsjdk-ce-17Debug": {"name": "labsjdk", "version": "ce-17.0.7+7-jvmci-23.0-b12-debug", "platformspecific": true }, "labsjdk-ce-17-llvm": {"name": "labsjdk", "version": "ce-17.0.7+7-jvmci-23.0-b12-sulong", "platformspecific": true }, - "labsjdk-ee-17": {"name": "labsjdk", "version": "ee-17.0.8+8-jvmci-23.0-b13", "platformspecific": true }, - "labsjdk-ee-17Debug": {"name": "labsjdk", "version": "ee-17.0.8+8-jvmci-23.0-b13-debug", "platformspecific": true }, - "labsjdk-ee-17-llvm": {"name": "labsjdk", "version": "ee-17.0.8+8-jvmci-23.0-b13-sulong", "platformspecific": true }, + "labsjdk-ee-17": {"name": "labsjdk", "version": "ee-17.0.8+9-jvmci-23.0-b14", "platformspecific": true }, + "labsjdk-ee-17Debug": {"name": "labsjdk", "version": "ee-17.0.8+9-jvmci-23.0-b14-debug", "platformspecific": true }, + "labsjdk-ee-17-llvm": {"name": "labsjdk", "version": "ee-17.0.8+9-jvmci-23.0-b14-sulong", "platformspecific": true }, "oraclejdk19": {"name": "jpg-jdk", "version": "19", "build_id": "26", "release": true, "platformspecific": true, "extrabundles": ["static-libs"]}, "labsjdk-ce-19": {"name": "labsjdk", "version": "ce-19.0.1+10-jvmci-23.0-b04", "platformspecific": true }, @@ -30,9 +30,9 @@ "labsjdk-ce-20": {"name": "labsjdk", "version": "ce-20.0.1+9-jvmci-23.0-b12", "platformspecific": true }, "labsjdk-ce-20Debug": {"name": "labsjdk", "version": "ce-20.0.1+9-jvmci-23.0-b12-debug", "platformspecific": true }, "labsjdk-ce-20-llvm": {"name": "labsjdk", "version": "ce-20.0.1+9-jvmci-23.0-b12-sulong", "platformspecific": true }, - "labsjdk-ee-20": {"name": "labsjdk", "version": "ee-20.0.2+8-jvmci-23.0-b13", "platformspecific": true }, - "labsjdk-ee-20Debug": {"name": "labsjdk", "version": "ee-20.0.2+8-jvmci-23.0-b13-debug", "platformspecific": true }, - "labsjdk-ee-20-llvm": {"name": "labsjdk", "version": "ee-20.0.2+8-jvmci-23.0-b13-sulong", "platformspecific": true } + "labsjdk-ee-20": {"name": "labsjdk", "version": "ee-20.0.2+9-jvmci-23.0-b14", "platformspecific": true }, + "labsjdk-ee-20Debug": {"name": "labsjdk", "version": "ee-20.0.2+9-jvmci-23.0-b14-debug", "platformspecific": true }, + "labsjdk-ee-20-llvm": {"name": "labsjdk", "version": "ee-20.0.2+9-jvmci-23.0-b14-sulong", "platformspecific": true } }, "eclipse": { From 1a3eb55f238eb1dc329d757e63e0a4bdb959b5cd Mon Sep 17 00:00:00 2001 From: Severin Gehwolf Date: Mon, 19 Jun 2023 16:33:07 +0200 Subject: [PATCH 56/72] Make graal-sdk artefact JDK 11+ compatible --- sdk/mx.sdk/suite.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/mx.sdk/suite.py b/sdk/mx.sdk/suite.py index f72197a97c53..4122ec944cf7 100644 --- a/sdk/mx.sdk/suite.py +++ b/sdk/mx.sdk/suite.py @@ -209,7 +209,7 @@ "sourceDirs" : ["src"], "dependencies" : [], "checkstyle" : "org.graalvm.word", - "javaCompliance" : "17+", + "javaCompliance" : "11+", "workingSets" : "API,SDK", }, "org.graalvm.polyglot" : { @@ -232,7 +232,7 @@ "sourceDirs" : ["src"], "dependencies" : [], "checkstyle" : "org.graalvm.word", - "javaCompliance" : "17+", + "javaCompliance" : "11+", "checkstyleVersion" : "10.7.0", "workingSets" : "API,SDK", }, @@ -245,7 +245,7 @@ "org.graalvm.options", ], "checkstyle" : "org.graalvm.word", - "javaCompliance" : "17+", + "javaCompliance" : "11+", "workingSets" : "API,SDK", }, "com.oracle.svm.core.annotate" : { @@ -255,7 +255,7 @@ "org.graalvm.nativeimage", ], "checkstyle" : "org.graalvm.word", - "javaCompliance" : "17+", + "javaCompliance" : "11+", "workingSets" : "API,SDK", }, "org.graalvm.nativeimage.test" : { @@ -332,7 +332,7 @@ "org.graalvm.nativeimage", ], "checkstyle" : "org.graalvm.word", - "javaCompliance" : "17+", + "javaCompliance" : "11+", "workingSets" : "API,SDK", }, "org.graalvm.home.test" : { From b828f522f33f27034415ad5d472447cafe40c6ea Mon Sep 17 00:00:00 2001 From: Fabio Niephaus Date: Thu, 29 Jun 2023 16:26:22 +0200 Subject: [PATCH 57/72] Improve AWT hint to check for JNI accessed classes. --- .../svm/hosted/ProgressReporterFeature.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporterFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporterFeature.java index 3620501481bd..fe826af4bef7 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporterFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporterFeature.java @@ -28,16 +28,16 @@ import java.util.function.Supplier; import org.graalvm.nativeimage.ImageSingletons; -import org.graalvm.nativeimage.impl.RuntimeReflectionSupport; import com.oracle.svm.core.BuildArtifacts; import com.oracle.svm.core.SubstrateGCOptions; import com.oracle.svm.core.SubstrateUtil; import com.oracle.svm.core.feature.AutomaticallyRegisteredFeature; import com.oracle.svm.core.feature.InternalFeature; +import com.oracle.svm.core.jni.access.JNIAccessibleClass; +import com.oracle.svm.core.jni.access.JNIReflectionDictionary; import com.oracle.svm.hosted.ProgressReporter.DirectPrinter; import com.oracle.svm.hosted.jdk.JNIRegistrationSupport; -import com.oracle.svm.hosted.reflect.ReflectionDataBuilder; import com.oracle.svm.hosted.util.CPUTypeAArch64; import com.oracle.svm.hosted.util.CPUTypeAMD64; @@ -75,18 +75,20 @@ private static boolean recommendMArchNative() { } private static boolean recommendTraceAgentForAWT() { - if (!ImageSingletons.contains(JNIRegistrationSupport.class)) { + if (!ImageSingletons.contains(JNIRegistrationSupport.class) || !ImageSingletons.contains(JNIReflectionDictionary.class)) { return false; } if (!JNIRegistrationSupport.singleton().isRegisteredLibrary("awt")) { return false; // AWT not used } - // check if any method located in java.awt or sun.awt packages is registered for reflection - ReflectionDataBuilder dataBuilder = (ReflectionDataBuilder) ImageSingletons.lookup(RuntimeReflectionSupport.class); - return dataBuilder.getReflectionExecutables().values().stream().anyMatch(m -> { - String className = m.getDeclaringClass().getName(); - return className.startsWith("java.awt") || className.startsWith("sun.awt"); - }); + // check if any class located in java.awt or sun.awt is registered for JNI access + for (JNIAccessibleClass clazz : JNIReflectionDictionary.singleton().getClasses()) { + String className = clazz.getClassObject().getName(); + if (className.startsWith("java.awt") || className.startsWith("sun.awt")) { + return false; + } + } + return true; } public record UserRecommendation(String id, String description, Supplier isApplicable) { From 65390b67256b8ae0ffdf3589339b3f398b68dd51 Mon Sep 17 00:00:00 2001 From: Fabio Niephaus Date: Thu, 6 Jul 2023 08:37:11 +0200 Subject: [PATCH 58/72] Document `--exclude-config`. Fixes #6935. --- docs/reference-manual/native-image/BuildOptions.md | 1 + .../src/com.oracle.svm.driver/resources/HelpExtra.txt | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/docs/reference-manual/native-image/BuildOptions.md b/docs/reference-manual/native-image/BuildOptions.md index 682646d2553b..b09d4ac4b4e6 100644 --- a/docs/reference-manual/native-image/BuildOptions.md +++ b/docs/reference-manual/native-image/BuildOptions.md @@ -80,6 +80,7 @@ The `--language:js` `--language:nodejs`, `--language:python`, `--language:ruby`, Run `native-image --help-extra` for non-standard options help. +* `--exclude-config`: exclude configuration for a comma-separated pair of classpath/modulepath pattern and resource pattern. For example: '--exclude-config foo.jar,META-INF\/native-image\/.*.properties' ignores all .properties files in 'META-INF/native-image' in all JARs named 'foo.jar'. * `--expert-options`: list image build options for experts * `--expert-options-all `: list all image build options for experts (use at your own risk). Options marked with _Extra help available_ contain help that can be shown with `--expert-options-detail` * `--expert-options-detail`: display all available help for a comma-separated list of option names. Pass `*` to show extra help for all options that contain it. diff --git a/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt b/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt index 18dfbdf74604..016955b6da0a 100644 --- a/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt +++ b/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt @@ -1,5 +1,10 @@ Non-standard options help: + --exclude-config exclude configuration for a comma-separated pair of classpath/modulepath + pattern and resource pattern. For example: + '--exclude-config foo.jar,META-INF\/native-image\/.*.properties' + ignores all .properties files in 'META-INF/native-image' in all + JARs named 'foo.jar'. --expert-options lists image build options for experts --expert-options-all lists all image build options for experts (use at your own risk). Options marked with [Extra help available] contain help that can be From d3461b4a3b4f023bd305b82006a7100752c42c16 Mon Sep 17 00:00:00 2001 From: Fabio Niephaus Date: Thu, 6 Jul 2023 09:26:39 +0200 Subject: [PATCH 59/72] Print link to build output docs if links disabled. --- .../oracle/svm/hosted/ProgressReporter.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java index 2c359e7ba117..084696f99a3a 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java @@ -108,7 +108,7 @@ public class ProgressReporter { private static final String HEADLINE_SEPARATOR; private static final String LINE_SEPARATOR; private static final int MAX_NUM_BREAKDOWN = 10; - public static final String STAGE_DOCS_URL = "https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/BuildOutput.md"; + public static final String DOCS_BASE_URL = "https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/BuildOutput.md"; private static final double EXCESSIVE_GC_MIN_THRESHOLD_MILLIS = 15_000; private static final double EXCESSIVE_GC_RATIO = 0.5; private static final String BREAKDOWN_BYTE_ARRAY_PREFIX = "byte[] for "; @@ -223,6 +223,11 @@ public void printStart(String imageName, NativeImageKind imageKind) { l().blueBold().link("GraalVM Native Image", "https://www.graalvm.org/native-image/").reset() .a(": Generating '").bold().a(imageName).reset().a("' (").doclink(imageKindName, "#glossary-imagekind").a(")...").println(); l().printHeadlineSeparator(); + if (!linkStrategy.isTerminalSupported()) { + l().a("For detailed information and explanations on the build output, visit:").println(); + l().a(DOCS_BASE_URL).println(); + l().printLineSeparator(); + } stagePrinter.start(BuildStage.INITIALIZING); } @@ -1356,6 +1361,10 @@ public void reset() { } public interface LinkStrategy { + default boolean isTerminalSupported() { + return false; + } + void link(AbstractPrinter printer, String text, String url); String asDocLink(String text, String htmlAnchor); @@ -1366,7 +1375,7 @@ default void link(AbstractPrinter printer, Path path) { } default void doclink(AbstractPrinter printer, String text, String htmlAnchor) { - link(printer, text, STAGE_DOCS_URL + htmlAnchor); + link(printer, text, DOCS_BASE_URL + htmlAnchor); } } @@ -1383,6 +1392,11 @@ public String asDocLink(String text, String htmlAnchor) { } static final class LinkyStrategy implements LinkStrategy { + @Override + public boolean isTerminalSupported() { + return true; + } + /** * Adding link part individually for {@link LinePrinter#getCurrentTextLength()}. */ @@ -1393,7 +1407,7 @@ public void link(AbstractPrinter printer, String text, String url) { @Override public String asDocLink(String text, String htmlAnchor) { - return String.format(ANSI.LINK_FORMAT, STAGE_DOCS_URL + htmlAnchor, text); + return String.format(ANSI.LINK_FORMAT, DOCS_BASE_URL + htmlAnchor, text); } } From b2663196cc157665b999df35f34888f40a514897 Mon Sep 17 00:00:00 2001 From: Fabio Niephaus Date: Thu, 6 Jul 2023 13:45:56 +0200 Subject: [PATCH 60/72] Always include (class|module)path in error message. --- .../src/com/oracle/svm/hosted/ImageClassLoader.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ImageClassLoader.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ImageClassLoader.java index 538d8ebc5551..39a4fb52629c 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ImageClassLoader.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ImageClassLoader.java @@ -425,10 +425,10 @@ public Optional findModule(String moduleName) { public String getMainClassNotFoundErrorMessage(String className) { List classPath = applicationClassPath(); - String classPathString = classPath.isEmpty() ? "" : String.format("%nclasspath: '%s'", pathsToString(classPath)); + String classPathString = classPath.isEmpty() ? "empty classpath" : "classpath: '%s'".formatted(pathsToString(classPath)); List modulePath = applicationModulePath(); - String modulePathString = modulePath.isEmpty() ? "" : String.format("%nmodulepath: '%s'", pathsToString(modulePath)); - return String.format("Main entry point class '%s' neither found on the classpath nor on the modulepath.%s%s", className, classPathString, modulePathString); + String modulePathString = modulePath.isEmpty() ? "empty modulepath" : "modulepath: '%s'".formatted(pathsToString(modulePath)); + return String.format("Main entry point class '%s' neither found on %n%s nor%n%s.", className, classPathString, modulePathString); } private static String pathsToString(List paths) { From bb8edf225d75ec3b317bbe7e830c3a3d6c8a772b Mon Sep 17 00:00:00 2001 From: Marouane El Hallaoui Date: Tue, 11 Jul 2023 09:32:19 +0100 Subject: [PATCH 61/72] GR-47149 : make release GraalVM 23.0.1 --- compiler/mx.compiler/suite.py | 2 +- espresso/mx.espresso/suite.py | 2 +- regex/mx.regex/suite.py | 2 +- sdk/mx.sdk/suite.py | 2 +- substratevm/mx.substratevm/suite.py | 2 +- tools/mx.tools/suite.py | 2 +- truffle/mx.truffle/suite.py | 2 +- vm/mx.vm/suite.py | 8 ++++---- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/compiler/mx.compiler/suite.py b/compiler/mx.compiler/suite.py index cfffc61dd199..a6142d10c947 100644 --- a/compiler/mx.compiler/suite.py +++ b/compiler/mx.compiler/suite.py @@ -5,7 +5,7 @@ "groupId" : "org.graalvm.compiler", "version" : "23.0.1", - "release" : False, + "release" : True, "url" : "http://www.graalvm.org/", "developer" : { "name" : "GraalVM Development", diff --git a/espresso/mx.espresso/suite.py b/espresso/mx.espresso/suite.py index 2f5cd32be9aa..ec9b4503d5c8 100644 --- a/espresso/mx.espresso/suite.py +++ b/espresso/mx.espresso/suite.py @@ -24,7 +24,7 @@ "mxversion": "6.17.0", "name": "espresso", "version" : "23.0.1", - "release" : False, + "release" : True, "groupId" : "org.graalvm.espresso", "url" : "https://www.graalvm.org/reference-manual/java-on-truffle/", "developer" : { diff --git a/regex/mx.regex/suite.py b/regex/mx.regex/suite.py index 8bbe9cf56120..506c80d7316b 100644 --- a/regex/mx.regex/suite.py +++ b/regex/mx.regex/suite.py @@ -44,7 +44,7 @@ "name" : "regex", "version" : "23.0.1", - "release" : False, + "release" : True, "groupId" : "org.graalvm.regex", "url" : "http://www.graalvm.org/", "developer" : { diff --git a/sdk/mx.sdk/suite.py b/sdk/mx.sdk/suite.py index 4122ec944cf7..990232c01047 100644 --- a/sdk/mx.sdk/suite.py +++ b/sdk/mx.sdk/suite.py @@ -42,7 +42,7 @@ "mxversion": "6.17.0", "name" : "sdk", "version" : "23.0.1", - "release" : False, + "release" : True, "sourceinprojectwhitelist" : [], "url" : "https://github.com/oracle/graal", "groupId" : "org.graalvm.sdk", diff --git a/substratevm/mx.substratevm/suite.py b/substratevm/mx.substratevm/suite.py index 2b3a4b5ceea0..be0116e6c870 100644 --- a/substratevm/mx.substratevm/suite.py +++ b/substratevm/mx.substratevm/suite.py @@ -3,7 +3,7 @@ "mxversion": "6.17.0", "name": "substratevm", "version" : "23.0.1", - "release" : False, + "release" : True, "url" : "https://github.com/oracle/graal/tree/master/substratevm", "groupId" : "org.graalvm.nativeimage", diff --git a/tools/mx.tools/suite.py b/tools/mx.tools/suite.py index abfe455f55d8..84d83e88e4ba 100644 --- a/tools/mx.tools/suite.py +++ b/tools/mx.tools/suite.py @@ -27,7 +27,7 @@ "groupId" : "org.graalvm.tools", "version" : "23.0.1", - "release" : False, + "release" : True, "url" : "http://openjdk.java.net/projects/graal", "developer" : { "name" : "GraalVM Development", diff --git a/truffle/mx.truffle/suite.py b/truffle/mx.truffle/suite.py index e23f29160f61..3a6e23de0274 100644 --- a/truffle/mx.truffle/suite.py +++ b/truffle/mx.truffle/suite.py @@ -42,7 +42,7 @@ "mxversion": "6.17.0", "name" : "truffle", "version" : "23.0.1", - "release" : False, + "release" : True, "groupId" : "org.graalvm.truffle", "sourceinprojectwhitelist" : [], "url" : "http://openjdk.java.net/projects/graal", diff --git a/vm/mx.vm/suite.py b/vm/mx.vm/suite.py index 2c9edc31ce4a..1001e378b37c 100644 --- a/vm/mx.vm/suite.py +++ b/vm/mx.vm/suite.py @@ -2,7 +2,7 @@ "name": "vm", "version" : "23.0.1", "mxversion": "6.17.0", - "release" : False, + "release" : True, "groupId" : "org.graalvm", "url" : "http://www.graalvm.org/", @@ -39,7 +39,7 @@ "name": "graal-nodejs", "subdir": True, "dynamic": True, - "version": "dde9b765ecb27e54cb473ca25fe5c327cfe85e33", + "version": "b8af554c627475fb02bf2d7820239d5e9b488bcb", "urls" : [ {"url" : "https://github.com/graalvm/graaljs.git", "kind" : "git"}, {"url": "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind": "binary"}, @@ -49,7 +49,7 @@ "name": "graal-js", "subdir": True, "dynamic": True, - "version": "dde9b765ecb27e54cb473ca25fe5c327cfe85e33", + "version": "b8af554c627475fb02bf2d7820239d5e9b488bcb", "urls": [ {"url": "https://github.com/graalvm/graaljs.git", "kind" : "git"}, {"url": "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind": "binary"}, @@ -75,7 +75,7 @@ }, { "name": "graalpython", - "version": "875408b2502b40af0c53d90086efe7ad85446e16", + "version": "29994f24d0c3cca0795b605adcfba8571510da15", "dynamic": True, "urls": [ {"url": "https://github.com/graalvm/graalpython.git", "kind": "git"}, From f61e1b44edf883b84a8ef06b9454af10889445cc Mon Sep 17 00:00:00 2001 From: Marouane El Hallaoui Date: Thu, 13 Jul 2023 17:17:37 +0100 Subject: [PATCH 62/72] Revert "GR-47149 : make release GraalVM 23.0.1" This reverts commit bb8edf225d75ec3b317bbe7e830c3a3d6c8a772b. --- compiler/mx.compiler/suite.py | 2 +- espresso/mx.espresso/suite.py | 2 +- regex/mx.regex/suite.py | 2 +- sdk/mx.sdk/suite.py | 2 +- substratevm/mx.substratevm/suite.py | 2 +- tools/mx.tools/suite.py | 2 +- truffle/mx.truffle/suite.py | 2 +- vm/mx.vm/suite.py | 8 ++++---- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/compiler/mx.compiler/suite.py b/compiler/mx.compiler/suite.py index a6142d10c947..cfffc61dd199 100644 --- a/compiler/mx.compiler/suite.py +++ b/compiler/mx.compiler/suite.py @@ -5,7 +5,7 @@ "groupId" : "org.graalvm.compiler", "version" : "23.0.1", - "release" : True, + "release" : False, "url" : "http://www.graalvm.org/", "developer" : { "name" : "GraalVM Development", diff --git a/espresso/mx.espresso/suite.py b/espresso/mx.espresso/suite.py index ec9b4503d5c8..2f5cd32be9aa 100644 --- a/espresso/mx.espresso/suite.py +++ b/espresso/mx.espresso/suite.py @@ -24,7 +24,7 @@ "mxversion": "6.17.0", "name": "espresso", "version" : "23.0.1", - "release" : True, + "release" : False, "groupId" : "org.graalvm.espresso", "url" : "https://www.graalvm.org/reference-manual/java-on-truffle/", "developer" : { diff --git a/regex/mx.regex/suite.py b/regex/mx.regex/suite.py index 506c80d7316b..8bbe9cf56120 100644 --- a/regex/mx.regex/suite.py +++ b/regex/mx.regex/suite.py @@ -44,7 +44,7 @@ "name" : "regex", "version" : "23.0.1", - "release" : True, + "release" : False, "groupId" : "org.graalvm.regex", "url" : "http://www.graalvm.org/", "developer" : { diff --git a/sdk/mx.sdk/suite.py b/sdk/mx.sdk/suite.py index 990232c01047..4122ec944cf7 100644 --- a/sdk/mx.sdk/suite.py +++ b/sdk/mx.sdk/suite.py @@ -42,7 +42,7 @@ "mxversion": "6.17.0", "name" : "sdk", "version" : "23.0.1", - "release" : True, + "release" : False, "sourceinprojectwhitelist" : [], "url" : "https://github.com/oracle/graal", "groupId" : "org.graalvm.sdk", diff --git a/substratevm/mx.substratevm/suite.py b/substratevm/mx.substratevm/suite.py index be0116e6c870..2b3a4b5ceea0 100644 --- a/substratevm/mx.substratevm/suite.py +++ b/substratevm/mx.substratevm/suite.py @@ -3,7 +3,7 @@ "mxversion": "6.17.0", "name": "substratevm", "version" : "23.0.1", - "release" : True, + "release" : False, "url" : "https://github.com/oracle/graal/tree/master/substratevm", "groupId" : "org.graalvm.nativeimage", diff --git a/tools/mx.tools/suite.py b/tools/mx.tools/suite.py index 84d83e88e4ba..abfe455f55d8 100644 --- a/tools/mx.tools/suite.py +++ b/tools/mx.tools/suite.py @@ -27,7 +27,7 @@ "groupId" : "org.graalvm.tools", "version" : "23.0.1", - "release" : True, + "release" : False, "url" : "http://openjdk.java.net/projects/graal", "developer" : { "name" : "GraalVM Development", diff --git a/truffle/mx.truffle/suite.py b/truffle/mx.truffle/suite.py index 3a6e23de0274..e23f29160f61 100644 --- a/truffle/mx.truffle/suite.py +++ b/truffle/mx.truffle/suite.py @@ -42,7 +42,7 @@ "mxversion": "6.17.0", "name" : "truffle", "version" : "23.0.1", - "release" : True, + "release" : False, "groupId" : "org.graalvm.truffle", "sourceinprojectwhitelist" : [], "url" : "http://openjdk.java.net/projects/graal", diff --git a/vm/mx.vm/suite.py b/vm/mx.vm/suite.py index 1001e378b37c..2c9edc31ce4a 100644 --- a/vm/mx.vm/suite.py +++ b/vm/mx.vm/suite.py @@ -2,7 +2,7 @@ "name": "vm", "version" : "23.0.1", "mxversion": "6.17.0", - "release" : True, + "release" : False, "groupId" : "org.graalvm", "url" : "http://www.graalvm.org/", @@ -39,7 +39,7 @@ "name": "graal-nodejs", "subdir": True, "dynamic": True, - "version": "b8af554c627475fb02bf2d7820239d5e9b488bcb", + "version": "dde9b765ecb27e54cb473ca25fe5c327cfe85e33", "urls" : [ {"url" : "https://github.com/graalvm/graaljs.git", "kind" : "git"}, {"url": "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind": "binary"}, @@ -49,7 +49,7 @@ "name": "graal-js", "subdir": True, "dynamic": True, - "version": "b8af554c627475fb02bf2d7820239d5e9b488bcb", + "version": "dde9b765ecb27e54cb473ca25fe5c327cfe85e33", "urls": [ {"url": "https://github.com/graalvm/graaljs.git", "kind" : "git"}, {"url": "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind": "binary"}, @@ -75,7 +75,7 @@ }, { "name": "graalpython", - "version": "29994f24d0c3cca0795b605adcfba8571510da15", + "version": "875408b2502b40af0c53d90086efe7ad85446e16", "dynamic": True, "urls": [ {"url": "https://github.com/graalvm/graalpython.git", "kind": "git"}, From 6b774e6da2f0a007b417082c486ab21d4bc0e14d Mon Sep 17 00:00:00 2001 From: Lesia Chaban Date: Wed, 21 Jun 2023 15:49:46 +0300 Subject: [PATCH 63/72] Update GraalVM CE Container Images guide (cherry picked from commit 0407384d9dfc9a5c34709ca6903e1e4d6ce7a058) --- .../graalvm-ce-container-images.md | 56 +++++-------------- 1 file changed, 14 insertions(+), 42 deletions(-) diff --git a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md index 2ee240f6b9ea..065af67366cd 100644 --- a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md +++ b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md @@ -12,78 +12,50 @@ Learn here how to start using GraalVM Community images for Docker containers. You can pull a package by name or by name and version tag. To install GraalVM JDK from the command line, use: ```shell -docker pull ghcr.io/graalvm/jdk:ol8-java17- +docker pull ghcr.io/graalvm/jdk:20.0.1 ``` Alternatively, use GraalVM JDK as a base image in [Dockerfile](https://docs.docker.com/engine/reference/builder/): ```shell -FROM ghcr.io/graalvm/jdk:ol8-java17- +FROM ghcr.io/graalvm/jdk:20.0.1 ``` -There are different images provided depending on the platforms, the architecture, and the Java version. -GraalVM binaries are built for Linux, macOS, and Windows platforms on x64 systems, and for Linux on AArch64 architecture. -The images are multi-arch (`aarch64` or `x64` will be pulled depending on Docker host architecture), and tagged with the format `ghcr.io/graalvm/$IMAGE_NAME[:][$os_version][-$java_version][-$version][-$build_number]`. -The version tag defines the level of specificity. -It is recommended that the most specific tag be used, for example, `java17-22.3.1` or `java17-22.3.1-b1`, where the `-b1` means the image required a patch and this specific build will never change. +There are different GraalVM Community Edition container images provided depending on the architecture and the Java version. +The images are multi-arch (`aarch64` or `amd64` depending on the host architecture), and tagged with the format `ghcr.io/graalvm/$IMAGE_NAME[:][$java_version][-$os_version][-$version][-$date]` +The version tag defines the level of specificity. It is recommended that the most specific tag be used, e.g., `20.0.1` or `20.0.1-ol9-date`, where the `-ol9-date` means the image required a patch and this specific build will never change. + See what types of container images are available [here](https://github.com/graalvm/container). ## Get Started 1. Start a container and enter the `bash` session with the following run command: ```shell - docker run -it --rm ghcr.io/graalvm/jdk:ol8-java17-22.3.1 bash + docker run -it --rm ghcr.io/graalvm/jdk:20.0.1-ol9 bash ``` 2. Check the `java` version: ```shell - →docker run -it --rm ghcr.io/graalvm/jdk:ol8-java17-22.3.1 bash + →docker run -it --rm ghcr.io/graalvm/jdk:20.0.1-ol9 bash bash-4.4# java -version ``` You have pulled a size compact GraalVM Community container image with the GraalVM JDK pre-installed and the Graal compiler. -Size compact images are based on GraalVM's component RPMs that are available for Oracle Linux 7, Oracle Linux 8, and Oracle Linux 9. Similar to any other available packages, you can install these components using `yum` on Oracle Linux 7 or `microdnf` on the Oracle Linux 8 and Oracle Linux 9 based images. +RPM-based GraalVM Community container images are based on GraalVM components RPMs that are available for Oracle Linux 7, Oracle Linux 8 and Oracle Linux 9. Similar to any other available packages, you can install these components using `yum` on Oracle Linux 7 or `microdnf` on the Oracle Linux 8 and Oracle Linux 9 based images. To pull a GraalVM Community Edition container image containing the [`gu` utility](../../../reference-manual/graalvm-updater.md) for installing additional components, run this command: ``` -docker pull ghcr.io/graalvm/graalvm-ce:22.3.1 +docker pull ghcr.io/graalvm/graalvm-community:23.0.0[-$version][-$date] ``` -GraalVM Updater, `gu`, can be used to install additional GraalVM language runtimes like JavaScript, Node.js, LLVM, Ruby, R, Python, and WebAssembly. For example, to add the Ruby support, run the following command (the output below is truncated for brevity): - -```shell -docker run -it --rm ghcr.io/graalvm/graalvm-ce:22.3.1 bash -bash-4.4# gu install ruby -Downloading: Component catalog -Processing component archive: Component ruby -Downloading: Component ruby -[###### ] -... -``` Here is a sample command that maps the `/absolute/path/to/directory/no/trailing/slash` directory from the host system to the `/path/inside/container` inside the container. ```shell -docker run -it --rm -v /absolute/path/to/directory/no/trailing/slash:/path/inside/container ghcr.io/graalvm/graalvm-ce:22.3.1 bash +docker run -it --rm -v /absolute/path/to/directory/no/trailing/slash:/path/inside/container ghcr.io/graalvm/graalvm-community:23.0.0 bash ``` -If you want to create Docker images that contain GraalVM with Ruby, R, or Python, you can use a Dockerfile like the example below, which uses `ghcr.io/graalvm/graalvm-ce:22.3.1` as the base image, installs the Ruby support using the `gu` utility, then creates and runs a sample Ruby program. - -```shell -FROM ghcr.io/graalvm/graalvm-ce:22.3.1 -RUN gu install ruby -WORKDIR /workdir -RUN echo 'puts "Hello from Ruby!\nVersion: #{RUBY_DESCRIPTION}"' > app.rb -CMD ruby app.rb -``` - -If you put the above snippet in a Dockerfile in the current directory, you can build and run it with the following commands: - -```shell -docker build -t ruby-demo . -... -docker run -it --rm ruby-demo -Hello from Ruby! -Version: truffleruby 22.3.1, like ruby 3.0.3, GraalVM CE Native [x86_64-darwin] -``` +You can also set an image to a specific java version number that allows an update for a subversion to be pulled. +For instance, using `ghcr.io/graalvm/jdk:latest`, the image will be updated for 22.3.x releases, but not for 22.3.1. +Using `ghcr.io/graalvm/native-image` you will always get the latest update available for Native Image, the latest OS which is for now the Oracle Linux 9 and the Oracle Linux 9 slim, the latest Java version. Check what other configuration types of container images are available [here](https://github.com/graalvm/container). From 972f921a67bde799bad7322367b1101a922e987e Mon Sep 17 00:00:00 2001 From: Lesia Chaban Date: Mon, 3 Jul 2023 11:30:24 +0000 Subject: [PATCH 64/72] Review GraalVM CE Container Images guide (cherry picked from commit a54ce8e2a339f0297c7c2c60b84d3a0bce783073) --- .../container-images/graalvm-ce-container-images.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md index 065af67366cd..7bf5d3b43ccf 100644 --- a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md +++ b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md @@ -7,7 +7,7 @@ permalink: /docs/getting-started/container-images/ ## GraalVM Community Images -To support container-based development, GraalVM Community container images are published in the [GitHub Container Registry](https://github.com/orgs/graalvm/packages). +To support container-based development, GraalVM Community Edition container images are published in the [GitHub Container Registry](https://github.com/graalvm/container/pkgs/container/graalvm-community). Learn here how to start using GraalVM Community images for Docker containers. You can pull a package by name or by name and version tag. To install GraalVM JDK from the command line, use: From 1394b7dd9e9c7b81741ce158905908911e04a722 Mon Sep 17 00:00:00 2001 From: Lesia Chaban Date: Mon, 3 Jul 2023 11:30:34 +0000 Subject: [PATCH 65/72] Review GraalVM CE Container Images guide (cherry picked from commit d1406b754b8ae3a68dd97fd84c75bac6fed2e428) --- .../graalvm-ce-container-images.md | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md index 7bf5d3b43ccf..696b107b602e 100644 --- a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md +++ b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md @@ -5,24 +5,24 @@ link_title: Container Images permalink: /docs/getting-started/container-images/ --- -## GraalVM Community Images +## GraalVM Community Edition Container Images -To support container-based development, GraalVM Community Edition container images are published in the [GitHub Container Registry](https://github.com/graalvm/container/pkgs/container/graalvm-community). -Learn here how to start using GraalVM Community images for Docker containers. +To support container-based development, GraalVM Community Edition container images are published in the [GitHub Container Registry](https://github.com/orgs/graalvm/packages). +Learn here how to start using GraalVM Community Edition images for Docker containers. You can pull a package by name or by name and version tag. To install GraalVM JDK from the command line, use: ```shell -docker pull ghcr.io/graalvm/jdk:20.0.1 +docker pull ghcr.io/graalvm/jdk-community:20.0.1-ol9-20230622 ``` Alternatively, use GraalVM JDK as a base image in [Dockerfile](https://docs.docker.com/engine/reference/builder/): ```shell -FROM ghcr.io/graalvm/jdk:20.0.1 +FROM ghcr.io/graalvm/jdk-community:20.0.1-ol9-20230622 ``` There are different GraalVM Community Edition container images provided depending on the architecture and the Java version. -The images are multi-arch (`aarch64` or `amd64` depending on the host architecture), and tagged with the format `ghcr.io/graalvm/$IMAGE_NAME[:][$java_version][-$os_version][-$version][-$date]` -The version tag defines the level of specificity. It is recommended that the most specific tag be used, e.g., `20.0.1` or `20.0.1-ol9-date`, where the `-ol9-date` means the image required a patch and this specific build will never change. +The images are multi-arch (`aarch64` or `amd64` depending on the host architecture), and tagged with the format `ghcr.io/graalvm/$IMAGE_NAME[:][$java_version][-$os_version][-$date]`. +The version tag defines the level of specificity. It is recommended that the most specific tag be used, for example, `20.0.1` or `20.0.1-ol9[-$date]`, where the `-ol9-[-$date]` means the image required a patch and this specific build will never change. See what types of container images are available [here](https://github.com/graalvm/container). @@ -30,33 +30,32 @@ See what types of container images are available [here](https://github.com/graal 1. Start a container and enter the `bash` session with the following run command: ```shell - docker run -it --rm ghcr.io/graalvm/jdk:20.0.1-ol9 bash + docker run -it --rm ghcr.io/graalvm/jdk-community:20.0.1-ol9-20230622 bash ``` 2. Check the `java` version: ```shell - →docker run -it --rm ghcr.io/graalvm/jdk:20.0.1-ol9 bash + →docker run -it --rm ghcr.io/graalvm/jdk-community:20.0.1-ol9-20230622 bash bash-4.4# java -version ``` -You have pulled a size compact GraalVM Community container image with the GraalVM JDK pre-installed and the Graal compiler. +You have pulled a size compact GraalVM Community Edition container image with the GraalVM JDK pre-installed and the Graal compiler. -RPM-based GraalVM Community container images are based on GraalVM components RPMs that are available for Oracle Linux 7, Oracle Linux 8 and Oracle Linux 9. Similar to any other available packages, you can install these components using `yum` on Oracle Linux 7 or `microdnf` on the Oracle Linux 8 and Oracle Linux 9 based images. +RPM-based GraalVM Community container images are based on GraalVM components RPMs that are available for Oracle Linux 7, Oracle Linux 8, and Oracle Linux 9. +Similar to any other available packages, you can install these components using `yum` on Oracle Linux 7 or `microdnf` on the Oracle Linux To pull a GraalVM Community Edition container image containing the [`gu` utility](../../../reference-manual/graalvm-updater.md) for installing additional components, run this command: ``` -docker pull ghcr.io/graalvm/graalvm-community:23.0.0[-$version][-$date] +docker pull ghcr.io/graalvm/graalvm-community:20.0.1-ol9-20230622 ``` Here is a sample command that maps the `/absolute/path/to/directory/no/trailing/slash` directory from the host system to the `/path/inside/container` inside the container. ```shell -docker run -it --rm -v /absolute/path/to/directory/no/trailing/slash:/path/inside/container ghcr.io/graalvm/graalvm-community:23.0.0 bash +docker run -it --rm -v /absolute/path/to/directory/no/trailing/slash:/path/inside/container ghcr.io/graalvm/graalvm-community:20.0.1-ol9-20230622 bash ``` -You can also set an image to a specific java version number that allows an update for a subversion to be pulled. -For instance, using `ghcr.io/graalvm/jdk:latest`, the image will be updated for 22.3.x releases, but not for 22.3.1. -Using `ghcr.io/graalvm/native-image` you will always get the latest update available for Native Image, the latest OS which is for now the Oracle Linux 9 and the Oracle Linux 9 slim, the latest Java version. +Using `ghcr.io/graalvm/native-image-community` you will always get the latest update available for GraalVM Community Native Image, the latest OS which is for now Oracle Linux 9 and Oracle Linux 9 slim, and the latest Java version. -Check what other configuration types of container images are available [here](https://github.com/graalvm/container). +Check what other configuration types of container images are available [here](https://github.com/orgs/graalvm/packages). If you are looking for Oracle GraalVM container images, they are published in the [Oracle Container Registry](https://container-registry.oracle.com/ords/f?p=113:10::::::). \ No newline at end of file From b22f294ae1864d8ca62a0c73d3e65e3e03e9261f Mon Sep 17 00:00:00 2001 From: Lesia Chaban Date: Tue, 4 Jul 2023 13:06:01 +0300 Subject: [PATCH 66/72] Follow Mohamed Ez Zarghilli comment (cherry picked from commit 502bf256ab4ff00d496796c57d52c5a01577c0b2) --- .../container-images/graalvm-ce-container-images.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md index 696b107b602e..edda4c6963b0 100644 --- a/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md +++ b/docs/getting-started/graalvm-community/container-images/graalvm-ce-container-images.md @@ -12,12 +12,12 @@ Learn here how to start using GraalVM Community Edition images for Docker contai You can pull a package by name or by name and version tag. To install GraalVM JDK from the command line, use: ```shell -docker pull ghcr.io/graalvm/jdk-community:20.0.1-ol9-20230622 +docker pull ghcr.io/graalvm/jdk-community:20.0.1-ol9 ``` Alternatively, use GraalVM JDK as a base image in [Dockerfile](https://docs.docker.com/engine/reference/builder/): ```shell -FROM ghcr.io/graalvm/jdk-community:20.0.1-ol9-20230622 +FROM ghcr.io/graalvm/jdk-community:20.0.1-ol9 ``` There are different GraalVM Community Edition container images provided depending on the architecture and the Java version. @@ -30,11 +30,11 @@ See what types of container images are available [here](https://github.com/graal 1. Start a container and enter the `bash` session with the following run command: ```shell - docker run -it --rm ghcr.io/graalvm/jdk-community:20.0.1-ol9-20230622 bash + docker run -it --rm ghcr.io/graalvm/jdk-community:20.0.1-ol9 bash ``` 2. Check the `java` version: ```shell - →docker run -it --rm ghcr.io/graalvm/jdk-community:20.0.1-ol9-20230622 bash + →docker run -it --rm ghcr.io/graalvm/jdk-community:20.0.1-ol9 bash bash-4.4# java -version ``` @@ -45,13 +45,13 @@ Similar to any other available packages, you can install these components using To pull a GraalVM Community Edition container image containing the [`gu` utility](../../../reference-manual/graalvm-updater.md) for installing additional components, run this command: ``` -docker pull ghcr.io/graalvm/graalvm-community:20.0.1-ol9-20230622 +docker pull ghcr.io/graalvm/graalvm-community:20.0.1-ol9 ``` Here is a sample command that maps the `/absolute/path/to/directory/no/trailing/slash` directory from the host system to the `/path/inside/container` inside the container. ```shell -docker run -it --rm -v /absolute/path/to/directory/no/trailing/slash:/path/inside/container ghcr.io/graalvm/graalvm-community:20.0.1-ol9-20230622 bash +docker run -it --rm -v /absolute/path/to/directory/no/trailing/slash:/path/inside/container ghcr.io/graalvm/graalvm-community:20.0.1-ol9 bash ``` Using `ghcr.io/graalvm/native-image-community` you will always get the latest update available for GraalVM Community Native Image, the latest OS which is for now Oracle Linux 9 and Oracle Linux 9 slim, and the latest Java version. From a0b3ae5a40a08117ff8a8916f2410156bd130b4c Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 27 Jun 2023 19:01:09 +0300 Subject: [PATCH 67/72] Add Native Image Getting Started on Windows Steps (cherry picked from commit d6df93a4be9073e062df5b3659a4d3ac763421e3) --- .../graalvm-community/windows.md | 74 +++++++++++++++-- .../graalvm-enterprise/windows.md | 77 +++++++++++++++--- .../img/desktop_development_with_C.png | Bin 0 -> 34534 bytes .../img/launch_dev_command_prompt.png | Bin 0 -> 9974 bytes .../getting-started/img/open_vs_installer.png | Bin 0 -> 1424 bytes .../visual-studio-installed-components.png | Bin 0 -> 8356 bytes .../img/visual_studio_installer.png | Bin 0 -> 12184 bytes .../img/windows-10-installed.png | Bin 0 -> 25154 bytes 8 files changed, 132 insertions(+), 19 deletions(-) create mode 100644 docs/getting-started/img/desktop_development_with_C.png create mode 100644 docs/getting-started/img/launch_dev_command_prompt.png create mode 100644 docs/getting-started/img/open_vs_installer.png create mode 100644 docs/getting-started/img/visual-studio-installed-components.png create mode 100644 docs/getting-started/img/visual_studio_installer.png create mode 100644 docs/getting-started/img/windows-10-installed.png diff --git a/docs/getting-started/graalvm-community/windows.md b/docs/getting-started/graalvm-community/windows.md index eba35126c187..1d8e8c6cea94 100644 --- a/docs/getting-started/graalvm-community/windows.md +++ b/docs/getting-started/graalvm-community/windows.md @@ -37,7 +37,7 @@ Follow these steps to install GraalVM: Alternatively, you can set up environment variables through a Windows GUI: -1. Go to Windows Start Menu - Settings - ... - Advanced. +1. Go to Windows Start Menu, then **Settings**, then **Advanced**. 2. Click **Environment Variables**. In the section "System Variables" find the `JAVA_HOME` variable and select it. 3. Click **Edit**. 4. Click **New**. @@ -46,13 +46,69 @@ Alternatively, you can set up environment variables through a Windows GUI: Repeat the same for the `PATH` environment variable. -Optionally, you can specify GraalVM as the default JRE or JDK installation in your Java IDE. +## Prerequisites for Native Image on Windows -## Prerequisites for Using GraalVM Native Image on Windows -On Windows, Native Image requires Visual Studio and Microsoft Visual C++(MSVC). -You can use Visual Studio 2022 version 17.1.0 or later. -There are two installation options: -- Install the Visual Studio Build Tools with the Windows 10 SDK -- Install Visual Studio with the Windows 10 SDK +On Windows, Native Image requires Visual Studio and Microsoft Visual C++(MSVC). +You can use Visual Studio 2017 version 15.9 or later. -Step-by-step instructions on installing Visual Studio Build Tools and Windows 10 SDK, and starting using Native Image can be found [here](https://medium.com/graalvm/using-graalvm-and-native-image-on-windows-10-9954dc071311). +### Install Visual Studio Build Tools and Windows SDK + +1. Download the Visual Studio Build Tools (C development environment) from [visualstudio.microsoft.com](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16){:target="_blank"}. + +2. Start the Visual Studio Build Tools installation by clicking on the _.exe_ file, and then press Continue: + + ![Install Visual Studio Build Tools](../img/visual_studio_installer.png) + +3. Check the **Desktop development with C++** box in the main window. Also, on the right side under Installation Details, choose **Windows SDK**, and click the Install button. + + ![Select Desktop development with C++](../img/desktop_development_with_C.png) + +4. After the installation completes, reboot your system. + +5. Next ensure Windows 10 SDK is indeed available. Open the Visual Studio Installer: + + ![Open the Visual Studio Installer](../img/open_vs_installer.png) + +6. Under the Installed tab, click Modify and choose Individual Components: + + ![Visual Studio Installed Components](../img/visual-studio-installed-components.png) + +7. Then scroll to the bottom and check if Windows SDK is installed and confirm the build tools are checked: + + ![Windows 10 SDK Installed](../img/windows-10-installed.png) + +Now that you have the Windows 10 SDK and Visual Studio tooling installed, you can start using GraalVM Native Image. + +### Start Using Native Image + +The GraalVM download includes Native Image. +Native Image sets up build environments for Windows automatically. +You can run Native Image in a regular Windows Command Prompt, `cmd`, or an x64 Native Tools Command Prompt. + +Start the Command Prompt, running as administrator. +Then check the `native-image` version to see that it is working: +```shell +C:\> native-image --version +``` + +If you prefer to run Native Image from the x64 Native Tools Command Prompt, you can. +Note that the command for initiating an x64 Native Tools command prompt is different if you only have the Visual Studio Build Tools installed, versus if you have the full VS Code 2019 installed. + +Use this command if you have the Visual Studio Build Tools installed: + +```shell +C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat +``` + +Use this command if you installed the full VS Code 2019: +```bash +C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\vcvars64.bat +``` + +Alternatively, you can launch a Dev command prompt from the Visual Studio interface: + + ![Launch a Dev command prompt](../img/launch_dev_command_prompt.png) + +Once the x64 Native Tools Command Prompt is opened, check the `native-image` version. + +This guide was written for Windows 10, but should be valid for Windows 8 and 11. \ No newline at end of file diff --git a/docs/getting-started/graalvm-enterprise/windows.md b/docs/getting-started/graalvm-enterprise/windows.md index bfd930da662a..0784b1b23590 100644 --- a/docs/getting-started/graalvm-enterprise/windows.md +++ b/docs/getting-started/graalvm-enterprise/windows.md @@ -9,8 +9,7 @@ Oracle GraalVM is available for Windows on the x64 architecture. Follow these steps to install Oracle GraalVM: -1. Navigate to [Oracle Java Downloads](https://www.oracle.com/java/technologies/downloads/). -Select the preferred Oracle GraalVM version, **17** or **20** for the Java version, and **Windows** for the operating system. Start downloading. +1. Navigate to [Oracle Java Downloads](https://www.oracle.com/java/technologies/downloads/). Select the preferred Oracle GraalVM version, **17** or **20** for the Java version, and **Windows** for the operating system. Start downloading. 2. Change the directory to the location where you want to install GraalVM, then move the _.zip_ archive file to it. @@ -35,7 +34,7 @@ Select the preferred Oracle GraalVM version, **17** or **20** for the Java versi Alternatively, you can set up environment variables through a Windows GUI: -1. Go to Windows Start Menu - Settings - ... - Advanced. +1. Go to Windows Start Menu, then **Settings**, then **Advanced**. 2. Click **Environment Variables**. In the section labeled "System Variables" find the `JAVA_HOME` variable and select it. 3. Click **Edit**. 4. Click **New**. @@ -44,11 +43,69 @@ Alternatively, you can set up environment variables through a Windows GUI: Repeat the same for the `PATH` environment variable. -## Prerequisites for Using Native Image on Windows -On Windows, Native Image requires Visual Studio and Microsoft Visual C++(MSVC). -You can use Visual Studio 2022 version 17.1.0 or later. -There are two installation options: -- Install the Visual Studio Build Tools with the Windows 10 SDK -- Install Visual Studio with the Windows 10 SDK +## Prerequisites for Native Image on Windows -Step-by-step instructions on installing Visual Studio Build Tools and Windows 10 SDK, and starting using Native Image can be found [here](https://medium.com/graalvm/using-graalvm-and-native-image-on-windows-10-9954dc071311). \ No newline at end of file +On Windows, Native Image requires Visual Studio and Microsoft Visual C++(MSVC). +You can use Visual Studio 2017 version 15.9 or later. + +### Install Visual Studio Build Tools and Windows SDK + +1. Download the Visual Studio Build Tools (C development environment) from [visualstudio.microsoft.com](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16){:target="_blank"}. + +2. Start the Visual Studio Build Tools installation by clicking on the _.exe_ file, and then press Continue: + + ![Install Visual Studio Build Tools](../img/visual_studio_installer.png) + +3. Check the **Desktop development with C++** box in the main window. Also, on the right side under Installation Details, choose **Windows SDK**, and click the Install button. + + ![Select Desktop development with C++](../img/desktop_development_with_C.png) + +4. After the installation completes, reboot your system. + +5. Next ensure Windows 10 SDK is indeed available. Open the Visual Studio Installer: + + ![Open the Visual Studio Installer](../img/open_vs_installer.png) + +6. Under the Installed tab, click Modify and choose Individual Components: + + ![Visual Studio Installed Components](../img/visual-studio-installed-components.png) + +7. Then scroll to the bottom and check if Windows SDK is installed and confirm the build tools are checked: + + ![Windows 10 SDK Installed](../img/windows-10-installed.png) + +Now that you have the Windows 10 SDK and Visual Studio tooling installed, you can start using Oracle GraalVM Native Image. + +### Start Using Native Image + +The Oracle GraalVM download includes Native Image. +Native Image sets up build environments for Windows automatically. +You can run Native Image in a regular Windows Command Prompt, `cmd`, or an x64 Native Tools Command Prompt. + +Start the Command Prompt, running as administrator. +Then check the `native-image` version to see that it is working: +```shell +C:\> native-image --version +``` + +If you prefer to run Native Image from the x64 Native Tools Command Prompt, you can. +Note that the command for initiating an x64 Native Tools command prompt is different if you only have the Visual Studio Build Tools installed, versus if you have the full VS Code 2019 installed. + +Use this command if you have the Visual Studio Build Tools installed: + +```shell +C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat +``` + +Use this command if you installed the full VS Code 2019: +```bash +C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\vcvars64.bat +``` + +Alternatively, you can launch a Dev command prompt from the Visual Studio interface: + + ![Launch a Dev command prompt](../img/launch_dev_command_prompt.png) + +Once the x64 Native Tools Command Prompt is opened, check the `native-image` version. + +This guide was written for Windows 10, but should be valid for Windows 8 and 11. \ No newline at end of file diff --git a/docs/getting-started/img/desktop_development_with_C.png b/docs/getting-started/img/desktop_development_with_C.png new file mode 100644 index 0000000000000000000000000000000000000000..e63eda99aa773628921fac145a5a2cddd50b16f3 GIT binary patch literal 34534 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 literal 0 HcmV?d00001 diff --git a/docs/getting-started/img/open_vs_installer.png b/docs/getting-started/img/open_vs_installer.png new file mode 100644 index 0000000000000000000000000000000000000000..0224cce770a544af6561519868b4c4350ffea5d6 GIT binary patch literal 1424 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 literal 0 HcmV?d00001 diff --git a/docs/getting-started/img/visual_studio_installer.png b/docs/getting-started/img/visual_studio_installer.png new file mode 100644 index 0000000000000000000000000000000000000000..7119da63acdf8e3ab04c7a87bfb441a845096e57 GIT binary patch literal 12184 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 Y1_J<)`TwK1`%ebye=**FB>&m}2bhqocmMzZ literal 0 HcmV?d00001 diff --git a/docs/getting-started/img/windows-10-installed.png b/docs/getting-started/img/windows-10-installed.png new file mode 100644 index 0000000000000000000000000000000000000000..742bd87b4f374a0cb29a8470aacdca4e433a4772 GIT binary patch literal 25154 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 Date: Tue, 27 Jun 2023 19:06:41 +0300 Subject: [PATCH 68/72] Remove redundant image files (cherry picked from commit 51032a2d5021a1109f0054375738a695e996f611) --- docs/README.md | 1 - docs/img/github-web-editor.png | Bin 329840 -> 0 bytes docs/img/graalvm_architecture_community.png | Bin 287719 -> 0 bytes 3 files changed, 1 deletion(-) delete mode 100644 docs/img/github-web-editor.png delete mode 100644 docs/img/graalvm_architecture_community.png diff --git a/docs/README.md b/docs/README.md index 72f7db545bb5..425b055c97d5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -21,7 +21,6 @@ To update the documentation: 2. Navigate to the source file you are intended to update 3. Click the "edit" button at the top of the section. > Note: GitHub introduced a new feature: online web editor, which allows to edit multiple files from a browser. To enable it, press `.` on any GitHub repo. For example, go to [https://github.com/oracle/graal](https://github.com/oracle/graal) and hit `.`. You will be immediately redirected to [https://github.dev/oracle/graal](https://github.dev/oracle/graal). - ![](/img/github-web-editor.png) 4. Create a Pull Request (PR) 5. Sign the [Oracle Contributor Agreement](https://oca.opensource.oracle.com/) diff --git a/docs/img/github-web-editor.png b/docs/img/github-web-editor.png deleted file mode 100644 index 03f2059a4891c15db09a1fd3f062555131726d96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329840 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ⅇlT(> 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 boN%Cd160oXm40RQ6PxKRxKWkigBSk;n~(At diff --git a/docs/img/graalvm_architecture_community.png b/docs/img/graalvm_architecture_community.png deleted file mode 100644 index 708abeb7927e2a6a2e70c23e5c745e82b1615b11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287719 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

_xeEc&xtu%7qk)Sd}nBD&W*Z(f8wwz8nM8_${ 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⋘6|g!3I1j|11)UlHzzMPMN>H4bJk; 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 T`sXY>d-~+0l|K|q8u Date: Wed, 28 Jun 2023 11:11:58 +0300 Subject: [PATCH 69/72] Recommend the latest Visual Studio version (cherry picked from commit cdd5f9fe38269c6f143e0505e2a17ae2504b487d) --- .../graalvm-community/windows.md | 38 ++++++------------ .../graalvm-enterprise/windows.md | 38 ++++++------------ .../img/launch_dev_command_prompt.png | Bin 9974 -> 0 bytes 3 files changed, 26 insertions(+), 50 deletions(-) delete mode 100644 docs/getting-started/img/launch_dev_command_prompt.png diff --git a/docs/getting-started/graalvm-community/windows.md b/docs/getting-started/graalvm-community/windows.md index 1d8e8c6cea94..253679295e2f 100644 --- a/docs/getting-started/graalvm-community/windows.md +++ b/docs/getting-started/graalvm-community/windows.md @@ -49,7 +49,7 @@ Repeat the same for the `PATH` environment variable. ## Prerequisites for Native Image on Windows On Windows, Native Image requires Visual Studio and Microsoft Visual C++(MSVC). -You can use Visual Studio 2017 version 15.9 or later. +You can use Visual Studio 2022 version 17.1.0 or later. ### Install Visual Studio Build Tools and Windows SDK @@ -65,7 +65,7 @@ You can use Visual Studio 2017 version 15.9 or later. 4. After the installation completes, reboot your system. -5. Next ensure Windows 10 SDK is indeed available. Open the Visual Studio Installer: +5. Next ensure Windows SDK is indeed available. Open the Visual Studio Installer: ![Open the Visual Studio Installer](../img/open_vs_installer.png) @@ -75,40 +75,28 @@ You can use Visual Studio 2017 version 15.9 or later. 7. Then scroll to the bottom and check if Windows SDK is installed and confirm the build tools are checked: - ![Windows 10 SDK Installed](../img/windows-10-installed.png) + ![Windows SDK Installed](../img/windows-10-installed.png) -Now that you have the Windows 10 SDK and Visual Studio tooling installed, you can start using GraalVM Native Image. +Now that you have the Windows SDK and Visual Studio tooling installed, you can start using GraalVM Native Image. ### Start Using Native Image -The GraalVM download includes Native Image. -Native Image sets up build environments for Windows automatically. -You can run Native Image in a regular Windows Command Prompt, `cmd`, or an x64 Native Tools Command Prompt. +Native Image sets up build environments automatically if it can find an appropriate Visual Studio installation in a known location. +With the GraalVM JDK on your `PATH`, you can therefore now run the `native-image` utility in a Command Prompt (`cmd`) or a PowerShell (`pwsh`). -Start the Command Prompt, running as administrator. -Then check the `native-image` version to see that it is working: +To check the `native-image` version, run: ```shell -C:\> native-image --version +C:\> native-image.cmd --version ``` -If you prefer to run Native Image from the x64 Native Tools Command Prompt, you can. -Note that the command for initiating an x64 Native Tools command prompt is different if you only have the Visual Studio Build Tools installed, versus if you have the full VS Code 2019 installed. - -Use this command if you have the Visual Studio Build Tools installed: - +To build a project using the [Native Build Tools Maven plugin](https://graalvm.github.io/native-build-tools/latest/maven-plugin.html){:target="_blank"}, run: ```shell -C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat +mvnw.cmd native:compile ``` -Use this command if you installed the full VS Code 2019: -```bash -C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\vcvars64.bat +To build a project using the [Native Build Tools Gradle plugin](https://graalvm.github.io/native-build-tools/latest/gradle-plugin.html){:target="_blank"}, run: +```shell +gradlew.bat nativeCompile ``` -Alternatively, you can launch a Dev command prompt from the Visual Studio interface: - - ![Launch a Dev command prompt](../img/launch_dev_command_prompt.png) - -Once the x64 Native Tools Command Prompt is opened, check the `native-image` version. - This guide was written for Windows 10, but should be valid for Windows 8 and 11. \ No newline at end of file diff --git a/docs/getting-started/graalvm-enterprise/windows.md b/docs/getting-started/graalvm-enterprise/windows.md index 0784b1b23590..8e977702c093 100644 --- a/docs/getting-started/graalvm-enterprise/windows.md +++ b/docs/getting-started/graalvm-enterprise/windows.md @@ -46,7 +46,7 @@ Repeat the same for the `PATH` environment variable. ## Prerequisites for Native Image on Windows On Windows, Native Image requires Visual Studio and Microsoft Visual C++(MSVC). -You can use Visual Studio 2017 version 15.9 or later. +You can use Visual Studio 2022 version 17.1.0 or later. ### Install Visual Studio Build Tools and Windows SDK @@ -62,7 +62,7 @@ You can use Visual Studio 2017 version 15.9 or later. 4. After the installation completes, reboot your system. -5. Next ensure Windows 10 SDK is indeed available. Open the Visual Studio Installer: +5. Next ensure Windows SDK is indeed available. Open the Visual Studio Installer: ![Open the Visual Studio Installer](../img/open_vs_installer.png) @@ -72,40 +72,28 @@ You can use Visual Studio 2017 version 15.9 or later. 7. Then scroll to the bottom and check if Windows SDK is installed and confirm the build tools are checked: - ![Windows 10 SDK Installed](../img/windows-10-installed.png) + ![Windows SDK Installed](../img/windows-10-installed.png) -Now that you have the Windows 10 SDK and Visual Studio tooling installed, you can start using Oracle GraalVM Native Image. +Now that you have the Windows SDK and Visual Studio tooling installed, you can start using Oracle GraalVM Native Image. ### Start Using Native Image -The Oracle GraalVM download includes Native Image. -Native Image sets up build environments for Windows automatically. -You can run Native Image in a regular Windows Command Prompt, `cmd`, or an x64 Native Tools Command Prompt. +Native Image sets up build environments automatically if it can find an appropriate Visual Studio installation in a known location. +With the GraalVM JDK on your `PATH`, you can therefore now run the `native-image` utility in a Command Prompt (`cmd`) or a PowerShell (`pwsh`). -Start the Command Prompt, running as administrator. -Then check the `native-image` version to see that it is working: +To check the `native-image` version, run: ```shell -C:\> native-image --version +C:\> native-image.cmd --version ``` -If you prefer to run Native Image from the x64 Native Tools Command Prompt, you can. -Note that the command for initiating an x64 Native Tools command prompt is different if you only have the Visual Studio Build Tools installed, versus if you have the full VS Code 2019 installed. - -Use this command if you have the Visual Studio Build Tools installed: - +To build a project using the [Native Build Tools Maven plugin](https://graalvm.github.io/native-build-tools/latest/maven-plugin.html){:target="_blank"}, run: ```shell -C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat +mvnw.cmd native:compile ``` -Use this command if you installed the full VS Code 2019: -```bash -C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\vcvars64.bat +To build a project using the [Native Build Tools Gradle plugin](https://graalvm.github.io/native-build-tools/latest/gradle-plugin.html){:target="_blank"}, run: +```shell +gradlew.bat nativeCompile ``` -Alternatively, you can launch a Dev command prompt from the Visual Studio interface: - - ![Launch a Dev command prompt](../img/launch_dev_command_prompt.png) - -Once the x64 Native Tools Command Prompt is opened, check the `native-image` version. - This guide was written for Windows 10, but should be valid for Windows 8 and 11. \ No newline at end of file diff --git a/docs/getting-started/img/launch_dev_command_prompt.png b/docs/getting-started/img/launch_dev_command_prompt.png deleted file mode 100644 index 7e6b4741f5ded111d5acf66d763d5e9663e83e0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9974 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 From a5973610874bdfb54feb4e5caf5449d86bf13648 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Mon, 10 Jul 2023 17:29:24 +0200 Subject: [PATCH 70/72] Update required GraalVM support version in Native Image JFR doc (cherry picked from commit edcd2366f888a8e4e533d86c01b018f98c7b0d26) --- docs/reference-manual/native-image/JFR.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/reference-manual/native-image/JFR.md b/docs/reference-manual/native-image/JFR.md index 7fe5e0bd3848..79807d7ad8bd 100644 --- a/docs/reference-manual/native-image/JFR.md +++ b/docs/reference-manual/native-image/JFR.md @@ -9,7 +9,7 @@ redirect_from: /$version/reference-manual/native-image/JFR/ # JDK Flight Recorder (JFR) with Native Image JDK Flight Recorder (JFR) is an event recorder for capturing information about a JVM, and an application running on the JVM. -GraalVM Native Image supports building a native executable with JFR events, and users can use [`jdk.jfr.Event`](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.jfr/jdk/jfr/Event.html) API with a similar experience to using JFR in the Java HotSpot VM. +GraalVM Native Image supports building a native executable with JFR events, and users can use [`jdk.jfr.Event` API](https://docs.oracle.com/en/java/javase/20/docs/api/jdk.jfr/jdk/jfr/Event.html) with a similar experience to using JFR in the Java HotSpot VM. To record JFR events when running a native executable, JFR support and JFR recording must be enabled. @@ -117,10 +117,10 @@ Otherwise, this option expects a comma separated list of tag combinations, each ## Current Limitations -The JFR support is still limited, for example, most VM-internal events and advanced features such as stack traces or memory leak detection are still missing. A subset of JFR features are currently available: custom and system events and disk-based recordings. -Note that: -- JFR events recording is not supported on GraalVM distribution for Windows. -- JFR is only supported with native executables built on GraalVM JDK 11. +The JFR support is still limited, for example, most VM-internal events and advanced features such as stack traces or memory leak detection are still missing. +A subset of JFR features are currently available: custom and system events and disk-based recordings. +Note that JFR events recording is not supported on GraalVM distribution for Windows. +JFR is supported with native executables built on GraalVM based on JDK 11 or higher version. ### Further Reading From 2b94ebed6647583fcb4b347e0f33f49d1022e9a9 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Wed, 12 Jul 2023 09:20:11 +0000 Subject: [PATCH 71/72] Follow review comment (cherry picked from commit 8b7e68fed672a8740d3c267e70d361c12de27cd4) --- docs/reference-manual/native-image/JFR.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference-manual/native-image/JFR.md b/docs/reference-manual/native-image/JFR.md index 79807d7ad8bd..a249dfd66f46 100644 --- a/docs/reference-manual/native-image/JFR.md +++ b/docs/reference-manual/native-image/JFR.md @@ -120,7 +120,7 @@ Otherwise, this option expects a comma separated list of tag combinations, each The JFR support is still limited, for example, most VM-internal events and advanced features such as stack traces or memory leak detection are still missing. A subset of JFR features are currently available: custom and system events and disk-based recordings. Note that JFR events recording is not supported on GraalVM distribution for Windows. -JFR is supported with native executables built on GraalVM based on JDK 11 or higher version. +JFR is supported with native executables built on GraalVM based on JDK 11 or later. ### Further Reading From 53b45282dc336e6f80edc19b51dd97a6e0d6ee9e Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Thu, 13 Jul 2023 17:50:30 +0200 Subject: [PATCH 72/72] Mark Jipher as a supported feature (cherry picked from commit 1fdd4992de3ddd8241c945e8ab319979389fc5b9) --- docs/security/JipherJCE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/security/JipherJCE.md b/docs/security/JipherJCE.md index e8387584fe75..96eea65a4042 100644 --- a/docs/security/JipherJCE.md +++ b/docs/security/JipherJCE.md @@ -13,7 +13,7 @@ Jipher provides competitive performance compared to Bouncy Castle or the default It is recommended to enable Jipher with Native Image in contexts where only FIPS-allowed algorithms should be used. Note that some algorithms are allowed by FIPS for specific use cases only. As a result, some algorithms provided by Jipher might not be allowed by FIPS for all purposes. -> Note: Jipher is an experimental feature and not available in GraalVM Community Edition. It is supported on Linux and macOS (macOS 10.15 and higher) on both AMD64 and AArch64 architectures. +> Note: Jipher is not available in GraalVM Community Edition. It is supported on Linux and macOS (macOS 10.15 and higher) on both AMD64 and AArch64 architectures. This page describes how to use Jipher with GraalVM Native Image.