Skip to content

Commit

Permalink
improve rake a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
hasumikin committed Mar 18, 2024
1 parent 7b208f2 commit b80120d
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 29 deletions.
5 changes: 1 addition & 4 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ end

# load custom rules
load "#{MRUBY_ROOT}/tasks/core.rake"
load "#{MRUBY_ROOT}/tasks/mrblib.rake"
#load "#{MRUBY_ROOT}/tasks/mrblib.rake"
load "#{MRUBY_ROOT}/tasks/mrbgems.rake"
load "#{MRUBY_ROOT}/tasks/libmruby.rake"
load "#{MRUBY_ROOT}/tasks/bin.rake"
Expand Down Expand Up @@ -72,9 +72,6 @@ task :deep_clean => %w[clean doc:clean] do
MRuby.each_target do |build|
rm_rf build.gem_clone_dir
end
FileUtils.cd "mrbgems/picoruby-mrubyc/repos" do
rm_rf "mrubyc"
end
end

##############################
Expand Down
56 changes: 31 additions & 25 deletions mrbgems/picoruby-mrubyc/mrbgem.rake
Original file line number Diff line number Diff line change
Expand Up @@ -4,64 +4,70 @@ MRuby::Gem::Specification.new('picoruby-mrubyc') do |spec|
spec.authors = 'HASUMI Hitoshi'
spec.summary = 'mruby/c library'

mrubyc_dir = "#{dir}/repos/mrubyc"
repos_dir = "#{dir}/repos"
mrubyc_dir = "#{repos_dir}/mrubyc"
mrubyc_src_dir = "#{dir}/repos/mrubyc/src"
mrblib_build_dir = "#{build_dir}/mrblib"

file mrubyc_dir do
branch = ENV['MRUBYC_BRANCH'] || "master"
revision = ENV['MRUBYC_REVISION'] || "5fab2b85dce8fc0780293235df6c0daa5fd57dce"
repo = ENV['MRUBYC_REPO'] || 'https://github.com/mrubyc/mrubyc.git'
FileUtils.cd "#{dir}/repos" do
FileUtils.cd repos_dir do
sh "git clone -b #{branch} #{repo}"
end
if revision
FileUtils.cd "#{dir}/repos/mrubyc" do
FileUtils.cd mrubyc_dir do
sh "git checkout #{revision}"
end
end
end

mrubyc_srcs = %w(alloc c_math c_range console keyvalue rrt0 vm
c_array c_numeric c_string error load symbol
c_hash c_object class global value)
if Rake.application.top_level_tasks.first == "deep_clean"
FileUtils.cd repos_dir do
rm_rf "mrubyc"
end
else
Rake::Task[mrubyc_dir].invoke
end

hal_dir = cc.defines.find { |d|
cc.include_paths << cc.defines.find { |d|
d.start_with? "MRBC_USE_HAL"
}.then { |hal|
if hal.nil?
cc.defines << "MRBC_USE_HAL=#{MRUBY_ROOT}/include/hal_no_impl"
"#{MRUBY_ROOT}/include/hal_no_impl"
elsif hal.start_with?("MRBC_USE_HAL_")
"#{dir}/repos/mrubyc/src/#{hal.match(/\A(MRBC_USE_)(.+)\z/)[2].downcase}"
"#{mrubyc_src_dir}/#{hal.match(/\A(MRBC_USE_)(.+)\z/)[2].downcase}"
else
"#{dir}/repos/mrubyc/src/#{hal.match(/\A(MRBC_USE_HAL=)(.+)\z/)[2]}"
"#{mrubyc_src_dir}/#{hal.match(/\A(MRBC_USE_HAL=)(.+)\z/)[2]}"
end
}
cc.include_paths << hal_dir

file "#{hal_dir}/hal.c" => mrubyc_dir

build.libmruby_objs.flatten!.delete_if do |obj|
obj.end_with? "mrblib.o"
end
MRUBYC_SRCS = Dir.glob("#{mrubyc_src_dir}/*.c").freeze

(mrubyc_srcs << "mrblib").each do |mrubyc_src|
obj = objfile("#{build_dir}/src/#{mrubyc_src}")
MRUBYC_SRCS.each do |mrubyc_src|
obj = objfile(mrubyc_src.pathmap("#{build_dir}/src/%n"))
build.libmruby_objs << obj
file obj => "#{mrubyc_dir}/src/#{mrubyc_src}.c" do |f|
file obj => mrubyc_src do |f|
cc.run f.name, f.prerequisites.first
end
file "#{mrubyc_dir}/src/#{mrubyc_src}.c" => mrubyc_dir
end
file "#{mrubyc_dir}/mrblib" => mrubyc_dir

file "#{build_dir}/src/mrblib.c" => [build.mrbcfile, "#{mrubyc_dir}/mrblib"] do |f|
mrblib_sources = Dir.glob("#{mrubyc_dir}/mrblib/*.rb").join(" ")
mkdir_p File.dirname(f.name)
sh "#{build.mrbcfile} -B mrblib_bytecode -o #{f.name} #{mrblib_sources}"
MRBLIB_RBS = Dir.glob("#{mrubyc_dir}/mrblib/*.rb").freeze

directory mrblib_build_dir

file "#{mrblib_build_dir}/mrblib.c" => [build.mrbcfile, mrblib_build_dir] + MRBLIB_RBS do |f|
sh "#{build.mrbcfile} -B mrblib_bytecode -o #{f.name} #{MRBLIB_RBS.join(' ')}"
end

file objfile("#{build_dir}/src/mrblib") => "#{build_dir}/src/mrblib.c" do |f|
mrblib_c = "#{mrblib_build_dir}/mrblib.c"
mrblib_o = objfile(mrblib_c.ext)

file mrblib_o => mrblib_c do |f|
cc.run f.name, f.prerequisites.first
end

objs << mrblib_o
end

0 comments on commit b80120d

Please sign in to comment.