1#!/bin/bash 2set -e 3readonly script_path=$(cd $(dirname $0);pwd) 4readonly build_path="${script_path}/../../build" 5 6# $1 is target triple, such as `x86_64-unknown-linux-ohos`. 7readonly lib_path="${build_path}/tmp/tarball/rust-std/$1/image/lib/rustlib/$1/lib" 8 9for file in $(find "${lib_path}" -name "lib*.*") 10do 11 dir_name=${file%/*} 12 file_name=${file##*/} 13 file_prefix=$(echo "$file_name" | awk '{split($1, arr, "."); print arr[1]}') 14 file_suffix=$(echo "$file_name" | awk '{split($1, arr, "."); print arr[2]}') 15 16 # Get filename without metadata-id. 17 file_prefix=$(echo "$file_prefix" | awk '{split($1, arr, "-"); print arr[1]}') 18 19 if [[ "$file_suffix" != "rlib" && "$file_suffix" != "so" || \ 20 "$file_prefix" == "librustc_demangle" || "$file_prefix" == "libcfg_if" || \ 21 "$file_prefix" == "libunwind" ]] 22 then 23 continue 24 fi 25 if [[ "$file_suffix" == "rlib" ]] 26 then 27 if [[ "$file_prefix" == "libstd" || "$file_prefix" == "libtest" ]] 28 then 29 # Add '.dylib' for `libstd` and `libtest`. 30 newfile_name="$file_prefix.dylib.rlib" 31 else 32 newfile_name="$file_prefix.rlib" 33 fi 34 fi 35 36 # `libstd` and `libtest` have both `so` and `rlib`, the other libs only have `rlib`. 37 if [[ "$file_suffix" == "so" ]] 38 then 39 newfile_name="$file_prefix.dylib.so" 40 if [[ "$file_prefix" == "libtest" ]] 41 then 42 # Modify the dependency of `libtest.dylib.so` from `libstd-{metadata-id}.so` 43 # to `libstd.dylib.so`. 44 readonly dynstr_section_vaddr=$(readelf -S "$file" | grep ".dynstr" | \ 45 awk -F']' '{print $2}' | awk '{print strtonum("0x"$3)}') 46 readonly libstd_str_offset=$(readelf -p .dynstr "$file" | \ 47 grep "libstd-[a-z0-9]\{16\}\.so" | awk -F'[' '{print $2}' | \ 48 awk '{print $1}' | awk -F']' '{print strtonum("0x"$1)}') 49 readonly libstd_str_vaddr=`expr $dynstr_section_vaddr + $libstd_str_offset` 50 $(printf 'libstd.dylib.so\0\0\0\0\0\0\0\0\0\0\0' | \ 51 dd of="$file" bs=1 seek=$libstd_str_vaddr count=26 conv=notrunc) 52 fi 53 fi 54 55 if [[ "$file_name" == "$newfile_name" ]] 56 then 57 continue 58 fi 59 60 mv $file "$dir_name/$newfile_name" 61done 62