summaryrefslogtreecommitdiffhomepage
path: root/tasks
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-02-28 23:27:13 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-02-28 23:27:13 +0900
commit1a1f834adeb243c5938604eb826c65d1f0efede0 (patch)
tree280fc60eea3abb4ab6604b2be2c097de7e5a1245 /tasks
parentdc56bbecc81b5d04d3bf9ab337f4ebf7024f654f (diff)
downloadmruby-1a1f834adeb243c5938604eb826c65d1f0efede0.tar.gz
mruby-1a1f834adeb243c5938604eb826c65d1f0efede0.zip
Compile C files by C compiler when C++ files mixed.
ref #3267 #3470 By this commit, mruby do not use C++ ABI mode unless you specify explicitly. It compiles C files by C compilers, with C++ exception enabled when it sees C++ files in your configured mrbgems. I haven't tried visualcpp, so please submit an issue if you see any problem with C++ gems on Windows.
Diffstat (limited to 'tasks')
-rw-r--r--tasks/mruby_build.rake14
-rw-r--r--tasks/mruby_build_commands.rake2
-rw-r--r--tasks/mruby_build_gem.rake2
-rw-r--r--tasks/toolchains/gcc.rake2
-rw-r--r--tasks/toolchains/visualcpp.rake2
5 files changed, 18 insertions, 4 deletions
diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake
index bd911493d..46459cf6c 100644
--- a/tasks/mruby_build.rake
+++ b/tasks/mruby_build.rake
@@ -113,13 +113,23 @@ module MRuby
@cxx_exception_disabled = true
end
+ def enable_cxx_exception
+ @cxx_exception_disabled = false
+ compilers.each { |c|
+ c.defines += %w(MRB_ENABLE_CXX_EXCEPTION)
+ c.flags << c.cxx_exception_flag
+ }
+ end
+
def cxx_abi_enabled?
@cxx_abi_enabled
end
def enable_cxx_abi
- return if @cxx_exception_disabled or @cxx_abi_enabled
- compilers.each { |c| c.defines += %w(MRB_ENABLE_CXX_EXCEPTION) }
+ return if @cxx_abi_enabled
+ unless @cxx_exception_disabled
+ enable_cxx_exception
+ end
compilers.each { |c| c.flags << c.cxx_compile_flag }
linker.command = cxx.command if toolchains.find { |v| v == 'gcc' }
@cxx_abi_enabled = true
diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake
index d688077ff..694b4a24c 100644
--- a/tasks/mruby_build_commands.rake
+++ b/tasks/mruby_build_commands.rake
@@ -41,7 +41,7 @@ module MRuby
class Command::Compiler < Command
attr_accessor :flags, :include_paths, :defines, :source_exts
attr_accessor :compile_options, :option_define, :option_include_path, :out_ext
- attr_accessor :cxx_compile_flag
+ attr_accessor :cxx_compile_flag, :cxx_exception_flag
def initialize(build, source_exts=[])
super(build)
diff --git a/tasks/mruby_build_gem.rake b/tasks/mruby_build_gem.rake
index 9a802097f..b48df6510 100644
--- a/tasks/mruby_build_gem.rake
+++ b/tasks/mruby_build_gem.rake
@@ -38,7 +38,7 @@ module MRuby
cxx_srcs = ['src', 'test', 'tools'].map do |subdir|
Dir.glob("#{Gem.current.dir}/#{subdir}/*.{cpp,cxx,cc}")
end.flatten
- enable_cxx_abi unless cxx_srcs.empty?
+ enable_cxx_exception unless cxx_srcs.empty?
Gem.current
end
diff --git a/tasks/toolchains/gcc.rake b/tasks/toolchains/gcc.rake
index 59ae015ac..f370c0abf 100644
--- a/tasks/toolchains/gcc.rake
+++ b/tasks/toolchains/gcc.rake
@@ -7,6 +7,7 @@ MRuby::Toolchain.new(:gcc) do |conf, _params|
cc.option_define = '-D%s'
cc.compile_options = '%{flags} -MMD -o %{outfile} -c %{infile}'
cc.cxx_compile_flag = '-x c++ -std=c++03'
+ cc.cxx_exception_flag = '-fexceptions'
end
[conf.cxx].each do |cxx|
@@ -17,6 +18,7 @@ MRuby::Toolchain.new(:gcc) do |conf, _params|
cxx.option_define = '-D%s'
cxx.compile_options = '%{flags} -MMD -o %{outfile} -c %{infile}'
cxx.cxx_compile_flag = '-x c++ -std=c++03'
+ cxx.cxx_exception_flag = '-fexceptions'
end
conf.linker do |linker|
diff --git a/tasks/toolchains/visualcpp.rake b/tasks/toolchains/visualcpp.rake
index 5f5bab9c2..5bc24a73a 100644
--- a/tasks/toolchains/visualcpp.rake
+++ b/tasks/toolchains/visualcpp.rake
@@ -8,6 +8,7 @@ MRuby::Toolchain.new(:visualcpp) do |conf, _params|
cc.option_define = '/D%s'
cc.compile_options = "%{flags} /Fo%{outfile} %{infile}"
cc.cxx_compile_flag = '/TP'
+ cc.cxx_exception_flag = '/EHs'
end
conf.cxx do |cxx|
@@ -18,6 +19,7 @@ MRuby::Toolchain.new(:visualcpp) do |conf, _params|
cxx.option_define = '/D%s'
cxx.compile_options = "%{flags} /Fo%{outfile} %{infile}"
cxx.cxx_compile_flag = '/TP'
+ cxx.cxx_exception_flag = '/EHs'
end
conf.linker do |linker|