# The main class of the nitcompiler program
class NitCompiler
special AbstractCompiler
- readable attr _opt_output: OptionString = new OptionString("Output file", "-o", "--output")
- readable attr _opt_boost: OptionBool = new OptionBool("Optimize compilation", "-O", "--boost")
- readable attr _opt_no_cc: OptionBool = new OptionBool("Do not invoke C compiler", "--no_cc")
- readable attr _opt_attr_sim: OptionBool = new OptionBool("Use attribute simulation", "--attr-sim")
- readable attr _opt_global: OptionBool = new OptionBool("Use global compilation", "--global")
- readable attr _opt_clibdir: OptionString = new OptionString("NIT C library directory", "--clibdir")
- readable attr _opt_bindir: OptionString = new OptionString("NIT tools directory", "--bindir")
- readable attr _opt_extension_prefix: OptionString = new OptionString("Append prefix to file extension", "-p", "--extension-prefix")
+ readable var _opt_output: OptionString = new OptionString("Output file", "-o", "--output")
+ readable var _opt_boost: OptionBool = new OptionBool("Optimize compilation", "-O", "--boost")
+ readable var _opt_no_cc: OptionBool = new OptionBool("Do not invoke C compiler", "--no_cc")
+ readable var _opt_global: OptionBool = new OptionBool("Use global compilation", "--global")
+ readable var _opt_clibdir: OptionString = new OptionString("NIT C library directory", "--clibdir")
+ readable var _opt_bindir: OptionString = new OptionString("NIT tools directory", "--bindir")
+ readable var _opt_compdir: OptionString = new OptionString("Intermediate compilation directory", "--compdir")
+ readable var _opt_extension_prefix: OptionString = new OptionString("Append prefix to file extension", "-p", "--extension-prefix")
init
do
- super
- option_context.add_option(opt_output, opt_boost, opt_no_cc, opt_attr_sim, opt_global, opt_clibdir, opt_bindir, opt_extension_prefix)
+ super("nitc")
+ option_context.add_option(opt_output, opt_boost, opt_no_cc, opt_global, opt_clibdir, opt_bindir, opt_compdir, opt_extension_prefix)
end
- redef meth process_options
+ redef fun process_options
do
super
- tc = new ToolContext
- tc.output_file = opt_output.value
- tc.boost = opt_boost.value
- tc.no_cc = opt_no_cc.value
- tc.ext_prefix = opt_extension_prefix.value
- if tc.ext_prefix == null then tc.ext_prefix = ""
- tc.attr_sim = opt_attr_sim.value
- tc.global = opt_global.value
- tc.base_dir = ".nit_compile"
- tc.clibdir = opt_clibdir.value
- if tc.clibdir == null then
+ output_file = opt_output.value
+ boost = opt_boost.value
+ no_cc = opt_no_cc.value
+ var ext = opt_extension_prefix.value
+ if ext != null then ext_prefix = ext else ext_prefix = ""
+ global = opt_global.value
+ compdir = opt_compdir.value
+ if compdir == null then
+ var dir = once ("NIT_COMPDIR".to_symbol).environ
+ if not dir.is_empty then
+ compdir = dir
+ end
+ if compdir == null then
+ compdir = ".nit_compile"
+ end
+ end
+ compdir += ext_prefix
+
+ clibdir = opt_clibdir.value
+ if clibdir == null then
var dir = once ("NIT_DIR".to_symbol).environ
if dir.is_empty then
var dir = "{sys.program_name.dirname}/../lib"
- if dir.file_exists then tc.clibdir = dir
+ if dir.file_exists then clibdir = dir
else
dir = "{dir}/lib"
- if dir.file_exists then tc.clibdir = dir
+ if dir.file_exists then clibdir = dir
end
- if tc.clibdir == null then
+ if clibdir == null then
error("Error: Cannot locate NIT C library directory. Uses --clibdir or envvar NIT_DIR.")
exit(1)
end
end
- tc.bindir = opt_bindir.value
- if tc.bindir == null then
+ bindir = opt_bindir.value
+
+ if bindir == null then
var dir = once ("NIT_DIR".to_symbol).environ
if dir.is_empty then
var dir = "{sys.program_name.dirname}/../bin"
- if dir.file_exists then tc.bindir = dir
+ if dir.file_exists then bindir = dir
else
dir = "{dir}/bin"
- if dir.file_exists then tc.bindir = dir
+ if dir.file_exists then bindir = dir
end
- if tc.bindir == null then
+ if bindir == null then
error("Error: Cannot locate NIT tools directory. Uses --bindir or envvar NIT_DIR.")
exit(1)
end
end
end
- redef meth perform_work(mods)
+ redef fun perform_work(mods)
do
for mod in mods do
assert mod isa MMSrcModule
- mod.compile_prog_to_c(tc)
+ mod.compile_prog_to_c(self)
end
end