[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#52230: 'guild compile' and C(++) extensions (in the context of LilyP
From: |
Olivier Dion |
Subject: |
bug#52230: 'guild compile' and C(++) extensions (in the context of LilyPond) |
Date: |
Sat, 19 Feb 2022 16:25:41 -0500 |
On Sat, 19 Feb 2022, Jean Abou Samra <jean@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