@@ -3,22 +3,28 @@ use std::{
3
3
process:: Command ,
4
4
} ;
5
5
6
- const BOOTLOADER_X86_64_UEFI_VERSION : & str = env ! ( "CARGO_PKG_VERSION" ) ;
7
-
8
- const BOOTLOADER_X86_64_BIOS_BOOT_SECTOR_VERSION : & str = env ! ( "CARGO_PKG_VERSION" ) ;
9
- const BOOTLOADER_X86_64_BIOS_STAGE_2_VERSION : & str = env ! ( "CARGO_PKG_VERSION" ) ;
10
- const BOOTLOADER_X86_64_BIOS_STAGE_3_VERSION : & str = env ! ( "CARGO_PKG_VERSION" ) ;
11
- const BOOTLOADER_X86_64_BIOS_STAGE_4_VERSION : & str = env ! ( "CARGO_PKG_VERSION" ) ;
6
+ const BOOTLOADER_VERSION : & str = env ! ( "CARGO_PKG_VERSION" ) ;
12
7
13
8
fn main ( ) {
14
- let out_dir = PathBuf :: from ( std:: env:: var ( "OUT_DIR" ) . unwrap ( ) ) ;
9
+ #[ cfg( any( feature = "uefi" , feature = "pxe" ) ) ]
10
+ uefi_main ( ) ;
11
+ #[ cfg( feature = "bios" ) ]
12
+ bios_main ( ) ;
13
+ }
15
14
15
+ #[ cfg( all( any( feature = "uefi" , feature = "pxe" ) , not( docsrs_dummy_build) ) ) ]
16
+ fn uefi_main ( ) {
17
+ let out_dir = PathBuf :: from ( std:: env:: var ( "OUT_DIR" ) . unwrap ( ) ) ;
16
18
let uefi_path = build_uefi_bootloader ( & out_dir) ;
17
19
println ! (
18
20
"cargo:rustc-env=UEFI_BOOTLOADER_PATH={}" ,
19
21
uefi_path. display( )
20
22
) ;
23
+ }
21
24
25
+ #[ cfg( all( feature = "bios" , not( docsrs_dummy_build) ) ) ]
26
+ fn bios_main ( ) {
27
+ let out_dir = PathBuf :: from ( std:: env:: var ( "OUT_DIR" ) . unwrap ( ) ) ;
22
28
let bios_boot_sector_path = build_bios_boot_sector ( & out_dir) ;
23
29
println ! (
24
30
"cargo:rustc-env=BIOS_BOOT_SECTOR_PATH={}" ,
@@ -43,7 +49,7 @@ fn main() {
43
49
) ;
44
50
}
45
51
46
- #[ cfg( not( docsrs_dummy_build) ) ]
52
+ #[ cfg( all ( any ( feature = "uefi" , feature = "pxe" ) , not( docsrs_dummy_build) ) ) ]
47
53
fn build_uefi_bootloader ( out_dir : & Path ) -> PathBuf {
48
54
let cargo = std:: env:: var ( "CARGO" ) . unwrap_or_else ( |_| "cargo" . into ( ) ) ;
49
55
let mut cmd = Command :: new ( cargo) ;
@@ -53,7 +59,7 @@ fn build_uefi_bootloader(out_dir: &Path) -> PathBuf {
53
59
cmd. arg ( "--path" ) . arg ( "uefi" ) ;
54
60
println ! ( "cargo:rerun-if-changed=uefi" ) ;
55
61
} else {
56
- cmd. arg ( "--version" ) . arg ( BOOTLOADER_X86_64_UEFI_VERSION ) ;
62
+ cmd. arg ( "--version" ) . arg ( BOOTLOADER_VERSION ) ;
57
63
}
58
64
cmd. arg ( "--locked" ) ;
59
65
cmd. arg ( "--target" ) . arg ( "x86_64-unknown-uefi" ) ;
@@ -77,7 +83,7 @@ fn build_uefi_bootloader(out_dir: &Path) -> PathBuf {
77
83
}
78
84
}
79
85
80
- #[ cfg( not( docsrs_dummy_build) ) ]
86
+ #[ cfg( all ( feature = "bios" , not( docsrs_dummy_build) ) ) ]
81
87
fn build_bios_boot_sector ( out_dir : & Path ) -> PathBuf {
82
88
let cargo = std:: env:: var ( "CARGO" ) . unwrap_or_else ( |_| "cargo" . into ( ) ) ;
83
89
let mut cmd = Command :: new ( cargo) ;
@@ -90,8 +96,7 @@ fn build_bios_boot_sector(out_dir: &Path) -> PathBuf {
90
96
cmd. arg ( "--path" ) . arg ( & local_path) ;
91
97
println ! ( "cargo:rerun-if-changed={}" , local_path. display( ) ) ;
92
98
} else {
93
- cmd. arg ( "--version" )
94
- . arg ( BOOTLOADER_X86_64_BIOS_BOOT_SECTOR_VERSION ) ;
99
+ cmd. arg ( "--version" ) . arg ( BOOTLOADER_VERSION ) ;
95
100
}
96
101
cmd. arg ( "--locked" ) ;
97
102
cmd. arg ( "--target" ) . arg ( "i386-code16-boot-sector.json" ) ;
@@ -120,7 +125,7 @@ fn build_bios_boot_sector(out_dir: &Path) -> PathBuf {
120
125
convert_elf_to_bin ( elf_path)
121
126
}
122
127
123
- #[ cfg( not( docsrs_dummy_build) ) ]
128
+ #[ cfg( all ( feature = "bios" , not( docsrs_dummy_build) ) ) ]
124
129
fn build_bios_stage_2 ( out_dir : & Path ) -> PathBuf {
125
130
let cargo = std:: env:: var ( "CARGO" ) . unwrap_or_else ( |_| "cargo" . into ( ) ) ;
126
131
let mut cmd = Command :: new ( cargo) ;
@@ -133,8 +138,7 @@ fn build_bios_stage_2(out_dir: &Path) -> PathBuf {
133
138
cmd. arg ( "--path" ) . arg ( & local_path) ;
134
139
println ! ( "cargo:rerun-if-changed={}" , local_path. display( ) ) ;
135
140
} else {
136
- cmd. arg ( "--version" )
137
- . arg ( BOOTLOADER_X86_64_BIOS_STAGE_2_VERSION ) ;
141
+ cmd. arg ( "--version" ) . arg ( BOOTLOADER_VERSION ) ;
138
142
}
139
143
cmd. arg ( "--locked" ) ;
140
144
cmd. arg ( "--target" ) . arg ( "i386-code16-stage-2.json" ) ;
@@ -161,7 +165,7 @@ fn build_bios_stage_2(out_dir: &Path) -> PathBuf {
161
165
convert_elf_to_bin ( elf_path)
162
166
}
163
167
164
- #[ cfg( not( docsrs_dummy_build) ) ]
168
+ #[ cfg( all ( feature = "bios" , not( docsrs_dummy_build) ) ) ]
165
169
fn build_bios_stage_3 ( out_dir : & Path ) -> PathBuf {
166
170
let cargo = std:: env:: var ( "CARGO" ) . unwrap_or_else ( |_| "cargo" . into ( ) ) ;
167
171
let mut cmd = Command :: new ( cargo) ;
@@ -174,8 +178,7 @@ fn build_bios_stage_3(out_dir: &Path) -> PathBuf {
174
178
cmd. arg ( "--path" ) . arg ( & local_path) ;
175
179
println ! ( "cargo:rerun-if-changed={}" , local_path. display( ) ) ;
176
180
} else {
177
- cmd. arg ( "--version" )
178
- . arg ( BOOTLOADER_X86_64_BIOS_STAGE_3_VERSION ) ;
181
+ cmd. arg ( "--version" ) . arg ( BOOTLOADER_VERSION ) ;
179
182
}
180
183
cmd. arg ( "--locked" ) ;
181
184
cmd. arg ( "--target" ) . arg ( "i686-stage-3.json" ) ;
@@ -202,7 +205,7 @@ fn build_bios_stage_3(out_dir: &Path) -> PathBuf {
202
205
convert_elf_to_bin ( elf_path)
203
206
}
204
207
205
- #[ cfg( not( docsrs_dummy_build) ) ]
208
+ #[ cfg( all ( feature = "bios" , not( docsrs_dummy_build) ) ) ]
206
209
fn build_bios_stage_4 ( out_dir : & Path ) -> PathBuf {
207
210
let cargo = std:: env:: var ( "CARGO" ) . unwrap_or_else ( |_| "cargo" . into ( ) ) ;
208
211
let mut cmd = Command :: new ( cargo) ;
@@ -215,8 +218,7 @@ fn build_bios_stage_4(out_dir: &Path) -> PathBuf {
215
218
cmd. arg ( "--path" ) . arg ( & local_path) ;
216
219
println ! ( "cargo:rerun-if-changed={}" , local_path. display( ) ) ;
217
220
} else {
218
- cmd. arg ( "--version" )
219
- . arg ( BOOTLOADER_X86_64_BIOS_STAGE_4_VERSION ) ;
221
+ cmd. arg ( "--version" ) . arg ( BOOTLOADER_VERSION ) ;
220
222
}
221
223
cmd. arg ( "--locked" ) ;
222
224
cmd. arg ( "--target" ) . arg ( "x86_64-stage-4.json" ) ;
@@ -244,6 +246,7 @@ fn build_bios_stage_4(out_dir: &Path) -> PathBuf {
244
246
convert_elf_to_bin ( elf_path)
245
247
}
246
248
249
+ #[ cfg( all( feature = "bios" , not( docsrs_dummy_build) ) ) ]
247
250
fn convert_elf_to_bin ( elf_path : PathBuf ) -> PathBuf {
248
251
let flat_binary_path = elf_path. with_extension ( "bin" ) ;
249
252
@@ -273,23 +276,10 @@ fn convert_elf_to_bin(elf_path: PathBuf) -> PathBuf {
273
276
274
277
// dummy implementations because docsrs builds have no network access
275
278
276
- #[ cfg( docsrs_dummy_build) ]
277
- fn build_uefi_bootloader ( _out_dir : & Path ) -> PathBuf {
278
- PathBuf :: new ( )
279
- }
280
- #[ cfg( docsrs_dummy_build) ]
281
- fn build_bios_boot_sector ( _out_dir : & Path ) -> PathBuf {
282
- PathBuf :: new ( )
283
- }
284
- #[ cfg( docsrs_dummy_build) ]
285
- fn build_bios_stage_2 ( _out_dir : & Path ) -> PathBuf {
286
- PathBuf :: new ( )
287
- }
288
- #[ cfg( docsrs_dummy_build) ]
289
- fn build_bios_stage_3 ( _out_dir : & Path ) -> PathBuf {
290
- PathBuf :: new ( )
291
- }
292
- #[ cfg( docsrs_dummy_build) ]
293
- fn build_bios_stage_4 ( _out_dir : & Path ) -> PathBuf {
294
- PathBuf :: new ( )
279
+ #[ cfg( all( feature = "uefi" , docsrs_dummy_build) ) ]
280
+ fn uefi_main ( ) {
281
+ // stub
295
282
}
283
+
284
+ #[ cfg( all( feature = "bios" , docsrs_dummy_build) ) ]
285
+ fn bios_main ( ) { }
0 commit comments