let run select_annot select_slice_pragma =
P.feedback "remove unused code...";
let kf_entry, _library = Globals.entry_point () in
let proj = Marks.select_usefull_things
~select_annot ~select_slice_pragma kf_entry in
let old_proj_name = Project.name (Project.current ()) in
let new_proj_name = (old_proj_name^" without sparecode") in
P.feedback "remove unused global declarations...";
let tmp_prj = Transform.Info.build_cil_file "tmp_prj" proj in
let new_prj = Project.on tmp_prj Globs.rm_unused_decl new_proj_name in
P.result "result in new project '%s'." (Project.name new_prj);
Project.remove ~project:tmp_prj ();
let ctx = Parameters.get_selection_context () in
Project.copy ~only:ctx new_prj;
new_prj