Skip to content

Commit

Permalink
Merge pull request #121 from ddeclerck/ctypes_skeleton
Browse files Browse the repository at this point in the history
Add Ctypes skeleton
  • Loading branch information
lefessan authored Jan 25, 2021
2 parents fd15bf1 + 3fcd384 commit 1af194e
Show file tree
Hide file tree
Showing 38 changed files with 766 additions and 8 deletions.
10 changes: 5 additions & 5 deletions .drom
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# hash of toml configuration files
# used for generation of all files
88752030e50c5c6f5974054225c3cbcd:.
42a6a0e0c25a89f1894856d401f8f02e:.
# end context for .

# begin context for .github/workflows/doc-deploy.yml
Expand Down Expand Up @@ -32,7 +32,7 @@ ae6a87df5770f4f6a09196ec38906d5a:.gitignore

# begin context for LICENSE.md
# file LICENSE.md
879f4b7ca47337a273a405422f724e55:LICENSE.md
c4286e88f0dca20a879274e23cf2cb8e:LICENSE.md
# end context for LICENSE.md

# begin context for Makefile
Expand Down Expand Up @@ -97,7 +97,7 @@ c11460be4cb80485ad3772b5301c6941:drom_lib.opam

# begin context for dune
# file dune
55fb9871987ad7f6f98ac5900f2033c7:dune
1269367ee87604a4594dec75bbf306e8:dune
# end context for dune

# begin context for dune-project
Expand Down Expand Up @@ -147,7 +147,7 @@ dc4cee7810778bedcd7b9bfa95338ac4:sphinx/conf.py

# begin context for sphinx/license.rst
# file sphinx/license.rst
d3596b8ebdb9ef59f5a1cc03b2f7180b:sphinx/license.rst
bba8067487813e5ef74a6ecfecfc7ac9:sphinx/license.rst
# end context for sphinx/license.rst

# begin context for src/drom/dune
Expand All @@ -162,7 +162,7 @@ b2467739c3fd8542338ce53133b3fefd:src/drom/dune

# begin context for src/drom/main.ml
# file src/drom/main.ml
55014e930e7feea1ab9cbf740bf8754a:src/drom/main.ml
13a81bf0db841e7d20b3ef4a846e91bc:src/drom/main.ml
# end context for src/drom/main.ml

# begin context for src/drom/package.toml
Expand Down
2 changes: 1 addition & 1 deletion LICENSE.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright (c) 2020 OCamlPro SAS & Origin Labs SAS
Copyright (c) 2021 OCamlPro SAS & Origin Labs SAS

