diff options
author | Eduardo Julian | 2023-01-16 03:14:45 -0400 |
---|---|---|
committer | Eduardo Julian | 2023-01-16 03:14:45 -0400 |
commit | a7f2679f1372f222c1610ed4d1226b1b893fcc1a (patch) | |
tree | 5743222c78bcab68b70493d54555d4b14510de09 /stdlib/source/program | |
parent | 33188f943329296ff4c19ad3fcf717194e3b237e (diff) |
Can now compile the JVM back-end using itself.
Diffstat (limited to 'stdlib/source/program')
-rw-r--r-- | stdlib/source/program/aedifex/command/build.lux | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/stdlib/source/program/aedifex/command/build.lux b/stdlib/source/program/aedifex/command/build.lux index 888b56cda..55eb98324 100644 --- a/stdlib/source/program/aedifex/command/build.lux +++ b/stdlib/source/program/aedifex/command/build.lux @@ -4,7 +4,7 @@ (.require [library [lux (.except Lux) - ["[0]" ffi (.only import)] + ["[0]" ffi] [abstract [order (.only Order)] [monad (.only do)]] @@ -242,7 +242,7 @@ [log_error! fail] ) -(import java/lang/System +(ffi.import java/lang/System "[1]::[0]" ("static" getProperty [java/lang/String] "io" "try" java/lang/String)) @@ -279,6 +279,42 @@ "--add-opens" "java.base/java.lang=ALL-UNNAMED")) runtime))) +(ffi.import java/io/InputStream + "[1]::[0]") + +(ffi.import java/io/FileInputStream + "[1]::[0]" + (new [java/lang/String])) + +(ffi.import java/util/jar/Attributes$Name + "[1]::[0]" + ("static" MAIN_CLASS java/util/jar/Attributes$Name)) + +(ffi.import java/util/jar/Attributes + "[1]::[0]" + (getValue [java/util/jar/Attributes$Name] java/lang/String)) + +(ffi.import java/util/jar/Manifest + "[1]::[0]" + (getMainAttributes [] java/util/jar/Attributes)) + +(ffi.import java/util/jar/JarInputStream + "[1]::[0]" + (new [java/io/InputStream]) + (getManifest [] java/util/jar/Manifest)) + +(def jvm_main + (-> Path + Text) + (let [main_class (io.run! (java/util/jar/Attributes$Name::MAIN_CLASS))] + (|>> ffi.as_string + java/io/FileInputStream::new + java/util/jar/JarInputStream::new + java/util/jar/JarInputStream::getManifest + java/util/jar/Manifest::getMainAttributes + (java/util/jar/Attributes::getValue main_class) + ffi.of_string))) + (def .public (do! console environment fs shell resolution) (-> (Console Async) (Environment Async) (file.System Async) (Shell Async) Resolution (Command [Exit Lux Path])) (function (_ profile) @@ -298,10 +334,11 @@ [[command_environment command lux_params] output] (when lux {#JVM dependency} - [(|> (the ///.#java profile) - (has ///runtime.#parameters (list "program._")) - (with_jvm_class_path {.#Item (..path fs home dependency) host_dependencies})) - "program.jar"] + (let [path (..path fs home dependency)] + [(|> (the ///.#java profile) + (has ///runtime.#parameters (list (jvm_main path))) + (with_jvm_class_path {.#Item path host_dependencies})) + "program.jar"]) (^.with_template [<tag> <runtime> <program>] [{<tag> dependency} |