babashka/doc/build.md
2020-09-20 23:19:49 +02:00

4.2 KiB

Building babashka

Prerequisites

  • Install lein for producing uberjars

  • Download GraalVM. Currently we use java11-20.1.0.

  • For Windows, installing Visual Studio 2019 with the "Desktop development with C++" workload is recommended.

  • Set $GRAALVM_HOME to the GraalVM distribution directory. On macOS this can look like:

    export GRAALVM_HOME=~/Downloads/graalvm-ce-java11-20.1.0/Contents/Home
    

    On linux:

    export GRAALVM_HOME=~/Downloads/graalvm-ce-java11-20.1.0
    

    On Windows, from the Visual Studio 2019 x64 Native Tools Command Prompt or cmd.exe (not Powershell):

    set GRAALVM_HOME=%USERPROFILE%\Downloads\graalvm-ce-java11-20.1.0
    

    If you are not running from the x64 Native Tools 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"
    

Clone repository

NOTE: the babashka repository contains submodules. You need to use the --recursive flag to clone these submodules along with the main repo.

$ git clone https://github.com/borkdude/babashka --recursive

To update later on:

$ git submodule update --recursive

Build

Run the uberjar and compile script:

$ script/uberjar
$ script/compile

To configure max heap size you can use:

$ export BABASHKA_XMX="-J-Xmx6500m"

Note: setting the max heap size to a low value can cause the build to crash or take long to complete.

Windows

Run script\uberjar.bat followed by script\compile.bat.

Feature flags

Babashka supports the following feature flags:

Name Description Default
BABASHKA_FEATURE_CORE_ASYNC Includes the clojure.core.async library true
BABASHKA_FEATURE_CSV Includes the 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 library true
BABASHKA_FEATURE_XML Includes the clojure.data.xml library true
BABASHKA_FEATURE_YAML Includes the clj-yaml library true
BABASHKA_FEATURE_HTTPKIT_CLIENT Includes the http-kit client library true
BABASHKA_FEATURE_HTTPKIT_SERVER Includes the http-kit server library true
BABASHKA_FEATURE_JDBC Includes the next.jdbc library false
BABASHKA_FEATURE_POSTGRESQL Includes the PostgresSQL JDBC driver false
BABASHKA_FEATURE_HSQLDB Includes the HSQLDB JDBC driver false
BABASHKA_FEATURE_DATASCRIPT Includes datascript false

Note that httpkit server is currently experimental, the feature flag could be toggled to false in a future release.

To disable all of the above features, you can set BABASHKA_LEAN to true.

HyperSQL

To compile babashka with the next.jdbc library and the embedded HyperSQL database:

$ export BABASHKA_FEATURE_JDBC=true
$ export BABASHKA_FEATURE_HSQLDB=true
$ script/uberjar
$ script/compile

Note: there is now a pod for working with HyperSQL.

PostgresQL

To compile babashka with the next.jdbc library and a PostgresQL driver:

$ export BABASHKA_FEATURE_JDBC=true
$ export BABASHKA_FEATURE_POSTGRESQL=true
$ script/uberjar
$ script/compile

Note: there is now a pod for working with PostgreSQL.