2020-04-26 11:10:30 +00:00
|
|
|
# Building babashka
|
|
|
|
|
|
|
|
|
|
## Prerequisites
|
|
|
|
|
|
|
|
|
|
- Install [lein](https://leiningen.org/) for producing uberjars
|
2020-06-10 08:46:20 +00:00
|
|
|
- Download [GraalVM](https://www.graalvm.org/downloads/). Currently we use *java11-20.1.0*.
|
2020-09-16 13:55:56 +00:00
|
|
|
- For Windows, installing Visual Studio 2019 with the "Desktop development
|
2020-09-15 20:36:48 +00:00
|
|
|
with C++" workload is recommended.
|
2020-04-26 11:10:30 +00:00
|
|
|
- Set `$GRAALVM_HOME` to the GraalVM distribution directory. On macOS this can look like:
|
|
|
|
|
|
|
|
|
|
``` shell
|
2020-06-10 08:46:20 +00:00
|
|
|
export GRAALVM_HOME=~/Downloads/graalvm-ce-java11-20.1.0/Contents/Home
|
2020-04-26 11:10:30 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
On linux:
|
|
|
|
|
|
|
|
|
|
``` shell
|
2020-06-10 08:46:20 +00:00
|
|
|
export GRAALVM_HOME=~/Downloads/graalvm-ce-java11-20.1.0
|
2020-04-26 11:10:30 +00:00
|
|
|
```
|
|
|
|
|
|
2020-09-15 20:36:48 +00:00
|
|
|
On Windows, from the Visual Studio 2019 Developer Command Prompt or `cmd.exe` (not Powershell):
|
2020-04-26 11:10:30 +00:00
|
|
|
```
|
2020-09-15 20:36:48 +00:00
|
|
|
set GRAALVM_HOME=%USERPROFILE%\Downloads\graalvm-ce-java11-20.1.0
|
|
|
|
|
```
|
|
|
|
|
If you are not running from the Developer Command Prompt, you will need to set additional environment variables using:
|
|
|
|
|
```
|
|
|
|
|
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
|
2020-04-26 11:10:30 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Clone repository
|
|
|
|
|
|
|
|
|
|
NOTE: the babashka repository contains submodules. You need to use the
|
|
|
|
|
`--recursive` flag to clone these submodules along with the main repo.
|
|
|
|
|
|
|
|
|
|
``` shellsession
|
|
|
|
|
$ git clone https://github.com/borkdude/babashka --recursive
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To update later on:
|
|
|
|
|
|
|
|
|
|
``` shellsession
|
|
|
|
|
$ git submodule update --recursive
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Build
|
|
|
|
|
|
2020-04-30 16:44:32 +00:00
|
|
|
Run the `uberjar` and `compile` script:
|
|
|
|
|
|
|
|
|
|
``` shell
|
|
|
|
|
$ script/uberjar
|
|
|
|
|
$ script/compile
|
|
|
|
|
```
|
2020-04-26 11:10:30 +00:00
|
|
|
|
2020-07-05 10:38:26 +00:00
|
|
|
To configure max heap size you can use:
|
2020-04-26 11:10:30 +00:00
|
|
|
|
|
|
|
|
```
|
2020-07-05 10:38:26 +00:00
|
|
|
$ export BABASHKA_XMX="-J-Xmx6500m"
|
2020-04-26 11:10:30 +00:00
|
|
|
```
|
|
|
|
|
|
2020-07-05 10:38:26 +00:00
|
|
|
Note: setting the max heap size to a low value can cause the build to crash or
|
|
|
|
|
take long to complete.
|
|
|
|
|
|
2020-09-16 12:31:28 +00:00
|
|
|
## Windows
|
|
|
|
|
|
|
|
|
|
Run `script\uberjar.bat` followed by `script\compile.bat`.
|
2020-04-30 16:44:32 +00:00
|
|
|
|
|
|
|
|
## Feature flags
|
2020-04-26 11:10:30 +00:00
|
|
|
|
2020-04-30 16:44:32 +00:00
|
|
|
Babashka supports the following feature flags:
|
|
|
|
|
|
|
|
|
|
| Name | Description | Default |
|
|
|
|
|
|--------|----------------------------------------------|----------|
|
|
|
|
|
| `BABASHKA_FEATURE_CORE_ASYNC` | Includes the [clojure.core.async](https://github.com/clojure/core.async) library | `true` |
|
|
|
|
|
| `BABASHKA_FEATURE_CSV` | Includes the [clojure.data.csv](https://github.com/clojure/data.csv) library | `true` |
|
|
|
|
|
| `BABASHKA_FEATURE_JAVA_NIO` | Includes commonly used classes from the `java.nio` package | `true` |
|
|
|
|
|
| `BABASHKA_FEATURE_JAVA_TIME` | Includes commonly used classes from the `java.time` package | `true` |
|
|
|
|
|
| `BABASHKA_FEATURE_TRANSIT` | Includes the [transit-clj](https://github.com/cognitect/transit-clj) library | `true` |
|
|
|
|
|
| `BABASHKA_FEATURE_XML` | Includes the [clojure.data.xml](https://github.com/clojure/data.xml) library | `true` |
|
|
|
|
|
| `BABASHKA_FEATURE_YAML` | Includes the [clj-yaml](https://github.com/clj-commons/clj-yaml) library | `true` |
|
|
|
|
|
| `BABASHKA_FEATURE_JDBC` | Includes the [next.jdbc](https://github.com/seancorfield/next-jdbc) library | `false` |
|
2020-05-01 18:37:31 +00:00
|
|
|
| `BABASHKA_FEATURE_POSTGRESQL` | Includes the [PostgresSQL](https://jdbc.postgresql.org/) JDBC driver | `false` |
|
|
|
|
|
| `BABASHKA_FEATURE_HSQLDB` | Includes the [HSQLDB](http://www.hsqldb.org/) JDBC driver | `false` |
|
|
|
|
|
| `BABASHKA_FEATURE_DATASCRIPT` | Includes [datascript](https://github.com/tonsky/datascript) | `false` |
|
2020-04-30 16:44:32 +00:00
|
|
|
|
|
|
|
|
To disable all of the above features, you can set `BABASHKA_LEAN` to `true`.
|
2020-04-26 11:10:30 +00:00
|
|
|
|
|
|
|
|
### HyperSQL
|
|
|
|
|
|
2020-04-30 16:44:32 +00:00
|
|
|
To compile babashka with the `next.jdbc` library and the embedded HyperSQL
|
|
|
|
|
database:
|
|
|
|
|
|
|
|
|
|
``` shell
|
|
|
|
|
$ export BABASHKA_FEATURE_JDBC=true
|
|
|
|
|
$ export BABASHKA_FEATURE_HSQLDB=true
|
|
|
|
|
$ script/uberjar
|
|
|
|
|
$ script/compile
|
|
|
|
|
```
|
|
|
|
|
|
2020-07-05 10:26:33 +00:00
|
|
|
Note: there is now a [pod](https://github.com/babashka/babashka-sql-pods) for working with HyperSQL.
|
2020-04-30 16:44:32 +00:00
|
|
|
|
|
|
|
|
### PostgresQL
|
|
|
|
|
|
|
|
|
|
To compile babashka with the `next.jdbc` library and a PostgresQL driver:
|
2020-04-26 11:10:30 +00:00
|
|
|
|
|
|
|
|
``` shell
|
2020-04-30 16:44:32 +00:00
|
|
|
$ export BABASHKA_FEATURE_JDBC=true
|
|
|
|
|
$ export BABASHKA_FEATURE_POSTGRESQL=true
|
|
|
|
|
$ script/uberjar
|
|
|
|
|
$ script/compile
|
2020-04-26 11:10:30 +00:00
|
|
|
```
|
2020-07-05 10:26:33 +00:00
|
|
|
|
|
|
|
|
Note: there is now a [pod](https://github.com/babashka/babashka-sql-pods) for working with PostgreSQL.
|