On Sat, 19 Feb 2022, Jean Abou Samra <j...@abou-samra.fr> 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