@@ -42,6 +42,7 @@ fn main() {
42
42
let kernel_out_path = out_dir. join ( format ! ( "kernel_bin-{}.o" , kernel_file_name) ) ;
43
43
let kernel_archive_path = out_dir. join ( format ! ( "libkernel_bin-{}.a" , kernel_file_name) ) ;
44
44
45
+ // get access to llvm tools shipped in the llvm-tools-preview rustup component
45
46
let llvm_tools = match llvm_tools:: LlvmTools :: new ( ) {
46
47
Ok ( tools) => tools,
47
48
Err ( llvm_tools:: Error :: NotFound ) => {
@@ -73,6 +74,7 @@ fn main() {
73
74
Kernel executable at `{}`\n ", kernel. display( ) ) ;
74
75
}
75
76
77
+ // wrap the kernel executable as binary in a new ELF file
76
78
let objcopy = llvm_tools
77
79
. tool ( & llvm_tools:: exe ( "llvm-objcopy" ) )
78
80
. expect ( "llvm-objcopy not found in llvm-tools" ) ;
@@ -102,6 +104,7 @@ fn main() {
102
104
process:: exit ( 1 ) ;
103
105
}
104
106
107
+ // create an archive for linking
105
108
let ar = llvm_tools
106
109
. tool ( & llvm_tools:: exe ( "llvm-ar" ) )
107
110
. unwrap_or_else ( || {
@@ -120,12 +123,14 @@ fn main() {
120
123
process:: exit ( 1 ) ;
121
124
}
122
125
123
- println ! ( "cargo:rerun-if-env-changed=KERNEL" ) ;
124
- println ! ( "cargo:rerun-if-changed={}" , kernel. display( ) ) ;
125
- println ! ( "cargo:rerun-if-changed=build.rs" ) ;
126
+ // pass link arguments to rustc
126
127
println ! ( "cargo:rustc-link-search=native={}" , out_dir. display( ) ) ;
127
128
println ! (
128
129
"cargo:rustc-link-lib=static=kernel_bin-{}" ,
129
130
kernel_file_name
130
131
) ;
132
+
133
+ println ! ( "cargo:rerun-if-env-changed=KERNEL" ) ;
134
+ println ! ( "cargo:rerun-if-changed={}" , kernel. display( ) ) ;
135
+ println ! ( "cargo:rerun-if-changed=build.rs" ) ;
131
136
}
0 commit comments