An extern C file to compile

Introduced properties

private var _cflags: String

nitc :: ExternCFile :: _cflags

Custom options for the C compiler (CFLAGS)
fun cflags: String

nitc :: ExternCFile :: cflags

Custom options for the C compiler (CFLAGS)
protected fun cflags=(cflags: String)

nitc :: ExternCFile :: cflags=

Custom options for the C compiler (CFLAGS)
init defaultinit(filename: String, cflags: String)

nitc :: ExternCFile :: defaultinit

Redefined properties

redef fun ==(o: nullable Object): Bool

nitc $ ExternCFile :: ==

Have self and other the same value?
redef type SELF: ExternCFile

nitc $ ExternCFile :: SELF

Type of this instance, automatically specialized in every class
redef fun compile(v: NaiveInterpreter, mmodule: MModule, object_files: Array[String], pkg_cflags: String): Bool

nitc :: on_demand_compiler $ ExternCFile :: compile

Compile this source file
redef fun hash: Int

nitc $ ExternCFile :: hash

The hash code of the object.
redef fun makefile_rule_content: String

nitc $ ExternCFile :: makefile_rule_content

The content of the rule in the make
redef fun makefile_rule_name: String

nitc $ ExternCFile :: makefile_rule_name

The name of the target in the Makefile

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
private var _cflags: String

nitc :: ExternCFile :: _cflags

Custom options for the C compiler (CFLAGS)
private var _filename: String

nitc :: ExternFile :: _filename

Filename relative to the nit-compile folder
private var _pkgconfigs: Array[String]

nitc :: ExternFile :: _pkgconfigs

Additional libraries needed for the compilation
fun add_to_jar: Bool

nitc :: ExternFile :: add_to_jar

Is self a Java file to include in the JAR archive?
fun cflags: String

nitc :: ExternCFile :: cflags

Custom options for the C compiler (CFLAGS)
protected fun cflags=(cflags: String)

nitc :: ExternCFile :: cflags=

Custom options for the C compiler (CFLAGS)
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
private abstract fun compile(v: NaiveInterpreter, mmodule: MModule, object_files: Array[String], pkg_cflags: String): Bool

nitc :: ExternFile :: compile

Compile this source file
init defaultinit(filename: String, cflags: String)

nitc :: ExternCFile :: defaultinit

init defaultinit(filename: String)

nitc :: ExternFile :: defaultinit

fun filename: String

nitc :: ExternFile :: filename

Filename relative to the nit-compile folder
protected fun filename=(filename: String)

nitc :: ExternFile :: filename=

Filename relative to the nit-compile folder
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
abstract fun makefile_rule_content: String

nitc :: ExternFile :: makefile_rule_content

The content of the rule in the make
abstract fun makefile_rule_name: String

nitc :: ExternFile :: makefile_rule_name

The name of the target in the Makefile
private intern fun native_class_name: CString

core :: Object :: native_class_name

The class name of the object in CString format.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun pkgconfigs: Array[String]

nitc :: ExternFile :: pkgconfigs

Additional libraries needed for the compilation
protected fun pkgconfigs=(pkgconfigs: Array[String])

nitc :: ExternFile :: pkgconfigs=

Additional libraries needed for the compilation
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
package_diagram nitc::ExternCFile ExternCFile nitc::ExternFile ExternFile nitc::ExternCFile->nitc::ExternFile core::Object Object nitc::ExternFile->core::Object ...core::Object ... ...core::Object->core::Object

Ancestors

interface Object

core :: Object

The root of the class hierarchy.

Parents

class ExternFile

nitc :: ExternFile

An extern file to compile

Class definitions

nitc $ ExternCFile
# An extern C file to compile
class ExternCFile
	super ExternFile

	# Custom options for the C compiler (CFLAGS)
	var cflags: String

	redef fun hash do return filename.hash
	redef fun ==(o) do return o isa ExternCFile and filename == o.filename

	redef fun makefile_rule_name do
		var basename = filename.basename(".c")
		var res = "{basename}.extern.o"
		return res
	end

	redef fun makefile_rule_content do
		var ff = filename.basename
		var o = makefile_rule_name
		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
end
src/c_tools.nit:130,1--157,3

nitc :: on_demand_compiler $ ExternCFile
redef class ExternCFile
	redef fun compile(v, mmodule, object_files, pkg_cflags)
	do
		var compile_dir = v.compile_dir
		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} {compile_dir / filename} {cflags}"
		if sys.system(cmd) != 0 then
			 v.fatal "FFI Error: Failed to compile C code using `{cmd}`"
			 return false
		end

		object_files.add obj
		return true
	end
end
src/interpreter/dynamic_loading_ffi/on_demand_compiler.nit:400,1--416,3