+ init_irprog_2();
+ /* Initialize the type module ancd cr d construct some idents needed. */
+ firm_init_type(def_params.builtin_dbg, def_params.cc_mask);
+ /* initialize the entity module */
+ firm_init_entity();
+ /* allocate a hash table. */
+ init_type_identify(def_params.ti_if);
+ /* Init reflection facility. */
+ firm_init_rflct();
+
+ /* Init architecture dependent optimizations. */
+ arch_dep_init(arch_dep_default_factory);
+ arch_dep_set_opts(arch_dep_mul_to_shift | arch_dep_div_by_const | arch_dep_mod_by_const);
+
+ firm_archops_init(def_params.arch_op_settings);
+
+#ifndef NDEBUG
+ /* integrated debugger extension */
+ firm_init_debugger();
+#endif
+
+#ifdef WITH_LIBCORE
+ /* parse any init files for firm */
+ lc_opts_init("firm", firm_opt_get_root(), def_params.arg_prefix, def_params.argc, def_params.argv);
+#endif
+}
+
+void free_firm(void) {
+ int i;
+
+ for (i = get_irp_n_irgs() - 1; i >= 0; --i)
+ free_ir_graph(get_irp_irg(i));
+
+ free_type_entities(get_glob_type());
+ for (i = get_irp_n_types() - 1; i >= 0; --i)
+ free_type_entities(get_irp_type(i));
+
+ for (i = get_irp_n_types() - 1; i >= 0; --i)
+ free_type(get_irp_type(i));
+
+ finish_op();
+ free_ir_prog();
+
+ finish_tarval();
+ finish_mode();
+ finish_tpop();
+ finish_ident();
+}
+
+/* Returns the libFirm version number. */
+void firm_get_version(firm_version_t *version) {
+ version->major = libFirm_VERSION_MAJOR;
+ version->minor = libFirm_VERSION_MINOR;