1 # NOTE! When updating this file, also update INSTALL, if necessary.
2 # NOTE! Please keep your tasks grouped together.
5 $verbose = Rake.application.options.trace
6 $dlext = Config::CONFIG["DLEXT"]
9 RUBINIUS_BASE = File.expand_path(File.dirname(__FILE__))
12 require 'rakelib/rubinius'
14 require 'rakelib/struct_generator'
15 require 'rakelib/const_generator'
16 require 'rakelib/types_generator'
18 task :default => :build
22 desc "Build everything that needs to be built"
23 task :build => 'build:all'
25 task :stable_compiler do
27 puts "Use current versions, not stable."
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"
36 rule ".rbc" => %w[.rb] do |t|
37 compile t.source, t.name
40 files = FileList['kernel/core/*.rb']
42 unless files.include?("kernel/core/dir.rb")
43 files.add("kernel/core/dir.rb")
46 Core = CodeGroup.new(files, 'runtime/core', 'core')
48 Bootstrap = CodeGroup.new 'kernel/bootstrap/*.rb', 'runtime/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'
56 file 'runtime/stable/loader.rbc' => 'runtime/loader.rbc' do
57 cp 'runtime/loader.rbc', 'runtime/stable', :verbose => $verbose
60 file 'runtime/stable/compiler.rba' => 'build:compiler' do |t|
61 #sh "cd lib; zip -r ../runtime/stable/compiler.rba compiler -x \\*.rb"
63 rbc_files = Rake::FileList['compiler/**/*.rbc']
66 rbc_files.each do |rbc_file|
67 ar_add "../#{t.name}", rbc_file
72 Rake::StructGeneratorTask.new do |t|
76 Rake::StructGeneratorTask.new do |t|
77 t.dest = 'lib/zlib.rb'
80 AllPreCompiled = Core.output + Bootstrap.output + PlatformFiles.output
81 AllPreCompiled << "runtime/loader.rbc"
96 # This nobody rule lets use use all the shotgun files as
97 # prereqs. This rule is run for all those prereqs and just
98 # (obviously) does nothing, but it makes rake happy.
101 # These files must be excluded from the c_source FileList
102 # because they are build products (i.e. there is no rule
103 # to build them, they will be built) and the c_source list
104 # list gets created before they are deleted by the clean task.
110 'primitive_indexes.h',
116 "shotgun/lib/*.[chy]",
118 "shotgun/lib/subtend/*.[chS]",
120 ].exclude(*exclude_source)
122 file "shotgun/rubinius.bin" => c_source do
126 file "shotgun/rubinius.local.bin" => c_source do
130 desc "Compiles shotgun (the C-code VM)"
131 task :shotgun => %w[configure shotgun/rubinius.bin shotgun/rubinius.local.bin]
133 task :setup_rbc => :stable_compiler
135 task :rbc => ([:setup_rbc] + AllPreCompiled)
137 task :compiler => :stable_compiler do
138 compile_dir "lib/compiler"
141 desc "Rebuild runtime/stable/*. If you don't know why you're running this, don't."
144 runtime/stable/bootstrap.rba
145 runtime/stable/core.rba
146 runtime/stable/compiler.rba
147 runtime/stable/loader.rbc
148 runtime/stable/platform.rba
151 desc "Rebuild the .load_order.txt files"
153 # Note: Steps to rebuild load_order were defined above
158 sh "cd shotgun/lib; #{make "clean"}"
162 sh "cd shotgun/lib; #{make "DEV=1"}"
166 task :platform => 'runtime/platform.conf'
171 desc "Install rubinius as rbx"
172 task :install => :config_env do
173 sh "cd shotgun; #{make "install"}"
175 mkdir_p RBAPATH, :verbose => true
176 mkdir_p CODEPATH, :verbose => true
178 rba_files = Rake::FileList.new('runtime/platform.conf',
179 'runtime/**/*.rb{a,c}',
180 'runtime/**/.load_order.txt')
182 install_files rba_files, RBAPATH
184 lib_files = Rake::FileList.new 'lib/**/*'
186 install_files lib_files, CODEPATH
188 mkdir_p File.join(CODEPATH, 'bin'), :verbose => true
190 Rake::FileList.new("#{CODEPATH}/**/*.rb").sort.each do |rb_file|
191 if File.exists? "#{rb_file}c"
192 next if File.mtime("#{rb_file}c") > File.mtime(rb_file)
194 sh File.join(BINPATH, 'rbx'), 'compile', rb_file, :verbose => true
198 desc "Uninstall rubinius and libraries. Helps with build problems."
199 task :uninstall => :config_env do
200 rm Dir[File.join(BINPATH, 'rbx*')]
201 rm_r Dir[File.join(LIBPATH, '*rubinius*')]
204 task :compiledir => :stable_compiler do
206 raise "Use DIR= to set which directory" if !dir or dir.empty?
212 desc "Recompile all ruby system files"
213 task :rebuild => %w[clean build:all]
215 desc "Alias for clean:all"
216 task :clean => "clean:all"
218 desc "Alias for clean:distclean"
219 task :distclean => "clean:distclean"
222 desc "Clean everything but third-party libs"
223 task :all => %w[clean:rbc clean:extensions clean:shotgun clean:generated clean:crap clean:config]
225 desc "Clean everything including third-party libs"
226 task :distclean => %w[clean:all clean:external]
228 desc "Remove all compile system ruby files"
231 files_to_delete += Dir["*.rbc"] + Dir["**/*.rbc"] + Dir["**/.*.rbc"]
232 files_to_delete += Dir["**/.load_order.txt"]
233 files_to_delete += ["runtime/platform.conf"]
234 files_to_delete -= ["runtime/stable/loader.rbc"] # never ever delete this
236 files_to_delete.each do |f|
237 rm_f f, :verbose => $verbose
241 desc "Cleans all compiled extension files (lib/ext)"
243 Dir["lib/ext/**/*#{$dlext}"].each do |f|
244 rm_f f, :verbose => $verbose
248 desc "Cleans up VM building site"
253 desc "Cleans up generated files"
255 rm_f Dir["shotgun/lib/grammar.c"], :verbose => $verbose
258 desc "Cleans up VM and external libs"
260 sh "cd shotgun; #{make('distclean')}"
263 desc "Cleans up editor files and other misc crap"
265 rm_f Dir["*~"] + Dir["**/*~"], :verbose => $verbose
268 desc "Cleans up config files (so they can be regenerated when you change PREFIX)"
270 rm "shotgun/config.h", :verbose => $verbose
271 rm "shotgun/config.mk", :verbose => $verbose
277 desc "Build task for CruiseControl"
278 task :ccrb => [:build, 'spec:ci']
281 desc "Run CI client daemon in incremental mode."
283 sh "tools/cluster_test/ci.rb -i"
286 desc "Run CI client daemon in full build mode."
288 sh "tools/cluster_test/ci.rb"