#!/bin/bash #=========================== # UMVIRT LINUX FROM SCRATCH #=========================== # Compilation script. # Network mode. #=========================== # Release: 4145625122 # Package: rustc #=========================== # DB commit: c9dd8835b9e79548f70e25c8ffb9d09430f622a0 # APP commit: #=========================== echo "ULFS Package installation start" echo "===============================" echo "Package: rustc" echo "Release: 4145625122" echo "checking config file" if [ -f $ULFS_CONFIG_FILE ] then echo "loading config file $ULFS_CONFIG_FILE..." . $ULFS_CONFIG_FILE fi #Creating log directory mkdir -p /var/log/ulfs-packages/rustc/ #Saving start timestamp date +%s > /var/log/ulfs-packages/rustc/start.time #Going to source directory... cd /sources #Checking dependances... #Checking curl... if [ ! -f /var/cache/ulfs-packages/curl ]; then echo "Dependance \"curl\" not found. Trying to install..."; wget --no-check-certificate https://ulfs.org/linux/packages//4145625122/curl/install -O - | bash if [ ! -f /var/cache/ulfs-packages/curl ]; then echo "Dependance \"curl\" is not installed. Exiting..." exit fi fi #Checking git... if [ ! -f /var/cache/ulfs-packages/git ]; then echo "Dependance \"git\" not found. Trying to install..."; wget --no-check-certificate https://ulfs.org/linux/packages//4145625122/git/install -O - | bash if [ ! -f /var/cache/ulfs-packages/git ]; then echo "Dependance \"git\" is not installed. Exiting..." exit fi fi #Checking cmake... if [ ! -f /var/cache/ulfs-packages/cmake ]; then echo "Dependance \"cmake\" not found. Trying to install..."; wget --no-check-certificate https://ulfs.org/linux/packages//4145625122/cmake/install -O - | bash if [ ! -f /var/cache/ulfs-packages/cmake ]; then echo "Dependance \"cmake\" is not installed. Exiting..." exit fi fi #Saving downloading timestamp date +%s > /var/log/ulfs-packages/rustc/download.time #Downloading source package archive... wget --no-check-certificate -nc .md5sum wget --no-check-certificate -nc #Checking source package file existance if [ ! -f rustc-1.81.0-src.tar.xz ]; then echo "Error: Can't find rustc-1.81.0-src.tar.xz. Exiting!" exit fi #Checking source package file checksum if [ -f rustc-1.81.0-src.tar.xz.md5sum ]; then MD5=`LANG=C md5sum -c rustc-1.81.0-src.tar.xz.md5sum | grep OK` if [ "$MD5" == "" ] ; then echo "Error: Checksum of rustc-1.81.0-src.tar.xz is wrong. Exiting!" exit fi fi #Saving cleanup timestamp date +%s > /var/log/ulfs-packages/rustc/cleanup.time rm -rfv /sources/rustc-1.81.0-src/ #Saving extracting timestamp date +%s > /var/log/ulfs-packages/rustc/unpack.time #Extracting tar source package archive with default parameters... tar -xf rustc-1.81.0-src.tar.xz #Checking package directory size after unpack... du -s rustc-1.81.0-src | awk 'NR==1 {print $1}' > /var/log/ulfs-packages/rustc/unpack.size #Going to source package directory... cd rustc-1.81.0-src #Saving configuration timestamp date +%s > /var/log/ulfs-packages/rustc/configure.time #Sleep 1 second sleep 1 if [[ "$ULFS_PKG_DATERESET" == "YES" ]] then #Changing all files creation time (except build configuration files) in source directory to find them after installation find /sources/rustc-1.81.0-src \! -path "*/configure*" \! -path "*/Makefile*" \! -path "*.make" \! -path "*.m4" \! -path "*.am" \! -path "*.mk" \! -path "*.stamp" \! -path "*gentpl.py" -exec touch -m {} + fi #Running configuration script... echo "checking config file" if [ -f $ULFS_CONFIG_FILE ] then echo "loading config file $ULFS_CONFIG_FILE..." . $ULFS_CONFIG_FILE fi cat > ulfs_configure.sh << EOIS echo "Initializing distributed build environment... " if [[ "\$ULFS_ICECC" == "YES" ]] then export PATH="\$ULFS_ICECC_PATH:\$PATH" echo "ICECC" fi echo "Environment debug..." echo "PATH: \$PATH" echo "MAKEFLAGS: \$MAKEFLAGS" echo "NINJAJOBS: \$NINJAJOBS" env | grep ULFS mkdir -pv /opt/rustc-1.81.0 && ln -svfn rustc-1.81.0 /opt/rustc cat << EOF > config.toml # see config.toml.example for more possible options. # Tell x.py the editors have reviewed the content of this file # and updated it to follow the major changes of the building system, # so x.py will not warn us to do such a review. change-id = 127866 [llvm] targets = "X86" # When using system llvm prefer shared libraries link-shared = true [build] # omit docs to save time and space (default is to build them) docs = false # install extended tools: cargo, clippy, etc extended = true # Do not query new versions of dependencies online. locked-deps = true # Specify which extended tools (those from the default install). tools = ["cargo", "clippy", "rustdoc", "rustfmt"] # Use the source code shipped in the tarball for the dependencies. # The combination of this and the "locked-deps" entry avoids downloading # many crates from Internet, and makes the Rustc build more stable. vendor = true [install] prefix = "/opt/rustc-1.81.0" docdir = "share/doc/rustc-1.81.0" [rust] channel = "stable" description = "for GLFS #47e0" # Uncomment if FileCheck has been installed. #codegen-tests = false # Enable the same optimizations as the official upstream build. lto = "thin" codegen-units = 1 [target.x86_64-unknown-linux-gnu] llvm-config = "/usr/bin/llvm-config" [target.i686-unknown-linux-gnu] llvm-config = "/usr/bin/llvm-config" EOF sed '/CondBitmap/,/^}/s/LLVM_VERSION.*/& \\&\\& LLVM_VERSION_LT(19, 0)/' \\ -i compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp && rm -v tests/coverage/mcdc/{cond*,if,inline*,nest*,non_*}.rs EOIS cat ulfs_configure.sh | bash 2>&1 | tee /var/log/ulfs-packages/rustc/configure.log #Saving build timestamp date +%s > /var/log/ulfs-packages/rustc/build.time #Running build script... echo "checking config file" if [ -f $ULFS_CONFIG_FILE ] then echo "loading config file $ULFS_CONFIG_FILE..." . $ULFS_CONFIG_FILE fi cat > ulfs_build.sh << EOIS echo "Initializing distributed build environment... " if [[ "\$ULFS_ICECC" == "YES" ]] then export PATH="\$ULFS_ICECC_PATH:\$PATH" echo "ICECC" fi echo "Environment debug..." echo "PATH: \$PATH" echo "MAKEFLAGS: \$MAKEFLAGS" echo "NINJAJOBS: \$NINJAJOBS" env | grep ULFS python3 x.py build EOIS cat ulfs_build.sh | bash 2>&1 | tee /var/log/ulfs-packages/rustc/build.log #Saving install timestamp date +%s > /var/log/ulfs-packages/rustc/install.time #Running install script... cat > ulfs_install.sh << EOIS python3 x.py install rustc std && python3 x.py install --stage=1 cargo clippy rustfmt if [[ "\\$ULFS_PKG_TEST" == "YES" ]] then rm -fv /opt/rustc-1.81.0/share/doc/rustc-1.81.0/*.old && install -vm644 README.md \ /opt/rustc-1.81.0/share/doc/rustc-1.81.0 fi install -vdm755 /usr/share/zsh/site-functions && ln -sfv /opt/rustc/share/zsh/site-functions/_cargo \ /usr/share/zsh/site-functions mv -v /etc/bash_completion.d/cargo \ /usr/share/bash-completion/completions cat > /etc/profile.d/rustc.sh << "EOF" # Begin /etc/profile.d/rustc.sh pathappend /opt/rustc/bin PATH # End /etc/profile.d/rustc.sh EOF source /etc/profile.d/rustc.sh EOIS USER=`whoami` if [ "$USER" == "root" ] ; then cat ulfs_install.sh | bash 2>&1 | tee /var/log/ulfs-packages/rustc/install.log else cat ulfs_install.sh | sudo bash 2>&1 | tee /var/log/ulfs-packages/rustc/install.log fi #Saving finish timestamp date +%s > /var/log/ulfs-packages/rustc/finish.time #Checking package directory size after unpack... cd /sources du -s rustc-1.81.0-src | awk 'NR==1 {print $1}' > /var/log/ulfs-packages/rustc/install.size echo "ULFS package installation completed." #Producing files list echo "Looking for installed files..." if [ -f /var/log/ulfs-packages/rustc/files.txt ]; then rm /var/log/ulfs-packages/rustc/files.txt fi USER=`whoami` if [ "$USER" == "root" ] ; then find /bin -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt find /sbin -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt find /usr -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt find /etc -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt find /opt -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt find /lib -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt find /lib64 -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt find /var -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time \! -path "/var/log/ulfs-packages/rustc/*" >> /var/log/ulfs-packages/rustc/files.txt else sudo find /bin -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt sudo find /sbin -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt sudo find /usr -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt sudo find /etc -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt sudo find /opt -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt sudo find /lib -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt sudo find /lib64 -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time >> /var/log/ulfs-packages/rustc/files.txt sudo find /var -type f -newer /var/log/ulfs-packages/rustc/configure.time \! -newer /var/log/ulfs-packages/rustc/finish.time \! -path "/var/log/ulfs-packages/rustc/*" >> /var/log/ulfs-packages/rustc/files.txt fi #Marking package as installed... mkdir -p /var/cache/ulfs-packages USER=`whoami` if [ "$USER" == "root" ] ; then touch /var/cache/ulfs-packages/rustc else sudo touch /var/cache/ulfs-packages/rustc fi #Calculate delta size a=`cat /var/log/ulfs-packages/rustc/unpack.size` b=`cat /var/log/ulfs-packages/rustc/install.size` c=$(($b-$a)) echo $c > /var/log/ulfs-packages/rustc/delta.size #Calculate prepare time a=`cat /var/log/ulfs-packages/rustc/start.time` b=`cat /var/log/ulfs-packages/rustc/configure.time` dp=$(($b-$a)) #Calculate download time a=`cat /var/log/ulfs-packages/rustc/download.time` b=`cat /var/log/ulfs-packages/rustc/unpack.time` dd=$(($b-$a)) #Calculate delta time a=`cat /var/log/ulfs-packages/rustc/configure.time` b=`cat /var/log/ulfs-packages/rustc/finish.time` db=$(($b-$a)) echo $db > /var/log/ulfs-packages/rustc/delta.time #Report echo "" echo "ULFS Package installation report" echo "================================" echo "Package: rustc" echo "Release: 4145625122" echo "Build size: $c" echo "Prepare time: $dp sec." echo "Download time: $dd sec." echo "Build time: $db sec." #End of script