bug#52230: 'guild compile' and C(++) extensions (in the context of LilyPond)
Olivier Dion via "Bug reports for GUILE, GNU's Ubiquitous Extension Language" <[email protected]>
| Newsgroups | gmane.lisp.guile.bugs |
|---|---|
| Message-ID | <875ypa7dm2.fsf__13567.332345859$1645306008$gmane$org@laura> |
On Sat, 19 Feb 2022, Jean Abou Samra <[email protected]> wrote: I had similar problem with Jami. I added C++ primitives to Guile, but these were not load using the foreign function interface. Note, I'm using Guile 3.0.8, but I think the same could be done for Guile 2.0. Basically what I do is to add a `compile` command to my program so to speak. So usually the program does this: main -> install_scheme_primitives() -> Run the program And for compilation main -> compile_in_guile() -> install_scheme_primitives() -> compile-file To be clear here's what install_scheme_primitives() does: -------------------------------------------------------------------------------- void install_scheme_primitives() { /* Define modules here */ auto load_module = [](auto name, auto init){ scm_c_define_module(name, init, NULL); }; load_module("jami account", install_account_primitives); load_module("jami call", install_call_primitives); load_module("jami conversation", install_conversation_primitives); load_module("jami logger bindings", install_logger_primitives); load_module("jami signal bindings", install_signal_primitives); } -------------------------------------------------------------------------------- and here's what compile_in_guile() does: -------------------------------------------------------------------------------- void* compile_in_guile(void* args_raw) { // ... install_scheme_primitives(); // This string is usually formatted scm_c_eval_string("(use-modules (system base compile))" "(compile-file \"foo.scm\" #:output-file \"foo.go\")") // .. } -------------------------------------------------------------------------------- so now I can correctly compile any file in the project. I just add this to Makefile.am: -------------------------------------------------------------------------------- MODULES = foo.scm GOBJECTS = $(MODULES:%=%.go) %.go: %.scm | program @echo GUILD; ./program compile $< $@ -------------------------------------------------------------------------------- Hope that can help. -- Olivier Dion Polymtl