(**************************************************************************) (* *) (* Heptagon *) (* *) (* Author : Marc Pouzet *) (* Organization : Demons, LRI, University of Paris-Sud, Orsay *) (* *) (**************************************************************************) (* Compiler options *) open Names (* version of the compiler *) let version = "0.4" let date = "DATE" (* standard module *) let pervasives_module = Pervasives let standard_lib = "STDLIB" let standard_lib = try Sys.getenv "HEPTLIB" with Not_found -> standard_lib (* list of modules initially opened *) let default_used_modules = ref [pervasives_module] let set_no_pervasives () = default_used_modules := [] (* load paths *) let load_path = ref ([standard_lib]) let set_stdlib p = load_path := [p] and add_include d = load_path := d :: !load_path;; (* where is the standard library *) let locate_stdlib () = print_string (try Sys.getenv "HEPTLIB" with Not_found -> standard_lib); print_newline () let show_version () = Format.printf "The Heptagon compiler, version %s (%s)@." version date; locate_stdlib () (* other options of the compiler *) let verbose = ref false let print_types = ref false let assert_nodes : name list ref = ref [] let add_assert nd = assert_nodes := nd :: !assert_nodes let simulation = ref false let simulation_node : name ref = ref "" let set_simulation_node s = simulation := true; simulation_node := s let hepts_simulation = ref false let create_object_file = ref false let boolean = ref false (* Target languages list for code generation *) let target_languages : string list ref = ref [] let add_target_language s = if s = "z3z" then boolean := true; target_languages := s :: !target_languages (* Optional path for generated files (C or Java) *) let target_path : string option ref = ref None let set_target_path path = target_path := Some path let full_type_info = ref false let stateful_info = ref false let full_name = ref false let causality = ref true let init = ref true let inline : qualname list ref = ref [] let add_inlined_node s = inline := s :: !inline let flatten = ref false let deadcode = ref false let tomato = ref false let tomato_nodes : qualname list ref = ref [] let add_tomato_node s = tomato_nodes := s :: !tomato_nodes let tomato_check : qualname list ref = ref [] let add_tomato_check s = tomato_check := s :: !tomato_check let do_iterator_fusion = ref false let do_scalarize = ref false let do_mem_alloc = ref false let do_linear_typing = ref false let do_mem_alloc_and_typing () = do_mem_alloc := true; do_linear_typing := true let use_old_scheduler = ref false let optim = ref false let do_optim () = do_mem_alloc_and_typing (); tomato := true; deadcode := true; do_iterator_fusion := true let doc_verbose = "\t\t\tSet verbose mode" and doc_version = "\t\tThe version of the compiler" and doc_print_types = "\t\t\tPrint types" and doc_include = "