Support code generation for multiple cxx::bridge files in one Build
diff --git a/gen/build/src/lib.rs b/gen/build/src/lib.rs
index cabe2b1..9e8475a 100644
--- a/gen/build/src/lib.rs
+++ b/gen/build/src/lib.rs
@@ -62,6 +62,7 @@
 use anyhow::anyhow;
 use std::fs;
 use std::io::{self, Write};
+use std::iter;
 use std::path::Path;
 use std::process;
 
@@ -72,16 +73,31 @@
 /// [`compile`]: https://docs.rs/cc/1.0.49/cc/struct.Build.html#method.compile
 #[must_use]
 pub fn bridge(rust_source_file: impl AsRef<Path>) -> cc::Build {
-    match try_generate_bridge(rust_source_file.as_ref()) {
-        Ok(build) => build,
-        Err(err) => {
+    bridges(iter::once(rust_source_file))
+}
+
+/// `cxx_build::bridge` but for when more than one file contains a
+/// #\[cxx::bridge\] module.
+///
+/// ```no_run
+/// let source_files = vec!["src/main.rs", "src/path/to/other.rs"];
+/// cxx_build::bridges(source_files)
+///     .file("../demo-cxx/demo.cc")
+///     .flag("-std=c++11")
+///     .compile("cxxbridge-demo");
+/// ```
+pub fn bridges(rust_source_files: impl IntoIterator<Item = impl AsRef<Path>>) -> cc::Build {
+    let mut build = paths::cc_build();
+    for path in rust_source_files {
+        if let Err(err) = try_generate_bridge(&mut build, path.as_ref()) {
             let _ = writeln!(io::stderr(), "\n\ncxxbridge error: {:?}\n\n", anyhow!(err));
             process::exit(1);
         }
     }
+    build
 }
 
-fn try_generate_bridge(rust_source_file: &Path) -> Result<cc::Build> {
+fn try_generate_bridge(build: &mut cc::Build, rust_source_file: &Path) -> Result<()> {
     let header = gen::do_generate_header(rust_source_file, Opt::default());
     let header_path = paths::out_with_extension(rust_source_file, ".h")?;
     fs::create_dir_all(header_path.parent().unwrap())?;
@@ -91,7 +107,6 @@
     let bridge = gen::do_generate_bridge(rust_source_file, Opt::default());
     let bridge_path = paths::out_with_extension(rust_source_file, ".cc")?;
     fs::write(&bridge_path, bridge)?;
-    let mut build = paths::cc_build();
     build.file(&bridge_path);
 
     let ref cxx_h = paths::include_dir()?.join("rust").join("cxx.h");
@@ -99,5 +114,5 @@
     let _ = fs::remove_file(cxx_h);
     let _ = fs::write(cxx_h, gen::include::HEADER);
 
-    Ok(build)
+    Ok(())
 }