Jbuilder: use a jbuild
template for compiling protocols
The template is located in `lib_protocol_compiler` so it is be updated whenever the `tezos-protocol-compiler` is updated.
This commit is contained in:
parent
da87aaadc5
commit
c7729a07f7
@ -50,10 +50,32 @@ let encoding =
|
|||||||
(req "expected_env_version" env_version_encoding)
|
(req "expected_env_version" env_version_encoding)
|
||||||
(req "components" (list component_encoding)))
|
(req "components" (list component_encoding)))
|
||||||
|
|
||||||
let pp fmt op =
|
let pp ppf op =
|
||||||
Format.pp_print_string fmt @@
|
Format.pp_print_string ppf @@
|
||||||
Data_encoding_ezjsonm.to_string (Data_encoding.Json.construct encoding op)
|
Data_encoding_ezjsonm.to_string (Data_encoding.Json.construct encoding op)
|
||||||
|
|
||||||
|
let env_version_to_string = function
|
||||||
|
| V1 -> "V1"
|
||||||
|
|
||||||
|
let pp_ocaml_component ppf { name ; interface ; implementation } =
|
||||||
|
Format.fprintf ppf
|
||||||
|
"@[{@[<v 1> name = %S ;@ interface = %a ;@ implementation = %S ;@]@ }@]"
|
||||||
|
name
|
||||||
|
(fun ppf -> function
|
||||||
|
| None -> Format.fprintf ppf "None"
|
||||||
|
| Some s -> Format.fprintf ppf "Some %S" s)
|
||||||
|
interface
|
||||||
|
implementation
|
||||||
|
|
||||||
|
let pp_ocaml ppf { expected_env ; components } =
|
||||||
|
Format.fprintf ppf
|
||||||
|
"@[{@[<v 1> expected_env = %s ;@ components = [@[<v>%a@]] ;@]@ }@]"
|
||||||
|
(env_version_to_string expected_env)
|
||||||
|
(Format.pp_print_list
|
||||||
|
~pp_sep:(fun ppf () -> Format.fprintf ppf " ;@ ")
|
||||||
|
pp_ocaml_component)
|
||||||
|
components
|
||||||
|
|
||||||
let compare = Pervasives.compare
|
let compare = Pervasives.compare
|
||||||
let equal = (=)
|
let equal = (=)
|
||||||
|
|
||||||
|
@ -23,6 +23,8 @@ and env_version = V1
|
|||||||
val component_encoding: component Data_encoding.t
|
val component_encoding: component Data_encoding.t
|
||||||
val env_version_encoding: env_version Data_encoding.t
|
val env_version_encoding: env_version Data_encoding.t
|
||||||
|
|
||||||
|
val pp_ocaml: Format.formatter -> t -> unit
|
||||||
|
|
||||||
include S.HASHABLE with type t := t
|
include S.HASHABLE with type t := t
|
||||||
and type hash := Protocol_hash.t
|
and type hash := Protocol_hash.t
|
||||||
val of_bytes_exn: MBytes.t -> t
|
val of_bytes_exn: MBytes.t -> t
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
(jbuild_version 1)
|
|
||||||
|
|
||||||
;; Build a functorized version of the protocol with the `tezos-protocol-compiler`
|
|
||||||
;; This is bit hackish...
|
|
||||||
;;
|
|
||||||
;; AFAIK the current version of jbuilder (1.0+beta16) does not allow to compile
|
|
||||||
;; with a custom `rule` the `(modules)` of a library.
|
|
||||||
;;
|
|
||||||
;; A trick is to provide the `.cmx` through the `(library_flags)` and to generate
|
|
||||||
;; a empty `.ml` to correctly handle the dependencies...
|
|
||||||
|
|
||||||
(rule
|
|
||||||
((targets (tezos_protocol_alpha.o
|
|
||||||
tezos_protocol_alpha.cmx
|
|
||||||
tezos_protocol_alpha.cmi
|
|
||||||
tezos_protocol_alpha_dummy.ml))
|
|
||||||
(deps ((glob_files src/*.ml)
|
|
||||||
(glob_files src/*.mli)
|
|
||||||
src/TEZOS_PROTOCOL))
|
|
||||||
(action (with-stdout-to ${path-no-dep:tezos_protocol_alpha_dummy.ml}
|
|
||||||
(chdir ${ROOT}
|
|
||||||
(run ${bin:tezos-protocol-compiler} -static ${path-no-dep:tezos_protocol_alpha} ${path-no-dep:src}))))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_protocol_alpha)
|
|
||||||
(public_name tezos-protocol-alpha)
|
|
||||||
(library_flags (:standard -linkall
|
|
||||||
lib_embedded_protocol_alpha/tezos_protocol_alpha.cmx))
|
|
||||||
(wrapped false)
|
|
||||||
(modes (native))
|
|
||||||
(modules (Tezos_protocol_alpha_dummy))))
|
|
||||||
|
|
||||||
(alias
|
|
||||||
((name runtest_sandbox)
|
|
||||||
(deps (tezos_protocol_alpha.cmx))))
|
|
||||||
|
|
||||||
(alias
|
|
||||||
((name runtest_indent)
|
|
||||||
(deps ((glob_files src/*.ml) (glob_files src/*.mli)))
|
|
||||||
(action (run bash ${libexec:tezos-stdlib:test-ocp-indent.sh} ${<}))))
|
|
1
lib_embedded_protocol_alpha/jbuild
Symbolic link
1
lib_embedded_protocol_alpha/jbuild
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../lib_protocol_compiler/jbuild_protocol_template
|
@ -1,53 +0,0 @@
|
|||||||
(jbuild_version 1)
|
|
||||||
|
|
||||||
(rule
|
|
||||||
((targets (environment.ml))
|
|
||||||
(action
|
|
||||||
(write-file ${@}
|
|
||||||
"include Tezos_node_updater.Tezos_protocol_environment.Make(struct let name = \"alpha\" end)()"))))
|
|
||||||
|
|
||||||
(rule
|
|
||||||
((targets (registerer.ml))
|
|
||||||
(action
|
|
||||||
(write-file ${@}
|
|
||||||
"
|
|
||||||
let () =
|
|
||||||
let module Ignored = Tezos_node_shell.State.Register_embedded_protocol
|
|
||||||
(Tezos_embedded_protocol_environment_alpha.Environment)
|
|
||||||
(Tezos_embedded_raw_protocol_alpha.Main)
|
|
||||||
(struct
|
|
||||||
let hash =
|
|
||||||
Some (Tezos_crypto.Protocol_hash.of_b58check_exn
|
|
||||||
\"ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK\")
|
|
||||||
let sources = Tezos_base.Protocol.{
|
|
||||||
expected_env = V1 ;
|
|
||||||
components = [(* FIXME ?? *)] ;
|
|
||||||
} end) in ()"))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_embedded_protocol_environment_alpha)
|
|
||||||
(public_name tezos-embedded-protocol-alpha.environment)
|
|
||||||
(library_flags (:standard -linkall))
|
|
||||||
(libraries (tezos-node-updater))
|
|
||||||
(modules (Environment))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_embedded_raw_protocol_alpha)
|
|
||||||
(public_name tezos-embedded-protocol-alpha.raw)
|
|
||||||
(libraries (tezos_embedded_protocol_environment_alpha))
|
|
||||||
(library_flags (:standard -linkall))
|
|
||||||
(flags (:standard -nopervasives -nostdlib -safe-string
|
|
||||||
-w +a-4-6-7-9-29-32-40..42-44-45-48
|
|
||||||
-warn-error -a+8
|
|
||||||
-open Tezos_embedded_protocol_environment_alpha__Environment
|
|
||||||
-open Error_monad
|
|
||||||
-open Hash
|
|
||||||
-open Tezos_data))
|
|
||||||
(modules (:standard \ Environment Registerer))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_embedded_protocol_alpha)
|
|
||||||
(public_name tezos-embedded-protocol-alpha)
|
|
||||||
(library_flags (:standard -linkall))
|
|
||||||
(libraries (tezos_embedded_raw_protocol_alpha tezos-node-shell))
|
|
||||||
(modules (Registerer))))
|
|
1
lib_embedded_protocol_alpha/src/jbuild
Symbolic link
1
lib_embedded_protocol_alpha/src/jbuild
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../lib_protocol_compiler/jbuild_embedded_protocol_template
|
@ -1,40 +0,0 @@
|
|||||||
(jbuild_version 1)
|
|
||||||
|
|
||||||
;; Build a functorized version of the protocol with the `tezos-protocol-compiler`
|
|
||||||
;; This is bit hackish...
|
|
||||||
;;
|
|
||||||
;; AFAIK the current version of jbuilder (1.0+beta16) does not allow to compile
|
|
||||||
;; with a custom `rule` the `(modules)` of a library.
|
|
||||||
;;
|
|
||||||
;; A trick is to provide the `.cmx` through the `(library_flags)` and to generate
|
|
||||||
;; a empty `.ml` to correctly handle the dependencies...
|
|
||||||
|
|
||||||
(rule
|
|
||||||
((targets (tezos_protocol_demo.o
|
|
||||||
tezos_protocol_demo.cmx
|
|
||||||
tezos_protocol_demo.cmi
|
|
||||||
tezos_protocol_demo_dummy.ml))
|
|
||||||
(deps ((glob_files src/*.ml)
|
|
||||||
(glob_files src/*.mli)
|
|
||||||
src/TEZOS_PROTOCOL))
|
|
||||||
(action (with-stdout-to ${path-no-dep:tezos_protocol_demo_dummy.ml}
|
|
||||||
(chdir ${ROOT}
|
|
||||||
(run ${bin:tezos-protocol-compiler} -static ${path-no-dep:tezos_protocol_demo} ${path-no-dep:src}))))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_protocol_demo)
|
|
||||||
(public_name tezos-protocol-demo)
|
|
||||||
(library_flags (:standard -linkall
|
|
||||||
lib_embedded_protocol_demo/tezos_protocol_demo.cmx))
|
|
||||||
(wrapped false)
|
|
||||||
(modes (native))
|
|
||||||
(modules (Tezos_protocol_demo_dummy))))
|
|
||||||
|
|
||||||
(alias
|
|
||||||
((name runtest_sandbox)
|
|
||||||
(deps (tezos_protocol_demo.cmx))))
|
|
||||||
|
|
||||||
(alias
|
|
||||||
((name runtest_indent)
|
|
||||||
(deps ((glob_files src/*.ml) (glob_files src/*.mli)))
|
|
||||||
(action (run bash ${libexec:tezos-stdlib:test-ocp-indent.sh} ${<}))))
|
|
1
lib_embedded_protocol_demo/jbuild
Symbolic link
1
lib_embedded_protocol_demo/jbuild
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../lib_protocol_compiler/jbuild_protocol_template
|
@ -1,53 +0,0 @@
|
|||||||
(jbuild_version 1)
|
|
||||||
|
|
||||||
(rule
|
|
||||||
((targets (environment.ml))
|
|
||||||
(action
|
|
||||||
(write-file ${@}
|
|
||||||
"include Tezos_node_updater.Tezos_protocol_environment.Make(struct let name = \"demo\" end)()"))))
|
|
||||||
|
|
||||||
(rule
|
|
||||||
((targets (registerer.ml))
|
|
||||||
(action
|
|
||||||
(write-file ${@}
|
|
||||||
"
|
|
||||||
let () =
|
|
||||||
let module Ignored = Tezos_node_shell.State.Register_embedded_protocol
|
|
||||||
(Tezos_embedded_protocol_environment_demo.Environment)
|
|
||||||
(Tezos_embedded_raw_protocol_demo.Main)
|
|
||||||
(struct
|
|
||||||
let hash =
|
|
||||||
Some (Tezos_crypto.Protocol_hash.of_b58check_exn
|
|
||||||
\"ProtoDemoDemoDemoDemoDemoDemoDemoDemoDemoDemoD3c8k9\")
|
|
||||||
let sources = Tezos_base.Protocol.{
|
|
||||||
expected_env = V1 ;
|
|
||||||
components = [(* FIXME ?? *)] ;
|
|
||||||
} end) in ()"))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_embedded_protocol_environment_demo)
|
|
||||||
(public_name tezos-embedded-protocol-demo.environment)
|
|
||||||
(library_flags (:standard -linkall))
|
|
||||||
(libraries (tezos-node-updater))
|
|
||||||
(modules (Environment))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_embedded_raw_protocol_demo)
|
|
||||||
(public_name tezos-embedded-protocol-demo.raw)
|
|
||||||
(libraries (tezos_embedded_protocol_environment_demo))
|
|
||||||
(library_flags (:standard -linkall))
|
|
||||||
(flags (:standard -nopervasives -nostdlib -safe-string
|
|
||||||
-w +a-4-6-7-9-29-32-40..42-44-45-48
|
|
||||||
-warn-error -a+8
|
|
||||||
-open Tezos_embedded_protocol_environment_demo__Environment
|
|
||||||
-open Error_monad
|
|
||||||
-open Hash
|
|
||||||
-open Tezos_data))
|
|
||||||
(modules (:standard \ Environment Registerer))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_embedded_protocol_demo)
|
|
||||||
(public_name tezos-embedded-protocol-demo)
|
|
||||||
(library_flags (:standard -linkall))
|
|
||||||
(libraries (tezos_embedded_raw_protocol_demo tezos-node-shell))
|
|
||||||
(modules (Registerer))))
|
|
1
lib_embedded_protocol_demo/src/jbuild
Symbolic link
1
lib_embedded_protocol_demo/src/jbuild
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../lib_protocol_compiler/jbuild_embedded_protocol_template
|
@ -1,40 +0,0 @@
|
|||||||
(jbuild_version 1)
|
|
||||||
|
|
||||||
;; Build a functorized version of the protocol with the `tezos-protocol-compiler`
|
|
||||||
;; This is bit hackish...
|
|
||||||
;;
|
|
||||||
;; AFAIK the current version of jbuilder (1.0+beta16) does not allow to compile
|
|
||||||
;; with a custom `rule` the `(modules)` of a library.
|
|
||||||
;;
|
|
||||||
;; A trick is to provide the `.cmx` through the `(library_flags)` and to generate
|
|
||||||
;; a empty `.ml` to correctly handle the dependencies...
|
|
||||||
|
|
||||||
(rule
|
|
||||||
((targets (tezos_protocol_genesis.o
|
|
||||||
tezos_protocol_genesis.cmx
|
|
||||||
tezos_protocol_genesis.cmi
|
|
||||||
tezos_protocol_genesis_dummy.ml))
|
|
||||||
(deps ((glob_files src/*.ml)
|
|
||||||
(glob_files src/*.mli)
|
|
||||||
src/TEZOS_PROTOCOL))
|
|
||||||
(action (with-stdout-to ${path-no-dep:tezos_protocol_genesis_dummy.ml}
|
|
||||||
(chdir ${ROOT}
|
|
||||||
(run ${bin:tezos-protocol-compiler} -static ${path-no-dep:tezos_protocol_genesis} ${path-no-dep:src}))))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_protocol_genesis)
|
|
||||||
(public_name tezos-protocol-genesis)
|
|
||||||
(library_flags (:standard -linkall
|
|
||||||
lib_embedded_protocol_genesis/tezos_protocol_genesis.cmx))
|
|
||||||
(wrapped false)
|
|
||||||
(modes (native))
|
|
||||||
(modules (Tezos_protocol_genesis_dummy))))
|
|
||||||
|
|
||||||
(alias
|
|
||||||
((name runtest_sandbox)
|
|
||||||
(deps (tezos_protocol_genesis.cmx))))
|
|
||||||
|
|
||||||
(alias
|
|
||||||
((name runtest_indent)
|
|
||||||
(deps ((glob_files src/*.ml) (glob_files src/*.mli)))
|
|
||||||
(action (run bash ${libexec:tezos-stdlib:test-ocp-indent.sh} ${<}))))
|
|
1
lib_embedded_protocol_genesis/jbuild
Symbolic link
1
lib_embedded_protocol_genesis/jbuild
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../lib_protocol_compiler/jbuild_protocol_template
|
@ -1,53 +0,0 @@
|
|||||||
(jbuild_version 1)
|
|
||||||
|
|
||||||
(rule
|
|
||||||
((targets (environment.ml))
|
|
||||||
(action
|
|
||||||
(write-file ${@}
|
|
||||||
"include Tezos_node_updater.Tezos_protocol_environment.Make(struct let name = \"genesis\" end)()"))))
|
|
||||||
|
|
||||||
(rule
|
|
||||||
((targets (registerer.ml))
|
|
||||||
(action
|
|
||||||
(write-file ${@}
|
|
||||||
"
|
|
||||||
let () =
|
|
||||||
let module Ignored = Tezos_node_shell.State.Register_embedded_protocol
|
|
||||||
(Tezos_embedded_protocol_environment_genesis.Environment)
|
|
||||||
(Tezos_embedded_raw_protocol_genesis.Main)
|
|
||||||
(struct
|
|
||||||
let hash =
|
|
||||||
Some (Tezos_crypto.Protocol_hash.of_b58check_exn
|
|
||||||
\"ProtoGenesisGenesisGenesisGenesisGenesisGenesk612im\")
|
|
||||||
let sources = Tezos_base.Protocol.{
|
|
||||||
expected_env = V1 ;
|
|
||||||
components = [(* FIXME ?? *)] ;
|
|
||||||
} end) in ()"))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_embedded_protocol_environment_genesis)
|
|
||||||
(public_name tezos-embedded-protocol-genesis.environment)
|
|
||||||
(library_flags (:standard -linkall))
|
|
||||||
(libraries (tezos-node-updater))
|
|
||||||
(modules (Environment))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_embedded_raw_protocol_genesis)
|
|
||||||
(public_name tezos-embedded-protocol-genesis.raw)
|
|
||||||
(libraries (tezos_embedded_protocol_environment_genesis))
|
|
||||||
(library_flags (:standard -linkall))
|
|
||||||
(flags (:standard -nopervasives -nostdlib -safe-string
|
|
||||||
-w +a-4-6-7-9-29-32-40..42-44-45-48
|
|
||||||
-warn-error -a+8
|
|
||||||
-open Tezos_embedded_protocol_environment_genesis__Environment
|
|
||||||
-open Error_monad
|
|
||||||
-open Hash
|
|
||||||
-open Tezos_data))
|
|
||||||
(modules (:standard \ Environment Registerer))))
|
|
||||||
|
|
||||||
(library
|
|
||||||
((name tezos_embedded_protocol_genesis)
|
|
||||||
(public_name tezos-embedded-protocol-genesis)
|
|
||||||
(library_flags (:standard -linkall))
|
|
||||||
(libraries (tezos_embedded_raw_protocol_genesis tezos-node-shell))
|
|
||||||
(modules (Registerer))))
|
|
1
lib_embedded_protocol_genesis/src/jbuild
Symbolic link
1
lib_embedded_protocol_genesis/src/jbuild
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../lib_protocol_compiler/jbuild_embedded_protocol_template
|
@ -24,17 +24,30 @@
|
|||||||
-safe-string
|
-safe-string
|
||||||
-opaque
|
-opaque
|
||||||
-open Tezos_base__TzPervasives))
|
-open Tezos_base__TzPervasives))
|
||||||
(modules (:standard \ Main))))
|
(modules (:standard \ Main Main_embedded_packer))))
|
||||||
|
|
||||||
(executable
|
(executable
|
||||||
((name main)
|
((name main)
|
||||||
(public_name tezos-protocol-compiler)
|
(public_name tezos-protocol-compiler)
|
||||||
(package tezos-protocol-compiler)
|
|
||||||
(modes (native))
|
(modes (native))
|
||||||
(libraries (tezos-protocol-compiler))
|
(libraries (tezos_protocol_compiler))
|
||||||
(flags (:standard -linkall))
|
(flags (:standard -linkall))
|
||||||
(modules (Main))))
|
(modules (Main))))
|
||||||
|
|
||||||
|
(executable
|
||||||
|
((name main_embedded_packer)
|
||||||
|
(public_name tezos-embedded-protocol-packer)
|
||||||
|
(modes (native))
|
||||||
|
(libraries (tezos-base))
|
||||||
|
(flags (:standard -linkall
|
||||||
|
-open Tezos_base__TzPervasives))
|
||||||
|
(modules (Main_embedded_packer))))
|
||||||
|
|
||||||
|
(install
|
||||||
|
((section share)
|
||||||
|
(files (jbuild_protocol_template
|
||||||
|
jbuild_embedded_protocol_template))))
|
||||||
|
|
||||||
(alias
|
(alias
|
||||||
((name runtest_indent)
|
((name runtest_indent)
|
||||||
(deps ((glob_files *.ml) (glob_files *.mli)))
|
(deps ((glob_files *.ml) (glob_files *.mli)))
|
||||||
|
58
lib_protocol_compiler/jbuild_embedded_protocol_template
Normal file
58
lib_protocol_compiler/jbuild_embedded_protocol_template
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
(* -*- tuareg -*- *)
|
||||||
|
|
||||||
|
let prefix = "lib_embedded_protocol_"
|
||||||
|
let dirname = Filename.basename @@ Filename.dirname @@ Sys.getcwd ()
|
||||||
|
|
||||||
|
let version =
|
||||||
|
let x = String.length prefix in
|
||||||
|
let n = String.length dirname in
|
||||||
|
if not (n >= x && String.sub dirname 0 x = prefix) then
|
||||||
|
failwith "unexpected directory name" ;
|
||||||
|
String.sub dirname x (n - x)
|
||||||
|
|
||||||
|
let () = Format.kasprintf Jbuild_plugin.V1.send {|
|
||||||
|
(jbuild_version 1)
|
||||||
|
|
||||||
|
(rule
|
||||||
|
((targets (environment.ml))
|
||||||
|
(action
|
||||||
|
(write-file ${@@}
|
||||||
|
"include Tezos_node_updater.Tezos_protocol_environment.Make(struct let name = \"%s\" end)()"))))
|
||||||
|
|
||||||
|
(rule
|
||||||
|
((targets (registerer.ml))
|
||||||
|
(deps (tezos_embedded_protocol_environment_%s.cmxa TEZOS_PROTOCOL))
|
||||||
|
(action
|
||||||
|
(with-stdout-to ${@@}
|
||||||
|
(chdir ${ROOT} (run ${bin:tezos-embedded-protocol-packer} ${path-no-dep:.} "%s"))))))
|
||||||
|
|
||||||
|
(library
|
||||||
|
((name tezos_embedded_protocol_environment_%s)
|
||||||
|
(public_name tezos-embedded-protocol-%s.environment)
|
||||||
|
(library_flags (:standard -linkall))
|
||||||
|
(libraries (tezos-node-updater))
|
||||||
|
(modules (Environment))))
|
||||||
|
|
||||||
|
(library
|
||||||
|
((name tezos_embedded_raw_protocol_%s)
|
||||||
|
(public_name tezos-embedded-protocol-%s.raw)
|
||||||
|
(libraries (tezos_embedded_protocol_environment_%s))
|
||||||
|
(library_flags (:standard -linkall))
|
||||||
|
(flags (:standard -nopervasives -nostdlib -safe-string
|
||||||
|
-w +a-4-6-7-9-29-32-40..42-44-45-48
|
||||||
|
-warn-error -a+8
|
||||||
|
-open Tezos_embedded_protocol_environment_%s__Environment
|
||||||
|
-open Error_monad
|
||||||
|
-open Hash
|
||||||
|
-open Tezos_data))
|
||||||
|
(modules (:standard \ Environment Registerer))))
|
||||||
|
|
||||||
|
(library
|
||||||
|
((name tezos_embedded_protocol_%s)
|
||||||
|
(public_name tezos-embedded-protocol-%s)
|
||||||
|
(library_flags (:standard -linkall))
|
||||||
|
(libraries (tezos_embedded_raw_protocol_%s tezos-node-shell))
|
||||||
|
(modules (Registerer))))
|
||||||
|
|}
|
||||||
|
version version version version version version version version
|
||||||
|
version version version version
|
58
lib_protocol_compiler/jbuild_protocol_template
Normal file
58
lib_protocol_compiler/jbuild_protocol_template
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
(* -*- tuareg -*- *)
|
||||||
|
|
||||||
|
(* Build a functorized version of the protocol with the
|
||||||
|
`tezos-protocol-compiler` This is bit hackish...
|
||||||
|
|
||||||
|
AFAIK the current version of jbuilder (1.0+beta16) does not allow
|
||||||
|
to compile with a custom `rule` the `(modules)` of a library.
|
||||||
|
|
||||||
|
A trick is to provide the `.cmx` through the `(library_flags)` and
|
||||||
|
to generate a empty `.ml` to correctly handle the dependencies... *)
|
||||||
|
|
||||||
|
let prefix = "lib_embedded_protocol_"
|
||||||
|
let dirname = Filename.basename @@ Sys.getcwd ()
|
||||||
|
|
||||||
|
let version =
|
||||||
|
let x = String.length prefix in
|
||||||
|
let n = String.length dirname in
|
||||||
|
if not (n >= x && String.sub dirname 0 x = prefix) then
|
||||||
|
failwith "unexpected directory name" ;
|
||||||
|
String.sub dirname x (n - x)
|
||||||
|
|
||||||
|
let () = Format.kasprintf Jbuild_plugin.V1.send {|
|
||||||
|
|
||||||
|
(jbuild_version 1)
|
||||||
|
|
||||||
|
(rule
|
||||||
|
((targets (tezos_protocol_%s.o
|
||||||
|
tezos_protocol_%s.cmx
|
||||||
|
tezos_protocol_%s.cmi
|
||||||
|
tezos_protocol_%s_dummy.ml))
|
||||||
|
(deps ((glob_files src/*.ml)
|
||||||
|
(glob_files src/*.mli)
|
||||||
|
src/TEZOS_PROTOCOL))
|
||||||
|
(action (with-stdout-to ${path-no-dep:tezos_protocol_%s_dummy.ml}
|
||||||
|
(chdir ${ROOT}
|
||||||
|
(run ${bin:tezos-protocol-compiler} -static ${path-no-dep:tezos_protocol_%s} ${path-no-dep:src}))))))
|
||||||
|
|
||||||
|
(library
|
||||||
|
((name tezos_protocol_%s)
|
||||||
|
(public_name tezos-protocol-%s)
|
||||||
|
(library_flags (:standard -linkall
|
||||||
|
lib_embedded_protocol_%s/tezos_protocol_%s.cmx))
|
||||||
|
(wrapped false)
|
||||||
|
(modes (native))
|
||||||
|
(modules (Tezos_protocol_%s_dummy))))
|
||||||
|
|
||||||
|
(alias
|
||||||
|
((name runtest_sandbox)
|
||||||
|
(deps (tezos_protocol_%s.cmx))))
|
||||||
|
|
||||||
|
(alias
|
||||||
|
((name runtest_indent)
|
||||||
|
(deps ((glob_files src/*.ml) (glob_files src/*.mli)))
|
||||||
|
(action (run bash ${libexec:tezos-stdlib:test-ocp-indent.sh} ${<}))))
|
||||||
|
|
||||||
|
|}
|
||||||
|
version version version version version version version version
|
||||||
|
version version version version
|
35
lib_protocol_compiler/main_embedded_packer.ml
Normal file
35
lib_protocol_compiler/main_embedded_packer.ml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
(**************************************************************************)
|
||||||
|
(* *)
|
||||||
|
(* Copyright (c) 2014 - 2017. *)
|
||||||
|
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
||||||
|
(* *)
|
||||||
|
(* All rights reserved. No warranty, explicit or implicit, provided. *)
|
||||||
|
(* *)
|
||||||
|
(**************************************************************************)
|
||||||
|
|
||||||
|
let srcdir = Sys.argv.(1)
|
||||||
|
let version = Sys.argv.(2)
|
||||||
|
|
||||||
|
let hash, sources = Protocol.read_dir srcdir
|
||||||
|
|
||||||
|
let () =
|
||||||
|
Format.printf {|
|
||||||
|
module Source = struct
|
||||||
|
let hash =
|
||||||
|
Some (Tezos_crypto.Protocol_hash.of_b58check_exn %S)
|
||||||
|
let sources = Tezos_base.Protocol.%a
|
||||||
|
end
|
||||||
|
@.|}
|
||||||
|
(Protocol_hash.to_b58check hash)
|
||||||
|
Protocol.pp_ocaml sources
|
||||||
|
|
||||||
|
let () =
|
||||||
|
Format.printf {|
|
||||||
|
let () =
|
||||||
|
let module Ignored = Tezos_node_shell.State.Register_embedded_protocol
|
||||||
|
(Tezos_embedded_protocol_environment_%s.Environment)
|
||||||
|
(Tezos_embedded_raw_protocol_%s.Main)
|
||||||
|
(Source) in
|
||||||
|
()
|
||||||
|
@.|}
|
||||||
|
version version
|
10
lib_protocol_compiler/main_embedded_packer.mli
Normal file
10
lib_protocol_compiler/main_embedded_packer.mli
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
(**************************************************************************)
|
||||||
|
(* *)
|
||||||
|
(* Copyright (c) 2014 - 2017. *)
|
||||||
|
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
||||||
|
(* *)
|
||||||
|
(* All rights reserved. No warranty, explicit or implicit, provided. *)
|
||||||
|
(* *)
|
||||||
|
(**************************************************************************)
|
||||||
|
|
||||||
|
(* empty *)
|
Loading…
Reference in New Issue
Block a user