Version française
Home     About     Download     Resources     Contact us    
Browse thread
Ocamlbuild: could help embedding Ocaml code into shared object?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Romain Bardou <Romain.Bardou@l...>
Subject: Re: [Caml-list] Ocamlbuild: could help embedding Ocaml code into shared object?
Matthieu Dubuget a écrit :
> I often deliver my work as shared objects (DLL, in fact, because I'm
> stuck with Windows at work).
> 
> I would like to have ocamlbuild take care of this, but I don't know
> exactly how to do it?
> 
> The idea would be to split the work in two separate rules.
> 
> The first rule generates a shared object from the Objective Caml code:
> 
> rule "mloo & cmx* -> native.oo.o"
>      ~dep:"%.mloo"
>      ~prod:"%.native.oo.o"
>      action_for_nativecode
> 
> rule "mloo & cmo* -> byte.oo.o"
>      ~dep:"%.mloo"
>      ~prod:"%.byte.oo.o"
>      action_for_bytecode
> 
> The actions should return commands with A "-output-obj". But I do not
> know how to write them. It would need a mechanism similar to the one
> used for mlpack. For example, one .mloo file listing the ocaml files to
> link into the output object. Dynamic dependencies are to be generated
> from the content of the .mloo file.
> 
> Unfortunately, I have no idea how to write that?
> 
> The second rule would generate a shared object from the .o files.
> Maybe the current clib is enough? I have to add a flag to link
> the runtime engine by adding -lasmrun -lm -ldl (-lm and -ldl being
> deduced from the output of ocaml* -config).
> 
> Am I looking in the right direction?
> 
> Thanks in advance for your help
> 
> Matt

I know nothing about DLLs and OCaml but if I understand correctly, you 
need the following.

1) How to parse a file similar to a .mllib file in a plug-in. There is 
an example in the Ocamlfind plug-in on the wiki:

http://brion.inria.fr/gallium/index.php/Using_ocamlfind_with_ocamlbuild#Source

You want to look at the find_packages function.

2) How to generate dynamic dependencies. This is done by calling the 
second argument of the function you give to the rule function. This is 
also explained in the wiki:

http://brion.inria.fr/gallium/index.php/Making_plugins#Dynamic_dependencies

I hope it helps.

-- 
Romain Bardou