diff --git a/morse/.gitignore b/morse/.gitignore new file mode 100644 index 0000000..73eccdf --- /dev/null +++ b/morse/.gitignore @@ -0,0 +1,14 @@ +/target +/classes +/checkouts +profiles.clj +pom.xml +pom.xml.asc +*.jar +*.class +/.lein-* +/.nrepl-port +.hgignore +.hg/ +/.idea/ +/sample-project.iml diff --git a/morse/Dockerfile b/morse/Dockerfile new file mode 100644 index 0000000..4785d83 --- /dev/null +++ b/morse/Dockerfile @@ -0,0 +1,26 @@ +# AMD64 +FROM ghcr.io/graalvm/native-image:22.3.3@sha256:45af9f40460aba188d27ff3ce9ef56765965af8f6fbcb4c672d7897f2d4b5775 +# ARM64 +#FROM ghcr.io/graalvm/native-image:22.3.3@sha256:48837ac77ec827dbb76a8fc8c2e82806f180bb68de9039df3af0b5f335c5a7ad + +# install leiningen +RUN curl -o /usr/local/bin/lein https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein +RUN chmod a+x /usr/local/bin/lein + +# create working directory +RUN mkdir native +WORKDIR /native + +# copy project files +COPY . /native + +# build uberjar +RUN lein do clean, uberjar + +# create native image +RUN lein native + +# run normal +RUN lein run +# run native +RUN lein run-native \ No newline at end of file diff --git a/morse/README.md b/morse/README.md new file mode 100644 index 0000000..311a943 --- /dev/null +++ b/morse/README.md @@ -0,0 +1,20 @@ +# Sample-project + +Use this project as template for testing a specific library with GraalVM **native-image** + +## Usage + +Currently testing: + + [add.your/library-here "0.1.0] + +Test with (requires a local GraalVM installation): + + lein do clean, uberjar, native, run-native + +alternatively use a Dockerized versions: + + docker build --progress=plain -t graalvm-test . + + +Add any info might be useful for the reader. diff --git a/morse/project.clj b/morse/project.clj new file mode 100644 index 0000000..987d37b --- /dev/null +++ b/morse/project.clj @@ -0,0 +1,32 @@ +(defproject sample-project "0.1.0-SNAPSHOT" + + :dependencies [[org.clojure/clojure "1.12.0"] + [morse "0.4.3"] + [com.github.clj-easy/graal-build-time "1.0.5"]] + + :main simple.main + + :uberjar-name "simple-main.jar" + + :profiles {:uberjar {:aot :all} + :dev {:plugins [[lein-shell "0.5.0"]]}} + + :aliases + {"native" + ["shell" + "native-image" + "-Ob" + "-H:+TraceNativeToolUsage" + "-H:+AllowIncompleteClasspath" + "--verbose" + "--no-fallback" + "--report-unsupported-elements-at-runtime" + "--trace-object-instantiation=java.lang.Thread" + + ;; add here the namespaces of the library to test separated by commas + "--initialize-at-build-time" + "--features=clj_easy.graal_build_time.InitClojureClasses" + "-jar" "./target/${:uberjar-name:-${:name}-${:version}-standalone.jar}" + "-H:Name=./target/${:name}"] + + "run-native" ["shell" "./target/${:name}" "start"]}) diff --git a/morse/src/simple/main.clj b/morse/src/simple/main.clj new file mode 100644 index 0000000..aa231d7 --- /dev/null +++ b/morse/src/simple/main.clj @@ -0,0 +1,29 @@ +(ns simple.main + (:require [morse.handlers :as h] + [morse.api :as t] + [morse.polling :as p] + [clojure.core.async :refer [