cxxproject 0.5.48 → 0.5.59

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. data/Rakefile.rb +116 -116
  2. data/bin/cxx +10 -10
  3. data/lib/cxxproject.rb +23 -23
  4. data/lib/cxxproject/buildingblocks/binary_library.rb +39 -39
  5. data/lib/cxxproject/buildingblocks/building_block.rb +251 -239
  6. data/lib/cxxproject/buildingblocks/command_line.rb +79 -79
  7. data/lib/cxxproject/buildingblocks/custom_building_block.rb +39 -41
  8. data/lib/cxxproject/buildingblocks/executable.rb +257 -249
  9. data/lib/cxxproject/buildingblocks/has_dependencies_mixin.rb +83 -83
  10. data/lib/cxxproject/buildingblocks/has_includes_mixin.rb +20 -20
  11. data/lib/cxxproject/buildingblocks/has_libraries_mixin.rb +34 -34
  12. data/lib/cxxproject/buildingblocks/has_sources_mixin.rb +371 -364
  13. data/lib/cxxproject/buildingblocks/makefile.rb +153 -153
  14. data/lib/cxxproject/buildingblocks/module.rb +35 -35
  15. data/lib/cxxproject/buildingblocks/single_source.rb +33 -33
  16. data/lib/cxxproject/buildingblocks/source_library.rb +124 -124
  17. data/lib/cxxproject/errorparser/diab_compiler_error_parser.rb +40 -40
  18. data/lib/cxxproject/errorparser/diab_linker_error_parser.rb +41 -33
  19. data/lib/cxxproject/errorparser/error_parser.rb +50 -50
  20. data/lib/cxxproject/errorparser/gcc_compiler_error_parser.rb +35 -30
  21. data/lib/cxxproject/errorparser/gcc_linker_error_parser.rb +35 -29
  22. data/lib/cxxproject/errorparser/ti_compiler_error_parser.rb +30 -30
  23. data/lib/cxxproject/errorparser/ti_linker_error_parser.rb +30 -29
  24. data/lib/cxxproject/eval_context.rb +144 -136
  25. data/lib/cxxproject/ext/file.rb +71 -71
  26. data/lib/cxxproject/ext/filelist.rb +6 -6
  27. data/lib/cxxproject/ext/progressbar.rb +20 -20
  28. data/lib/cxxproject/ext/rake.rb +419 -397
  29. data/lib/cxxproject/ext/rake_dirty.rb +30 -30
  30. data/lib/cxxproject/ext/rake_listener.rb +59 -59
  31. data/lib/cxxproject/ext/stdout.rb +44 -44
  32. data/lib/cxxproject/ext/string.rb +9 -9
  33. data/lib/cxxproject/ide_interface.rb +187 -181
  34. data/lib/cxxproject/toolchain/clang.rb +39 -39
  35. data/lib/cxxproject/toolchain/colorizing_formatter.rb +99 -99
  36. data/lib/cxxproject/toolchain/diab.rb +3 -1
  37. data/lib/cxxproject/toolchain/gcc.rb +2 -1
  38. data/lib/cxxproject/toolchain/provider.rb +131 -128
  39. data/lib/cxxproject/toolchain/toolchain.rb +38 -38
  40. data/lib/cxxproject/toolchain/toolchain_benchmark.rb +23 -23
  41. data/lib/cxxproject/torake.rb +218 -216
  42. data/lib/cxxproject/utils/cleanup.rb +20 -20
  43. data/lib/cxxproject/utils/console.rb +6 -6
  44. data/lib/cxxproject/utils/exit_helper.rb +40 -40
  45. data/lib/cxxproject/utils/graphstream.rb +154 -154
  46. data/lib/cxxproject/utils/optional.rb +16 -16
  47. data/lib/cxxproject/utils/printer.rb +50 -50
  48. data/lib/cxxproject/utils/process.rb +52 -52
  49. data/lib/cxxproject/utils/progress.rb +66 -66
  50. data/lib/cxxproject/utils/progress_helper.rb +77 -77
  51. data/lib/cxxproject/utils/rbcurse.rb +284 -284
  52. data/lib/cxxproject/utils/rbcurse_executable_ext.rb +14 -14
  53. data/lib/cxxproject/utils/rbcurse_progress.rb +71 -71
  54. data/lib/cxxproject/utils/rbcurse_tasktable.rb +51 -51
  55. data/lib/cxxproject/utils/stats.rb +60 -60
  56. data/lib/cxxproject/utils/ubigraph.rb +228 -228
  57. data/lib/cxxproject/utils/utils.rb +60 -37
  58. data/lib/cxxproject/utils/valgrind.rb +11 -11
  59. data/lib/cxxproject/version.rb +7 -7
  60. data/lib/tools/Rakefile.rb.template +10 -10
  61. data/lib/tools/project.rb.template +6 -6
  62. data/lib/tools/project_wizard.rb +66 -66
  63. data/spec/building_block_spec.rb +56 -56
  64. data/spec/cxxproject_2_rake_spec.rb +186 -186
  65. data/spec/file_ext_spec.rb +30 -30
  66. data/spec/ide_interface_spec.rb +41 -41
  67. data/spec/object_dependency_spec.rb +83 -83
  68. data/spec/project_path_spec.rb +71 -71
  69. data/spec/rake_listener_ext_spec.rb +58 -58
  70. data/spec/spec_helper.rb +18 -18
  71. data/spec/string_spec.rb +11 -11
  72. data/spec/testdata/basic/exe12/project.rb +5 -5
  73. data/spec/testdata/basic/lib1/project.rb +5 -5
  74. data/spec/testdata/basic/lib2/project.rb +8 -8
  75. data/spec/testdata/multiple_levels/libs/lib1/project.rb +5 -5
  76. data/spec/testdata/multiple_levels/libs/lib2/project.rb +19 -19
  77. data/spec/testdata/multiple_levels/mainproject/basic/project.rb +8 -8
  78. data/spec/testdata/onlyOneHeader/Rakefile.rb +4 -4
  79. data/spec/testdata/onlyOneHeader/project.rb +4 -4
  80. data/spec/toolchain_spec.rb +29 -29
  81. metadata +58 -58
