private import compiling
private import syntax
import native_interface
+import separate_options
# The main class of the nitcompiler program
class NitCompiler
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_cc_no_link: OptionBool = new OptionBool("Do not invoke C linker", "--cc-no-link")
- readable var _opt_cc_lib_paths: OptionArray = new OptionArray("Path to libraries for C compiler", "--cc-lib-path")
- readable var _opt_cc_libs: OptionArray = new OptionArray("Name of library to use for C compiler", "--cc-lib-name")
- readable var _opt_cc_include_paths: OptionArray = new OptionArray("Path to .h files for C compiler", "--cc-header-path")
readable var _opt_global: OptionBool = new OptionBool("Use global compilation", "--global")
readable var _opt_global_no_STF_opt: OptionBool = new OptionBool("Do not use SFT optimization", "--no-global-SFT-optimization")
readable var _opt_global_no_DMR_opt: OptionBool = new OptionBool("Do not use dead method removal optimization", "--no-global-DMR-optimization")
--- /dev/null
+# module adding separate specification of opts to compiler
+
+import mmloader
+import compiling
+
+# only to order correctly redefs of compile_separate_module
+import native_interface
+
+redef class ToolContext
+ # all ops precised in .ops files
+ var separate_options : OptionContext = new OptionContext
+ var opt_cc_lib_paths: OptionArray = new OptionArray("Path to libraries for C compiler", "--cc-lib-path")
+ var opt_cc_libs: OptionArray = new OptionArray("Name of library to use for C compiler", "--cc-lib-name")
+ var opt_cc_include_paths: OptionArray = new OptionArray("Path to .h files for C compiler", "--cc-header-path")
+
+ redef init
+ do
+ super
+
+ separate_options.add_option( opt_cc_lib_paths )
+ separate_options.add_option( opt_cc_libs )
+ separate_options.add_option( opt_cc_include_paths )
+ end
+
+ fun integrate_separate_options( options : String )
+ do
+ separate_options.parse( options.split_with( ' ' ) )
+ if separate_options.rest.length > 0 then
+ warning( null, "module {self} args file has unknown args: {separate_options.rest.join(", ")}" )
+ end
+
+ cc_lib_paths.append( opt_cc_lib_paths.value )
+ cc_libs.append( opt_cc_libs.value )
+ cc_include_paths.append( opt_cc_include_paths.value )
+ end
+end
+
+redef class MMSrcModule
+
+ redef fun compile_separate_module(cprogram)
+ do
+ super
+
+ # extract options from file
+ var options_path = "{location.file.filename}.args"
+ if options_path.file_exists then
+ var option_file = new IFStream.open( options_path )
+ var option_content = option_file.read_all
+ option_file.close
+
+ cprogram.program.tc.integrate_separate_options( option_content )
+ end
+ end
+end