1 //! Target dependent parameters needed for layouts
6 use hir_def::layout::{Endian, Size, TargetDataLayout};
8 use crate::db::HirDatabase;
10 pub fn target_data_layout_query(db: &dyn HirDatabase, krate: CrateId) -> Arc<TargetDataLayout> {
11 let crate_graph = db.crate_graph();
12 let target_layout = &crate_graph[krate].target_layout;
13 let cfg_options = &crate_graph[krate].cfg_options;
17 .and_then(|it| TargetDataLayout::parse_from_llvm_datalayout_string(it).ok())
19 let endian = match cfg_options.get_cfg_values("target_endian").next() {
20 Some(x) if x.as_str() == "big" => Endian::Big,
23 let pointer_size = Size::from_bytes(
24 match cfg_options.get_cfg_values("target_pointer_width").next() {
25 Some(x) => match x.as_str() {
33 TargetDataLayout { endian, pointer_size, ..TargetDataLayout::default() }