+#include "irdump.h"
+#include "irprintf.h"
+#include "irvrfy.h"
+#include "trvrfy.h"
+
+#include "irarch.h"
+
+#include "iredges.h"
+
+/* Macros that define the old function names we decided to rename.
+ Use for compatibility with old implementations. */
+/*#include "old_fctnames.h"*/
+
+/**
+ * libFirm initialization parameters.
+ */
+struct _firm_parameter_t {
+ /**
+ * The size of this structure. init_firm() will only initialize
+ * this amount of data. This allows to add more fields to this structure
+ * without breaking compatibility to older source.
+ */
+ unsigned int size;
+
+ /**
+ * Statistic options. If statistic function where enabled, these
+ * flags configure it, see enum firmstat_options_t.
+ */
+ unsigned enable_statistics;
+
+ /**
+ * This function is called, whenever a local variable is
+ * used before definition. The function should insert a default value,
+ * and/or raise a compiler error/warning. Note that returning
+ * an Unknown is allowed here.
+ */
+ uninitialized_local_variable_func_t *initialize_local_func;
+
+ /**
+ * The interface functions for the type identification module.
+ * If not set, the default implementation with compare_strict() and
+ * firm_hash_name() will be used.
+ */
+ type_identify_if_t *ti_if;
+
+ /**
+ * The interface for the ident module.
+ * If not set, the default libFirm ident module (using hash sets).
+ */
+ ident_if_t *id_if;
+
+ /**
+ * The architecture dependent opcode settings.
+ * If not set, no architecture dependent operations will be used.
+ */
+ arch_ops_info *arch_op_settings;
+
+ /**
+ * The default calling convention.
+ */
+ unsigned cc_mask;
+
+ /**
+ * The debug info that should be used for "builtin" objects.
+ */
+ dbg_info *builtin_dbg;
+
+ /**
+ * Prefix for the command line options.
+ * example: if the option is -ffirm-opt-bla, then the prefix is "-f"
+ * @note Only active, if libfirm is compiled with libcore.
+ */
+ const char *arg_prefix;
+
+ /**
+ * Number of arguments in the "command line".
+ * @note Only active, if libfirm is compiled with libcore.
+ */
+ int argc;
+
+ /**
+ * Array of arguments.
+ * @note Only active, if libfirm is compiled with libcore.
+ */
+ const char **argv;
+
+ /**
+ * Name of ini file which is initially read.
+ * @note Only active, if libfirm is compiled with libcore.
+ */
+ const char *ini_file;
+};
+
+typedef struct _firm_parameter_t firm_parameter_t;
+
+#define libFirm_VERSION_MAJOR 1
+#define libFirm_VERSION_MINOR 4
+
+/**
+ * The Firm version number.
+ */
+typedef struct _firm_version_t {
+ unsigned major;
+ unsigned minor;
+} firm_version_t;
+
+/**
+ * Initialize the firm library.
+ *
+ * Initializes the firm library. Allocates default data structures.
+ * Initializes configurable behavior of the library.
+ *
+ * @param params A structure containing the parameters of the libFirm.
+ *
+ * The parameter struct may be NULL. In that case, the original FIRM behavior
+ * is conserved.
+ */
+void init_firm(const firm_parameter_t *params);
+
+/**
+ * Frees all memory occupied by the firm library.
+ */
+void free_firm(void);
+
+/**
+ * Returns the libFirm version number.
+ * If statically linked, always libFirm_VERSION_MAJOR, libFirm_VERSION_MINOR
+ */
+void firm_get_version(firm_version_t *version);