mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-30 20:44:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| set -e
 | |
| 
 | |
| # Settings
 | |
| export CHANNEL="release"
 | |
| build_sysroot="clif"
 | |
| target_dir='build'
 | |
| oldbe=''
 | |
| while [[ $# != 0 ]]; do
 | |
|     case $1 in
 | |
|         "--debug")
 | |
|             export CHANNEL="debug"
 | |
|             ;;
 | |
|         "--sysroot")
 | |
|             build_sysroot=$2
 | |
|             shift
 | |
|             ;;
 | |
|         "--target-dir")
 | |
|             target_dir=$2
 | |
|             shift
 | |
|             ;;
 | |
|         "--oldbe")
 | |
|             oldbe='--features oldbe'
 | |
|             ;;
 | |
|         *)
 | |
|             echo "Unknown flag '$1'"
 | |
|             echo "Usage: ./build.sh [--debug] [--sysroot none|clif|llvm] [--target-dir DIR] [--oldbe]"
 | |
|             exit 1
 | |
|             ;;
 | |
|     esac
 | |
|     shift
 | |
| done
 | |
| 
 | |
| # Build cg_clif
 | |
| unset CARGO_TARGET_DIR
 | |
| unamestr=$(uname)
 | |
| if [[ "$unamestr" == 'Linux' ]]; then
 | |
|    export RUSTFLAGS='-Clink-arg=-Wl,-rpath=$ORIGIN/../lib '$RUSTFLAGS
 | |
| elif [[ "$unamestr" == 'Darwin' ]]; then
 | |
|    export RUSTFLAGS='-Csplit-debuginfo=unpacked -Clink-arg=-Wl,-rpath,@loader_path/../lib -Zosx-rpath-install-name '$RUSTFLAGS
 | |
|    dylib_ext='dylib'
 | |
| else
 | |
|    echo "Unsupported os"
 | |
|    exit 1
 | |
| fi
 | |
| if [[ "$CHANNEL" == "release" ]]; then
 | |
|     cargo build $oldbe --release
 | |
| else
 | |
|     cargo build $oldbe
 | |
| fi
 | |
| 
 | |
| source scripts/ext_config.sh
 | |
| 
 | |
| rm -rf "$target_dir"
 | |
| mkdir "$target_dir"
 | |
| mkdir "$target_dir"/bin "$target_dir"/lib
 | |
| ln target/$CHANNEL/cg_clif{,_build_sysroot} "$target_dir"/bin
 | |
| ln target/$CHANNEL/*rustc_codegen_cranelift* "$target_dir"/lib
 | |
| ln rust-toolchain scripts/config.sh scripts/cargo.sh "$target_dir"
 | |
| 
 | |
| mkdir -p "$target_dir/lib/rustlib/$TARGET_TRIPLE/lib/"
 | |
| if [[ "$TARGET_TRIPLE" == "x86_64-pc-windows-gnu" ]]; then
 | |
|     cp $(rustc --print sysroot)/lib/rustlib/$TARGET_TRIPLE/lib/*.o "$target_dir/lib/rustlib/$TARGET_TRIPLE/lib/"
 | |
| fi
 | |
| 
 | |
| case "$build_sysroot" in
 | |
|     "none")
 | |
|         ;;
 | |
|     "llvm")
 | |
|         cp -r $(rustc --print sysroot)/lib/rustlib/$TARGET_TRIPLE/lib "$target_dir/lib/rustlib/$TARGET_TRIPLE/"
 | |
|         ;;
 | |
|     "clif")
 | |
|         echo "[BUILD] sysroot"
 | |
|         dir=$(pwd)
 | |
|         cd "$target_dir"
 | |
|         time "$dir/build_sysroot/build_sysroot.sh"
 | |
|         cp lib/rustlib/*/lib/libstd-* lib/
 | |
|         ;;
 | |
|     *)
 | |
|         echo "Unknown sysroot kind \`$build_sysroot\`."
 | |
|         echo "The allowed values are:"
 | |
|         echo "    none A sysroot that doesn't contain the standard library"
 | |
|         echo "    llvm Copy the sysroot from rustc compiled by cg_llvm"
 | |
|         echo "    clif Build a new sysroot using cg_clif"
 | |
|         exit 1
 | |
| esac
 | 
