X-Git-Url: http://nitlanguage.org diff --git a/src/c_tools.nit b/src/c_tools.nit index af31c5f..61c1f9c 100644 --- a/src/c_tools.nit +++ b/src/c_tools.nit @@ -47,33 +47,37 @@ class CCompilationUnit # files to compile TODO check is appropriate var files = new Array[String] - fun add_local_function( efc : CFunction ) + # Add a `static` `c_function` to be strictly local to this unit + fun add_local_function(c_function: CFunction) do - body_decl.add "static {efc.signature};\n" + body_decl.add "static {c_function.signature};\n" body_impl.add "\n" - body_impl.add efc.to_writer + body_impl.add c_function.to_writer end - fun add_exported_function( efc : CFunction ) + # Add a public `c_function` accessible from outside this compilation unit + fun add_exported_function(c_function: CFunction) do - header_decl.add( "{efc.signature};\n" ) - body_impl.add( "\n" ) - body_impl.add( efc.to_writer ) + body_decl.add "{c_function.signature};\n" + body_impl.add "\n" + body_impl.add c_function.to_writer end - fun compile_header_core( stream : OStream ) + # Write the core of the header to `stream` + fun compile_header_core(stream: Writer) do - header_c_base.write_to( stream ) - header_custom.write_to( stream ) - header_c_types.write_to( stream ) - header_decl.write_to( stream ) + header_c_base.write_to stream + header_custom.write_to stream + header_c_types.write_to stream + header_decl.write_to stream end - fun compile_body_core( stream : OStream ) + # Write the core of the body to `stream` + fun compile_body_core(stream: Writer) do - body_decl.write_to( stream ) - body_custom.write_to( stream ) - body_impl.write_to( stream ) + body_decl.write_to stream + body_custom.write_to stream + body_impl.write_to stream end end @@ -101,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 @@ -114,21 +119,19 @@ class ExternFile fun compiles_to_o_file: Bool do return false + # Is `self` a Java file to include in the JAR archive? fun add_to_jar: Bool do return false + + # Additional libraries needed for the compilation + # Will be used with pkg-config + var pkgconfigs = new Array[String] end # An extern C file to compile class ExternCFile super ExternFile - init (filename, cflags: String) - do - super filename - - self.cflags = cflags - end - - # Additionnal specific CC compiler -c flags + # Custom options for the C compiler (CFLAGS) var cflags: String redef fun hash do return filename.hash @@ -141,9 +144,13 @@ class ExternCFile end redef fun makefile_rule_content do - var ff = filename.basename("") + var ff = filename.basename var o = makefile_rule_name - return "$(CC) $(CFLAGS) {self.cflags} -c -o {o} {ff}" + var pkg = "" + if not pkgconfigs.is_empty then + pkg = "`pkg-config --cflags {pkgconfigs.join(" ")}`" + end + return "$(CC) $(CFLAGS) -Wall -Wno-unused-function {self.cflags} {pkg} -c -o {o} {ff}" end redef fun compiles_to_o_file do return true