# 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
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)
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
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
files.add("{compdir}/{c_file}")
- return new ExternCppFile("{compdir}/{c_file}", mmodule)
+ return new ExternCppFile(c_file, mmodule)
end
end
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
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
mmodule.ldflags.add_one("", "-lobjc")
- return new ExternObjCFile(compdir/c_file, mmodule)
+ return new ExternObjCFile(c_file, mmodule)
end
end
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
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