Chris Lattner | 30fdc8d | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 1 | #!/usr/bin/perl |
| 2 | |
| 3 | # This script should be pointed to a valid llvm.build folder that |
| 4 | # was created using the "build-llvm.pl" shell script. It will create |
| 5 | # a new llvm.zip file that can be checked into the respository |
| 6 | # at lldb/llvm.zip |
| 7 | |
| 8 | use strict; |
| 9 | use Cwd 'abs_path'; |
| 10 | use File::Basename; |
| 11 | use File::Temp qw/ tempfile tempdir /; |
| 12 | our $debug = 1; |
| 13 | |
| 14 | |
| 15 | sub do_command |
| 16 | { |
| 17 | my $cmd = shift; |
| 18 | my $description = @_ ? shift : "command"; |
| 19 | my $die_on_fail = @_ ? shift : undef; |
| 20 | $debug and print "% $cmd\n"; |
| 21 | system ($cmd); |
| 22 | if ($? == -1) |
| 23 | { |
| 24 | $debug and printf ("error: %s failed to execute: $!\n", $description); |
| 25 | $die_on_fail and $? and exit(1); |
| 26 | return $?; |
| 27 | } |
| 28 | elsif ($? & 127) |
| 29 | { |
| 30 | $debug and printf("error: %s child died with signal %d, %s coredump\n", |
| 31 | $description, |
| 32 | ($? & 127), |
| 33 | ($? & 128) ? 'with' : 'without'); |
| 34 | $die_on_fail and $? and exit(1); |
| 35 | return $?; |
| 36 | } |
| 37 | else |
| 38 | { |
| 39 | my $exit = $? >> 8; |
| 40 | if ($exit) |
| 41 | { |
| 42 | $debug and printf("error: %s child exited with value %d\n", $description, $exit); |
| 43 | $die_on_fail and exit(1); |
| 44 | } |
| 45 | return $exit; |
| 46 | } |
| 47 | } |
| 48 | |
Sean Callanan | bfb237bc | 2011-11-04 22:46:46 +0000 | [diff] [blame^] | 49 | sub do_rsync_paths |
| 50 | { |
| 51 | while (@_) |
| 52 | { |
| 53 | my $rsync_src = shift @_; |
| 54 | my $rsync_dst = shift @_; |
| 55 | print "rsync_src = '$rsync_src'\n"; |
| 56 | print "rsync_dst = '$rsync_dst'\n"; |
| 57 | |
| 58 | if (!-d $rsync_dst) |
| 59 | { |
| 60 | mkdir $rsync_dst; |
| 61 | } |
| 62 | |
| 63 | if (-e $rsync_src) |
| 64 | { |
| 65 | my ($rsync_dst_file, $rsync_dst_dir) = fileparse ($rsync_dst); |
| 66 | print "rsync_dst_dir = '$rsync_dst_dir'\n"; |
| 67 | -e $rsync_dst_dir or do_command ("mkdir -p '$rsync_dst_dir'"); |
| 68 | do_command ("rsync -amvC --exclude='*.tmp' --exclude='*.txt' --exclude='*.TXT' --exclude='*.td' --exclude='\.dir' --exclude=Makefile '$rsync_src' '$rsync_dst'"); |
| 69 | } |
| 70 | else |
| 71 | { |
| 72 | die "$rsync_src does not exist!\n"; |
| 73 | } |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | if (@ARGV > 4) |
Chris Lattner | 30fdc8d | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 78 | { |
| 79 | my $llvm_source_dir = abs_path(shift @ARGV); # The llvm source that contains full llvm and clang sources |
| 80 | my $llvm_build_dir = abs_path(shift @ARGV); # The llvm build directory that contains headers and |
| 81 | my $lldb_build_dir = abs_path(shift @ARGV); # the build directory that contains the fat libEnhancedDisassembly.dylib |
| 82 | my $llvm_zip_file = abs_path(shift @ARGV); |
| 83 | |
| 84 | printf("LLVM sources : '%s'\n", $llvm_source_dir); |
| 85 | printf("LLVM build : '%s'\n", $llvm_build_dir); |
| 86 | printf("LLDB build : '%s'\n", $lldb_build_dir); |
| 87 | printf("LLVM zip file: '%s'\n", $llvm_zip_file); |
| 88 | |
| 89 | -e $llvm_build_dir or die "LLVM build directory doesn't exist: '$llvm_build_dir': $!\n"; |
Chris Lattner | 30fdc8d | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 90 | |
| 91 | my $temp_dir = tempdir( CLEANUP => 1 ); |
| 92 | print "temp dir = '$temp_dir'\n"; |
| 93 | my $llvm_checkpoint_dir = "$temp_dir/llvm"; |
| 94 | mkdir "$llvm_checkpoint_dir" or die "Couldn't make 'llvm' in '$temp_dir'\n"; |
| 95 | |
Sean Callanan | bfb237bc | 2011-11-04 22:46:46 +0000 | [diff] [blame^] | 96 | my @generic_rsync_src_dst_paths = |
Chris Lattner | 30fdc8d | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 97 | ( |
| 98 | "$llvm_source_dir/include", "$llvm_checkpoint_dir", |
| 99 | "$llvm_source_dir/tools/clang/include", "$llvm_checkpoint_dir/tools/clang", |
Chris Lattner | 30fdc8d | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 100 | ); |
Sean Callanan | bfb237bc | 2011-11-04 22:46:46 +0000 | [diff] [blame^] | 101 | |
| 102 | do_rsync_paths (@generic_rsync_src_dst_paths); |
Chris Lattner | 30fdc8d | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 103 | |
Sean Callanan | bfb237bc | 2011-11-04 22:46:46 +0000 | [diff] [blame^] | 104 | for my $arch (@ARGV) |
| 105 | { |
| 106 | my @specific_rsync_src_dst_paths = |
| 107 | ( |
| 108 | "$llvm_build_dir/$arch/include", "$llvm_checkpoint_dir/$arch", |
| 109 | "$llvm_build_dir/$arch/tools/clang/include", "$llvm_checkpoint_dir/$arch/tools/clang", |
| 110 | ); |
| 111 | |
| 112 | do_rsync_paths (@specific_rsync_src_dst_paths); |
| 113 | |
| 114 | do_command ("cp '$llvm_build_dir/$arch/libllvmclang.a' '$llvm_checkpoint_dir/$arch/libllvmclang.a'", "Copying .a file", 1); |
| 115 | |
| 116 | } |
| 117 | |
| 118 | #do_command ("cp '$llvm_build_dir/libllvmclang.a' '$llvm_checkpoint_dir'", "Copying libllvmclang.a", 1); |
Chris Lattner | 30fdc8d | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 119 | do_command ("rm -rf '$llvm_zip_file'", "Removing old llvm checkpoint file '$llvm_zip_file'", 1); |
| 120 | do_command ("(cd '$temp_dir' ; zip -r '$llvm_zip_file' 'llvm')", "Zipping llvm checkpoint directory '$llvm_checkpoint_dir' to '$llvm_zip_file'", 1); |
| 121 | } |
| 122 | else |
| 123 | { |
Sean Callanan | bfb237bc | 2011-11-04 22:46:46 +0000 | [diff] [blame^] | 124 | print "USAGE\n\tcheckpoint-llvm.pl <llvm-sources> <llvm-build> <lldb-build> <llvm-zip> <arch1> [<arch2> ...]\n\n"; |
| 125 | print "EXAMPLE\n\tcd lldb\n\t./scripts/checkpoint-llvm.pl llvm build/llvm build/BuildAndIntegration llvm.zip x86_64 i386\n"; |
Chris Lattner | 30fdc8d | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 126 | } |