57 lines
2.3 KiB
OCaml
57 lines
2.3 KiB
OCaml
|
(**************************************************************************)
|
||
|
(* *)
|
||
|
(* Heptagon *)
|
||
|
(* *)
|
||
|
(* Author : Marc Pouzet *)
|
||
|
(* Organization : Demons, LRI, University of Paris-Sud, Orsay *)
|
||
|
(* *)
|
||
|
(**************************************************************************)
|
||
|
|
||
|
(** Generation of a dataflow target *)
|
||
|
let dataflow_target filename p target_languages =
|
||
|
let rec one_target = function
|
||
|
(* | "z3z" :: others ->
|
||
|
let dirname = build_path (filename ^ "_z3z") in
|
||
|
let dir = clean_dir dirname in
|
||
|
let p = Dynamic_system.program p in
|
||
|
if !verbose then
|
||
|
comment "Translation into dynamic system (Z/3Z equations)";
|
||
|
Sigali.Printer.print dir p;
|
||
|
one_target others
|
||
|
| ("vhdl_df" | "vhdl") :: others ->
|
||
|
let dirname = build_path (filename ^ "_vhdl") in
|
||
|
let dir = clean_dir dirname in
|
||
|
let vhdl = Mls2vhdl.translate (Filename.basename filename) p in
|
||
|
Vhdl.print dir vhdl;
|
||
|
one_target others *)
|
||
|
| unknown_lg :: others -> unknown_lg :: one_target others
|
||
|
| [] -> [] in
|
||
|
one_target target_languages
|
||
|
|
||
|
(** Generation of a sequential target *)
|
||
|
let sequential_target filename o target_languages =
|
||
|
let rec one_target = function
|
||
|
| "java" :: others ->
|
||
|
let dirname = build_path filename in
|
||
|
let dir = clean_dir dirname in
|
||
|
Java.print dir o;
|
||
|
one_target others
|
||
|
| "c" :: others ->
|
||
|
let dirname = build_path (filename ^ "_c") in
|
||
|
let dir = clean_dir dirname in
|
||
|
let c_ast = Cgen.translate filename o in
|
||
|
C.output dir c_ast;
|
||
|
one_target others
|
||
|
| unknown_lg :: others -> unknown_lg :: one_target others
|
||
|
| [] -> [] in
|
||
|
one_target target_languages
|
||
|
|
||
|
(** Whole translation. *)
|
||
|
let targets filename df obc target_languages =
|
||
|
let target_languages = dataflow_target filename df target_languages in
|
||
|
let target_languages = sequential_target filename obc target_languages in
|
||
|
match target_languages with
|
||
|
| [] -> ()
|
||
|
| target :: _ -> language_error target
|
||
|
|