Temporary tag for this failure. Updated CI spec coming.
[rbx.git] / Rakefile
blob0ff7837136d680c531426fdaa99e7d5be9d59c00
1 # NOTE! When updating this file, also update INSTALL, if necessary.
2 # NOTE! Please keep your tasks grouped together.
4 $VERBOSE = true
5 $verbose = Rake.application.options.trace
6 $dlext = Config::CONFIG["DLEXT"]
7 $compiler = nil
9 RUBINIUS_BASE = File.expand_path(File.dirname(__FILE__))
11 require 'tsort'
12 require 'rakelib/rubinius'
13 require 'rakelib/git'
14 require 'rakelib/struct_generator'
15 require 'rakelib/const_generator'
16 require 'rakelib/types_generator'
18 task :default => :build
20 # BUILD TASKS
22 desc "Build everything that needs to be built"
23 task :build => 'build:all'
25 task :stable_compiler do
26   if ENV['USE_CURRENT']
27     puts "Use current versions, not stable."
28   else
29     ENV['RBX_BOOTSTRAP'] = "runtime/stable/bootstrap.rba"
30     ENV['RBX_CORE'] = "runtime/stable/core.rba"
31     ENV['RBX_LOADER'] = "runtime/stable/loader.rbc"
32     ENV['RBX_PLATFORM'] = "runtime/stable/platform.rba"
33   end
34 end
36 rule ".rbc" => %w[.rb] do |t|
37   compile t.source, t.name
38 end
40 files = FileList['kernel/core/*.rb']
42 unless files.include?("kernel/core/dir.rb")
43   files.add("kernel/core/dir.rb")
44 end
46 Core      = CodeGroup.new(files, 'runtime/core', 'core')
48 Bootstrap = CodeGroup.new 'kernel/bootstrap/*.rb', 'runtime/bootstrap',
49                           'bootstrap'
50 PlatformFiles  = CodeGroup.new 'kernel/platform/*.rb', 'runtime/platform', 'platform'
52 file 'runtime/loader.rbc' => 'kernel/loader.rb' do
53   compile 'kernel/loader.rb', 'runtime/loader.rbc'
54 end
56 file 'runtime/stable/loader.rbc' => 'runtime/loader.rbc' do
57   cp 'runtime/loader.rbc', 'runtime/stable', :verbose => $verbose
58 end
60 file 'runtime/stable/compiler.rba' => 'build:compiler' do |t|
61   #sh "cd lib; zip -r ../runtime/stable/compiler.rba compiler -x \\*.rb"
62   rm_f t.name
63   rbc_files = Rake::FileList['compiler/**/*.rbc']
65   Dir.chdir 'lib' do
66     rbc_files.each do |rbc_file|
67       ar_add "../#{t.name}", rbc_file
68     end
69   end
70 end
72 Rake::StructGeneratorTask.new do |t|
73   t.dest = "lib/etc.rb"
74 end
76 Rake::StructGeneratorTask.new do |t|
77   t.dest = 'lib/zlib.rb'
78 end
80 AllPreCompiled = Core.output + Bootstrap.output + PlatformFiles.output
81 AllPreCompiled << "runtime/loader.rbc"
83 namespace :build do
85   task :all => %w[
86     build:shotgun
87     build:platform
88     build:rbc
89     compiler
90     lib/etc.rb
91     lib/rbconfig.rb
92     extensions
93   ]
95   # This nobody rule lets use use all the shotgun files as
96   # prereqs. This rule is run for all those prereqs and just
97   # (obviously) does nothing, but it makes rake happy.
98   rule '^shotgun/.+'
100   # These files must be excluded from the c_source FileList
101   # because they are build products (i.e. there is no rule
102   # to build them, they will be built) and the c_source list
103   # list gets created before they are deleted by the clean task.
104   exclude_source = [
105     /auto/,
106     /instruction_names/,
107     /node_types/,
108     /grammar.c/,
109     'primitive_indexes.h',
110     'primitive_util.h'
111   ]
113   c_source = FileList[
114     "shotgun/config.h",
115     "shotgun/lib/*.[chy]",
116     "shotgun/lib/*.rb",
117     "shotgun/lib/subtend/*.[chS]",
118     "shotgun/main.c"
119   ].exclude(*exclude_source)
121   file "shotgun/rubinius.bin" => c_source do
122     sh make('vm')
123   end
124   
125   file "shotgun/rubinius.local.bin" => c_source do
126     sh make('vm')
127   end
129   desc "Compiles shotgun (the C-code VM)"
130   task :shotgun => %w[configure shotgun/rubinius.bin shotgun/rubinius.local.bin]
132   task :setup_rbc => :stable_compiler
134   task :rbc => ([:setup_rbc] + AllPreCompiled)
136   task :compiler => :stable_compiler do
137     compile_dir "lib/compiler"
138   end
140   desc "Rebuild runtime/stable/*.  If you don't know why you're running this, don't."
141   task :stable => %w[
142     build:all
143     runtime/stable/bootstrap.rba
144     runtime/stable/core.rba
145     runtime/stable/compiler.rba
146     runtime/stable/loader.rbc
147     runtime/stable/platform.rba
148   ]
150   desc "Rebuild the .load_order.txt files"
151   task "load_order" do
152     # Note: Steps to rebuild load_order were defined above
153   end
155   namespace :vm do
156     task "clean" do
157       sh "cd shotgun/lib; #{make "clean"}"
158     end
160     task "dev" do
161       sh "cd shotgun/lib; #{make "DEV=1"}"
162     end
163   end
165   task :platform => 'runtime/platform.conf'
168 # INSTALL TASKS
170 desc "Install rubinius as rbx"
171 task :install => :config_env do
172   sh "cd shotgun; #{make "install"}"
174   mkdir_p RBAPATH, :verbose => true
175   mkdir_p CODEPATH, :verbose => true
177   rba_files = Rake::FileList.new('runtime/platform.conf',
178                                  'runtime/**/*.rb{a,c}',
179                                  'runtime/**/.load_order.txt')
181   install_files rba_files, RBAPATH
183   lib_files = Rake::FileList.new 'lib/**/*'
185   install_files lib_files, CODEPATH
187   mkdir_p File.join(CODEPATH, 'bin'), :verbose => true
189   Rake::FileList.new("#{CODEPATH}/**/*.rb").sort.each do |rb_file|
190     if File.exists? "#{rb_file}c"
191       next if File.mtime("#{rb_file}c") > File.mtime(rb_file)
192     end
193     sh File.join(BINPATH, 'rbx'), 'compile', rb_file, :verbose => true
194   end
197 desc "Uninstall rubinius and libraries. Helps with build problems."
198 task :uninstall => :config_env do
199   rm Dir[File.join(BINPATH, 'rbx*')]
200   rm_r Dir[File.join(LIBPATH, '*rubinius*')]
203 task :compiledir => :stable_compiler do
204   dir = ENV['DIR']
205   raise "Use DIR= to set which directory" if !dir or dir.empty?
206   compile_dir(dir)
209 # CLEAN TASKS
211 desc "Recompile all ruby system files"
212 task :rebuild => %w[clean build:all]
214 desc "Alias for clean:all"
215 task :clean => "clean:all"
217 desc "Alias for clean:distclean"
218 task :distclean => "clean:distclean"
220 namespace :clean do
221   desc "Clean everything but third-party libs"
222   task :all => %w[clean:rbc clean:extensions clean:shotgun clean:generated clean:crap clean:config]
224   desc "Clean everything including third-party libs"
225   task :distclean => %w[clean:all clean:external]
227   desc "Remove all compile system ruby files"
228   task :rbc do
229     files_to_delete = []
230     files_to_delete += Dir["*.rbc"] + Dir["**/*.rbc"] + Dir["**/.*.rbc"]
231     files_to_delete += Dir["**/.load_order.txt"]
232     files_to_delete += ["runtime/platform.conf"]
233     files_to_delete -= ["runtime/stable/loader.rbc"] # never ever delete this
235     files_to_delete.each do |f|
236       rm_f f, :verbose => $verbose
237     end
238   end
240   desc "Cleans all compiled extension files (lib/ext)"
241   task :extensions do
242     Dir["lib/ext/**/*#{$dlext}"].each do |f|
243       rm_f f, :verbose => $verbose
244     end
245   end
247   desc "Cleans up VM building site"
248   task :shotgun do
249     sh make('clean')
250   end
252   desc "Cleans up generated files"
253   task :generated do
254     rm_f Dir["shotgun/lib/grammar.c"], :verbose => $verbose
255   end
257   desc "Cleans up VM and external libs"
258   task :external do
259     sh "cd shotgun; #{make('distclean')}"
260   end
262   desc "Cleans up editor files and other misc crap"
263   task :crap do
264     rm_f Dir["*~"] + Dir["**/*~"], :verbose => $verbose
265   end
266   
267   desc "Cleans up config files (so they can be regenerated when you change PREFIX)"
268   task :config do
269     rm "shotgun/config.h", :verbose => $verbose
270     rm "shotgun/config.mk", :verbose => $verbose
271   end
274 # MISC TASKS
276 desc "Build task for CruiseControl"
277 task :ccrb => [:build, 'spec:ci']
279 namespace :test do
280   desc "Run CI client daemon in incremental mode."
281   task :daemon do
282     sh "tools/cluster_test/ci.rb -i"
283   end
285   desc "Run CI client daemon in full build mode."
286   task :daemon_full do
287     sh "tools/cluster_test/ci.rb"
288   end