import literal
import typing
import auto_super_init
-import frontend
import platform
import c_tools
# The list is initially set with :
# * the toolcontext --cc-path option
# * the NIT_CC_PATH environment variable
- # * some heuristics including the NIT_DIR environment variable and the progname of the process
+ # * `toolcontext.nit_dir`
# Path can be added (or removed) by the client
var cc_paths = new Array[String]
protected fun gather_cc_paths
do
# Look for the the Nit clib path
- var path_env = "NIT_DIR".environ
- if not path_env.is_empty then
+ var path_env = toolcontext.nit_dir
+ if path_env != null then
var libname = "{path_env}/clib"
if libname.file_exists then cc_paths.add(libname)
end
- var libname = "{sys.program_name.dirname}/../clib"
- if libname.file_exists then cc_paths.add(libname.simplify_path)
-
if cc_paths.is_empty then
toolcontext.error(null, "Cannot determine the nit clib path. define envvar NIT_DIR.")
end
dep_rules.add(o)
end
+ var java_files = new Array[ExternFile]
+
# Compile each required extern body into a specific .o
for f in compiler.extern_bodies do
var o = f.makefile_rule_name
makefile.write("{o}: {ff}\n")
makefile.write("\t{f.makefile_rule_content}\n\n")
dep_rules.add(f.makefile_rule_name)
- ofiles.add(o)
+
+ if f.compiles_to_o_file then ofiles.add(o)
+ if f.add_to_jar then java_files.add(f)
+ end
+
+ if not java_files.is_empty then
+ var jar_file = "{outpath}.jar"
+
+ var class_files_array = new Array[String]
+ for f in java_files do class_files_array.add(f.makefile_rule_name)
+ var class_files = class_files_array.join(" ")
+
+ makefile.write("{jar_file}: {class_files}\n")
+ makefile.write("\tjar cf {jar_file} {class_files}\n\n")
+ dep_rules.add jar_file
end
# Link edition