+ init_irprog_2();
+ /* Initialize the type module and 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
+ /* Process command line and ini file. */
+
+ if(def_params.ini_file) {
+ FILE *f = fopen(def_params.ini_file, "rt");
+ if(f) {
+ lc_opt_from_file(def_params.ini_file, f, NULL);
+ fclose(f);
+ }
+ }
+
+ lc_opt_from_argv(firm_opt_get_root(), def_params.arg_prefix,
+ def_params.argc, def_params.argv, NULL);
+
+#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;