@@ -1,39 +1,39 @@
1
- require 'cxxproject/utils/utils'
2
- require 'cxxproject/toolchain/provider'
3
- require 'cxxproject/errorparser/error_parser'
4
- require 'cxxproject/errorparser/gcc_compiler_error_parser'
5
-
6
- module Cxxproject
7
- module Toolchain
8
- gccCompilerErrorParser = GCCCompilerErrorParser.new
9
-
10
- CLANG_CHAIN = Provider.add("CLANG")
11
-
12
- CLANG_CHAIN[:COMPILER][:CPP].update({
13
- :COMMAND => "llvm-g++",
14
- :DEFINE_FLAG => "-D",
15
- :OBJECT_FILE_FLAG => "-o",
16
- :INCLUDE_PATH_FLAG => "-I",
17
- :COMPILE_FLAGS => "-c ",
18
- :DEP_FLAGS => "-MMD -MF ", # empty space at the end is important!
19
- :ERROR_PARSER => gccCompilerErrorParser
20
- })
21
-
22
- CLANG_CHAIN[:COMPILER][:C] = Utils.deep_copy(CLANG_CHAIN[:COMPILER][:CPP])
23
- CLANG_CHAIN[:COMPILER][:C][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:C][:SOURCE_FILE_ENDINGS]
24
- CLANG_CHAIN[:COMPILER][:C][:COMMAND] = "llvm-gcc"
25
-
26
- CLANG_CHAIN[:COMPILER][:ASM] = Utils.deep_copy(CLANG_CHAIN[:COMPILER][:C])
27
- CLANG_CHAIN[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS]
28
-
29
- CLANG_CHAIN[:ARCHIVER][:COMMAND] = "ar"
30
- CLANG_CHAIN[:ARCHIVER][:ARCHIVE_FLAGS] = "r"
31
-
32
- CLANG_CHAIN[:LINKER][:COMMAND] = "llvm-g++"
33
- CLANG_CHAIN[:LINKER][:SCRIPT] = "-T"
34
- CLANG_CHAIN[:LINKER][:USER_LIB_FLAG] = "-l:"
35
- CLANG_CHAIN[:LINKER][:EXE_FLAG] = "-o"
36
- CLANG_CHAIN[:LINKER][:LIB_FLAG] = "-l"
37
- CLANG_CHAIN[:LINKER][:LIB_PATH_FLAG] = "-L"
38
- end
39
- end
1
+ require 'cxxproject/utils/utils'
2
+ require 'cxxproject/toolchain/provider'
3
+ require 'cxxproject/errorparser/error_parser'
4
+ require 'cxxproject/errorparser/gcc_compiler_error_parser'
5
+
6
+ module Cxxproject
7
+ module Toolchain
8
+ gccCompilerErrorParser = GCCCompilerErrorParser.new
9
+
10
+ CLANG_CHAIN = Provider.add("CLANG")
11
+
12
+ CLANG_CHAIN[:COMPILER][:CPP].update({
13
+ :COMMAND => "llvm-g++",
14
+ :DEFINE_FLAG => "-D",
15
+ :OBJECT_FILE_FLAG => "-o",
16
+ :INCLUDE_PATH_FLAG => "-I",
17
+ :COMPILE_FLAGS => "-c ",
18
+ :DEP_FLAGS => "-MMD -MF ", # empty space at the end is important!
19
+ :ERROR_PARSER => gccCompilerErrorParser
20
+ })
21
+
22
+ CLANG_CHAIN[:COMPILER][:C] = Utils.deep_copy(CLANG_CHAIN[:COMPILER][:CPP])
23
+ CLANG_CHAIN[:COMPILER][:C][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:C][:SOURCE_FILE_ENDINGS]
24
+ CLANG_CHAIN[:COMPILER][:C][:COMMAND] = "llvm-gcc"
25
+
26
+ CLANG_CHAIN[:COMPILER][:ASM] = Utils.deep_copy(CLANG_CHAIN[:COMPILER][:C])
27
+ CLANG_CHAIN[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS]
28
+
29
+ CLANG_CHAIN[:ARCHIVER][:COMMAND] = "ar"
30
+ CLANG_CHAIN[:ARCHIVER][:ARCHIVE_FLAGS] = "r"
31
+
32
+ CLANG_CHAIN[:LINKER][:COMMAND] = "llvm-g++"
33
+ CLANG_CHAIN[:LINKER][:SCRIPT] = "-T"
34
+ CLANG_CHAIN[:LINKER][:USER_LIB_FLAG] = "-l:"
35
+ CLANG_CHAIN[:LINKER][:EXE_FLAG] = "-o"
36
+ CLANG_CHAIN[:LINKER][:LIB_FLAG] = "-l"
37
+ CLANG_CHAIN[:LINKER][:LIB_PATH_FLAG] = "-L"
38
+ end
39
+ end
@@ -1,99 +1,99 @@
1
- require 'cxxproject/utils/optional'
2
-
3
- module Cxxproject
4
- include Utils
5
-
6
- class ColorizingFormatter
7
- class << self
8
- attr_accessor :enabled
9
- end
10
- def enabled?
11
- false
12
- end
13
- end
14
-
15
- define_colorizin_formatter = lambda do
16
- require 'colored'
17
-
18
- # simple class to colorize compiler output
19
- # the class depends on the rainbow gem
20
- class ColorizingFormatter
21
-
22
- # colors are not instance vars due to caching the building blocks
23
- def self.setColorScheme(scheme)
24
- if scheme == :black
25
- @@warning_color = :yellow
26
- @@error_color = :red
27
- @@info_color = :white
28
- @@additional_info_color = :cyan
29
- @@success_color = :green
30
- elsif scheme == :white
31
- @@warning_color = :magenta
32
- @@error_color = :red
33
- @@info_color = :black
34
- @@additional_info_color = :blue
35
- @@success_color = :green
36
- end
37
- end
38
- ColorizingFormatter.setColorScheme(:black) # default
39
-
40
- def printError(str)
41
- [@@error_color,:bold].inject(str) {|m,x| m.send(x)}
42
- end
43
-
44
- def printWarning(str)
45
- [@@warning_color,:bold].inject(str) {|m,x| m.send(x)}
46
- end
47
-
48
- def printInfo(str)
49
- [@@info_color,:bold].inject(str) {|m,x| m.send(x)}
50
- end
51
-
52
- def printAdditionalInfo(str)
53
- [@@additional_info_color,:bold].inject(str) {|m,x| m.send(x)}
54
- end
55
-
56
- def printSuccess(str)
57
- [@@success_color,:bold].inject(str) {|m,x| m.send(x)}
58
- end
59
-
60
- # formats several lines of usually compiler output
61
- def format(compiler_output, error_descs, error_parser)
62
- return compiler_output if not enabled?
63
- res = ""
64
- begin
65
- zipped = compiler_output.split($/).zip(error_descs)
66
- zipped.each do |l,desc|
67
- if desc.severity != 255
68
- coloring = {}
69
- if desc.severity == ErrorParser::SEVERITY_WARNING
70
- res << printWarning(l)
71
- elsif desc.severity == ErrorParser::SEVERITY_ERROR
72
- res << printError(l)
73
- else
74
- res << printInfo(l)
75
- end
76
- else
77
- res << l
78
- end
79
- res << "\n"
80
- end
81
- rescue Exception => e
82
- puts "Error while parsing compiler output: #{e}"
83
- return compiler_output
84
- end
85
- res
86
- end
87
-
88
- # getter to access the static variable with an instance
89
- def enabled?
90
- return ColorizingFormatter.enabled
91
- end
92
-
93
- end
94
-
95
- end
96
-
97
- Utils.optional_package(define_colorizin_formatter, nil)
98
-
99
- end
1
+ require 'cxxproject/utils/optional'
2
+
3
+ module Cxxproject
4
+ include Utils
5
+
6
+ class ColorizingFormatter
7
+ class << self
8
+ attr_accessor :enabled
9
+ end
10
+ def enabled?
11
+ false
12
+ end
13
+ end
14
+
15
+ define_colorizin_formatter = lambda do
16
+ require 'colored'
17
+
18
+ # simple class to colorize compiler output
19
+ # the class depends on the rainbow gem
20
+ class ColorizingFormatter
21
+
22
+ # colors are not instance vars due to caching the building blocks
23
+ def self.setColorScheme(scheme)
24
+ if scheme == :black
25
+ @@warning_color = :yellow
26
+ @@error_color = :red
27
+ @@info_color = :white
28
+ @@additional_info_color = :cyan
29
+ @@success_color = :green
30
+ elsif scheme == :white
31
+ @@warning_color = :magenta
32
+ @@error_color = :red
33
+ @@info_color = :black
34
+ @@additional_info_color = :blue
35
+ @@success_color = :green
36
+ end
37
+ end
38
+ ColorizingFormatter.setColorScheme(:black) # default
39
+
40
+ def printError(str)
41
+ [@@error_color,:bold].inject(str) {|m,x| m.send(x)}
42
+ end
43
+
44
+ def printWarning(str)
45
+ [@@warning_color,:bold].inject(str) {|m,x| m.send(x)}
46
+ end
47
+
48
+ def printInfo(str)
49
+ [@@info_color,:bold].inject(str) {|m,x| m.send(x)}
50
+ end
51
+
52
+ def printAdditionalInfo(str)
53
+ [@@additional_info_color,:bold].inject(str) {|m,x| m.send(x)}
54
+ end
55
+
56
+ def printSuccess(str)
57
+ [@@success_color,:bold].inject(str) {|m,x| m.send(x)}
58
+ end
59
+
60
+ # formats several lines of usually compiler output
61
+ def format(compiler_output, error_descs, error_parser)
62
+ return compiler_output if not enabled?
63
+ res = ""
64
+ begin
65
+ zipped = compiler_output.split($/).zip(error_descs)
66
+ zipped.each do |l,desc|
67
+ if desc.severity != 255
68
+ coloring = {}
69
+ if desc.severity == ErrorParser::SEVERITY_WARNING
70
+ res << printWarning(l)
71
+ elsif desc.severity == ErrorParser::SEVERITY_ERROR
72
+ res << printError(l)
73
+ else
74
+ res << printInfo(l)
75
+ end
76
+ else
77
+ res << l
78
+ end
79
+ res << "\n"
80
+ end
81
+ rescue Exception => e
82
+ puts "Error while parsing compiler output: #{e}"
83
+ return compiler_output
84
+ end
85
+ res
86
+ end
87
+
88
+ # getter to access the static variable with an instance
89
+ def enabled?
90
+ return ColorizingFormatter.enabled
91
+ end
92
+
93
+ end
94
+
95
+ end
96
+
97
+ Utils.optional_package(define_colorizin_formatter, nil)
98
+
99
+ end
@@ -16,7 +16,8 @@ module Cxxproject
16
16
  :INCLUDE_PATH_FLAG => "-I",
