67 lines
1.8 KiB
Ruby
67 lines
1.8 KiB
Ruby
MRuby::Gem::Specification.new('mruby-compiler2') do |spec|
|
|
spec.license = 'MIT'
|
|
spec.author = 'HASUMI Hitoshi'
|
|
spec.summary = 'mruby compiler using a universal parser'
|
|
|
|
lib_dir = "#{dir}/lib"
|
|
cc.include_paths << "#{dir}/include"
|
|
|
|
prism_dir = "#{lib_dir}/prism"
|
|
ruby_dir = "#{lib_dir}/ruby"
|
|
|
|
cc.defines.flatten!
|
|
|
|
cc.defines << "PRISM_XALLOCATOR"
|
|
if cc.defines.include?("PICORB_VM_MRUBY")
|
|
cc.defines << "MRC_TARGET_MRUBY"
|
|
elsif cc.defines.include?("PICORB_VM_MRUBYC")
|
|
cc.defines << "MRC_TARGET_MRUBYC"
|
|
end
|
|
|
|
if cc.defines.include?("PICORB_INT32")
|
|
cc.defines << "MRC_INT64"
|
|
end
|
|
if cc.defines.any? { _1.match? /\A(PICORUBY|MRB)_DEBUG(=|\z)/ }
|
|
cc.defines << "MRC_DEBUG"
|
|
cc.defines << "MRC_DUMP_PRETTY"
|
|
else
|
|
cc.defines << "PRISM_BUILD_MINIMAL"
|
|
end
|
|
|
|
prism_templates_dir = "#{lib_dir}/prism/templates"
|
|
cc.include_paths << "#{prism_dir}/include"
|
|
|
|
next if %w(clean deep_clean).include?(Rake.application.top_level_tasks.first)
|
|
|
|
directory prism_dir do
|
|
FileUtils.cd dir do
|
|
sh "git submodule update --init"
|
|
end
|
|
end
|
|
|
|
task :prism_templates => prism_dir do
|
|
FileUtils.cd prism_dir do
|
|
sh "templates/template.rb"
|
|
end
|
|
end
|
|
|
|
%w(node prettyprint serialize token_type).each do |name|
|
|
dst = "#{prism_dir}/src/#{name}.c"
|
|
# file task does not work when dst does not exist. why?
|
|
Rake::Task[:prism_templates].invoke unless File.exist?(dst)
|
|
file dst => ["#{prism_templates_dir}/src/#{name}.c.erb", "#{prism_templates_dir}/template.rb"] do |t|
|
|
Rake::Task[:prism_templates].invoke
|
|
end
|
|
end
|
|
|
|
Dir.glob("#{prism_dir}/src/**/*.c").map do |src|
|
|
obj = objfile(src.pathmap("#{build_dir}/lib/%n"))
|
|
objs << obj
|
|
file obj => [src] do |f|
|
|
cc.run f.name, f.prerequisites.first
|
|
end
|
|
end
|
|
|
|
end
|
|
|