@@ -4,50 +4,30 @@ use std::io::Write;
44use std:: process:: Stdio ;
55
66use object:: { Object , ObjectSection , ObjectSymbol } ;
7- use syn:: visit:: Visit ;
87use syn:: Ident ;
98
109use 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
11191fn 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