Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/qbicc/qbicc
Experimental static compiler for Java programs.
https://github.com/qbicc/qbicc
compiler java llvm native-image openjdk
Last synced: 5 days ago
JSON representation
Experimental static compiler for Java programs.
- Host: GitHub
- URL: https://github.com/qbicc/qbicc
- Owner: qbicc
- License: other
- Created: 2020-04-07T15:42:21.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-12-16T15:54:41.000Z (11 days ago)
- Last Synced: 2024-12-16T20:31:49.255Z (11 days ago)
- Topics: compiler, java, llvm, native-image, openjdk
- Language: Java
- Homepage: https://qbicc.org
- Size: 14.3 MB
- Stars: 135
- Watchers: 13
- Forks: 22
- Open Issues: 64
-
Metadata Files:
- Readme: docs/README.adoc
- License: COPYING.txt
Awesome Lists containing this project
README
= qbicc
This is the `README` for qbicc. There's not much here yet but be sure to read link:Overview.adoc[the overview].
Our https://qbicc.zulipchat.com[`Zulip`] chat is a great place to ask questions and get started.
== Building
To quickly build the project, execute `mvn install -DskipTests` in the root.
This will build qbicc using the latest pre-built release of the `qbicc-class-library`.
Adding `-DskipTests` avoids running the integration tests, which take about 15 minutes.== Class Library
Qbicc uses a customized version of the OpenJDK libraries: https://github.com/qbicc/qbicc-class-library[`qbicc-class-library`]. The class libraries are released as a maven artifact, but if you are developing qbicc
you will eventually want to build your own local version.Note: *You must clone the qbicc-class-library repository on a case-sensitive file system.*
If you are on macOS, please follow the
https://github.com/qbicc/qbicc-class-library#readme[`instructions for creating a case-sensitive file system on macOS`] before executing the commands below.[source,shell]
-----
git clone --recurse-submodules [email protected]:qbicc/qbicc-class-library.git
cd qbicc-class-library
mvn install
-----== Running with Maven
Add the following XML to the `plugins` element of your Maven build to automatically produce a `qbicc`-built native image:
[source,xml]
-----org.qbicc
qbicc-maven-plugin
${qbicc.version}
qbicc-compile
compile
hello.world.Main
-----
Be sure to configure the `qbicc.version` property in your POM to correspond to the current version of qbicc.
== Running with `jbang`
To run the driver, first build the project and then use https://jbang.dev[`jbang`] to run it:
[source,shell]
-----
jbang --quiet org.qbicc:qbicc-main:0.76.0 --app-path-file /path/to/main.jar --output-path /tmp/output hello/world/Main
-----For a step-by-step example, see `examples/helloworld/hello/world/Main.java`
== Running with a locally built Class Library
After building the class library, you can get qbicc to use it simply by adding the
command line argument `--rt-version=17.alpha.0.NNN-SNAPSHOT` (where NNN matches your
local class lib version) to your qbicc invocation. For example,[source,shell]
-----
jbang --quiet org.qbicc:qbicc-main:0.76.0 --app-path-file /path/to/main.jar --output-path /tmp/output --rt-version=17.alpha.0.NNN-SNAPSHOT hello/world/Main
-----== JBang cache
When plugins are added or removed, the jbang cache may become inconsistent and result in build errors.
If that happens, add the `--fresh` option to the above command line. Eg: `jbang --fresh ...`
Alternatively, clear the entire cache using:
[source,shell]
-----
jbang cache clear
-----== Requirements
Please ensure the follow are installed and available on your path:
* LLVM 13+ (we test against 13, 14, and 15)
* JDK 17
* Maven 3.6.1+=== MacOS
You can install LLVM, Java and Maven using `brew`. In addition, you will also need to install XCode (to get Apple's version of `clang`). Do not attempt to override XCode's `clang` with the one that `brew` installed` (brew will not put its llvm toolchain into your path by default). Instead use symlinks to add just the brew installed `llc`, `llvm-objcopy`, and `opt` executables to your path.