From 6460ef77bcceb17d80d1b46a07b28fada19737c8 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Mon, 6 Apr 2015 15:20:13 +0900 Subject: Compile mruby compiler as mrbgem. Compiler codes is moved to "mruby-compiler". Executable `mrbc` is moved to "mruby-bin-mrbc". --- tasks/mruby_build.rake | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'tasks') diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake index 66608286d..50bed0fbe 100644 --- a/tasks/mruby_build.rake +++ b/tasks/mruby_build.rake @@ -80,7 +80,7 @@ module MRuby @git = Command::Git.new(self) @mrbc = Command::Mrbc.new(self) - @bins = %w(mrbc) + @bins = [] @gems, @libmruby = MRuby::Gem::List.new, [] @build_mrbtest_lib_only = false @cxx_abi_enabled = false @@ -92,6 +92,8 @@ module MRuby MRuby::Build.current = MRuby.targets[@name] MRuby.targets[@name].instance_eval(&block) + + build_mrbc_exec if name == 'host' end def enable_debug @@ -119,6 +121,33 @@ module MRuby @cxx_abi_enabled = true end + def compile_as_cxx src, cxx_src, obj = nil, includes = [] + src = File.absolute_path src + cxx_src = File.absolute_path cxx_src + obj = objfile(cxx_src) if obj.nil? + + file cxx_src => [src, __FILE__] do |t| + File.open(t.name, 'w') do |f| + f.write < cxx_src do |t| + cxx.run t.name, t.prerequisites.first, [], ["#{MRUBY_ROOT}/src"] + includes + end + + obj + end + def enable_bintest @enable_bintest = true end @@ -142,8 +171,16 @@ module MRuby MRUBY_ROOT end + def build_mrbc_exec + gem :core => 'mruby-bin-mrbc' + end + def mrbcfile - MRuby.targets[@name].exefile("#{MRuby.targets[@name].build_dir}/bin/mrbc") + return @mrbcfile if @mrbcfile + + mrbc_build = MRuby.targets['host'] + gems.each { |v| mrbc_build = self if v.name == 'mruby-bin-mrbc' } + @mrbcfile = mrbc_build.exefile("#{mrbc_build.build_dir}/bin/mrbc") end def compilers -- cgit v1.2.3 From 8d54977d259137b61a4e391a3928374d1b29aca3 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Mon, 22 Jun 2015 02:23:11 +0900 Subject: Add :mgem gem loader to load mrbgem from mgem-list ( https://github.com/mruby/mgem-list ). --- tasks/mruby_build_gem.rake | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'tasks') diff --git a/tasks/mruby_build_gem.rake b/tasks/mruby_build_gem.rake index dbbade487..d9d2575bd 100644 --- a/tasks/mruby_build_gem.rake +++ b/tasks/mruby_build_gem.rake @@ -52,6 +52,26 @@ module MRuby else params[:git] = "https://bitbucket.org/#{params[:bitbucket]}.git" end + elsif params[:mgem] + mgem_list_dir = "#{gem_clone_dir}/mgem-list" + mgem_list_url = 'https://github.com/mruby/mgem-list.git' + if File.exist? mgem_list_dir + git.run_pull mgem_list_dir, mgem_list_url if $pull_gems + else + FileUtils.mkdir_p mgem_list_dir + git.run_clone mgem_list_dir, mgem_list_url + end + + require 'yaml' + + conf_path = "#{mgem_list_dir}/#{params[:mgem]}.gem" + conf_path = "#{mgem_list_dir}/mruby-#{params[:mgem]}.gem" unless File.exist? conf_path + fail "mgem not found: #{params[:mgem]}" unless File.exist? conf_path + conf = YAML.load File.read conf_path + + fail "unknown mgem protocol: #{conf['protocol']}" if conf['protocol'] != 'git' + params[:git] = conf['repository'] + params[:branch] = conf['branch"] if conf["branch'] end if params[:core] -- cgit v1.2.3 From 0c8fa845e4faf83c50b0df0272c58870832d9e62 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Mon, 22 Jun 2015 02:23:52 +0900 Subject: Load missing dependencies from core or mgem-list. --- tasks/mrbgem_spec.rake | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'tasks') diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index e6e17e182..e22a39e19 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -304,7 +304,14 @@ module MRuby default_gems = [] each do |g| g.dependencies.each do |dep| - default_gems << dep if dep[:default] and not gem_table.key? dep[:gem] + unless gem_table.key? dep[:gem] + if dep[:default]; default_gems << dep + elsif File.exist? "#{root}/mrbgems/#{dep[:gem]}" # check core + default_gems << { :gem => dep[:gem], :default => { :core => dep[:gem] } } + else # fallback to mgem-list + default_gems << { :gem => dep[:gem], :default => { :mgem => dep[:gem] } } + end + end end end @@ -316,7 +323,11 @@ module MRuby spec.setup spec.dependencies.each do |dep| - default_gems << dep if dep[:default] and not gem_table.key? dep[:gem] + unless gem_table.key? dep[:gem] + if dep[:default]; default_gems << dep + else default_gems << { :gem => dep[:gem], :default => { :mgem => dep[:gem] } } + end + end end gem_table[spec.name] = spec end -- cgit v1.2.3 From 0006a8cd4a15e52de7bb02fc89287183f2ef2209 Mon Sep 17 00:00:00 2001 From: Terence Lee Date: Tue, 23 Jun 2015 12:35:31 -0400 Subject: add host_target/build_target options for CrossBuild'ng native extensions --- tasks/mruby_build.rake | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'tasks') diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake index 50bed0fbe..947b4ba77 100644 --- a/tasks/mruby_build.rake +++ b/tasks/mruby_build.rake @@ -283,6 +283,10 @@ EOS class CrossBuild < Build attr_block %w(test_runner) + # cross compiling targets for building native extensions. + # host - arch of where the built binary will run + # build - arch of the machine building the binary + attr_accessor :host_target, :build_target def initialize(name, build_dir=nil, &block) @test_runner = Command::CrossTestRunner.new(self) -- cgit v1.2.3 From a15e99d2b62127e05df50d6c9ba00d42e1de731f Mon Sep 17 00:00:00 2001 From: mattn Date: Thu, 25 Jun 2015 00:19:04 +0900 Subject: add_dependency doesn't work --- tasks/mrbgem_spec.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tasks') diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index e22a39e19..04a9c39f0 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -306,7 +306,7 @@ module MRuby g.dependencies.each do |dep| unless gem_table.key? dep[:gem] if dep[:default]; default_gems << dep - elsif File.exist? "#{root}/mrbgems/#{dep[:gem]}" # check core + elsif File.exist? "#{MRUBY_ROOT}/mrbgems/#{dep[:gem]}" # check core default_gems << { :gem => dep[:gem], :default => { :core => dep[:gem] } } else # fallback to mgem-list default_gems << { :gem => dep[:gem], :default => { :mgem => dep[:gem] } } -- cgit v1.2.3 From 449ec101f61a912f3b4b45e7378a18be784401a5 Mon Sep 17 00:00:00 2001 From: Thiago Scalone Date: Fri, 26 Jun 2015 14:22:09 -0300 Subject: Add —-recursive option to automatically update submodules from git mgems. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tasks/mruby_build_gem.rake | 1 + 1 file changed, 1 insertion(+) (limited to 'tasks') diff --git a/tasks/mruby_build_gem.rake b/tasks/mruby_build_gem.rake index d9d2575bd..27d4f8886 100644 --- a/tasks/mruby_build_gem.rake +++ b/tasks/mruby_build_gem.rake @@ -91,6 +91,7 @@ module MRuby end else options = [params[:options]] || [] + options << "--recursive" options << "--branch \"#{branch}\"" options << "--depth 1" unless params[:checksum_hash] FileUtils.mkdir_p "#{gem_clone_dir}" -- cgit v1.2.3 From fa4b88b89316380750a3621261bf2909d15d3c3f Mon Sep 17 00:00:00 2001 From: Thiago Scalone Date: Fri, 26 Jun 2015 14:35:34 -0300 Subject: Fix quotes use during load special path gem of gem. --- tasks/mruby_build_gem.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tasks') diff --git a/tasks/mruby_build_gem.rake b/tasks/mruby_build_gem.rake index d9d2575bd..68de28761 100644 --- a/tasks/mruby_build_gem.rake +++ b/tasks/mruby_build_gem.rake @@ -71,7 +71,7 @@ module MRuby fail "unknown mgem protocol: #{conf['protocol']}" if conf['protocol'] != 'git' params[:git] = conf['repository'] - params[:branch] = conf['branch"] if conf["branch'] + params[:branch] = conf['branch'] if conf['branch'] end if params[:core] -- cgit v1.2.3 From 0b50b4a5005c3233b88b09f196034352ebdfc515 Mon Sep 17 00:00:00 2001 From: xuejianqing Date: Mon, 6 Jul 2015 12:51:57 +0800 Subject: fix androideabi cross-compile error : undefined reference to 'frexpl' --- src/fmt_fp.c | 9 +++------ tasks/toolchains/androideabi.rake | 4 ++-- 2 files changed, 5 insertions(+), 8 deletions(-) (limited to 'tasks') diff --git a/src/fmt_fp.c b/src/fmt_fp.c index a634edb34..b467435a3 100644 --- a/src/fmt_fp.c +++ b/src/fmt_fp.c @@ -90,12 +90,9 @@ fmt_u(uint32_t x, char *s) typedef char compiler_defines_long_double_incorrectly[9-(int)sizeof(long double)]; #endif -#if (defined(__CYGWIN32__) || defined(__NetBSD__) || defined(mips)) && !defined(__linux__) -static long double -frexpl (long double x, int *eptr) -{ - return frexp(x, eptr); -} +#if ((defined(__CYGWIN32__) || defined(__NetBSD__) || defined(mips)) && !defined(__linux__)) || defined(__android__) +#undef frexpl +#define frexpl frexp #endif static int diff --git a/tasks/toolchains/androideabi.rake b/tasks/toolchains/androideabi.rake index 61881ca31..7cdb9e43a 100644 --- a/tasks/toolchains/androideabi.rake +++ b/tasks/toolchains/androideabi.rake @@ -109,8 +109,8 @@ MRuby::Toolchain.new(:androideabi) do |conf| ANDROID_CC = path_to_toolchain + '/bin/' + toolchain_prefix + 'gcc' ANDROID_LD = path_to_toolchain + '/bin/' + toolchain_prefix + 'gcc' ANDROID_AR = path_to_toolchain + '/bin/' + toolchain_prefix + 'ar' - ANDROID_CFLAGS = GCC_COMMON_CFLAGS + %W(-mandroid --sysroot="#{SYSROOT}") + ARCH_CFLAGS - ANDROID_LDFLAGS = GCC_COMMON_LDFLAGS + %W(-mandroid --sysroot="#{SYSROOT}") + ARCH_LDFLAGS + ANDROID_CFLAGS = GCC_COMMON_CFLAGS + %W(-D__android__ -mandroid --sysroot="#{SYSROOT}") + ARCH_CFLAGS + ANDROID_LDFLAGS = GCC_COMMON_LDFLAGS + %W(-D__android__ -mandroid --sysroot="#{SYSROOT}") + ARCH_LDFLAGS when 'clang' then # clang is not supported yet. when 'clang31', 'clang3.1' then -- cgit v1.2.3 From 2e4bc2de8889a321fbde9898bc9afc9daefd8f76 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Mon, 22 Jun 2015 00:05:07 +0900 Subject: Refactor `Build#compile_as_cxx`. --- tasks/mruby_build.rake | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'tasks') diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake index 947b4ba77..9f8b4eda5 100644 --- a/tasks/mruby_build.rake +++ b/tasks/mruby_build.rake @@ -127,8 +127,8 @@ module MRuby obj = objfile(cxx_src) if obj.nil? file cxx_src => [src, __FILE__] do |t| - File.open(t.name, 'w') do |f| - f.write < cxx_src do |t| -- cgit v1.2.3 From f01704477fd420839e002875e146a58a3af91c73 Mon Sep 17 00:00:00 2001 From: Seba Gamboa Date: Wed, 22 Jul 2015 21:57:20 -0300 Subject: Add ability to change compiler versions for androideabi --- tasks/toolchains/androideabi.rake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'tasks') diff --git a/tasks/toolchains/androideabi.rake b/tasks/toolchains/androideabi.rake index 7cdb9e43a..d2d5dcec4 100644 --- a/tasks/toolchains/androideabi.rake +++ b/tasks/toolchains/androideabi.rake @@ -27,6 +27,8 @@ MRuby::Toolchain.new(:androideabi) do |conf| ANDROID_TARGET_ARCH = ENV['ANDROID_TARGET_ARCH'] || DEFAULT_ANDROID_TARGET_ARCH ANDROID_TARGET_ARCH_ABI = ENV['ANDROID_TARGET_ARCH_ABI'] || DEFAULT_ANDROID_TARGET_ARCH_ABI ANDROID_TOOLCHAIN = ENV['ANDROID_TOOLCHAIN'] || DEFAULT_ANDROID_TOOLCHAIN + GCC_VERSION = ENV['GCC_VERSION'] || GCC_VERSION + CLANG_VERSION = ENV['CLANG_VERSION'] || CLANG_VERSION case ANDROID_TARGET_ARCH.downcase when 'arch-arm', 'arm' then @@ -74,9 +76,9 @@ MRuby::Toolchain.new(:androideabi) do |conf| else # Any other architecture are not supported by Android NDK. end - path_to_toolchain += DEFAULT_GCC_VERSION + '/prebuilt/' + HOST_PLATFORM + path_to_toolchain += GCC_VERSION + '/prebuilt/' + HOST_PLATFORM else - path_to_toolchain += 'llvm-' + DEFAULT_CLANG_VERSION + '/prebuilt/' + HOST_PLATFORM + path_to_toolchain += 'llvm-' + CLANG_VERSION + '/prebuilt/' + HOST_PLATFORM end else path_to_toolchain = ANDROID_STANDALONE_TOOLCHAIN -- cgit v1.2.3 From 007d26f168689f785be9ddf97cc5293ad534a4c7 Mon Sep 17 00:00:00 2001 From: xuejianqing Date: Sat, 25 Jul 2015 18:43:27 +0800 Subject: fix android compile bug : uninitialized constant GCC_VERSION --- tasks/toolchains/androideabi.rake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tasks') diff --git a/tasks/toolchains/androideabi.rake b/tasks/toolchains/androideabi.rake index d2d5dcec4..272e802f7 100644 --- a/tasks/toolchains/androideabi.rake +++ b/tasks/toolchains/androideabi.rake @@ -27,8 +27,8 @@ MRuby::Toolchain.new(:androideabi) do |conf| ANDROID_TARGET_ARCH = ENV['ANDROID_TARGET_ARCH'] || DEFAULT_ANDROID_TARGET_ARCH ANDROID_TARGET_ARCH_ABI = ENV['ANDROID_TARGET_ARCH_ABI'] || DEFAULT_ANDROID_TARGET_ARCH_ABI ANDROID_TOOLCHAIN = ENV['ANDROID_TOOLCHAIN'] || DEFAULT_ANDROID_TOOLCHAIN - GCC_VERSION = ENV['GCC_VERSION'] || GCC_VERSION - CLANG_VERSION = ENV['CLANG_VERSION'] || CLANG_VERSION + GCC_VERSION = ENV['GCC_VERSION'] || DEFAULT_GCC_VERSION + CLANG_VERSION = ENV['CLANG_VERSION'] || DEFAULT_CLANG_VERSION case ANDROID_TARGET_ARCH.downcase when 'arch-arm', 'arm' then -- cgit v1.2.3 From 578db292fd9a829d10f81cbcd274993219166f32 Mon Sep 17 00:00:00 2001 From: xuejianqing Date: Mon, 27 Jul 2015 12:22:23 +0800 Subject: mrbgem compile should be depend on mrbgem.rake --- tasks/mrbgem_spec.rake | 2 +- tasks/mruby_build_commands.rake | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'tasks') diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index 04a9c39f0..d13e7733f 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -130,7 +130,7 @@ module MRuby end def define_gem_init_builder - file objfile("#{build_dir}/gem_init") => "#{build_dir}/gem_init.c" + file objfile("#{build_dir}/gem_init") => [ "#{build_dir}/gem_init.c", File.join(dir, "mrbgem.rake") ] file "#{build_dir}/gem_init.c" => [build.mrbcfile, __FILE__] + [rbfiles].flatten do |t| FileUtils.mkdir_p build_dir generate_gem_init("#{build_dir}/gem_init.c") diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake index 4fbfaa785..f4805f46d 100644 --- a/tasks/mruby_build_commands.rake +++ b/tasks/mruby_build_commands.rake @@ -92,6 +92,8 @@ module MRuby def define_rules(build_dir, source_dir='') @out_ext = build.exts.object + gemrake = File.join(source_dir, "mrbgem.rake") + rakedep = File.exist?(gemrake) ? [ gemrake ] : [] if build_dir.include? "mrbgems/" generated_file_matcher = Regexp.new("^#{Regexp.escape build_dir}/(.*)#{Regexp.escape out_ext}$") @@ -104,7 +106,7 @@ module MRuby file.sub(generated_file_matcher, "#{source_dir}/\\1#{ext}") }, proc { |file| - get_dependencies(file) + get_dependencies(file) + rakedep } ] do |t| run t.name, t.prerequisites.first @@ -115,7 +117,7 @@ module MRuby file.sub(generated_file_matcher, "#{build_dir}/\\1#{ext}") }, proc { |file| - get_dependencies(file) + get_dependencies(file) + rakedep } ] do |t| run t.name, t.prerequisites.first -- cgit v1.2.3 From 923e04cf5051cde3000ee84604a2a3e14b5e655d Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Mon, 27 Jul 2015 17:16:37 -0400 Subject: Shallow clone mgem source --- tasks/mruby_build_gem.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tasks') diff --git a/tasks/mruby_build_gem.rake b/tasks/mruby_build_gem.rake index 26990a380..f0282aee0 100644 --- a/tasks/mruby_build_gem.rake +++ b/tasks/mruby_build_gem.rake @@ -59,7 +59,7 @@ module MRuby git.run_pull mgem_list_dir, mgem_list_url if $pull_gems else FileUtils.mkdir_p mgem_list_dir - git.run_clone mgem_list_dir, mgem_list_url + git.run_clone mgem_list_dir, mgem_list_url, "--depth 1" end require 'yaml' -- cgit v1.2.3 From 5c055d670a7c45e0d6ba201aa8ca44a4fd24ecba Mon Sep 17 00:00:00 2001 From: Terence Lee Date: Sun, 2 Aug 2015 14:37:12 +0200 Subject: be able to source with :path for mrbgems --- tasks/mruby_build_gem.rake | 3 +++ 1 file changed, 3 insertions(+) (limited to 'tasks') diff --git a/tasks/mruby_build_gem.rake b/tasks/mruby_build_gem.rake index f0282aee0..896aeb147 100644 --- a/tasks/mruby_build_gem.rake +++ b/tasks/mruby_build_gem.rake @@ -76,6 +76,9 @@ module MRuby if params[:core] gemdir = "#{root}/mrbgems/#{params[:core]}" + elsif params[:path] + require 'pathname' + gemdir = Pathname.new(params[:path]).absolute? ? params[:path] : "#{root}/#{params[:path]}" elsif params[:git] url = params[:git] gemdir = "#{gem_clone_dir}/#{url.match(/([-\w]+)(\.[-\w]+|)$/).to_a[1]}" -- cgit v1.2.3 From 133d57cb0d989b956bac899ccc5171351d15fc06 Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Sat, 22 Aug 2015 10:21:52 -0400 Subject: Add mruby-test build config and update :test task to use mrbgem binary Removed old mrbgems_test.rake which was merged into mrbgem spec --- Rakefile | 9 +++-- build_config.rb | 10 ++++++ tasks/mrbgems_test.rake | 94 ------------------------------------------------- tasks/mruby_build.rake | 2 +- 4 files changed, 15 insertions(+), 100 deletions(-) delete mode 100644 tasks/mrbgems_test.rake (limited to 'tasks') diff --git a/Rakefile b/Rakefile index 89dab05e7..574c1365a 100644 --- a/Rakefile +++ b/Rakefile @@ -26,9 +26,6 @@ load "#{MRUBY_ROOT}/mrblib/mrblib.rake" load "#{MRUBY_ROOT}/tasks/mrbgems.rake" load "#{MRUBY_ROOT}/tasks/libmruby.rake" -load "#{MRUBY_ROOT}/tasks/mrbgems_test.rake" -load "#{MRUBY_ROOT}/test/mrbtest.rake" - load "#{MRUBY_ROOT}/tasks/benchmark.rake" ############################## @@ -117,9 +114,11 @@ task :all => depfiles do end desc "run all mruby tests" -task :test => ["all"] + 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 +task :test => ["all"] do MRuby.each_target do - run_test unless build_mrbtest_lib_only? + if gems.find { |v| v.name == 'mruby-test' } + run_test unless build_mrbtest_lib_only? + end end end diff --git a/build_config.rb b/build_config.rb index 3408f19a1..e1178d6b2 100644 --- a/build_config.rb +++ b/build_config.rb @@ -108,6 +108,16 @@ MRuby::Build.new('host-debug') do |conf| # conf.enable_bintest end +MRuby::Build.new('test') do |conf| + toolchain :gcc + + enable_debug + conf.enable_bintest + + conf.gembox 'default' + conf.gem :core => "mruby-test" +end + # Define cross build settings # MRuby::CrossBuild.new('32bit') do |conf| # toolchain :gcc diff --git a/tasks/mrbgems_test.rake b/tasks/mrbgems_test.rake deleted file mode 100644 index 0ee508360..000000000 --- a/tasks/mrbgems_test.rake +++ /dev/null @@ -1,94 +0,0 @@ -MRuby.each_target do - gem_table = gems.generate_gem_table self - - gems.each do |g| - test_rbobj = g.test_rbireps.ext(exts.object) - g.test_objs << test_rbobj - dep_list = gems.tsort_dependencies(g.test_dependencies, gem_table).select(&:generate_functions) - - file test_rbobj => g.test_rbireps - file g.test_rbireps => [g.test_rbfiles].flatten + [File.join(g.dir, 'mrbgem.rake'), g.build.mrbcfile, __FILE__, "#{MRUBY_ROOT}/tasks/mrbgem_spec.rake"] do |t| - FileUtils.mkdir_p File.dirname(t.name) - open(t.name, 'w') do |f| - g.print_gem_test_header(f) - test_preload = g.test_preload and [g.dir, MRUBY_ROOT].map {|dir| - File.expand_path(g.test_preload, dir) - }.find {|file| File.exist?(file) } - - f.puts %Q[/*] - f.puts %Q[ * This file contains a test code for #{g.name} gem.] - f.puts %Q[ *] - f.puts %Q[ * IMPORTANT:] - f.puts %Q[ * This file was generated!] - f.puts %Q[ * All manual changes will get lost.] - f.puts %Q[ */] - if test_preload.nil? - f.puts %Q[extern const uint8_t mrbtest_assert_irep[];] - else - g.build.mrbc.run f, test_preload, "gem_test_irep_#{g.funcname}_preload" - end - g.test_rbfiles.flatten.each_with_index do |rbfile, i| - g.build.mrbc.run f, rbfile, "gem_test_irep_#{g.funcname}_#{i}" - end - f.puts %Q[void mrb_#{g.funcname}_gem_test(mrb_state *mrb);] unless g.test_objs.empty? - dep_list.each do |d| - f.puts %Q[void GENERATED_TMP_mrb_#{d.funcname}_gem_init(mrb_state *mrb);] - f.puts %Q[void GENERATED_TMP_mrb_#{d.funcname}_gem_final(mrb_state *mrb);] - end - f.puts %Q[void mrb_init_test_driver(mrb_state *mrb, mrb_bool verbose);] - f.puts %Q[void mrb_t_pass_result(mrb_state *dst, mrb_state *src);] - f.puts %Q[void GENERATED_TMP_mrb_#{g.funcname}_gem_test(mrb_state *mrb) {] - unless g.test_rbfiles.empty? - f.puts %Q[ mrb_state *mrb2;] - unless g.test_args.empty? - f.puts %Q[ mrb_value test_args_hash;] - end - f.puts %Q[ int ai;] - g.test_rbfiles.count.times do |i| - f.puts %Q[ ai = mrb_gc_arena_save(mrb);] - f.puts %Q[ mrb2 = mrb_open_core(mrb_default_allocf, NULL);] - f.puts %Q[ if (mrb2 == NULL) {] - f.puts %Q[ fprintf(stderr, "Invalid mrb_state, exiting \%s", __FUNCTION__);] - f.puts %Q[ exit(EXIT_FAILURE);] - f.puts %Q[ }] - dep_list.each do |d| - f.puts %Q[ GENERATED_TMP_mrb_#{d.funcname}_gem_init(mrb2);] - f.puts %Q[ mrb_state_atexit(mrb2, GENERATED_TMP_mrb_#{d.funcname}_gem_final);] - end - f.puts %Q[ mrb_init_test_driver(mrb2, mrb_test(mrb_gv_get(mrb, mrb_intern_lit(mrb, "$mrbtest_verbose"))));] - if test_preload.nil? - f.puts %Q[ mrb_load_irep(mrb2, mrbtest_assert_irep);] - else - f.puts %Q[ mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_preload);] - end - f.puts %Q[ if (mrb2->exc) {] - f.puts %Q[ mrb_print_error(mrb2);] - f.puts %Q[ exit(EXIT_FAILURE);] - f.puts %Q[ }] - f.puts %Q[ mrb_const_set(mrb2, mrb_obj_value(mrb2->object_class), mrb_intern_lit(mrb2, "GEMNAME"), mrb_str_new(mrb2, "#{g.name}", #{g.name.length}));] - - unless g.test_args.empty? - f.puts %Q[ test_args_hash = mrb_hash_new_capa(mrb, #{g.test_args.length}); ] - g.test_args.each do |arg_name, arg_value| - escaped_arg_name = arg_name.gsub('\\', '\\\\\\\\').gsub('"', '\"') - escaped_arg_value = arg_value.gsub('\\', '\\\\\\\\').gsub('"', '\"') - f.puts %Q[ mrb_hash_set(mrb2, test_args_hash, mrb_str_new(mrb2, "#{escaped_arg_name.to_s}", #{escaped_arg_name.to_s.length}), mrb_str_new(mrb2, "#{escaped_arg_value.to_s}", #{escaped_arg_value.to_s.length})); ] - end - f.puts %Q[ mrb_const_set(mrb2, mrb_obj_value(mrb2->object_class), mrb_intern_lit(mrb2, "TEST_ARGS"), test_args_hash); ] - end - - f.puts %Q[ mrb_#{g.funcname}_gem_test(mrb2);] if g.custom_test_init? - - f.puts %Q[ mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_#{i});] - f.puts %Q[ ] - - f.puts %Q[ mrb_t_pass_result(mrb, mrb2);] - f.puts %Q[ mrb_close(mrb2);] - f.puts %Q[ mrb_gc_arena_restore(mrb, ai);] - end - end - f.puts %Q[}] - end - end - end -end diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake index 9f8b4eda5..b3a5dcdad 100644 --- a/tasks/mruby_build.rake +++ b/tasks/mruby_build.rake @@ -249,7 +249,7 @@ EOS def run_test puts ">>> Test #{name} <<<" - mrbtest = exefile("#{build_dir}/test/mrbtest") + mrbtest = exefile("#{build_dir}/bin/mrbtest") sh "#{filename mrbtest.relative_path}#{$verbose ? ' -v' : ''}" puts run_bintest if @enable_bintest -- cgit v1.2.3 From bacb8268682e8d931a00e7894ed7904bc789d8c4 Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Wed, 2 Sep 2015 23:11:18 -0400 Subject: Add build_mrbtest after config block is evaluated This allows us to add `enable_test` anywhere in a build target, without having to worry about the order in which they are included. Previously, there was a bug that occured when adding 'mruby-test' gem to dependencies before additional gems. Instead of adding the 'mruby-test' gem dependency manually to a test build, we now only need to call `enable_test` in the target. This also allows us to call `test_enabled?` downstream when running mruby tests ourselves. /cc #2924 --- Rakefile | 4 +--- build_config.rb | 2 +- mrbgems/mruby-test/mrbgem.rake | 2 +- tasks/mruby_build.rake | 21 ++++++++++++++++++--- travis_config.rb | 12 ++---------- 5 files changed, 23 insertions(+), 18 deletions(-) (limited to 'tasks') diff --git a/Rakefile b/Rakefile index 574c1365a..8a8912af5 100644 --- a/Rakefile +++ b/Rakefile @@ -116,9 +116,7 @@ end desc "run all mruby tests" task :test => ["all"] do MRuby.each_target do - if gems.find { |v| v.name == 'mruby-test' } - run_test unless build_mrbtest_lib_only? - end + run_test if test_enabled? end end diff --git a/build_config.rb b/build_config.rb index 34b92637c..d3c1ebc1f 100644 --- a/build_config.rb +++ b/build_config.rb @@ -114,9 +114,9 @@ MRuby::Build.new('test') do |conf| enable_debug conf.enable_bintest + conf.enable_test conf.gembox 'default' - conf.gem :core => "mruby-test" end # Define cross build settings diff --git a/mrbgems/mruby-test/mrbgem.rake b/mrbgems/mruby-test/mrbgem.rake index 8370f4713..b6b247ff6 100644 --- a/mrbgems/mruby-test/mrbgem.rake +++ b/mrbgems/mruby-test/mrbgem.rake @@ -32,7 +32,7 @@ MRuby::Gem::Specification.new('mruby-test') do |spec| end end - gem_table = build.gems.generate_gem_table self + gem_table = build.gems.generate_gem_table build build.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 b3a5dcdad..6863b635a 100644 --- a/tasks/mruby_build.rake +++ b/tasks/mruby_build.rake @@ -46,7 +46,7 @@ module MRuby include LoadGems attr_accessor :name, :bins, :exts, :file_separator, :build_dir, :gem_clone_dir attr_reader :libmruby, :gems, :toolchains - attr_writer :enable_bintest + attr_writer :enable_bintest, :enable_test COMPILERS = %w(cc cxx objc asm) COMMANDS = COMPILERS + %w(linker archiver yacc gperf git exts mrbc) @@ -85,6 +85,8 @@ module MRuby @build_mrbtest_lib_only = false @cxx_abi_enabled = false @cxx_exception_disabled = false + @enable_bintest = false + @enable_test = false @toolchains = [] MRuby.targets[@name] = self @@ -94,6 +96,7 @@ module MRuby MRuby.targets[@name].instance_eval(&block) build_mrbc_exec if name == 'host' + build_mrbtest if test_enabled? end def enable_debug @@ -170,6 +173,18 @@ EOS MRUBY_ROOT end + def enable_test + @enable_test = true + end + + def test_enabled? + @enable_test + end + + def build_mrbtest + gem :core => 'mruby-test' + end + def build_mrbc_exec gem :core => 'mruby-bin-mrbc' end @@ -252,7 +267,7 @@ EOS mrbtest = exefile("#{build_dir}/bin/mrbtest") sh "#{filename mrbtest.relative_path}#{$verbose ? ' -v' : ''}" puts - run_bintest if @enable_bintest + run_bintest if bintest_enabled? end def run_bintest @@ -297,7 +312,7 @@ EOS end def run_test - mrbtest = exefile("#{build_dir}/test/mrbtest") + mrbtest = exefile("#{build_dir}/bin/mrbtest") if (@test_runner.command == nil) puts "You should run #{mrbtest} on target device." puts diff --git a/travis_config.rb b/travis_config.rb index 458473f96..4ee6d752b 100644 --- a/travis_config.rb +++ b/travis_config.rb @@ -22,6 +22,7 @@ MRuby::Build.new do |conf| c.defines += %w(MRB_GC_FIXED_ARENA) end conf.enable_bintest + conf.enable_test end MRuby::Build.new('cxx_abi') do |conf| @@ -33,18 +34,9 @@ MRuby::Build.new('cxx_abi') do |conf| c.defines += %w(MRB_GC_FIXED_ARENA) end conf.enable_bintest + conf.enable_test enable_cxx_abi build_mrbc_exec end - -MRuby::Build.new('test') do |conf| - toolchain :gcc - - enable_debug - conf.enable_bintest - - conf.gembox 'full-core' - conf.gem :core => "mruby-test" -end -- cgit v1.2.3 From c6860bc0c4978d3158a96b32d4fe9965c03424dd Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Fri, 4 Sep 2015 10:50:58 -0400 Subject: Allow rbfiles in mrblib and test to have subdirs --- tasks/mrbgem_spec.rake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tasks') diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index d13e7733f..74aa5b817 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -54,7 +54,7 @@ module MRuby end @linker = LinkerConfig.new([], [], [], []) - @rbfiles = Dir.glob("#{dir}/mrblib/*.rb").sort + @rbfiles = Dir.glob("#{dir}/mrblib/**/*.rb").sort @objs = Dir.glob("#{dir}/src/*.{c,cpp,cxx,cc,m,asm,s,S}").map do |f| objfile(f.relative_path_from(@dir).to_s.pathmap("#{build_dir}/%X")) end @@ -62,7 +62,7 @@ module MRuby @generate_functions = !(@rbfiles.empty? && @objs.empty?) @objs << objfile("#{build_dir}/gem_init") if @generate_functions - @test_rbfiles = Dir.glob("#{dir}/test/*.rb") + @test_rbfiles = Dir.glob("#{dir}/test/**/*.rb") @test_objs = Dir.glob("#{dir}/test/*.{c,cpp,cxx,cc,m,asm,s,S}").map do |f| objfile(f.relative_path_from(dir).to_s.pathmap("#{build_dir}/%X")) end -- cgit v1.2.3