diff options
| author | Yuichiro MASUI <[email protected]> | 2013-02-03 05:18:28 +0900 |
|---|---|---|
| committer | Yuichiro MASUI <[email protected]> | 2013-02-03 13:38:18 +0900 |
| commit | a74f92b46be80a754486e696d117903fbb090686 (patch) | |
| tree | d8a236616935a0341c1d1272642c0227231c63c9 | |
| parent | dfff732318395c7dc2a01ba64bafd1bd46bf454d (diff) | |
| download | mruby-a74f92b46be80a754486e696d117903fbb090686.tar.gz mruby-a74f92b46be80a754486e696d117903fbb090686.zip | |
Generate mrbtest.a file for sparete from driver.o
| -rw-r--r-- | Rakefile | 4 | ||||
| -rw-r--r-- | build_config.rb | 2 | ||||
| -rw-r--r-- | doc/compile/README.md | 10 | ||||
| -rw-r--r-- | tasks/mrbgem_spec.rake | 4 | ||||
| -rw-r--r-- | tasks/mrbgems_test.rake | 11 | ||||
| -rw-r--r-- | tasks/mruby_build.rake | 9 | ||||
| -rw-r--r-- | test/mrbtest.rake | 23 |
7 files changed, 43 insertions, 20 deletions
@@ -62,9 +62,9 @@ task :all => depfiles do end desc "run all mruby tests" -task :test => MRuby.targets.values.map { |t| t.exefile("#{t.build_dir}/test/mrbtest") } do +task :test => MRuby.targets.values.map { |t| t.build_mrbtest_lib_only? ? t.libfile("#{t.build_dir}/test/mrbtest") : t.exefile("#{t.build_dir}/test/mrbtest") } do MRuby.each_target do - run_test + run_test unless build_mrbtest_lib_only? end end diff --git a/build_config.rb b/build_config.rb index eeaa255ab..2e2f886c5 100644 --- a/build_config.rb +++ b/build_config.rb @@ -73,6 +73,8 @@ end # # conf.cc.flags << "-m32" # conf.linker.flags << "-m32" +# +# conf.build_mrbtest_lib_only # # conf.gem 'examples/mrbgems/c_and_ruby_extension_example' # end diff --git a/doc/compile/README.md b/doc/compile/README.md index a86ddbe62..c6ab2f584 100644 --- a/doc/compile/README.md +++ b/doc/compile/README.md @@ -160,6 +160,16 @@ Integrate GEMs in the build process. # Integrate GEM without additional configuration conf.gem 'path/to/another/gem' + +### Mrbtest + +Configuration Mrbtest build process. + +If you want mrbtest.a only, You should set ```conf.build_mrbtest_lib_only``` + + conf.build_mrbtest_lib_only + + ## Cross-Compilation mruby can also be cross-compiled from one platform to another. To diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index daf4410de..224e69e9d 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -77,8 +77,8 @@ module MRuby "#{build.build_dir}/mrbgems/#{name}" end - def testlib - libfile("#{build_dir}/libmrb-#{name}-gem-test") + def test_rbireps + "#{build_dir}/gem_test.c" end def funcname diff --git a/tasks/mrbgems_test.rake b/tasks/mrbgems_test.rake index 80c309c44..96b7b8522 100644 --- a/tasks/mrbgems_test.rake +++ b/tasks/mrbgems_test.rake @@ -2,15 +2,10 @@ MRuby.each_target do dir = File.dirname(__FILE__).relative_path_from(root) gems.each do |g| - test_rbc = "#{g.build_dir}/gem_test.c" - test_rbobj = test_rbc.ext(exts.object) + test_rbobj = g.test_rbireps.ext(exts.object) - file g.testlib => [g.test_objs, test_rbobj].flatten do |t| - g.build.archiver.run t.name, t.prerequisites - end - - file test_rbobj => test_rbc - file test_rbc => [g.test_rbfiles].flatten + [g.build.mrbcfile, libfile("#{build_dir}/lib/libmruby")] do |t| + file test_rbobj => g.test_rbireps + file g.test_rbireps => [g.test_rbfiles].flatten + [g.build.mrbcfile, libfile("#{build_dir}/lib/libmruby")] do |t| open(t.name, 'w') do |f| g.print_gem_init_header(f) g.build.mrbc.run f, g.test_preload, "gem_test_irep_#{g.funcname}_preload" diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake index cbef16d24..b296e8d37 100644 --- a/tasks/mruby_build.rake +++ b/tasks/mruby_build.rake @@ -78,6 +78,7 @@ module MRuby @bins = %w(mruby mrbc mirb) @gems, @libmruby = [], [] + @build_mrbtest_lib_only = false MRuby.targets[@name] = self end @@ -149,6 +150,14 @@ module MRuby end end + def build_mrbtest_lib_only + @build_mrbtest_lib_only = true + end + + def build_mrbtest_lib_only? + @build_mrbtest_lib_only + end + def run_test puts ">>> Test #{name} <<<" mrbtest = exefile("#{build_dir}/test/mrbtest") diff --git a/test/mrbtest.rake b/test/mrbtest.rake index 4d4a7e57c..707fe8b72 100644 --- a/test/mrbtest.rake +++ b/test/mrbtest.rake @@ -8,20 +8,27 @@ MRuby.each_target do init = "#{dir}/init_mrbtest.c" asslib = "#{dir}/assert.rb" - objs = [objfile("#{build_dir}/#{dir}/driver"), mlib].flatten + mrbtest_lib = libfile("#{build_dir}/#{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 - file exec => objs + gems.map(&:testlib).flatten + [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 } - gem_flags_after_libraries = gems.map { |g| g.linker.flags_after_libraries } - gem_libraries = gems.map { |g| g.linker.libraries } - gem_library_paths = gems.map { |g| g.linker.library_paths } - linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags, gem_flags_before_libraries + unless build_mrbtest_lib_only? + driver_obj = objfile("#{build_dir}/#{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 } + gem_flags_after_libraries = gems.map { |g| g.linker.flags_after_libraries } + gem_libraries = gems.map { |g| g.linker.libraries } + gem_library_paths = gems.map { |g| g.linker.library_paths } + linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags, gem_flags_before_libraries + end end file mlib => [clib] file clib => [mrbcfile, init, asslib] + mrbs do |t| _pp "GEN", "*.rb", "#{clib}" + FileUtils.mkdir_p File.dirname(__FILE__) open(clib, 'w') do |f| f.puts IO.read(init) mrbc.run f, [asslib] + mrbs, 'mrbtest_irep' |
