[CM] S7 questions and libc issue

Fernando Oleo Blanco irvise_ml at irvise.xyz
Tue Jun 28 11:58:49 PDT 2022


Hello!

Sorry if you receive this email duplicated. I forgot to "Reply All".

I am back and I bring some extra information regarding the
compilation/cross-compilation of S7 with support for libc.scm. My
motivation to continue digging was [1]. S7 has great performance and it
also has outstanding R7RS support if we follow those results. I
personally thought it had worst support.

A bit of background first. When Chibi wants to compile itself
"staticly", with all of its libraries as part of the executable, it
requires a two step compilation process.
- First it compiles itself normally (dynamic linking, only the
  interpreter) for the host.
- Then using the native Chibi executable that was just created, it
  generates a C file which is just the translation of all of its Scheme
  libraries and dumps them together.
- Finally, the compilation of Chibi is ran again but this time, it
  links itself with the new generated C file that contains absolutely
  everything. The resulting binary is all of Chibi in one binary.

So that got me thinking... Can this be done for S7 if I want to
cross-compile it with libc support and link it staticly?

So here is what I did:

- Compile S7 for the host normally.
- Run the interpreter ala "./s7 r7rs.scm" so that it generates the
  libc_s7.{c,so} files.
- Cross-compile S7 for my RISC-V board staticly (which as previously
  said, it works) and WITH_C_LOADER so that it can read .so files.
- Generate a libc_s7.so for the target architecture. Basically, another
  cross-compilation.

However, I am running into a problem... or maybe a few of them. I
actually do not know how S7 generates the libc_s7.so. I took a look at
the cload.scm and I think I reverse engineer what it is trying to do.
However, in the end, my staticly compiled S7 in my RISC-V board always
fails to run with libc... It either fails because it cannot find some
symbols (such as s7_f) even though I used GCC and passed
-DWITH_C_LOADER=1 or it aborts... I know the generated .so is for
RISC-V and it has the symbols.

Has anybody tried this before? I think it should just work... I have
also documented this process in the Scheme comparison table (currently,
footnote 25) [2]. The exact execution commands are also in [2]

I may be extremely slow to respond, as my worklife is currently a
black hole.

[1] https://ecraven.github.io/r7rs-benchmarks/
[2] https://irvise.xyz/Blog/scheme-implementation-comparison.html#fn.25

Best regards, and thank you for your time!
Fer




More information about the Cmdist mailing list