repack-clang.sh (1571B)
1 #!/bin/bash 2 set -x -e -v 3 4 shopt -s nullglob 5 6 # This script is for repacking clang for cross targets on a Linux host. 7 8 cd $MOZ_FETCHES_DIR 9 10 # We have a clang toolchain in $MOZ_FETCHES_DIR/clang 11 # We have some compiler-rts in $MOZ_FETCHES_DIR/compiler-rt* 12 # We have some libunwinds in $MOZ_FETCHES_DIR/libunwind* 13 # We copy everything from the compiler-rts into clang/lib/clang/$version/ 14 # and everything from the libunwinds into clang/ 15 clang_ver_dir=$(echo clang/lib/clang/*/include) 16 clang_ver_dir=${clang_ver_dir%/include} 17 [ -n "$clang_ver_dir" ] && for c in compiler-rt* libunwind*; do 18 case $c in 19 compiler-rt*) 20 clang_dir=$clang_ver_dir 21 ;; 22 libunwind*) 23 clang_dir=clang 24 ;; 25 esac 26 find $c -mindepth 1 -type d | while read d; do 27 mkdir -p "$clang_dir/${d#$c/}" 28 find $d -mindepth 1 -maxdepth 1 -not -type d | while read f; do 29 target_file="$clang_dir/${f#$c/}" 30 case $d in 31 compiler-rt-*/lib/darwin) 32 if [ -f "$target_file" ]; then 33 # Unify overlapping files for darwin/ 34 $MOZ_FETCHES_DIR/cctools/bin/lipo -create "$f" "$target_file" -output "$target_file.new" 35 mv "$target_file.new" "$target_file" 36 continue 37 fi 38 ;; 39 esac 40 if [ -f "$target_file" ] && ! diff -q "$f" "$target_file" 2>/dev/null; then 41 echo "Cannot copy $f because it is already in ${target_file%/*}" >&2 && exit 1 42 fi 43 cp "$f" "$target_file" 44 done 45 done 46 done 47 48 if [ -n "$UPLOAD_DIR" ]; then 49 tar caf clang.tar.zst clang 50 mkdir -p $UPLOAD_DIR 51 mv clang.tar.zst $UPLOAD_DIR 52 fi