Hey Thomas,


------- Original Message -------
On Monday, June 19th, 2023 at 5:34 PM, Thomas Teixeira 
<thomas.teixe...@startmail.com> wrote:


> Hi !
> Thanks for ECL, I've been learning CL for the past weeks and it's my favorite
> implementation so far ! Would love to contribute one I've the required skills
> :))

That sounds great :)

> 
> I'm trying to create a small script that'll allow users to recreate a mail
> thread inside a virtual maildir box. I would like to use ECL for that script 
> but
> the project which this script will belong to ([fruitslegumes][1]) is focused 
> on
> using no dependencies.

Does libc count as a dependency? Currently ECL links dynamically against libc 
even
for static builds. There are no technical reasons why it couldn't link 
statically
against libc (and we want to allow that), but currently flags in multiple places
simply assume a dynamic link.

> 
> Because of this constraint, I only ever used POSIX-shell/C99 to build those
> scripts
> I would love to use ECL as programs can be compiled down to machine code, 
> which
> can be `upx`-ed, but users would have to install their ecl package.
> 
> I managed to statically link libecl with a simple script, but it gets harder 
> for
> me when trying with the example-with-dep program.
> I saw in a previous thread of this mailing list that statically linking ECL
> makes asdf unusable. Is that still the case ?

It is not that ASDF is unusable when we link statically. There are a few 
ramifications
though. I'll elaborate a little here about FASL files in ECL:

> Would it be possible to either provide an example (if what i'm asking is even
> possible) or talk in more depth about ecl being statically linked ?

The fasl file created by ECL is a shared object that is linked dynamically 
against
libecl.so. If it were a static object, then each and every fasl would need to 
carry
whole ECL runtime statically linked. That's not a sound solution.

Now, regarding using ASDF in static builds. When the C compiler is not installed
(either not build with ECL, or (ext:install-bytecodes-compiler) was called), 
then
files compiled by ECL are in FASC format, that is the bytecode. Such bytecode 
may
be loaded with statically linked ECL. ASDF should work fine with FASC files, 
although
some libraries may assume the C compiler, so not all software will work with it.

If you want to have ASDF statically linked in the resulting binary, you need to 
specify
that when building ECL. For example ./configure --disable-shared 
--with-asdf=builtin .

There's also that you may compile your lisp source code along with ECL and 
statically
link it (that would be somewhat similar to the example with deps), although 
there is
no explicit support for ASDF. To specify files that should be compiled and 
linked with
ECL you may specify the flag --with-extra-files.

As you can see, static linking is somewhere in the ballpark of what ECL can do, 
but
it is not well supported. I'm working on some compiler improvements to allow 
easier
cross compilation and other similar things and hope that during that work I'll 
also
improve the support for static builds (although that is not the main focus).

I hope that this explanation is at least partly satisfactory.

> 
> Regards,
> Thomas.

Best regards,
Daniel


--
Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland
TurtleWare - Daniel Kochmański      | www.turtleware.eu

"Be the change that you wish to see in the world." - Mahatma Gandhi


Reply via email to