Take codegen options by reference
diff --git a/gen/src/mod.rs b/gen/src/mod.rs
index 6573949..0743939 100644
--- a/gen/src/mod.rs
+++ b/gen/src/mod.rs
@@ -32,7 +32,7 @@
 /// let mut opt = Opt::default();
 /// opt.cxx_impl_annotations = Some(impl_annotations);
 /// ```
-#[derive(Default, Clone)]
+#[derive(Default)]
 #[non_exhaustive]
 pub struct Opt {
     /// Any additional headers to #include. The cxxbridge tool does not parse or
@@ -47,17 +47,17 @@
     pub cxx_impl_annotations: Option<String>,
 }
 
-pub(super) fn do_generate_bridge(path: &Path, opt: Opt) -> Vec<u8> {
+pub(super) fn do_generate_bridge(path: &Path, opt: &Opt) -> Vec<u8> {
     let header = false;
     generate_from_path(path, opt, header)
 }
 
-pub(super) fn do_generate_header(path: &Path, opt: Opt) -> Vec<u8> {
+pub(super) fn do_generate_header(path: &Path, opt: &Opt) -> Vec<u8> {
     let header = true;
     generate_from_path(path, opt, header)
 }
 
-fn generate_from_path(path: &Path, opt: Opt, header: bool) -> Vec<u8> {
+fn generate_from_path(path: &Path, opt: &Opt, header: bool) -> Vec<u8> {
     let source = match fs::read_to_string(path) {
         Ok(source) => source,
         Err(err) => format_err(path, "", Error::Io(err)),
@@ -68,7 +68,7 @@
     }
 }
 
-fn generate_from_string(source: &str, opt: Opt, header: bool) -> Result<Vec<u8>> {
+fn generate_from_string(source: &str, opt: &Opt, header: bool) -> Result<Vec<u8>> {
     let mut source = source;
     if source.starts_with("#!") && !source.starts_with("#![") {
         let shebang_end = source.find('\n').unwrap_or(source.len());
@@ -85,7 +85,7 @@
 
 pub(super) fn generate(
     syntax: File,
-    opt: Opt,
+    opt: &Opt,
     gen_header: bool,
     gen_cxx: bool,
 ) -> Result<(Option<Vec<u8>>, Option<Vec<u8>>)> {
@@ -107,7 +107,7 @@
     // from the same token stream to avoid parsing twice. But others
     // only need to generate one or the other.
     let hdr = if gen_header {
-        Some(write::gen(namespace, apis, types, opt.clone(), true).content())
+        Some(write::gen(namespace, apis, types, opt, true).content())
     } else {
         None
     };