1#!/bin/bash 2 3# FIXME: do we need a license (or whatever else) header here? 4 5# This script merges libsanitizer sources from upstream. 6 7get_upstream() { 8 rm -rf upstream 9 git clone https://github.com/llvm/llvm-project.git upstream 10} 11 12get_current_rev() { 13 cd upstream 14 git rev-parse HEAD 15} 16 17list_files() { 18 (cd $1; ls *.{cc,cpp,h,inc,S} 2> /dev/null) 19 20} 21 22change_comment_headers() { 23 for f in $(list_files $1); do 24 sed -n 3p $1/$f | grep -q 'The LLVM Compiler Infrastructure' || continue 25 changed=$(awk 'NR != 2 && NR != 3' < $1/$f) 26 echo "$changed" > $1/$f 27 done 28} 29 30# ARGUMENTS: upstream_path local_path 31# This function merges changes from the directory upstream_path to 32# the directory local_path. 33merge() { 34 upstream_path=upstream/compiler-rt/$1 35 local_path=$2 36 change_comment_headers $upstream_path 37 echo MERGE: $upstream_path 38 all=$( (list_files $upstream_path; list_files $local_path) | sort | uniq) 39 #echo $all 40 for f in $all; do 41 if [ -f $upstream_path/$f -a -f $local_path/$f ]; then 42 echo "FOUND IN BOTH :" $f 43 # diff -u $local_path/$f $upstream_path/$f 44 cp -v $upstream_path/$f $local_path 45 elif [ -f $upstream_path/$f ]; then 46 echo "FOUND IN UPSTREAM :" $f 47 cp -v $upstream_path/$f $local_path 48 git add $local_path/$f 49 elif [ -f $local_path/$f ]; then 50 echo "FOUND IN LOCAL :" $f 51 git rm $local_path/$f 52 fi 53 done 54 55} 56 57fatal() { 58 echo "$1" 59 exit 1; 60} 61 62pwd | grep 'libsanitizer$' || \ 63 fatal "Run this script from libsanitizer dir" 64get_upstream 65CUR_REV=$(get_current_rev) 66echo Current upstream revision: $CUR_REV 67merge include/sanitizer include/sanitizer 68merge lib/asan asan 69merge lib/lsan lsan 70merge lib/tsan/rtl tsan 71merge lib/sanitizer_common sanitizer_common 72merge lib/interception interception 73merge lib/ubsan ubsan 74merge lib/hwasan hwasan 75 76# Need to merge lib/builtins/assembly.h file: 77mkdir -p builtins 78cp -v upstream/compiler-rt/lib/builtins/assembly.h builtins/assembly.h 79 80rm -rf upstream 81 82# Update the MERGE file. 83cat << EOF > MERGE 84$CUR_REV 85 86The first line of this file holds the git revision number of the 87last merge done from the master library sources. 88EOF 89