sim: Move simflash to be its own crate

In preparation for moving the bootutil binding into a separate crate,
move the flash simulator into its own crate.  This will allow the
binding to have access to the simulator without creating a circular
dependency.

Signed-off-by: David Brown <david.brown@linaro.org>
diff --git a/sim/Cargo.lock b/sim/Cargo.lock
index 549a41e..8974502 100644
--- a/sim/Cargo.lock
+++ b/sim/Cargo.lock
@@ -4,12 +4,12 @@
 dependencies = [
  "docopt 0.6.86 (registry+https://github.com/rust-lang/crates.io-index)",
  "env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "error-chain 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gcc 0.3.51 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
+ "simflash 0.1.0",
 ]
 
 [[package]]
@@ -158,6 +158,13 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
+name = "simflash"
+version = "0.1.0"
+dependencies = [
+ "error-chain 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
 name = "strsim"
 version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/sim/Cargo.toml b/sim/Cargo.toml
index a93f299..a0d6299 100644
--- a/sim/Cargo.toml
+++ b/sim/Cargo.toml
@@ -10,11 +10,11 @@
 [dependencies]
 libc = "0.2.0"
 rand = "0.3.0"
-error-chain = "0.7.1"
 docopt = "0.6"
 rustc-serialize = "0.3"
 log = "0.3"
 env_logger = "0.3"
+simflash = { path = "simflash" }
 
 [profile.test]
 opt-level = 1
diff --git a/sim/simflash/.gitignore b/sim/simflash/.gitignore
new file mode 100644
index 0000000..03314f7
--- /dev/null
+++ b/sim/simflash/.gitignore
@@ -0,0 +1 @@
+Cargo.lock
diff --git a/sim/simflash/Cargo.toml b/sim/simflash/Cargo.toml
new file mode 100644
index 0000000..c508d01
--- /dev/null
+++ b/sim/simflash/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "simflash"
+version = "0.1.0"
+authors = ["David Brown <david.brown@linaro.org>"]
+
+[dependencies]
+error-chain = "0.7.1"
diff --git a/sim/src/flash.rs b/sim/simflash/src/lib.rs
similarity index 98%
rename from sim/src/flash.rs
rename to sim/simflash/src/lib.rs
index 98b6a27..991bbe4 100644
--- a/sim/src/flash.rs
+++ b/sim/simflash/src/lib.rs
@@ -3,6 +3,9 @@
 //! This module is capable of simulating the type of NOR flash commonly used in microcontrollers.
 //! These generally can be written as individual bytes, but must be erased in larger units.
 
+#[macro_use] extern crate error_chain;
+mod pdump;
+
 use std::fs::File;
 use std::io::Write;
 use std::iter::Enumerate;
diff --git a/sim/src/pdump.rs b/sim/simflash/src/pdump.rs
similarity index 100%
rename from sim/src/pdump.rs
rename to sim/simflash/src/pdump.rs
diff --git a/sim/src/api.rs b/sim/src/api.rs
index 2fa6b31..0347b65 100644
--- a/sim/src/api.rs
+++ b/sim/src/api.rs
@@ -1,6 +1,6 @@
 //! HAL api for MyNewt applications
 
-use flash::{Result, Flash};
+use simflash::{Result, Flash};
 use libc;
 use log::LogLevel;
 use mem;
diff --git a/sim/src/area.rs b/sim/src/area.rs
index eb42292..5a1ef6c 100644
--- a/sim/src/area.rs
+++ b/sim/src/area.rs
@@ -1,6 +1,6 @@
 //! Describe flash areas.
 
-use flash::{Flash, SimFlash, Sector};
+use simflash::{Flash, SimFlash, Sector};
 use std::ptr;
 
 /// Structure to build up the boot area table.
diff --git a/sim/src/c.rs b/sim/src/c.rs
index dd98c19..a3a6b4f 100644
--- a/sim/src/c.rs
+++ b/sim/src/c.rs
@@ -1,7 +1,7 @@
 /// Interface wrappers to C API entering to the bootloader
 
 use area::AreaDesc;
-use flash::Flash;
+use simflash::Flash;
 use libc;
 use api;
 
diff --git a/sim/src/main.rs b/sim/src/main.rs
index af3a2d6..dfebea7 100644
--- a/sim/src/main.rs
+++ b/sim/src/main.rs
@@ -4,9 +4,7 @@
 extern crate libc;
 extern crate rand;
 extern crate rustc_serialize;
-
-#[macro_use]
-extern crate error_chain;
+extern crate simflash;
 
 use docopt::Docopt;
 use rand::{Rng, SeedableRng, XorShiftRng};
@@ -19,12 +17,10 @@
 
 mod area;
 mod c;
-mod flash;
 pub mod api;
-mod pdump;
 mod caps;
 
-use flash::{Flash, SimFlash};
+use simflash::{Flash, SimFlash};
 use area::{AreaDesc, FlashId};
 use caps::Caps;