1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495(*****************************************************************************)(* *)(* Open Source License *)(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)(* *)(* Permission is hereby granted, free of charge, to any person obtaining a *)(* copy of this software and associated documentation files (the "Software"),*)(* to deal in the Software without restriction, including without limitation *)(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *)(* and/or sell copies of the Software, and to permit persons to whom the *)(* Software is furnished to do so, subject to the following conditions: *)(* *)(* The above copyright notice and this permission notice shall be included *)(* in all copies or substantial portions of the Software. *)(* *)(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*)(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *)(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *)(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*)(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *)(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *)(* DEALINGS IN THE SOFTWARE. *)(* *)(*****************************************************************************)(** The OCaml compiler not being implemented with Lwt, the compilation
take place in a separated process (by using [Lwt_process.exec]).
The [main] function is the entry point for the forked process.
While [Updater.compile] is the 'forking' function to be called by
the [tezos-node] process.
*)openCompiler(* TODO: fail in the presence of "external" *)moduleBackend=struct(* See backend_intf.mli. *)letsymbol_for_global'=Compilenv.symbol_for_global'letclosure_symbol=Compilenv.closure_symbolletreally_import_approx=Import_approx.really_import_approxletimport_symbol=Import_approx.import_symbolletsize_int=Arch.size_intletbig_endian=Arch.big_endianletmax_sensible_number_of_arguments=(* The "-1" is to allow for a potential closure environment parameter. *)Proc.max_arguments_for_tailcalls-1endletbackend=(moduleBackend:Backend_intf.S)(** Semi-generic compilation functions *)letpack_objectsoutputobjects=letoutput=output^".cmx"inCompmisc.init_path();Asmpackager.package_files~backend~ppf_dump:Format.err_formatterEnv.initial_safe_stringobjectsoutput;Warnings.check_fatal();outputletlink_sharedoutputobjects=Compenv.(readenvFormat.err_formatterBefore_link);Compmisc.init_path();Asmlink.link_shared~ppf_dump:Format.err_formatterobjectsoutput;Warnings.check_fatal()letcompile_ml?for_packsource_file=letoutput_prefix=Filename.chop_extensionsource_fileinClflags.for_package:=for_pack;Compenv.(readenvFormat.err_formatter(Before_compilesource_file));Optcompile.implementation~backend~source_file~output_prefix~start_from:Clflags.Compiler_pass.Parsing;Clflags.for_package:=None;output_prefix^".cmx"let()=Clflags.native_code:=trueletdriver={compile_ml;link_shared;pack_objects}