Adapt build script for changes to argument interpretation in fabricate's Builder...
[build-benchmarks.git] / rant.py
blob628d57a3c19229865aa20abc61101856a57cd2ba
1 #!/usr/bin/python
3 import os
4 import cppcodebase
5 import random
8 def CreateLibRantfileGcc(lib_number, classes):
9 os.chdir(cppcodebase.lib_name(lib_number))
11 handle = file("Rantfile", "w")
12 handle.write ('''import "c/dependencies"
14 file "lib''' + str(lib_number) + '''.a" => sys["*.cpp"].sub_ext("o") do |t|
15 sys "ar cr #{t.name} #{t.prerequisites}"
16 end
18 gen Rule, '.o' => '.cpp' do |t|
19 sys "g++ -c -I.. -o #{t.name} #{t.source}"
20 end
22 gen C::Dependencies
23 gen Action do source "c_dependencies" end
25 task :clean do
26 sys.rm_f Dir["*.o"] + %w(lib''' + str(lib_number) + '''.a) + %w(c_dependencies)
27 end
28 ''')
29 os.chdir('..')
32 def CreateLibRantfileMsvc(lib_number, classes):
33 os.chdir(cppcodebase.lib_name(lib_number))
35 handle = file("Rantfile", "w")
36 handle.write ('''import "c/dependencies"
38 file "lib''' + str(lib_number) + '''.a" => sys["*.cpp"].sub_ext("obj") do |t|
39 sys "lib /nologo /out:#{t.name} #{t.prerequisites}"
40 end
42 gen Rule, '.obj' => '.cpp' do |t|
43 sys "cl /Od /nologo /c /I.. #{t.source}"
44 end
46 gen C::Dependencies
47 gen Action do source "c_dependencies" end
49 task :clean do
50 sys.rm_f Dir["*.obj"] + %w(lib''' + str(lib_number) + '''.a) + %w(c_dependencies)
51 end
52 ''')
53 os.chdir('..')
56 def CreateFullRantfile(libs):
57 handle = file("Rantfile", "w")
58 handle.write ('import "c/dependencies"\n\n')
60 handle.write ('desc "Build all"\n')
61 handle.write ('task :all => [\n')
62 for i in xrange(libs):
63 handle.write('\t\t"' + cppcodebase.lib_name(i) + '/lib' + str(i) + '.a",\n')
64 handle.write ('] do\nend\n\n')
66 handle.write ('desc "Clean all"\n')
67 handle.write ('task :clean => [\n')
68 for i in xrange(libs):
69 handle.write('\t\t"lib_' + str(i) + '/clean",\n')
70 handle.write ('] do\nend\n\n')
72 handle.write ('subdirs [\n')
73 for i in xrange(libs):
74 handle.write('\t\t"' + cppcodebase.lib_name(i) + '",\n')
75 handle.write (']\n')
78 def CreateCodebaseForGcc(libs, classes, internal_includes, external_includes):
79 cppcodebase.SetDir('rant_gcc')
80 cppcodebase.CreateSetOfLibraries(libs, classes, internal_includes, external_includes, CreateLibRantfileGcc)
81 CreateFullRantfile(libs)
82 os.chdir('..')
84 def CreateCodebaseForMsvc(libs, classes, internal_includes, external_includes):
85 cppcodebase.SetDir('rant_msvc')
86 cppcodebase.CreateSetOfLibraries(libs, classes, internal_includes, external_includes, CreateLibRantfileMsvc)
87 CreateFullRantfile(libs)
88 os.chdir('..')
90 def CreateCodebase(libs, classes, internal_includes, external_includes):
91 CreateCodebaseForGcc(libs, classes, internal_includes, external_includes);
92 CreateCodebaseForMsvc(libs, classes, internal_includes, external_includes);