diff --git a/Dockerfile b/Dockerfile index f00ac459..2f32b629 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,4 @@ FROM clojure:lein-2.9.1 AS BASE -ARG BABASHKA_XMX="-J-Xmx3g" RUN apt update RUN apt install --no-install-recommends -yy curl unzip build-essential zlib1g-dev @@ -7,11 +6,48 @@ WORKDIR "/opt" RUN curl -sLO https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java11-linux-amd64-20.2.0.tar.gz RUN tar -xzf graalvm-ce-java11-linux-amd64-20.2.0.tar.gz +ARG BABASHKA_XMX="-J-Xmx3g" + ENV GRAALVM_HOME="/opt/graalvm-ce-java11-20.2.0" ENV JAVA_HOME="/opt/graalvm-ce-java11-20.2.0/bin" ENV PATH="$JAVA_HOME:$PATH" ENV BABASHKA_XMX=$BABASHKA_XMX +# Make it possible to use Docker to build bb with a particular set of features +# by setting them at build time via `docker build --build-arg ARG_NAME=true ...` +ARG BABASHKA_LEAN= +ARG BABASHKA_FEATURE_CORE_ASYNC= +ARG BABASHKA_FEATURE_CSV= +ARG BABASHKA_FEATURE_JAVA_NIO= +ARG BABASHKA_FEATURE_JAVA_TIME= +ARG BABAHSKA_FEATURE_TRANSIT= +ARG BABASHKA_FEATURE_XML= +ARG BABASHKA_FEATURE_YAML= +ARG BABASHKA_FEATURE_HTTPKIT_CLIENT= +ARG BABASHKA_FEATURE_HTTPKIT_SERVER= +ARG BABASHKA_FEATURE_JDBC= +ARG BABASHKA_FEATURE_POSTGRESQL= +ARG BABASHKA_FEATURE_HSQLDB= +ARG BABASHKA_FEATURE_ORACLEDB= +ARG BABASHKA_FEATURE_DATASCRIPT= +ARG BABASHKA_FEATURE_LANTERNA= +ENV BABASHKA_LEAN=$BABASHKA_LEAN +ENV BABASHKA_FEATURE_CORE_ASYNC=$BABASHKA_FEATURE_CORE_ASYNC +ENV BABASHKA_FEATURE_CSV=$BABASHKA_FEATURE_CSV +ENV BABASHKA_FEATURE_JAVA_NIO=$BABASHKA_FEATURE_JAVA_NIO +ENV BABASHKA_FEATURE_JAVA_TIME=$BABASHKA_FEATURE_JAVA_TIME +ENV BABAHSKA_FEATURE_TRANSIT=$BABAHSKA_FEATURE_TRANSIT +ENV BABASHKA_FEATURE_XML=$BABASHKA_FEATURE_XML +ENV BABASHKA_FEATURE_YAML=$BABASHKA_FEATURE_YAML +ENV BABASHKA_FEATURE_HTTPKIT_CLIENT=$BABASHKA_FEATURE_HTTPKIT_CLIENT +ENV BABASHKA_FEATURE_HTTPKIT_SERVER=$BABASHKA_FEATURE_HTTPKIT_SERVER +ENV BABASHKA_FEATURE_JDBC=$BABASHKA_FEATURE_JDBC +ENV BABASHKA_FEATURE_POSTGRESQL=$BABASHKA_FEATURE_POSTGRESQL +ENV BABASHKA_FEATURE_HSQLDB=$BABASHKA_FEATURE_HSQLDB +ENV BABASHKA_FEATURE_ORACLEDB=$BABASHKA_FEATURE_ORACLEDB +ENV BABASHKA_FEATURE_DATASCRIPT=$BABASHKA_FEATURE_DATASCRIPT +ENV BABASHKA_FEATURE_LANTERNA=$BABASHKA_FEATURE_LANTERNA + COPY . . RUN ./script/uberjar RUN ./script/compile diff --git a/doc/build.md b/doc/build.md index 6ae923a9..4abb1f93 100644 --- a/doc/build.md +++ b/doc/build.md @@ -60,6 +60,24 @@ $ 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. +### Alternative: Build inside Docker + +To build a Linux version of babashka, you can use `docker build`, enabling the +desired features via `--build-arg` like this: + +```shell +docker build --build-arg BABASHKA_FEATURE_JDBC=true --target BASE -t bb-builder . +container_id=$(docker create bb-builder) +docker cp $container_id:/opt/bb bb # copy to ./bb on the host file system +docker rm $container_id +``` + +NOTE: If you get _Error: Image build request failed with exit status 137_ then +check whether Docker is allowed to use enough memory (e.g. in Docker Desktop +preferences). If it is, then increase the memory GraalVM can use, for example +by adding `--build-arg BABASHKA_XMX="-J-Xmx8g"` +(or whatever Docker has available, bigger than the default). + ## Windows Run `script\uberjar.bat` followed by `script\compile.bat`.