X-Git-Url: http://nitlanguage.org diff --git a/src/ffi/cpp.nit b/src/ffi/cpp.nit index 8ca389a..f660114 100644 --- a/src/ffi/cpp.nit +++ b/src/ffi/cpp.nit @@ -27,7 +27,8 @@ end redef class MModule private var cpp_file: nullable CPPCompilationUnit = null - var cpp_compiler_options = "" is writable + # Custom options for the C++ compiler (CPPFLAGS) + var cppflags = new MultiHashMap[String, String] end class CPPLanguage @@ -84,7 +85,7 @@ class CPPLanguage # Will convert C arguments to C++ and call the C++ implementation function. fc = new CFunction(indirection_sig) if not mproperty.is_init then - var param_name = "recv" + var param_name = "self" var type_name = to_cpp_call_context.name_mtype(mclass_type) if mclass_type.mclass.ftype isa ForeignCppType then fc.exprs.add("{type_name} {param_name}_for_cpp = static_cast<{type_name}>({param_name});\n") @@ -124,7 +125,7 @@ class CPPLanguage # write .cpp and .hpp file cpp_file.header_custom.add("extern \"C\" \{\n") - cpp_file.header_custom.add("#include \"{mmodule.name}._ffi.h\"\n") + cpp_file.header_custom.add("#include \"{mmodule.c_name}._ffi.h\"\n") cpp_file.header_custom.add("\}\n") var file = cpp_file.write_to_files(mmodule, compdir) @@ -133,7 +134,7 @@ class CPPLanguage mmodule.ffi_files.add(file) # add linked option to support C++ - mmodule.c_linker_options = "{mmodule.c_linker_options} -lstdc++" + mmodule.ldflags.add_one("", "-lstdc++") end redef fun compile_callback(callback, mmodule, mainmodule, ecc) @@ -158,10 +159,10 @@ class CPPCompilationUnit fun write_to_files(mmodule: MModule, compdir: String): ExternCppFile do - var base_name = "{mmodule.name}._ffi" + var base_name = "{mmodule.c_name}._ffi" var h_file = "{base_name}.hpp" - var guard = "{mmodule.cname.to_s.to_upper}_NIT_HPP" + var guard = "{mmodule.c_name.to_s.to_upper}_NIT_HPP" write_header_to_file(mmodule, "{compdir}/{h_file}", new Array[String], guard) @@ -170,7 +171,7 @@ class CPPCompilationUnit files.add("{compdir}/{c_file}") - return new ExternCppFile("{compdir}/{c_file}", mmodule) + return new ExternCppFile(c_file, mmodule) end end @@ -179,8 +180,8 @@ class ExternCppFile var mmodule: MModule - redef fun makefile_rule_name do return "{filename.basename("")}.o" - redef fun makefile_rule_content do return "$(CXX) $(CFLAGS) {mmodule.cpp_compiler_options} -c {filename.basename("")} -o {filename.basename("")}.o" + redef fun makefile_rule_name do return "{filename}.o" + redef fun makefile_rule_content do return "$(CXX) $(CFLAGS) {mmodule.cppflags[""].join(" ")} -c {filename} -o {filename}.o" redef fun compiles_to_o_file do return true end @@ -194,11 +195,9 @@ redef class NitniCallback fun compile_callback_to_cpp(mmodule: MModule, mainmodule: MModule) do end end -redef class Object - private fun cpp_call_context: CppCallContext do return once new CppCallContext - private fun to_cpp_call_context: ToCppCallContext do return once new ToCppCallContext - private fun from_cpp_call_context: FromCppCallContext do return once new FromCppCallContext -end +private fun cpp_call_context: CppCallContext do return once new CppCallContext +private fun to_cpp_call_context: ToCppCallContext do return once new ToCppCallContext +private fun from_cpp_call_context: FromCppCallContext do return once new FromCppCallContext redef class MExplicitCall redef fun compile_callback_to_cpp(mmodule, mainmodule)