mirror of
https://gitlab.cern.ch/wotsubo/endcap-sl-software-ri-generator.git
synced 2025-02-23 09:07:07 +09:00
new: embed generation metadata (generator & xml)
This commit is contained in:
parent
d41bc7c1b0
commit
b0ceb39278
7 changed files with 76 additions and 0 deletions
18
build.rs
Normal file
18
build.rs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
use vergen_gitcl::{BuildBuilder, Emitter, GitclBuilder};
|
||||||
|
|
||||||
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
// Get build metadata
|
||||||
|
let build = BuildBuilder::default().build_timestamp(true).build()?;
|
||||||
|
let gitcl = GitclBuilder::default()
|
||||||
|
.commit_date(true)
|
||||||
|
.describe(false, true, None)
|
||||||
|
.commit_timestamp(true)
|
||||||
|
.sha(false)
|
||||||
|
.build()?;
|
||||||
|
Emitter::default()
|
||||||
|
.add_instructions(&build)?
|
||||||
|
.add_instructions(&gitcl)?
|
||||||
|
.emit()?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -7,6 +7,7 @@
|
||||||
use std::{num, str};
|
use std::{num, str};
|
||||||
|
|
||||||
use roxmltree::{Node, TextPos};
|
use roxmltree::{Node, TextPos};
|
||||||
|
use sha2::{Digest, Sha256};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
use crate::parser::{ParseCustomBool, ParseEnumError, ParsePrefixedU32, ParsePrefixedU32Error};
|
use crate::parser::{ParseCustomBool, ParseEnumError, ParsePrefixedU32, ParsePrefixedU32Error};
|
||||||
|
@ -210,6 +211,7 @@ impl Module {
|
||||||
desc: node.attribute("desc").map(str::to_string),
|
desc: node.attribute("desc").map(str::to_string),
|
||||||
elements_bitstring: child_bitstrings,
|
elements_bitstring: child_bitstrings,
|
||||||
elements_other: child_other,
|
elements_other: child_other,
|
||||||
|
xmlhash: Sha256::digest(node.document().input_text()).into(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,9 +11,14 @@ use std::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
meta::{
|
||||||
|
GENERATOR_BUILD_TIMESTAMP, GENERATOR_GIT_COMMIT_TIMESTAMP, GENERATOR_GIT_DESCRIBE,
|
||||||
|
GENERATOR_GIT_SHA,
|
||||||
|
},
|
||||||
type_traits::GetName,
|
type_traits::GetName,
|
||||||
types::{Block, Module, ModuleBlockElements, Register},
|
types::{Block, Module, ModuleBlockElements, Register},
|
||||||
};
|
};
|
||||||
|
use chrono::Local;
|
||||||
use heck::{ToSnakeCase, ToUpperCamelCase};
|
use heck::{ToSnakeCase, ToUpperCamelCase};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
|
@ -123,11 +128,50 @@ mod util {
|
||||||
|
|
||||||
impl Module {
|
impl Module {
|
||||||
pub fn generate_code(self) -> Result<HashMap<path::PathBuf, syn::File>, CodeGenError> {
|
pub fn generate_code(self) -> Result<HashMap<path::PathBuf, syn::File>, CodeGenError> {
|
||||||
|
let build_metadata = format!(
|
||||||
|
"
|
||||||
|
# Build metadata
|
||||||
|
|
||||||
|
- timestamp: {}
|
||||||
|
|
||||||
|
## CSR XML
|
||||||
|
|
||||||
|
- sha256: {}
|
||||||
|
- git describe: TODO (after building step is fixed)
|
||||||
|
- git commit timestamp: TODO
|
||||||
|
- git SHA: TODO
|
||||||
|
|
||||||
|
## Generator
|
||||||
|
|
||||||
|
- build timestamp: {}
|
||||||
|
- git describe: {}
|
||||||
|
- git commit timestamp: {}
|
||||||
|
- git SHA: {}
|
||||||
|
",
|
||||||
|
Local::now().to_rfc3339_opts(chrono::SecondsFormat::Nanos, false),
|
||||||
|
hex::encode(self.xmlhash),
|
||||||
|
GENERATOR_BUILD_TIMESTAMP,
|
||||||
|
GENERATOR_GIT_DESCRIBE,
|
||||||
|
GENERATOR_GIT_COMMIT_TIMESTAMP,
|
||||||
|
GENERATOR_GIT_SHA,
|
||||||
|
);
|
||||||
let files = self.generate_register_interface(None, None, HashMap::new())?;
|
let files = self.generate_register_interface(None, None, HashMap::new())?;
|
||||||
Ok(files
|
Ok(files
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(
|
.map(
|
||||||
|(path, tokens)| -> Result<(PathBuf, syn::File), syn::Error> {
|
|(path, tokens)| -> Result<(PathBuf, syn::File), syn::Error> {
|
||||||
|
let tokens = if path
|
||||||
|
.file_name()
|
||||||
|
.is_some_and(|file| file == "register_interface.rs")
|
||||||
|
{
|
||||||
|
quote! {
|
||||||
|
#![doc = #build_metadata]
|
||||||
|
|
||||||
|
#tokens
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tokens
|
||||||
|
};
|
||||||
let file: syn::File = syn::parse2(tokens)?;
|
let file: syn::File = syn::parse2(tokens)?;
|
||||||
Ok((path, file))
|
Ok((path, file))
|
||||||
},
|
},
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
pub mod converter;
|
pub mod converter;
|
||||||
pub mod generator;
|
pub mod generator;
|
||||||
pub mod io;
|
pub mod io;
|
||||||
|
pub mod meta;
|
||||||
mod parser;
|
mod parser;
|
||||||
mod type_traits;
|
mod type_traits;
|
||||||
pub mod types;
|
pub mod types;
|
||||||
|
|
|
@ -27,6 +27,7 @@ fn main() -> Result<()> {
|
||||||
for (path, code) in &files {
|
for (path, code) in &files {
|
||||||
log::debug!("path: {:?}", path);
|
log::debug!("path: {:?}", path);
|
||||||
log::debug!("{}", prettyplease::unparse(code));
|
log::debug!("{}", prettyplease::unparse(code));
|
||||||
|
log::trace!("{}", prettyplease::unparse(code));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if log::log_enabled!(log::Level::Info) {
|
if log::log_enabled!(log::Level::Info) {
|
||||||
|
|
9
src/meta.rs
Normal file
9
src/meta.rs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
pub(crate) const GENERATOR_BUILD_TIMESTAMP: &str =
|
||||||
|
env!("VERGEN_BUILD_TIMESTAMP", "Failed to get build timestamp");
|
||||||
|
pub(crate) const GENERATOR_GIT_DESCRIBE: &str =
|
||||||
|
env!("VERGEN_GIT_DESCRIBE", "Failed to get git describe");
|
||||||
|
pub(crate) const GENERATOR_GIT_COMMIT_TIMESTAMP: &str = env!(
|
||||||
|
"VERGEN_GIT_COMMIT_TIMESTAMP",
|
||||||
|
"Failed to get git commit timestamp"
|
||||||
|
);
|
||||||
|
pub(crate) const GENERATOR_GIT_SHA: &str = env!("VERGEN_GIT_SHA", "Failed to get git sha");
|
|
@ -10,6 +10,7 @@ pub struct Module {
|
||||||
pub desc: Option<String>,
|
pub desc: Option<String>,
|
||||||
pub elements_bitstring: Vec<BitString>,
|
pub elements_bitstring: Vec<BitString>,
|
||||||
pub elements_other: Vec<ModuleBlockElements>,
|
pub elements_other: Vec<ModuleBlockElements>,
|
||||||
|
pub xmlhash: [u8; 32],
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
Loading…
Reference in a new issue