This software is distributed under the terms of the
GNU Lesser General Public License (LGPL) version 2.1 (included below).
Expand Down
66 changes: 66 additions & 0 deletions dune
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,64 @@
as "skeletons/packages/c_binding/skeleton.toml")
( "share/drom/skeletons/packages/c_binding/stubs.c"
as "skeletons/packages/c_binding/stubs.c")
( "share/drom/skeletons/packages/ctypes_drv/dune_"
as "skeletons/packages/ctypes_drv/dune_")
( "share/drom/skeletons/packages/ctypes_drv/index.mld"
as "skeletons/packages/ctypes_drv/index.mld")
( "share/drom/skeletons/packages/ctypes_drv/main.ml"
as "skeletons/packages/ctypes_drv/main.ml")
( "share/drom/skeletons/packages/ctypes_drv/package.toml"
as "skeletons/packages/ctypes_drv/package.toml")
( "share/drom/skeletons/packages/ctypes_drv/skeleton.toml"
as "skeletons/packages/ctypes_drv/skeleton.toml")
( "share/drom/skeletons/packages/ctypes_lib_foreign/discover/discover.ml"
as "skeletons/packages/ctypes_lib_foreign/discover/discover.ml")
( "share/drom/skeletons/packages/ctypes_lib_foreign/discover/dune_"
as "skeletons/packages/ctypes_lib_foreign/discover/dune_")
( "share/drom/skeletons/packages/ctypes_lib_foreign/dune_"
as "skeletons/packages/ctypes_lib_foreign/dune_")
( "share/drom/skeletons/packages/ctypes_lib_foreign/index.mld"
as "skeletons/packages/ctypes_lib_foreign/index.mld")
( "share/drom/skeletons/packages/ctypes_lib_foreign/lib.ml"
as "skeletons/packages/ctypes_lib_foreign/lib.ml")
( "share/drom/skeletons/packages/ctypes_lib_foreign/package.toml"
as "skeletons/packages/ctypes_lib_foreign/package.toml")
( "share/drom/skeletons/packages/ctypes_lib_foreign/skeleton.toml"
as "skeletons/packages/ctypes_lib_foreign/skeleton.toml")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/ctypes_stubgen/ctypes_stubgen.ml"
as "skeletons/packages/ctypes_lib_stubs/bindings/ctypes_stubgen/ctypes_stubgen.ml")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/ctypes_stubgen/ctypes_stubgen.mli"
as "skeletons/packages/ctypes_lib_stubs/bindings/ctypes_stubgen/ctypes_stubgen.mli")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/ctypes_stubgen/dune_"
as "skeletons/packages/ctypes_lib_stubs/bindings/ctypes_stubgen/dune_")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/discover/discover.ml"
as "skeletons/packages/ctypes_lib_stubs/bindings/discover/discover.ml")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/discover/dune_"
as "skeletons/packages/ctypes_lib_stubs/bindings/discover/dune_")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/dune_"
as "skeletons/packages/ctypes_lib_stubs/bindings/dune_")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/gen_functions.ml"
as "skeletons/packages/ctypes_lib_stubs/bindings/gen_functions.ml")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/gen_types.ml"
as "skeletons/packages/ctypes_lib_stubs/bindings/gen_types.ml")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/gsl_functions.ml"
as "skeletons/packages/ctypes_lib_stubs/bindings/gsl_functions.ml")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/gsl_functions_functor.ml"
as "skeletons/packages/ctypes_lib_stubs/bindings/gsl_functions_functor.ml")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/gsl_types.ml"
as "skeletons/packages/ctypes_lib_stubs/bindings/gsl_types.ml")
( "share/drom/skeletons/packages/ctypes_lib_stubs/bindings/gsl_types_functor.ml"
as "skeletons/packages/ctypes_lib_stubs/bindings/gsl_types_functor.ml")
( "share/drom/skeletons/packages/ctypes_lib_stubs/dune_"
as "skeletons/packages/ctypes_lib_stubs/dune_")
( "share/drom/skeletons/packages/ctypes_lib_stubs/index.mld"
as "skeletons/packages/ctypes_lib_stubs/index.mld")
( "share/drom/skeletons/packages/ctypes_lib_stubs/lib.ml"
as "skeletons/packages/ctypes_lib_stubs/lib.ml")
( "share/drom/skeletons/packages/ctypes_lib_stubs/package.toml"
as "skeletons/packages/ctypes_lib_stubs/package.toml")
( "share/drom/skeletons/packages/ctypes_lib_stubs/skeleton.toml"
as "skeletons/packages/ctypes_lib_stubs/skeleton.toml")
( "share/drom/skeletons/packages/driver/dune_"
as "skeletons/packages/driver/dune_")
( "share/drom/skeletons/packages/driver/index.mld"
Expand Down Expand Up @@ -148,6 +206,14 @@
as "skeletons/projects/c_binding/drom.toml")
( "share/drom/skeletons/projects/c_binding/skeleton.toml"
as "skeletons/projects/c_binding/skeleton.toml")
( "share/drom/skeletons/projects/ctypes_foreign/drom.toml"
as "skeletons/projects/ctypes_foreign/drom.toml")
( "share/drom/skeletons/projects/ctypes_foreign/skeleton.toml"
as "skeletons/projects/ctypes_foreign/skeleton.toml")
( "share/drom/skeletons/projects/ctypes_stubs/drom.toml"
as "skeletons/projects/ctypes_stubs/drom.toml")
( "share/drom/skeletons/projects/ctypes_stubs/skeleton.toml"
as "skeletons/projects/ctypes_stubs/skeleton.toml")
( "share/drom/skeletons/projects/js_lib/drom.toml"
as "skeletons/projects/js_lib/drom.toml")
( "share/drom/skeletons/projects/js_lib/skeleton.toml"
Expand Down
16 changes: 16 additions & 0 deletions share/drom/skeletons/packages/ctypes_drv/dune_
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
; generated by drom from package skeleton '!{skeleton}'

(executable
(name main)
(public_name !{name})
(package !{name})
(libraries !{dune-libraries} !(package-dune-libraries))
!{dune-stanzas}
!(package-dune-stanzas)
)

!{package-dune-files}
(documentation
(package !{package-name}))
!{package-dune-installs}
!(package-dune-trailer)
3 changes: 3 additions & 0 deletions share/drom/skeletons/packages/ctypes_drv/index.mld
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{1 Program !{name}}

!{description}
13 changes: 13 additions & 0 deletions share/drom/skeletons/packages/ctypes_drv/main.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
!{header-ml}

module Gsl = !(lib-name:alpha:cap)

let () =
let order = 10 in
let f x = if x < 0.5 then 0. else 1. in
let cs = Gsl.Functions.Gsl_cheb.make ~a:0. ~b:1. f order in
let x = 0.3 in
let y = Gsl.Functions.Gsl_cheb.eval cs x in
Printf.printf
"Evaluation of Chebishev series at order %d for x = %.1f -> %.4f\n"
order x y
5 changes: 5 additions & 0 deletions share/drom/skeletons/packages/ctypes_drv/package.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
name = "!{name}"
dir = "!{dir}"
skeleton = "ctypes_drv"
kind = "program"

8 changes: 8 additions & 0 deletions share/drom/skeletons/packages/ctypes_drv/skeleton.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[skeleton]
name = "ctypes_drv"
inherits = "virtual"

[file]
dune_ = { file = "dune", skips = [ "dune" ] }
"index.mld" = { skips = [ "docs" ] }
"main.ml" = { skips = [ "code" ] }
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
!{header-ml}

module C = Configurator.V1

let () =
C.main ~name:"gsl" (fun c ->
let default : C.Pkg_config.package_conf =
{ libs = [ "-lgsl"; "-lgslcblas"; "-lm" ]; cflags = [] }
in
let conf =
match C.Pkg_config.get c with
| None -> default
| Some pc ->
match C.Pkg_config.query pc ~package:"gsl" with
| None -> default
| Some deps -> deps
in
C.Flags.write_sexp "ccopt.sexp" conf.cflags;
C.Flags.write_sexp "cclib.sexp" conf.libs)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

(executable
(name discover)
(libraries dune-configurator))
22 changes: 22 additions & 0 deletions share/drom/skeletons/packages/ctypes_lib_foreign/dune_
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
; generated by drom from package skeleton '!{skeleton}'

(rule
(targets ccopt.sexp cclib.sexp)
(deps discover/discover.exe)
(action (run %{deps})))

(library
(name !{library-name})
(public_name !{name})
(wrapped !{pack-modules})
(libraries !{dune-libraries} !(package-dune-libraries))
(c_library_flags (:standard (:include cclib.sexp)))
!{dune-stanzas}
!(package-dune-stanzas)
)

!{package-dune-files}
(documentation
(package !{package-name}))
!{package-dune-installs}
!(package-dune-trailer)
10 changes: 10 additions & 0 deletions share/drom/skeletons/packages/ctypes_lib_foreign/index.mld
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{1 Library !{name}}

!{description}

!{escape:true}![if:pack]
The entry point of this library is the module: {\!!{pack}}.
![else]
This library exposes the following toplevel modules:
{\!modules:!{modules}}
![fi]!{escape:false}
74 changes: 74 additions & 0 deletions share/drom/skeletons/packages/ctypes_lib_foreign/lib.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
!{header-ml}

(* If you delete or rename this file, you should add
'src/!{dir}/!{name}.ml' to the 'skip' field in "drom.toml" *)

open Ctypes
open Foreign

(* To force the external library to be linked *)
external _dummy : unit -> unit = "gsl_cheb_eval"

module Types = struct

module Gsl_function = struct

type gsl_function
type t = gsl_function structure

let t : t typ =
typedef (structure "gsl_function_struct") "gsl_function"

let function_ =
field t "function" (funptr (double @-> ptr void @-> returning double))

let params =
field t "params" (ptr void)

let () =
seal t

let make f =
let gf = Ctypes.make t in
Ctypes.setf gf function_ (fun x (_p : unit ptr) -> f x);
Ctypes.setf gf params Ctypes.null;
gf

end

end

module Functions = struct

open Types

module Gsl_cheb = struct

type gsl_cheb_series
type t = gsl_cheb_series structure

let t : t typ =
typedef (structure "gsl_cheb_series_struct") "gsl_cheb_series"

let alloc =
foreign "gsl_cheb_alloc" (size_t @-> returning (ptr t))

let free =
foreign "gsl_cheb_free" (ptr t @-> returning void)

let init =
foreign "gsl_cheb_init"
(ptr t @-> ptr Gsl_function.t @-> double @-> double @-> returning int)

let eval =
foreign "gsl_cheb_eval" (ptr t @-> double @-> returning double)

let make ~a ~b (f : float -> float) (n : int) =
let cs = alloc (Unsigned.Size_t.of_int n) in
Gc.finalise free cs;
let _ = init cs (Ctypes.addr (Gsl_function.make f)) a b in
cs

end

end
14 changes: 14 additions & 0 deletions share/drom/skeletons/packages/ctypes_lib_foreign/package.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name = "!{name}"
dir = "!{dir}"
skeleton = "ctypes_lib_foreign"
kind = "library"
gen-version = "version.ml"
pack-modules = false

[dependencies]
ctypes = ""
ctypes-foreign = { libname = "ctypes.foreign" }

[tools]
dune-configurator = ""
conf-gsl = ""
10 changes: 10 additions & 0 deletions share/drom/skeletons/packages/ctypes_lib_foreign/skeleton.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[skeleton]
name = "ctypes_lib_foreign"
inherits = "virtual"

[file]
"dune_" = { file = "dune", skips = [ "dune" ] }
"index.mld" = { skips = [ "docs" ] }
"lib.ml" = { file = "!{name}.ml", skips = [ "code" ] }
"discover/dune_" = { file = "discover/dune", skips = [ "dune" ] }
"discover/discover.ml" = { skips = [ "code" ] }
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@

let fmt =
Format.std_formatter

let print_headers fmt =
List.iter (Format.fprintf fmt "#include <%s>@\n")

let make_types_stubs
(c_headers : string list)
(types_functor : (module Cstubs.Types.BINDINGS)) =
print_headers fmt c_headers;
Cstubs_structs.write_c fmt types_functor;
Format.pp_print_flush fmt ()

let make_functions_stubs
(c_headers : string list)
(functions_functor : (module Cstubs.BINDINGS)) =
begin
match Sys.argv.(1) with
| "c" ->
print_headers fmt c_headers;
Cstubs.write_c ~prefix:"gsl_stub" fmt functions_functor
| "ml" ->
Cstubs.write_ml ~prefix:"gsl_stub" fmt functions_functor
| s -> failwith ("unknown functions " ^ s)
end;
Format.pp_print_flush fmt ()
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

val make_types_stubs : string list -> (module Cstubs.Types.BINDINGS) -> unit

val make_functions_stubs : string list -> (module Cstubs.BINDINGS) -> unit
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

(library
(name ctypes_stubgen)
(modules ctypes_stubgen)
(libraries ctypes ctypes.stubs)
(wrapped false))
Loading

0 comments on commit 1af194e

Please sign in to comment.