summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Rakefile49
-rw-r--r--mrblib/mrblib.rake15
-rw-r--r--src/mruby_core.rake19
-rw-r--r--tasks/mrbgems.rake5
-rw-r--r--tasks/mrbgems_test.rake4
-rw-r--r--tasks/mruby_build.rake24
-rw-r--r--tasks/mruby_build_commands.rake18
-rw-r--r--tasks/ruby_ext.rake4
-rw-r--r--tasks/toolchains/gcc.rake2
-rw-r--r--tasks/toolchains/vs2012.rake2
-rw-r--r--test/mrbtest.rake20
-rw-r--r--tools/mirb/mirb.rake6
-rw-r--r--tools/mrbc/mrbc.rake6
-rw-r--r--tools/mruby/mruby.rake6
14 files changed, 102 insertions, 78 deletions
diff --git a/Rakefile b/Rakefile
index 74e714ca3..1c65321f5 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,46 +1,47 @@
# encoding: utf-8
# Build description.
# basic build file for mruby
+MRUBY_ROOT = File.dirname(File.expand_path(__FILE__))
-load 'tasks/ruby_ext.rake'
-load 'tasks/mruby_build.rake'
-load 'tasks/mrbgem_spec.rake'
+# load build systems
+load "#{MRUBY_ROOT}/tasks/ruby_ext.rake"
+load "#{MRUBY_ROOT}/tasks/mruby_build.rake"
+load "#{MRUBY_ROOT}/tasks/mrbgem_spec.rake"
-##############################
-# compile flags
-load 'build_config.rb'
-
-MRUBY_CONFIGS = ['build_config.rb']
-if ENV['MRUBY_CONFIG']
- MRUBY_CONFIGS << ENV['MRUBY_CONFIG']
- load ENV['MRUBY_CONFIG']
+# load configuration file
+MRUBY_CONFIGS = ["#{MRUBY_ROOT}/build_config.rb", ENV['MRUBY_CONFIG']].compact
+MRUBY_CONFIGS.each do |config|
+ load config unless config.empty?
end
+# load basic rules
MRuby.each_target do |build|
build.define_rules
end
-load 'src/mruby_core.rake'
-load 'mrblib/mrblib.rake'
-load 'tools/mrbc/mrbc.rake'
+# load custom rules
+load "#{MRUBY_ROOT}/src/mruby_core.rake"
+load "#{MRUBY_ROOT}/mrblib/mrblib.rake"
+load "#{MRUBY_ROOT}/tools/mrbc/mrbc.rake"
+
+load "#{MRUBY_ROOT}/tasks/mrbgems.rake"
+load "#{MRUBY_ROOT}/tasks/libmruby.rake"
+load "#{MRUBY_ROOT}/tools/mruby/mruby.rake"
+load "#{MRUBY_ROOT}/tools/mirb/mirb.rake"
-load 'tasks/mrbgems.rake'
-load 'tasks/libmruby.rake'
-load 'tools/mruby/mruby.rake'
-load 'tools/mirb/mirb.rake'
+load "#{MRUBY_ROOT}/tasks/mrbgems_test.rake"
+load "#{MRUBY_ROOT}/test/mrbtest.rake"
-load 'tasks/mrbgems_test.rake'
-load 'test/mrbtest.rake'
##############################
# generic build targets, rules
task :default => :all
depfiles = MRuby.targets['host'].bins.map do |bin|
- install_path = MRuby.targets['host'].exefile("bin/#{bin}")
-
- file install_path => MRuby.targets['host'].exefile("build/host/bin/#{bin}") do |t|
- FileUtils.rm t.name, :force => true
+ install_path = MRuby.targets['host'].exefile("#{MRUBY_ROOT}/bin/#{bin}")
+ source_path = MRuby.targets['host'].exefile("#{MRuby.targets['host'].build_dir}/bin/#{bin}")
+
+ file install_path => source_path do |t|
FileUtils.cp t.prerequisites.first, t.name
end
diff --git a/mrblib/mrblib.rake b/mrblib/mrblib.rake
index 5b4070745..3cd66d0d5 100644
--- a/mrblib/mrblib.rake
+++ b/mrblib/mrblib.rake
@@ -1,14 +1,17 @@
MRuby.each_target do
- dir = File.dirname(__FILE__).relative_path_from(root)
- self.libmruby << objfile("#{build_dir}/#{dir}/mrblib")
+ current_dir = File.dirname(__FILE__).relative_path_from(Dir.pwd)
+ relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
+ current_build_dir = "#{build_dir}/#{relative_from_root}"
+
+ self.libmruby << objfile("#{current_build_dir}/mrblib")
- file objfile("#{build_dir}/#{dir}/mrblib") => "#{build_dir}/#{dir}/mrblib.c"
- file "#{build_dir}/#{dir}/mrblib.c" => [mrbcfile] + Dir.glob("#{dir}/*.rb") do |t|
+ file objfile("#{current_build_dir}/mrblib") => "#{current_build_dir}/mrblib.c"
+ file "#{current_build_dir}/mrblib.c" => [mrbcfile] + Dir.glob("#{current_dir}/*.rb") do |t|
mrbc_, *rbfiles = t.prerequisites
FileUtils.mkdir_p File.dirname(t.name)
open(t.name, 'w') do |f|
- _pp "GEN", "*.rb", "#{t.name}"
- f.puts File.read("#{dir}/init_mrblib.c")
+ _pp "GEN", "*.rb", "#{t.name.relative_path}"
+ f.puts File.read("#{current_dir}/init_mrblib.c")
mrbc.run f, rbfiles, 'mrblib_irep'
end
end
diff --git a/src/mruby_core.rake b/src/mruby_core.rake
index 44d62c1e9..db335223d 100644
--- a/src/mruby_core.rake
+++ b/src/mruby_core.rake
@@ -1,8 +1,11 @@
MRuby.each_target do
- dir = File.dirname(__FILE__).relative_path_from(root)
-
- lex_def = "#{dir}/lex.def"
- objs = Dir.glob("src/*.{c}").map { |f| objfile(f.pathmap("#{build_dir}/%X")) } + [objfile("#{build_dir}/#{dir}/y.tab")]
+ current_dir = File.dirname(__FILE__).relative_path_from(Dir.pwd)
+ relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
+ current_build_dir = "#{build_dir}/#{relative_from_root}"
+
+ lex_def = "#{current_dir}/lex.def"
+ objs = Dir.glob("#{current_dir}/*.c").map { |f| objfile(f.pathmap("#{current_build_dir}/%n")) }
+ objs += [objfile("#{current_build_dir}/y.tab")]
self.libmruby << objs
file libfile("#{build_dir}/lib/libmruby_core") => objs do |t|
@@ -10,16 +13,16 @@ MRuby.each_target do
end
# Parser
- file "#{build_dir}/#{dir}/y.tab.c" => ["#{dir}/parse.y"] do |t|
+ file "#{current_build_dir}/y.tab.c" => ["#{current_dir}/parse.y"] do |t|
yacc.run t.name, t.prerequisites.first
end
- file objfile("#{build_dir}/#{dir}/y.tab") => ["#{build_dir}/#{dir}/y.tab.c", lex_def] do |t|
- cc.run t.name, t.prerequisites.first, [], [dir]
+ file objfile("#{current_build_dir}/y.tab") => ["#{current_build_dir}/y.tab.c", lex_def] do |t|
+ cc.run t.name, t.prerequisites.first, [], [current_dir]
end
# Lexical analyzer
- file lex_def => "#{dir}/keywords" do |t|
+ file lex_def => "#{current_dir}/keywords" do |t|
gperf.run t.name, t.prerequisites.first
end
end
diff --git a/tasks/mrbgems.rake b/tasks/mrbgems.rake
index 285aa75b8..17f266105 100644
--- a/tasks/mrbgems.rake
+++ b/tasks/mrbgems.rake
@@ -1,5 +1,6 @@
MRuby.each_target do
- dir = File.dirname(__FILE__).relative_path_from(root)
+ current_dir = File.dirname(__FILE__).relative_path_from(Dir.pwd)
+ relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
if enable_gems?
# set up all gems
@@ -8,7 +9,7 @@ MRuby.each_target do
# loader all gems
self.libmruby << objfile("#{build_dir}/mrbgems/gem_init")
file objfile("#{build_dir}/mrbgems/gem_init") => "#{build_dir}/mrbgems/gem_init.c"
- file "#{build_dir}/mrbgems/gem_init.c" => [MRUBY_CONFIGS].flatten do |t|
+ file "#{build_dir}/mrbgems/gem_init.c" => MRUBY_CONFIGS.flatten do |t|
FileUtils.mkdir_p "#{build_dir}/mrbgems"
open(t.name, 'w') do |f|
f.puts %Q[/*]
diff --git a/tasks/mrbgems_test.rake b/tasks/mrbgems_test.rake
index 2c8ee2ab2..6d40d092a 100644
--- a/tasks/mrbgems_test.rake
+++ b/tasks/mrbgems_test.rake
@@ -1,5 +1,7 @@
MRuby.each_target do
- dir = File.dirname(__FILE__).relative_path_from(root)
+ current_dir = File.dirname(__FILE__).relative_path_from(Dir.pwd)
+ relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
+ current_build_dir = "#{build_dir}/#{relative_from_root}"
gems.each do |g|
test_rbobj = g.test_rbireps.ext(exts.object)
diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake
index b296e8d37..4d28b1d95 100644
--- a/tasks/mruby_build.rake
+++ b/tasks/mruby_build.rake
@@ -1,5 +1,5 @@
-load 'tasks/mruby_build_gem.rake'
-load 'tasks/mruby_build_commands.rake'
+load "#{MRUBY_ROOT}/tasks/mruby_build_gem.rake"
+load "#{MRUBY_ROOT}/tasks/mruby_build_commands.rake"
module MRuby
class << self
@@ -30,7 +30,7 @@ module MRuby
end
def self.load
- Dir.glob("#{File.dirname(__FILE__)}/toolchains/*.rake").each do |file|
+ Dir.glob("#{MRUBY_ROOT}/tasks/toolchains/*.rake").each do |file|
Kernel.load file
end
end
@@ -44,7 +44,7 @@ module MRuby
include Rake::DSL
include LoadGems
attr_accessor :name, :bins, :exts, :file_separator
- attr_reader :root, :libmruby, :gems
+ attr_reader :libmruby, :gems
COMPILERS = %w(cc cxx objc asm)
COMMANDS = COMPILERS + %w(linker archiver yacc gperf git exts mrbc)
@@ -56,8 +56,6 @@ module MRuby
@name = name.to_s
unless MRuby.targets[@name]
- @root = File.expand_path("#{File.dirname(__FILE__)}/..")
-
if ENV['OS'] == 'Windows_NT'
@exts = Exts.new('.o', '.exe', '.a')
else
@@ -93,12 +91,16 @@ module MRuby
tc.setup(self)
end
+ def root
+ MRUBY_ROOT
+ end
+
def build_dir
- "build/#{self.name}"
+ "#{MRUBY_ROOT}/build/#{self.name}"
end
def mrbcfile
- MRuby.targets['host'].exefile("build/host/bin/mrbc")
+ MRuby.targets['host'].exefile("#{MRuby.targets['host'].build_dir}/bin/mrbc")
end
def compilers
@@ -114,7 +116,7 @@ module MRuby
else
compiler.defines += %w(DISABLE_GEMS)
end
- compiler.define_rules build_dir
+ compiler.define_rules build_dir, File.expand_path(File.join(File.dirname(__FILE__), '..'))
end
end
@@ -161,14 +163,14 @@ module MRuby
def run_test
puts ">>> Test #{name} <<<"
mrbtest = exefile("#{build_dir}/test/mrbtest")
- sh "#{filename mrbtest}"
+ sh "#{filename mrbtest.relative_path}"
puts
end
def print_build_summary
puts "================================================"
puts " Config Name: #{@name}"
- puts " Output Directory: #{self.build_dir}"
+ puts " Output Directory: #{self.build_dir.relative_path}"
puts " Binaries: #{@bins.join(', ')}" unless @bins.empty?
unless @gems.empty?
puts " Included Gems:"
diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake
index 884f2027f..ec8a8d3e3 100644
--- a/tasks/mruby_build_commands.rake
+++ b/tasks/mruby_build_commands.rake
@@ -39,7 +39,7 @@ module MRuby
@command = ENV['CC'] || 'cc'
@flags = [ENV['CFLAGS'] || []]
@source_exts = source_exts
- @include_paths = ["#{build.root}/include"]
+ @include_paths = ["#{MRUBY_ROOT}/include"]
@defines = %w()
@option_include_path = '-I%s'
@option_define = '-D%s'
@@ -60,7 +60,7 @@ module MRuby
include_path_flags = [include_paths, _include_paths, File.dirname(infile)].flatten.map do |f|
option_include_path % filename(f)
end
- _pp "CC", infile, outfile
+ _pp "CC", infile.relative_path, outfile.relative_path
_run compile_options, { :flags => all_flags(_defineds, _include_paths, _flags),
:infile => filename(infile), :outfile => filename(outfile) }
end
@@ -76,7 +76,7 @@ module MRuby
source_exts.each do |ext, compile|
rule generated_file_matcher => [
proc { |file|
- file.sub(generated_file_matcher, "#{source_dir}\\1#{ext}")
+ file.sub(generated_file_matcher, "#{source_dir}/\\1#{ext}")
},
proc { |file|
get_dependencies(file)
@@ -141,7 +141,7 @@ module MRuby
library_flags = [libraries, _libraries].flatten.map { |d| option_library % d }
library_path_flags = [library_paths, _library_paths].flatten.map { |f| option_library_path % filename(f) }
- _pp "LD", outfile
+ _pp "LD", outfile.relative_path
_run link_options, { :flags => all_flags(_library_paths, _flags),
:outfile => filename(outfile) , :objs => filename(objfiles).join(' '),
:flags_before_libraries => [flags_before_libraries, _flags_before_libraries].flatten.join(' '),
@@ -161,7 +161,7 @@ module MRuby
def run(outfile, objfiles)
FileUtils.mkdir_p File.dirname(outfile)
- _pp "AR", outfile
+ _pp "AR", outfile.relative_path
_run archive_options, { :outfile => filename(outfile), :objs => filename(objfiles).join(' ') }
end
end
@@ -177,7 +177,7 @@ module MRuby
def run(outfile, infile)
FileUtils.mkdir_p File.dirname(outfile)
- _pp "YACC", infile, outfile
+ _pp "YACC", infile.relative_path, outfile.relative_path
_run compile_options, { :outfile => filename(outfile) , :infile => filename(infile) }
end
end
@@ -193,7 +193,7 @@ module MRuby
def run(outfile, infile)
FileUtils.mkdir_p File.dirname(outfile)
- _pp "GPERF", infile, outfile
+ _pp "GPERF", infile.relative_path, outfile.relative_path
_run compile_options, { :outfile => filename(outfile) , :infile => filename(infile) }
end
end
@@ -210,7 +210,7 @@ module MRuby
end
def run_clone(dir, url, _flags = [])
- _pp "GIT", url, dir
+ _pp "GIT", url, dir.relative_path
_run clone_options, { :flags => [flags, _flags].flatten.join(' '), :url => url, :dir => filename(dir) }
end
end
@@ -226,7 +226,7 @@ module MRuby
@command ||= @build.mrbcfile
IO.popen("#{filename @command} #{@compile_options % {:funcname => funcname}}", 'r+') do |io|
[infiles].flatten.each do |f|
- _pp "MRBC", "#{f}", nil, :indent => 2
+ _pp "MRBC", f.relative_path, nil, :indent => 2
io.write IO.read(f)
end
io.close_write
diff --git a/tasks/ruby_ext.rake b/tasks/ruby_ext.rake
index 6817f6018..a0fbe7b72 100644
--- a/tasks/ruby_ext.rake
+++ b/tasks/ruby_ext.rake
@@ -12,6 +12,10 @@ class String
def relative_path_from(dir)
Pathname.new(File.expand_path(self)).relative_path_from(Pathname.new(File.expand_path(dir))).to_s
end
+
+ def relative_path
+ relative_path_from(Dir.pwd)
+ end
# Compatible with 1.9 on 1.8
def %(params)
diff --git a/tasks/toolchains/gcc.rake b/tasks/toolchains/gcc.rake
index bef9b8618..66fa75dcb 100644
--- a/tasks/toolchains/gcc.rake
+++ b/tasks/toolchains/gcc.rake
@@ -2,7 +2,7 @@ MRuby::Toolchain.new(:gcc) do |conf|
[conf.cc, conf.cxx, conf.objc, conf.asm].each do |cc|
cc.command = ENV['CC'] || 'gcc'
cc.flags = [ENV['CFLAGS'] || %w(-g -O3 -Wall -Werror-implicit-function-declaration)]
- cc.include_paths = ["#{root}/include"]
+ cc.include_paths = ["#{MRUBY_ROOT}/include"]
cc.defines = %w(DISABLE_GEMS)
cc.option_include_path = '-I%s'
cc.option_define = '-D%s'
diff --git a/tasks/toolchains/vs2012.rake b/tasks/toolchains/vs2012.rake
index 2f1a608b0..f4039cc29 100644
--- a/tasks/toolchains/vs2012.rake
+++ b/tasks/toolchains/vs2012.rake
@@ -2,7 +2,7 @@ MRuby::Toolchain.new(:vs2012) do |conf|
[conf.cc, conf.cxx].each do |cc|
cc.command = ENV['CC'] || 'cl.exe'
cc.flags = [ENV['CFLAGS'] || %w(/c /nologo /W3 /D_DEBUG /MDd /Zi /Od /RTC1 /DHAVE_STRING_H /DNO_GETTIMEOFDAY /D_CRT_SECURE_NO_WARNINGS)]
- cc.include_paths = ["#{root}/include"]
+ cc.include_paths = ["#{MRUBY_ROOT}/include"]
cc.defines = %w(DISABLE_GEMS)
cc.option_include_path = '/I%s'
cc.option_define = '/D%s'
diff --git a/test/mrbtest.rake b/test/mrbtest.rake
index 03e6c7ece..0507981d6 100644
--- a/test/mrbtest.rake
+++ b/test/mrbtest.rake
@@ -1,20 +1,22 @@
MRuby.each_target do
- dir = File.dirname(__FILE__).relative_path_from(root)
+ current_dir = File.dirname(__FILE__).relative_path_from(Dir.pwd)
+ relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
+ current_build_dir = "#{build_dir}/#{relative_from_root}"
- exec = exefile("#{build_dir}/#{dir}/mrbtest")
- clib = "#{build_dir}/#{dir}/mrbtest.c"
+ exec = exefile("#{current_build_dir}/mrbtest")
+ clib = "#{current_build_dir}/mrbtest.c"
mlib = clib.ext(exts.object)
- mrbs = Dir.glob("#{dir}/t/*.rb")
- init = "#{dir}/init_mrbtest.c"
- asslib = "#{dir}/assert.rb"
+ mrbs = Dir.glob("#{current_dir}/t/*.rb")
+ init = "#{current_dir}/init_mrbtest.c"
+ asslib = "#{current_dir}/assert.rb"
- mrbtest_lib = libfile("#{build_dir}/#{dir}/mrbtest")
+ mrbtest_lib = libfile("#{current_build_dir}/mrbtest")
file mrbtest_lib => [mlib, gems.map(&:test_objs), gems.map { |g| g.test_rbireps.ext(exts.object) }].flatten do |t|
archiver.run t.name, t.prerequisites
end
unless build_mrbtest_lib_only?
- driver_obj = objfile("#{build_dir}/#{dir}/driver")
+ driver_obj = objfile("#{current_build_dir}/driver")
file exec => [driver_obj, mrbtest_lib, libfile("#{build_dir}/lib/libmruby")] do |t|
gem_flags = gems.map { |g| g.linker.flags }
gem_flags_before_libraries = gems.map { |g| g.linker.flags_before_libraries }
@@ -27,7 +29,7 @@ MRuby.each_target do
file mlib => [clib]
file clib => [mrbcfile, init, asslib] + mrbs do |t|
- _pp "GEN", "*.rb", "#{clib}"
+ _pp "GEN", "*.rb", "#{clib.relative_path}"
FileUtils.mkdir_p File.dirname(clib)
open(clib, 'w') do |f|
f.puts IO.read(init)
diff --git a/tools/mirb/mirb.rake b/tools/mirb/mirb.rake
index 46e69136e..f258a9df9 100644
--- a/tools/mirb/mirb.rake
+++ b/tools/mirb/mirb.rake
@@ -1,9 +1,11 @@
MRuby.each_target do
- dir = File.dirname(__FILE__).relative_path_from(root)
+ current_dir = File.dirname(__FILE__).relative_path_from(Dir.pwd)
+ relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
+ current_build_dir = "#{build_dir}/#{relative_from_root}"
if bins.find { |s| s.to_s == 'mirb' }
exec = exefile("#{build_dir}/bin/mirb")
- objs = Dir.glob("#{dir}/*.c").map { |f| objfile(f.pathmap("#{build_dir}/%X")) }.flatten
+ objs = Dir.glob("#{current_dir}/*.c").map { |f| objfile(f.pathmap("#{current_build_dir}/%n")) }
file exec => objs + [libfile("#{build_dir}/lib/libmruby")] do |t|
gem_flags = gems.map { |g| g.linker.flags }
diff --git a/tools/mrbc/mrbc.rake b/tools/mrbc/mrbc.rake
index 0121b7f81..1a0309a0d 100644
--- a/tools/mrbc/mrbc.rake
+++ b/tools/mrbc/mrbc.rake
@@ -1,9 +1,11 @@
MRuby.each_target do
- dir = File.dirname(__FILE__).relative_path_from(root)
+ current_dir = File.dirname(__FILE__).relative_path_from(Dir.pwd)
+ relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
+ current_build_dir = "#{build_dir}/#{relative_from_root}"
if bins.find { |s| s.to_s == 'mrbc' }
exec = exefile("#{build_dir}/bin/mrbc")
- objs = Dir.glob("#{dir}/*.c").map { |f| objfile(f.pathmap("#{build_dir}/%X")) }.flatten
+ objs = Dir.glob("#{current_dir}/*.c").map { |f| objfile(f.pathmap("#{current_build_dir}/%n")) }.flatten
file exec => objs + [libfile("#{build_dir}/lib/libmruby_core")] do |t|
linker.run t.name, t.prerequisites
diff --git a/tools/mruby/mruby.rake b/tools/mruby/mruby.rake
index fccebff63..dc3cbe2a2 100644
--- a/tools/mruby/mruby.rake
+++ b/tools/mruby/mruby.rake
@@ -1,9 +1,11 @@
MRuby.each_target do
- dir = File.dirname(__FILE__).relative_path_from(root)
+ current_dir = File.dirname(__FILE__).relative_path_from(Dir.pwd)
+ relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
+ current_build_dir = "#{build_dir}/#{relative_from_root}"
if bins.find { |s| s.to_s == 'mruby' }
exec = exefile("#{build_dir}/bin/mruby")
- objs = Dir.glob("#{dir}/*.c").map { |f| objfile(f.pathmap("#{build_dir}/%X")) }.flatten
+ objs = Dir.glob("#{current_dir}/*.c").map { |f| objfile(f.pathmap("#{current_build_dir}/%n")) }.flatten
file exec => objs + [libfile("#{build_dir}/lib/libmruby")] do |t|
gem_flags = gems.map { |g| g.linker.flags }