On Thu, Apr 7, 2011 at 10:03 PM, Faré <span dir="ltr"><<a href="mailto:fahree@gmail.com">fahree@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Could Juanjo or another hacker work with me<br>
and/or Peter over skype and/or IRC to get the damn thing working?<br></blockquote><div><br>I am having a hell of a month right now. Would it be ok if I just answer by email? Asynchronous processing of information is more convenient when one does not have very precise schedules.<br>

 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
If I understand correctly,<br>
* I want to compile everything I will later link into a .o with<br>
(compile-file lsp-file :system-p t :output o-file)<br></blockquote><div><br>Yes<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
* If I want to load, I first have to convert to a fasl with<br>
(c::build-fasl fas-file :lisp-files (list o-file))<br></blockquote><div><br>Yes<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


* If I want to link files together, I call (c::builder ...) and there<br>
I'm not sure exactly what to do or not to do<br></blockquote><div><br>Depends. Do you want to join all files into a unique FASL?<br><br>(c::build-fasl fasl-file :lisp-files (list o-file1 o-file2 ... o-fileN))<br><br>

Does it have to be a program instead? Then change -fasl with -program.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Things I don't understand:<br>
* When to or not to produce and/or use a static or dynamic library, in<br>
the context of an overall Lisp application [IIUC, make systems into a<br>
.a for easier linking, otherwise load individual files as .so]<br></blockquote><div><br>In ASDF-ECL I build a static library for each large component, such as cl-ppcre, alexandria, etc. The reasons for this are based on linker limitations: C:BUILD-FASL can not take an arbitrary number of object files, because the command line argument for "ld" is limited to a given size. Instead ASDF-ECL prceeds as follwows<br>

<br>- Compile all object files in the order mandated by ASDF.<br>- Whenever a file has to be loaded, use build-fasl on it and load it.<br>- At any point a library is fully compiled, join all object files into a *.a library using C::BUILD-STATIC-LIBRARY (same syntax as BUILD-FASL).<br>

- For convenience, that static library can be converted into a large FASL file using (C::BUILD-FASL joined-fasl-file-name :lisp-files (list name-of-library-file))<br>- Finally, all libraries are linked together into a single program using<br>

(C::BUILD-PROGRAM output-program :lisp-files (list library-1 library-2 ... library-N))<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


* How to make sure the initialization functions of objects and<br>
libraries are called [IIUC, nothing required]<br></blockquote><div><br>No requirement to do that. ECL's object files execute all statements sequentially in the order in which they were declared in the source file.<br>

 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
* What to put or not to put in the prologue and epilogue. [IIUC, only<br>
prologue required, when building a .exe, and that can be standardized<br>
into setting a few variables and jumping to a main lisp function]<br></blockquote><div><br>You probably do not have to add anything.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


* If using .a libraries, do I coalesce previous libraries in a bigger<br>
one, or get a chain of libraries that require each other? [IIUC, a<br>
chain]<br></blockquote><div><br>When linking multiple *.a libraries using BUILD-PROGRAM or BUILD-FASL to get a larger entity, they simply have to be specified in the order in which they would have been loaded by the lisp image.<br>

 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
* Same question when using .so files. [IIUC, it depends and it's complicated]<br></blockquote><div><br>Same as above.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


* In a chain of .so libraries that require each other, what is the<br>
proper way to load them, and how do I control the load path?<br></blockquote><div><br>List them in the appropriate order. This is what my use of ASDF:TRAVERSE is for in ASDF-ECL.<br></div></div><br>Juanjo<br clear="all">

<br>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://juanjose.garciaripoll.googlepages.com" target="_blank">http://juanjose.garciaripoll.googlepages.com</a><br>