blob: f4c64d7b3097d1a70a9f4c6a66e1b4c30dbe90f4 [file] [log] [blame]
Chris Lattner30fdc8d2010-06-08 16:52:24 +00001#!/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
8use strict;
9use Cwd 'abs_path';
10use File::Basename;
11use File::Temp qw/ tempfile tempdir /;
12our $debug = 1;
13
14
15sub 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 Callananbfb237bc2011-11-04 22:46:46 +000049sub 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
77if (@ARGV > 4)
Chris Lattner30fdc8d2010-06-08 16:52:24 +000078{
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 Lattner30fdc8d2010-06-08 16:52:24 +000090
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 Callananbfb237bc2011-11-04 22:46:46 +000096 my @generic_rsync_src_dst_paths =
Chris Lattner30fdc8d2010-06-08 16:52:24 +000097 (
98 "$llvm_source_dir/include", "$llvm_checkpoint_dir",
99 "$llvm_source_dir/tools/clang/include", "$llvm_checkpoint_dir/tools/clang",
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000100 );
Sean Callananbfb237bc2011-11-04 22:46:46 +0000101
102 do_rsync_paths (@generic_rsync_src_dst_paths);
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000103
Sean Callananbfb237bc2011-11-04 22:46:46 +0000104 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 Lattner30fdc8d2010-06-08 16:52:24 +0000119 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}
122else
123{
Sean Callananbfb237bc2011-11-04 22:46:46 +0000124 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 Lattner30fdc8d2010-06-08 16:52:24 +0000126}