mirror of
https://github.com/italicsjenga/agb.git
synced 2024-12-24 00:31:34 +11:00
Attempt to make it so that the sound converter doesn't create too many tokens
This commit is contained in:
parent
66e201ae39
commit
eb26a21629
7
agb-sound-converter/Cargo.lock
generated
7
agb-sound-converter/Cargo.lock
generated
|
@ -9,6 +9,7 @@ dependencies = [
|
||||||
"hound",
|
"hound",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
"siphasher",
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -36,6 +37,12 @@ dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "siphasher"
|
||||||
|
version = "0.3.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.80"
|
version = "1.0.80"
|
||||||
|
|
|
@ -6,6 +6,14 @@ edition = "2018"
|
||||||
license = "MPL-2.0"
|
license = "MPL-2.0"
|
||||||
description = "Library for converting wavs for use on the Game Boy Advance"
|
description = "Library for converting wavs for use on the Game Boy Advance"
|
||||||
|
|
||||||
|
[profile.dev]
|
||||||
|
opt-level = 3
|
||||||
|
debug = true
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
lto = true
|
||||||
|
debug = true
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
proc-macro = true
|
proc-macro = true
|
||||||
|
|
||||||
|
@ -14,3 +22,4 @@ hound = "3.4.0"
|
||||||
syn = "1.0.73"
|
syn = "1.0.73"
|
||||||
proc-macro2 = "1.0.27"
|
proc-macro2 = "1.0.27"
|
||||||
quote = "1.0.9"
|
quote = "1.0.9"
|
||||||
|
siphasher = "0.3.7"
|
|
@ -1,7 +1,13 @@
|
||||||
use hound;
|
use hound;
|
||||||
use proc_macro::TokenStream;
|
use proc_macro::TokenStream;
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
use std::path::Path;
|
use siphasher::sip::SipHasher;
|
||||||
|
use std::{
|
||||||
|
fs::File,
|
||||||
|
hash::{Hash, Hasher},
|
||||||
|
io::Write,
|
||||||
|
path::Path,
|
||||||
|
};
|
||||||
use syn::parse_macro_input;
|
use syn::parse_macro_input;
|
||||||
|
|
||||||
#[proc_macro]
|
#[proc_macro]
|
||||||
|
@ -26,13 +32,31 @@ pub fn include_wav(input: TokenStream) -> TokenStream {
|
||||||
|
|
||||||
let samples = samples_from_reader(wav_reader);
|
let samples = samples_from_reader(wav_reader);
|
||||||
|
|
||||||
|
let out_file_path_include = {
|
||||||
|
let out_dir = std::env::var("OUT_DIR").expect("Expected OUT_DIR");
|
||||||
|
let out_filename = get_out_filename(&path);
|
||||||
|
|
||||||
|
let out_file_path = Path::new(&out_dir).with_file_name(&out_filename);
|
||||||
|
|
||||||
|
let mut out_file = File::create(&out_file_path).expect("Failed to open file for writing");
|
||||||
|
|
||||||
|
out_file
|
||||||
|
.write_all(&samples.collect::<Vec<_>>())
|
||||||
|
.expect("Failed to write to temporary file");
|
||||||
|
|
||||||
|
out_file_path
|
||||||
|
}
|
||||||
|
.clone()
|
||||||
|
.canonicalize()
|
||||||
|
.expect("Failed to canonicalize");
|
||||||
|
|
||||||
|
let out_file_path_include = out_file_path_include.to_string_lossy();
|
||||||
|
|
||||||
let result = quote! {
|
let result = quote! {
|
||||||
{
|
{
|
||||||
const _: &[u8] = include_bytes!(#include_path);
|
const _: &[u8] = include_bytes!(#include_path);
|
||||||
|
|
||||||
&[
|
include_bytes!(#out_file_path_include)
|
||||||
#(#samples),*
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -59,3 +83,10 @@ where
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_out_filename(path: &Path) -> String {
|
||||||
|
let mut hasher = SipHasher::new();
|
||||||
|
path.hash(&mut hasher);
|
||||||
|
|
||||||
|
format!("{}.raw", hasher.finish())
|
||||||
|
}
|
||||||
|
|
7
agb/Cargo.lock
generated
7
agb/Cargo.lock
generated
|
@ -47,6 +47,7 @@ dependencies = [
|
||||||
"hound",
|
"hound",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
"siphasher",
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -289,6 +290,12 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "siphasher"
|
||||||
|
version = "0.3.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.78"
|
version = "1.0.78"
|
||||||
|
|
Loading…
Reference in a new issue