17
17
  :COMPILE_FLAGS => "-c",
18
18
  :DEP_FLAGS => "-Xmake-dependency=6 -Xmake-dependency-savefile=",
19
- :DEP_FLAGS_SPACE => false
19
+ :DEP_FLAGS_SPACE => false,
20
+ :PREPRO_FLAGS => "-P"
20
21
  })
21
22
 
22
23
  DiabChain[:COMPILER][:CPP] = Utils.deep_copy(DiabChain[:COMPILER][:C])
@@ -26,6 +27,7 @@ module Cxxproject
26
27
  DiabChain[:COMPILER][:ASM][:COMMAND] = "das"
27
28
  DiabChain[:COMPILER][:ASM][:COMPILE_FLAGS] = ""
28
29
  DiabChain[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS]
30
+ DiabChain[:COMPILER][:ASM][:PREPRO_FLAGS] = ""
29
31
 
30
32
  DiabChain[:ARCHIVER][:COMMAND] = "dar"
31
33
  DiabChain[:ARCHIVER][:ARCHIVE_FLAGS] = "-rc"
@@ -16,7 +16,8 @@ module Cxxproject
16
16
  :INCLUDE_PATH_FLAG => "-I",
17
17
  :COMPILE_FLAGS => "-c ",
18
18
  :DEP_FLAGS => "-MMD -MF",
