You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: lib.rs
    path of file: ./repos/wasmtime/cranelift/codegen/meta/src
    
    the code of the file until where you have to start completion: //! This crate generates Rust sources for use by
//! [`cranelift_codegen`](../cranelift_codegen/index.html).

#[macro_use]
mod cdsl;
mod srcgen;

pub mod error;
pub mod isa;

mod gen_inst;
mod gen_settings;
mod gen_types;

mod constant_hash;
mod shared;
mod unique_table;

/// Generate an ISA from an arc
    
pub fn generate(isas: &[isa::Isa], out_dir: &str, isle_dir: &str) -> Result<(), error::Error> {
    // Common definitions.
    let shared_defs = shared::define();

    gen_settings::generate(
        &shared_defs.settings,
        gen_settings::ParentGroup::None,
        "settings.rs",
        out_dir,
    )?;
    gen_types::generate("types.rs", out_dir)?;

    gen_inst::generate(
        &shared_defs.all_formats,
        &shared_defs.all_instructions,
        "opcodes.rs",
        "inst_builder.rs",
        "clif_opt.isle",
        "clif_lower.isle",
        out_dir,
        isle_dir,
    )?;

    // Per ISA definitions.
    for isa in isa::define(isas) {
        gen_settings::generate(
            &isa.settings,
            gen_settings::ParentGroup::Shared,
            &format!("settings-{}.rs", isa.name),
            out_dir,
        )?;
    }

    Ok(())
}