@@ -269,19 +269,35 @@ fn main() {
269
269
env:: var_os ( "CARGO_MANIFEST_DIR" ) . expect ( "CARGO_MANIFEST_DIR should always be set" ) ,
270
270
) ;
271
271
272
+ // Keep in sync with `core_name_and_version!` in prefixed.rs.
273
+ let core_name_and_version = [
274
+ & env:: var ( "CARGO_PKG_NAME" ) . unwrap ( ) ,
275
+ "core" ,
276
+ & env:: var ( "CARGO_PKG_VERSION_MAJOR" ) . unwrap ( ) ,
277
+ & env:: var ( "CARGO_PKG_VERSION_MINOR" ) . unwrap ( ) ,
278
+ & env:: var ( "CARGO_PKG_VERSION_PATCH" ) . unwrap ( ) ,
279
+ & env:: var ( "CARGO_PKG_VERSION_PRE" ) . unwrap ( ) , // Often empty
280
+ ]
281
+ . join ( "_" ) ;
282
+ // Ensure `links` in Cargo.toml is consistent with the version.
283
+ assert_eq ! (
284
+ & env:: var( "CARGO_MANIFEST_LINKS" ) . unwrap( ) ,
285
+ & core_name_and_version
286
+ ) ;
287
+
272
288
const RING_PREGENERATE_ASM : & str = "RING_PREGENERATE_ASM" ;
273
289
match env:: var_os ( RING_PREGENERATE_ASM ) . as_deref ( ) {
274
290
Some ( s) if s == "1" => {
275
- pregenerate_asm_main ( & c_root_dir) ;
291
+ pregenerate_asm_main ( & c_root_dir, & core_name_and_version ) ;
276
292
}
277
- None => ring_build_rs_main ( & c_root_dir) ,
293
+ None => ring_build_rs_main ( & c_root_dir, & core_name_and_version ) ,
278
294
_ => {
279
295
panic ! ( "${} has an invalid value" , RING_PREGENERATE_ASM ) ;
280
296
}
281
297
}
282
298
}
283
299
284
- fn ring_build_rs_main ( c_root_dir : & Path ) {
300
+ fn ring_build_rs_main ( c_root_dir : & Path , core_name_and_version : & str ) {
285
301
let out_dir = env:: var_os ( "OUT_DIR" ) . unwrap ( ) ;
286
302
let out_dir = PathBuf :: from ( out_dir) ;
287
303
@@ -323,7 +339,12 @@ fn ring_build_rs_main(c_root_dir: &Path) {
323
339
let generated_dir = if !is_git {
324
340
c_root_dir. join ( PREGENERATED )
325
341
} else {
326
- generate_sources_and_preassemble ( & out_dir, asm_target. into_iter ( ) , c_root_dir) ;
342
+ generate_sources_and_preassemble (
343
+ & out_dir,
344
+ asm_target. into_iter ( ) ,
345
+ c_root_dir,
346
+ core_name_and_version,
347
+ ) ;
327
348
out_dir. clone ( )
328
349
} ;
329
350
@@ -333,25 +354,31 @@ fn ring_build_rs_main(c_root_dir: &Path) {
333
354
& generated_dir,
334
355
c_root_dir,
335
356
& out_dir,
336
- & ring_core_prefix ( ) ,
357
+ core_name_and_version ,
337
358
) ;
338
359
emit_rerun_if_changed ( )
339
360
}
340
361
341
- fn pregenerate_asm_main ( c_root_dir : & Path ) {
362
+ fn pregenerate_asm_main ( c_root_dir : & Path , core_name_and_version : & str ) {
342
363
println ! ( "cargo:rustc-cfg=pregenerate_asm_only" ) ;
343
364
344
365
let pregenerated = c_root_dir. join ( PREGENERATED ) ;
345
366
std:: fs:: create_dir ( & pregenerated) . unwrap ( ) ;
346
- generate_sources_and_preassemble ( & pregenerated, ASM_TARGETS . iter ( ) , c_root_dir) ;
367
+ generate_sources_and_preassemble (
368
+ & pregenerated,
369
+ ASM_TARGETS . iter ( ) ,
370
+ c_root_dir,
371
+ core_name_and_version,
372
+ ) ;
347
373
}
348
374
349
375
fn generate_sources_and_preassemble < ' a > (
350
376
out_dir : & Path ,
351
377
asm_targets : impl Iterator < Item = & ' a AsmTarget > ,
352
378
c_root_dir : & Path ,
379
+ core_name_and_version : & str ,
353
380
) {
354
- generate_prefix_symbols_headers ( out_dir, & ring_core_prefix ( ) ) . unwrap ( ) ;
381
+ generate_prefix_symbols_headers ( out_dir, core_name_and_version ) . unwrap ( ) ;
355
382
356
383
let perl_exe = get_perl_exe ( ) ;
357
384
@@ -391,10 +418,8 @@ fn build_c_code(
391
418
generated_dir : & Path ,
392
419
c_root_dir : & Path ,
393
420
out_dir : & Path ,
394
- ring_core_prefix : & str ,
421
+ core_name_and_version : & str ,
395
422
) {
396
- println ! ( "cargo:rustc-env=RING_CORE_PREFIX={}" , ring_core_prefix) ;
397
-
398
423
let ( asm_srcs, obj_srcs) = if let Some ( asm_target) = asm_target {
399
424
let perlasm_src_dsts = perlasm_src_dsts ( generated_dir, asm_target) ;
400
425
@@ -436,21 +461,30 @@ fn build_c_code(
436
461
let test_srcs = RING_TEST_SRCS . iter ( ) . map ( PathBuf :: from) . collect :: < Vec < _ > > ( ) ;
437
462
438
463
let libs = [
439
- ( "" , & core_srcs[ ..] , & asm_srcs[ ..] , & obj_srcs[ ..] ) ,
440
- ( "test" , & test_srcs[ ..] , & [ ] , & [ ] ) ,
464
+ (
465
+ core_name_and_version,
466
+ & core_srcs[ ..] ,
467
+ & asm_srcs[ ..] ,
468
+ & obj_srcs[ ..] ,
469
+ ) ,
470
+ (
471
+ & ( String :: from ( core_name_and_version) + "_test" ) ,
472
+ & test_srcs[ ..] ,
473
+ & [ ] ,
474
+ & [ ] ,
475
+ ) ,
441
476
] ;
442
477
443
478
// XXX: Ideally, ring-test would only be built for `cargo test`, but Cargo
444
479
// can't do that yet.
445
480
libs. iter ( )
446
- . for_each ( |& ( lib_name_suffix, srcs, asm_srcs, obj_srcs) | {
447
- let lib_name = String :: from ( ring_core_prefix) + lib_name_suffix;
481
+ . for_each ( |& ( lib_name, srcs, asm_srcs, obj_srcs) | {
448
482
let srcs = srcs. iter ( ) . chain ( asm_srcs) ;
449
483
build_library (
450
484
target,
451
485
c_root_dir,
452
486
out_dir,
453
- & lib_name,
487
+ lib_name,
454
488
srcs,
455
489
generated_dir,
456
490
obj_srcs,
@@ -740,25 +774,16 @@ fn walk_dir(dir: &Path, cb: &impl Fn(&DirEntry)) {
740
774
}
741
775
}
742
776
743
- fn ring_core_prefix ( ) -> String {
744
- let links = env:: var ( "CARGO_MANIFEST_LINKS" ) . unwrap ( ) ;
745
-
746
- let computed = {
747
- let name = env:: var ( "CARGO_PKG_NAME" ) . unwrap ( ) ;
748
- let version = env:: var ( "CARGO_PKG_VERSION" ) . unwrap ( ) ;
749
- name + "_core_" + & version. replace ( & [ '-' , '.' ] [ ..] , "_" )
750
- } ;
751
-
752
- assert_eq ! ( links, computed) ;
753
-
754
- links + "_"
755
- }
756
-
757
777
/// Creates the necessary header files for symbol renaming.
758
778
///
759
779
/// For simplicity, both non-Nasm- and Nasm- style headers are always
760
780
/// generated, even though local non-packaged builds need only one of them.
761
- fn generate_prefix_symbols_headers ( out_dir : & Path , prefix : & str ) -> Result < ( ) , std:: io:: Error > {
781
+ fn generate_prefix_symbols_headers (
782
+ out_dir : & Path ,
783
+ core_name_and_version : & str ,
784
+ ) -> Result < ( ) , std:: io:: Error > {
785
+ let prefix = & ( String :: from ( core_name_and_version) + "_" ) ;
786
+
762
787
generate_prefix_symbols_header ( out_dir, "prefix_symbols.h" , '#' , None , prefix) ?;
763
788
764
789
generate_prefix_symbols_header (
0 commit comments