FFI: ExternFile::filename should be relative to the nit-compile dir
authorAlexis Laferrière <alexis.laf@xymus.net>
Tue, 26 Feb 2019 15:17:01 +0000 (10:17 -0500)
committerAlexis Laferrière <alexis.laf@xymus.net>
Tue, 26 Feb 2019 19:08:51 +0000 (14:08 -0500)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

src/c_tools.nit
src/compiler/abstract_compiler.nit
src/compiler/compiler_ffi/light.nit
src/ffi/cpp.nit
src/ffi/light_ffi.nit
src/ffi/objc.nit
src/interpreter/dynamic_loading_ffi/on_demand_compiler.nit

index 9a03c5a..1783c8e 100644 (file)
@@ -105,7 +105,8 @@ end
 
 # An extern file to compile
 class ExternFile
-       # The filename of the file
+
+       # Filename relative to the nit-compile folder
        var filename: String
 
        # The name of the target in the Makefile
index 32dd807..9753100 100644 (file)
@@ -528,8 +528,7 @@ endif
                var java_files = new Array[ExternFile]
                for f in compiler.extern_bodies do
                        var o = f.makefile_rule_name
-                       var ff = f.filename.basename
-                       makefile.write("{o}: {ff}\n")
+                       makefile.write("{o}: {f.filename}\n")
                        makefile.write("\t{f.makefile_rule_content}\n\n")
                        dep_rules.add(f.makefile_rule_name)
 
@@ -712,7 +711,7 @@ abstract class AbstractCompiler
                stream.write("const char* get_nit_name(register const char* procname, register unsigned int len);\n")
                stream.close
 
-               extern_bodies.add(new ExternCFile("{compile_dir}/c_functions_hash.c", ""))
+               extern_bodies.add(new ExternCFile("c_functions_hash.c", ""))
        end
 
        # Compile C headers
index 1f59771..4adbf05 100644 (file)
@@ -53,7 +53,7 @@ extern void nitni_global_ref_decr(void*);
                nitni_ccu.write_as_nitni(self, v.compiler.toolchain.compile_dir)
 
                for file in nitni_ccu.files do
-                       var f = new ExternCFile(file, cflags)
+                       var f = new ExternCFile(file.basename, cflags)
                        f.pkgconfigs.add_all pkgconfigs
                        v.compiler.extern_bodies.add(f)
                end
index 13a6e92..f660114 100644 (file)
@@ -171,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
 
@@ -180,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.cppflags[""].join(" ")} -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
 
index 2245a92..b8d572b 100644 (file)
@@ -57,7 +57,7 @@ redef class MModule
 
                ffi_ccu.write_as_impl(self, compdir)
                for filename in ffi_ccu.files do
-                       var f = new ExternCFile(filename, cflags)
+                       var f = new ExternCFile(filename.basename, cflags)
                        f.pkgconfigs.add_all pkgconfigs
                        ffi_files.add(f)
                end
index 9c0545a..24ce15d 100644 (file)
@@ -156,7 +156,7 @@ private class ObjCCompilationUnit
 
                mmodule.ldflags.add_one("", "-lobjc")
 
-               return new ExternObjCFile(compdir/c_file, mmodule)
+               return new ExternObjCFile(c_file, mmodule)
        end
 end
 
@@ -169,7 +169,7 @@ class ExternObjCFile
 
        redef fun makefile_rule_name do return "{filename.basename(".m")}_m.o"
        redef fun makefile_rule_content do
-               return "clang $(CFLAGS) -c {filename.basename} -o {makefile_rule_name}"
+               return "clang $(CFLAGS) -c {filename} -o {makefile_rule_name}"
        end
        redef fun compiles_to_o_file do return true
 end
index 44f6854..acd783a 100644 (file)
@@ -404,7 +404,7 @@ redef class ExternCFile
                var cflags = mmodule.cflags[""].join(" ") + " " + pkg_cflags
                var obj = compile_dir / filename.basename(".c") + ".o"
 
-               var cmd = "{v.c_compiler} -Wall -c -fPIC -I {compile_dir} -g -o {obj} {filename} {cflags}"
+               var cmd = "{v.c_compiler} -Wall -c -fPIC -I {compile_dir} -g -o {obj} {compile_dir / filename} {cflags}"
                if sys.system(cmd) != 0 then
                         v.fatal "FFI Error: Failed to compile C code using `{cmd}`"
                         return false