@@ -2499,3 +2499,85 @@ impl Step for LlvmTools {
2499
2499
Some ( distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target. triple) ) )
2500
2500
}
2501
2501
}
2502
+
2503
+ // Tarball intended for internal consumption to ease rustc/std development.
2504
+ //
2505
+ // Should not be considered stable by end users.
2506
+ #[ derive( Clone , Debug , Eq , Hash , PartialEq ) ]
2507
+ pub struct RustDev {
2508
+ pub target : TargetSelection ,
2509
+ }
2510
+
2511
+ impl Step for RustDev {
2512
+ type Output = Option < PathBuf > ;
2513
+ const DEFAULT : bool = true ;
2514
+ const ONLY_HOSTS : bool = true ;
2515
+
2516
+ fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
2517
+ run. path ( "rust-dev" )
2518
+ }
2519
+
2520
+ fn make_run ( run : RunConfig < ' _ > ) {
2521
+ run. builder . ensure ( RustDev { target : run. target } ) ;
2522
+ }
2523
+
2524
+ fn run ( self , builder : & Builder < ' _ > ) -> Option < PathBuf > {
2525
+ let target = self . target ;
2526
+
2527
+ builder. info ( & format ! ( "Dist RustDev ({})" , target) ) ;
2528
+ let _time = timeit ( builder) ;
2529
+ let src = builder. src . join ( "src/llvm-project/llvm" ) ;
2530
+ let name = pkgname ( builder, "rust-dev" ) ;
2531
+
2532
+ let tmp = tmpdir ( builder) ;
2533
+ let image = tmp. join ( "rust-dev-image" ) ;
2534
+ drop ( fs:: remove_dir_all ( & image) ) ;
2535
+
2536
+ // Prepare the image directory
2537
+ let dst_bindir = image. join ( "bin" ) ;
2538
+ t ! ( fs:: create_dir_all( & dst_bindir) ) ;
2539
+ let exe = builder. llvm_out ( target) . join ( "bin" ) . join ( exe ( "llvm-config" , target) ) ;
2540
+ builder. install ( & exe, & dst_bindir, 0o755 ) ;
2541
+ builder. install ( & builder. llvm_filecheck ( target) , & dst_bindir, 0o755 ) ;
2542
+
2543
+ // Copy the include directory as well; needed mostly to build
2544
+ // librustc_llvm properly (e.g., llvm-config.h is in here). But also
2545
+ // just broadly useful to be able to link against the bundled LLVM.
2546
+ builder. cp_r ( & builder. llvm_out ( target) . join ( "include" ) , & image. join ( "include" ) ) ;
2547
+
2548
+ // Copy libLLVM.so to the target lib dir as well, so the RPATH like
2549
+ // `$ORIGIN/../lib` can find it. It may also be used as a dependency
2550
+ // of `rustc-dev` to support the inherited `-lLLVM` when using the
2551
+ // compiler libraries.
2552
+ maybe_install_llvm ( builder, target, & image. join ( "lib" ) ) ;
2553
+
2554
+ // Prepare the overlay
2555
+ let overlay = tmp. join ( "rust-dev-overlay" ) ;
2556
+ drop ( fs:: remove_dir_all ( & overlay) ) ;
2557
+ builder. create_dir ( & overlay) ;
2558
+ builder. install ( & src. join ( "README.txt" ) , & overlay, 0o644 ) ;
2559
+ builder. install ( & src. join ( "LICENSE.TXT" ) , & overlay, 0o644 ) ;
2560
+ builder. create ( & overlay. join ( "version" ) , & builder. rust_version ( ) ) ;
2561
+
2562
+ // Generate the installer tarball
2563
+ let mut cmd = rust_installer ( builder) ;
2564
+ cmd. arg ( "generate" )
2565
+ . arg ( "--product-name=Rust" )
2566
+ . arg ( "--rel-manifest-dir=rustlib" )
2567
+ . arg ( "--success-message=rust-dev-installed." )
2568
+ . arg ( "--image-dir" )
2569
+ . arg ( & image)
2570
+ . arg ( "--work-dir" )
2571
+ . arg ( & tmpdir ( builder) )
2572
+ . arg ( "--output-dir" )
2573
+ . arg ( & distdir ( builder) )
2574
+ . arg ( "--non-installed-overlay" )
2575
+ . arg ( & overlay)
2576
+ . arg ( format ! ( "--package-name={}-{}" , name, target. triple) )
2577
+ . arg ( "--legacy-manifest-dirs=rustlib,cargo" )
2578
+ . arg ( "--component-name=rust-dev" ) ;
2579
+
2580
+ builder. run ( & mut cmd) ;
2581
+ Some ( distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target. triple) ) )
2582
+ }
2583
+ }
0 commit comments