Skip to content

Commit 224fd68

Browse files
committed
Move some code
1 parent 9251d65 commit 224fd68

File tree

2 files changed

+36
-31
lines changed

2 files changed

+36
-31
lines changed

gen_intrinsics/src/def_visitor.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,33 @@ use syn::parse::Parser;
22
use syn::visit::Visit;
33
use syn::Ident;
44

5+
pub fn parse(target: &str) -> DefVisitor {
6+
println!("Running rustc -Zunpretty=expanded --edition=2021 core_arch/src/lib.rs ...");
7+
let expanded_file = std::process::Command::new("rustc")
8+
.arg("-Zunpretty=expanded")
9+
.arg("--edition=2021")
10+
.arg("--target")
11+
.arg(target)
12+
.arg("../build/stdlib/library/stdarch/crates/core_arch/src/lib.rs")
13+
.output()
14+
.unwrap()
15+
.stdout;
16+
17+
println!("Parsing expanded source");
18+
let file = syn::parse_str::<syn::File>(std::str::from_utf8(&expanded_file).unwrap()).unwrap();
19+
20+
println!("Visting all LLVM intrinsics");
21+
let mut visitor = DefVisitor { llvm_intrinsics: vec![], structs: vec![], aliases: vec![] };
22+
visitor.visit_file(&file);
23+
24+
println!();
25+
26+
visitor.llvm_intrinsics.sort_by_key(|func| func.link_name.clone());
27+
visitor.llvm_intrinsics.dedup_by_key(|func| func.link_name.clone());
28+
29+
visitor
30+
}
31+
532
pub struct DefVisitor {
633
pub llvm_intrinsics: Vec<LlvmIntrinsicDef>,
734
pub structs: Vec<syn::ItemStruct>,

gen_intrinsics/src/main.rs

Lines changed: 9 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,50 +4,30 @@ use std::io::Write;
44
use std::process::Stdio;
55

66
use object::{Object, ObjectSection, ObjectSymbol};
7-
use syn::visit::Visit;
87
use syn::Ident;
98

109
use crate::def_visitor::{DefVisitor, LlvmIntrinsicDef};
1110

12-
fn compile_object() {
13-
println!("Running rustc -Zunpretty=expanded --edition=2021 core_arch/src/lib.rs ...");
14-
let expanded_file = std::process::Command::new("rustc")
15-
.arg("-Zunpretty=expanded")
16-
.arg("--edition=2021")
17-
//.arg("--target=x86_64-unknown-linux-gnu")
18-
.arg("../build/stdlib/library/stdarch/crates/core_arch/src/lib.rs")
19-
.output()
20-
.unwrap()
21-
.stdout;
22-
23-
println!("Parsing expanded source");
24-
let file = syn::parse_str::<syn::File>(std::str::from_utf8(&expanded_file).unwrap()).unwrap();
25-
26-
println!("Visting all LLVM intrinsics");
27-
let mut visitor = DefVisitor { llvm_intrinsics: vec![], structs: vec![], aliases: vec![] };
28-
visitor.visit_file(&file);
29-
30-
println!();
31-
11+
fn compile_object(visitor: &DefVisitor) {
3212
let mut ts = proc_macro2::TokenStream::new();
3313
ts.extend(quote::quote! {
3414
#![feature(abi_unadjusted, link_llvm_intrinsics, repr_simd, simd_ffi)]
3515
#![allow(dead_code, improper_ctypes, improper_ctypes_definitions, internal_features, non_camel_case_types)]
3616
});
3717

38-
let structs = visitor.structs;
18+
let structs = &visitor.structs;
3919
ts.extend(quote::quote! {
4020
#(#structs)*
4121
});
4222

43-
let aliases = visitor.aliases;
23+
let aliases = &visitor.aliases;
4424
ts.extend(quote::quote! {
4525
#(#aliases)*
4626
});
4727

48-
visitor.llvm_intrinsics.sort_by_key(|func| func.link_name.clone());
49-
visitor.llvm_intrinsics.dedup_by_key(|func| func.link_name.clone());
50-
for LlvmIntrinsicDef { abi, link_name, mut sig } in visitor.llvm_intrinsics {
28+
for LlvmIntrinsicDef { abi, link_name, sig } in &visitor.llvm_intrinsics {
29+
let mut sig = sig.clone();
30+
5131
let mangled_name = Ident::new(&link_name.replace('.', "__"), sig.ident.span());
5232
sig.ident = mangled_name.clone();
5333

@@ -109,11 +89,9 @@ fn compile_object() {
10989
}
11090

11191
fn main() {
112-
if
113-
/*true || // */
114-
false {
115-
compile_object();
116-
}
92+
let visitor = def_visitor::parse("aarch64-unknown-linux-gnu");
93+
94+
compile_object(&visitor);
11795

11896
let obj = std::fs::read("target/rust_out.o").unwrap();
11997
let obj = object::File::parse(&*obj).unwrap();

0 commit comments

Comments
 (0)