19
- :DEP_FLAGS_SPACE => true
19
+ :DEP_FLAGS_SPACE => true,
20
+ :PREPRO_FLAGS => "-E -P"
20
21
  })
21
22
 
22
23
  GCCChain[:COMPILER][:C] = Utils.deep_copy(GCCChain[:COMPILER][:CPP])
@@ -1,128 +1,131 @@
1
- require 'cxxproject/toolchain/colorizing_formatter'
2
-
3
- module Cxxproject
4
- module Toolchain
5
-
6
- class Provider
7
- @@settings = {}
8
- @@default = {
9
- :COMPILER =>
10
- {
11
- :CPP => {
12
- :COMMAND => "",
13
- :DEFINE_FLAG => "",
14
- :OBJECT_FILE_FLAG => "",
15
- :INCLUDE_PATH_FLAG => "",
16
- :COMPILE_FLAGS => "",
17
- :DEFINES => [],
18
- :FLAGS => "",
19
- :SOURCE_FILE_ENDINGS => [".cxx", ".cpp", ".c++", ".cc", ".C"],
20
- :DEP_FLAGS => "",
21
- :DEP_FLAGS => true,
22
- :ERROR_PARSER => nil
23
- },
24
- :C => {
25
- :COMMAND => "",
26
- :DEFINE_FLAG => "",
27
- :OBJECT_FILE_FLAG => "",
28
- :INCLUDE_PATH_FLAG => "",
29
- :COMPILE_FLAGS => "",
30
- :DEFINES => [],
31
- :FLAGS => "",
32
- :SOURCE_FILE_ENDINGS => [".c"],
33
- :DEP_FLAGS => "",
34
- :ERROR_PARSER => nil
35
- },
36
- :ASM => {
37
- :COMMAND => "",
38
- :DEFINE_FLAG => "",
39
- :OBJECT_FILE_FLAG => "",
40
- :INCLUDE_PATH_FLAG => "",
41
- :COMPILE_FLAGS => "",
42
- :DEFINES => [],
43
- :FLAGS => "",
44
- :SOURCE_FILE_ENDINGS => [".asm", ".s", ".S"],
45
- :DEP_FLAGS => "",
46
- :ERROR_PARSER => nil
47
- }
48
- },
49
-
50
- :ARCHIVER =>
51
- {
52
- :COMMAND => "",
53
- :ARCHIVE_FLAGS => "",
54
- :FLAGS => "",
55
- :ERROR_PARSER => nil
56
- },
57
-
58
- :LINKER =>
59
- {
60
- :COMMAND => "",
61
- :MUST_FLAGS => "",
62
- :SCRIPT => "",
63
- :USER_LIB_FLAG => "",
64
- :EXE_FLAG => "",
65
- :LIB_FLAG => "",
66
- :LIB_PATH_FLAG => "",
67
- :LIB_PREFIX_FLAGS => "", # "-Wl,--whole-archive",
68
- :LIB_POSTFIX_FLAGS => "", # "-Wl,--no-whole-archive",
69
- :FLAGS => "",
70
- :MAP_FILE_FLAG => "",
71
- :OUTPUT_ENDING => ".exe", # or .elf
72
- :ERROR_PARSER => nil
73
- },
74
-
75
- :MAKE =>
76
- {
77
- :COMMAND => "make",
78
- :FLAGS => "-j",
79
- :FILE_FLAG => "-f",
80
- :DIR_FLAG => "-C",
81
- :CLEAN => "clean"
82
- },
83
-
84
- :CONSOLE_HIGHLIGHTER => ColorizingFormatter.new
85
- }
86
-
87
- def self.add(name, basedOn = nil)
88
- chain = Marshal.load(Marshal.dump(basedOn.nil? ? @@default : @@settings[basedOn]))
89
- @@settings[name] = chain
90
- chain
91
- end
92
-
93
- def self.default
94
- @@default
95
- end
96
-
97
- def self.modify_cpp_compiler(based_on, h)
98
- chain = Marshal.load(Marshal.dump(@@settings[based_on]))
99
- chain[:COMPILER][:CPP].update(h)
100
- chain
101
- end
102
-
103
- def self.[](name)
104
-
105
- if name == "TI"
106
- if not ENV['TI_HOME']
107
- Printer.printError "Error: Please set TI_HOME"
108
- ExitHelper.exit(1)
109
- end
110
- end
111
-
112
- return @@settings[name] if @@settings.include? name
113
- nil
114
- end
115
-
116
- def self.list
117
- return @@settings
118
- end
119
-
120
- end
121
-
122
- end
123
- end
124
-
125
- require 'cxxproject/toolchain/diab'
126
- require 'cxxproject/toolchain/gcc'
127
- require 'cxxproject/toolchain/clang'
128
- require 'cxxproject/toolchain/ti'
1
+ require 'cxxproject/toolchain/colorizing_formatter'
2
+
3
+ module Cxxproject
4
+ module Toolchain
5
+
6
+ class Provider
7
+ @@settings = {}
8
+ @@default = {
9
+ :COMPILER =>
10
+ {
11
+ :CPP => {
12
+ :COMMAND => "",
13
+ :DEFINE_FLAG => "",
14
+ :OBJECT_FILE_FLAG => "",
15
+ :INCLUDE_PATH_FLAG => "",
16
+ :COMPILE_FLAGS => "",
17
+ :DEFINES => [],
18
+ :FLAGS => "",
19
+ :SOURCE_FILE_ENDINGS => [".cxx", ".cpp", ".c++", ".cc", ".C"],
20
+ :DEP_FLAGS => "",
21
+ :DEP_FLAGS => true,
22
+ :ERROR_PARSER => nil,
23
+ :PREPRO_FLAGS => ""
24
+ },
25
+ :C => {
26
+ :COMMAND => "",
27
+ :DEFINE_FLAG => "",
28
+ :OBJECT_FILE_FLAG => "",
29
+ :INCLUDE_PATH_FLAG => "",
30
+ :COMPILE_FLAGS => "",
31
+ :DEFINES => [],
32
+ :FLAGS => "",
33
+ :SOURCE_FILE_ENDINGS => [".c"],
34
+ :DEP_FLAGS => "",
35
+ :ERROR_PARSER => nil,
36
+ :PREPRO_FLAGS => ""
37
+ },
38
+ :ASM => {
39
+ :COMMAND => "",
40
+ :DEFINE_FLAG => "",
41
+ :OBJECT_FILE_FLAG => "",
42
+ :INCLUDE_PATH_FLAG => "",
43
+ :COMPILE_FLAGS => "",
44
+ :DEFINES => [],
45
+ :FLAGS => "",
46
+ :SOURCE_FILE_ENDINGS => [".asm", ".s", ".S"],
47
+ :DEP_FLAGS => "",
48
+ :ERROR_PARSER => nil,
49
+ :PREPRO_FLAGS => ""
50
+ }
51
+ },
52
+
53
+ :ARCHIVER =>
54
+ {
55
+ :COMMAND => "",
56
+ :ARCHIVE_FLAGS => "",
57
+ :FLAGS => "",
58
+ :ERROR_PARSER => nil
59
+ },
60
+
61
+ :LINKER =>
62
+ {
63
+ :COMMAND => "",
64
+ :MUST_FLAGS => "",
65
+ :SCRIPT => "",
66
+ :USER_LIB_FLAG => "",
67
+ :EXE_FLAG => "",
68
+ :LIB_FLAG => "",
69
+ :LIB_PATH_FLAG => "",
70
+ :LIB_PREFIX_FLAGS => "", # "-Wl,--whole-archive",
71
+ :LIB_POSTFIX_FLAGS => "", # "-Wl,--no-whole-archive",
72
+ :FLAGS => "",
73
+ :MAP_FILE_FLAG => "",
74
+ :OUTPUT_ENDING => ".exe", # or .elf
75
+ :ERROR_PARSER => nil
76
+ },
77
+
78
+ :MAKE =>
79
+ {
80
+ :COMMAND => "make",
81
+ :FLAGS => "-j",
82
+ :FILE_FLAG => "-f",
83
+ :DIR_FLAG => "-C",
84
+ :CLEAN => "clean"
85
+ },
86
+
87
+ :CONSOLE_HIGHLIGHTER => ColorizingFormatter.new
88
+ }
89
+
90
+ def self.add(name, basedOn = nil)
91
+ chain = Marshal.load(Marshal.dump(basedOn.nil? ? @@default : @@settings[basedOn]))
92
+ @@settings[name] = chain
93
+ chain
94
+ end
95
+
96
+ def self.default
97
+ @@default
98
+ end
99
+
100
+ def self.modify_cpp_compiler(based_on, h)
101
+ chain = Marshal.load(Marshal.dump(@@settings[based_on]))
102
+ chain[:COMPILER][:CPP].update(h)
103
+ chain
104
+ end
105
+
106
+ def self.[](name)
107
+
108
+ if name == "TI"
109
+ if not ENV['TI_HOME']
110
+ Printer.printError "Error: Please set TI_HOME"
111
+ ExitHelper.exit(1)
112
+ end
113
+ end
114
+
115
+ return @@settings[name] if @@settings.include? name
116
+ nil
117
+ end
118
+
119
+ def self.list
120
+ return @@settings
121
+ end
122
+
123
+ end
124
+
125
+ end
126
+ end
127
+
128
+ require 'cxxproject/toolchain/diab'
129
+ require 'cxxproject/toolchain/gcc'
130
+ require 'cxxproject/toolchain/clang'
131
+ require 'cxxproject/toolchain/ti'