Update LLVM binary drops and scripts to the latest version from SVN
[WebKit-https.git] / Tools / Scripts / export-llvm-build
1 #!/usr/bin/env ruby
2
3 # Copyright (C) 2013 Apple Inc. All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 #
9 # 1.  Redistributions of source code must retain the above copyright
10 #     notice, this list of conditions and the following disclaimer. 
11 # 2.  Redistributions in binary form must reproduce the above copyright
12 #     notice, this list of conditions and the following disclaimer in the
13 #     documentation and/or other materials provided with the distribution. 
14 #
15 # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
16 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 # DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
19 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
26 require 'getoptlong'
27 require 'pathname'
28 require 'shellwords'
29 require 'tmpdir'
30
31 def mysys(*cmd)
32     commandArray = cmd.each{|value| Shellwords.shellescape(value.to_s)}.join(' ')
33     $stderr.puts ">> #{commandArray}"
34     riase unless system(*cmd)
35 end
36
37 $libraryPackage = Pathname.new("LLVMLibraries.tar.bz2")
38 $includePackage = Pathname.new("LLVMIncludes.tar.bz2")
39 $llvmBuild = "Release+Asserts"
40 $compression = "bzip2"
41
42 def usage
43     puts "export-llvm-build <LLVM directory>"
44     puts
45     puts "--library-package  (-l)   Change where to put the compressed library package."
46     puts "                          Default is #{$libraryPackage}."
47     puts "--include-package  (-i)   Change wehre to put the compressed header package."
48     puts "                          Default is #{$includePackage}."
49     puts "--llvm-build       (-b)   Change which LLVM build to use."
50     puts "                          Default is #{$llvmBuild}."
51     puts "--compression             Change what compression to do. Can be one of gzip,"
52     puts "                          bzip2, or none."
53     puts "                          Default is #{$compression}."
54     exit 1
55 end
56
57 GetoptLong.new(['--help', '-h', GetoptLong::NO_ARGUMENT],
58                ['--library-package', '-l', GetoptLong::REQUIRED_ARGUMENT],
59                ['--include-package', '-i', GetoptLong::REQUIRED_ARGUMENT],
60                ['--llvm-build', '-b', GetoptLong::REQUIRED_ARGUMENT],
61                ['--compression', GetoptLong::REQUIRED_ARGUMENT]).each {
62     | opt, arg |
63     case opt
64     when '--help'
65         usage
66     when '--library-package'
67         $libraryPackage = Pathname.new(arg)
68     when '--include-package'
69         $includePackage = Pathname.new(arg)
70     when '--llvm-build'
71         $llvmBuild = arg
72     when '--compression'
73         $compression = arg
74     else
75         raise
76     end
77 }
78
79 if ARGV.length != 1
80     usage
81 end
82
83 $llvmPath = Pathname.new(ARGV[0])
84
85 $currentPath = Pathname.pwd
86
87 def compressionChar
88     case $compression
89     when "gzip"
90         "z"
91     when "bzip2"
92         "y"
93     when "none"
94         ""
95     else
96         raise "Bad choice of compression."
97     end
98 end
99
100 Dir.chdir($llvmPath + $llvmBuild + "lib") {
101     mysys("tar", "-c#{compressionChar}vf", $currentPath + $libraryPackage,
102           *Dir.entries('.').select {
103               | value |
104               value =~ /\.a$/ and value !~ /libgtest/
105           })
106 }
107
108 Dir.mktmpdir {
109     | directory |
110     directory = Pathname.new(directory).realpath
111     Dir.chdir($llvmPath) {
112         mysys("svn", "export", "include", directory + "include")
113     }
114     ["include/llvm/Config"].each {
115         | genDirName |
116         configSrcPath = $llvmPath + genDirName
117         configDstPath = directory + genDirName
118         Dir.foreach(configSrcPath) {
119             | filename |
120             next unless filename =~ /\.def$/ or filename =~ /\.h$/
121             mysys("cp", configSrcPath + filename, configDstPath + filename)
122         }
123     }
124     Dir.chdir(directory + "include") {
125         mysys("tar", "-cyvf", $currentPath + $includePackage, ".")
126     }
127 }
128
129 puts
130 puts "LLVM has been packaged for use by WebKit."
131 puts
132 puts "You can use it right now by setting these environment variables:"
133 puts
134 puts "export LLVM_LIBRARY_PACKAGE=#{Shellwords.shellescape($libraryPackage.realpath.to_s)}"
135 puts "export LLVM_INCLUDE_PACKAGE=#{Shellwords.shellescape($includePackage.realpath.to_s)}"
136 puts