bake-toolkit 1.8.0.1 → 2.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/bin/bake +14 -53
  3. data/bin/bakery +50 -43
  4. data/bin/createVSProjects +3 -3
  5. data/doc/cmd/install.html +1 -5
  6. data/doc/cmd/usecmd.html +29 -5
  7. data/doc/dyk/lint.html +21 -4
  8. data/doc/dyk/tipps.html +0 -6
  9. data/doc/eclipse/import.html +3 -1
  10. data/doc/eclipse/import/Import.png +0 -0
  11. data/doc/eclipse/use.html +8 -5
  12. data/doc/further/change.html +134 -1
  13. data/doc/further/issues.html +1 -0
  14. data/doc/further/wish.html +24 -21
  15. data/doc/index.html +1 -1
  16. data/doc/syntax/subst.html +8 -1
  17. data/doc/syntax/syntax.html +42 -14
  18. data/lib/bake/cache.rb +51 -59
  19. data/lib/bake/config/loader.rb +289 -0
  20. data/lib/bake/libElement.rb +134 -0
  21. data/lib/bake/mergeConfig.rb +1 -1
  22. data/lib/bake/model/language.rb +1 -1
  23. data/lib/bake/model/loader.rb +88 -0
  24. data/lib/bake/model/metamodel.rb +24 -16
  25. data/lib/bake/model/metamodel_ext.rb +9 -4
  26. data/lib/bake/options/options.rb +222 -0
  27. data/lib/bake/options/showConfigNames.rb +44 -0
  28. data/lib/bake/options/showDoc.rb +19 -0
  29. data/lib/bake/options/showLicense.rb +9 -0
  30. data/lib/bake/options/showToolchains.rb +39 -0
  31. data/lib/bake/options/usage.rb +54 -0
  32. data/lib/bake/process_output.rb +10 -0
  33. data/lib/bake/subst.rb +105 -40
  34. data/lib/bake/toolchain/clang.rb +44 -0
  35. data/lib/bake/toolchain/colorizing_formatter.rb +125 -0
  36. data/lib/bake/toolchain/diab.rb +53 -0
  37. data/lib/bake/toolchain/errorparser/diab_compiler_error_parser.rb +40 -0
  38. data/lib/bake/toolchain/errorparser/diab_linker_error_parser.rb +41 -0
  39. data/lib/bake/toolchain/errorparser/error_parser.rb +71 -0
  40. data/lib/bake/toolchain/errorparser/gcc_compiler_error_parser.rb +35 -0
  41. data/lib/bake/toolchain/errorparser/gcc_linker_error_parser.rb +35 -0
  42. data/lib/bake/toolchain/errorparser/greenhills_compiler_error_parser.rb +32 -0
  43. data/lib/bake/toolchain/errorparser/greenhills_linker_error_parser.rb +44 -0
  44. data/lib/bake/toolchain/errorparser/keil_compiler_error_parser.rb +40 -0
  45. data/lib/bake/toolchain/errorparser/keil_linker_error_parser.rb +30 -0
  46. data/lib/bake/toolchain/errorparser/lint_error_parser.rb +34 -0
  47. data/lib/bake/toolchain/errorparser/process_output.rb +3 -0
  48. data/lib/bake/toolchain/errorparser/ti_compiler_error_parser.rb +30 -0
  49. data/lib/bake/toolchain/errorparser/ti_linker_error_parser.rb +30 -0
  50. data/lib/bake/toolchain/gcc.rb +49 -0
  51. data/lib/bake/toolchain/gcc_param.rb +7 -0
  52. data/lib/bake/toolchain/greenhills.rb +52 -0
  53. data/lib/bake/toolchain/keil.rb +55 -0
  54. data/lib/bake/toolchain/lint.rb +20 -0
  55. data/lib/bake/toolchain/provider.rb +136 -0
  56. data/lib/bake/toolchain/ti.rb +47 -0
  57. data/lib/bake/util.rb +27 -15
  58. data/lib/bakery/buildPattern.rb +1 -1
  59. data/lib/bakery/model/language.rb +1 -1
  60. data/lib/bakery/model/loader.rb +56 -0
  61. data/lib/bakery/model/metamodel.rb +1 -1
  62. data/lib/bakery/options/options.rb +87 -0
  63. data/lib/bakery/toBake.rb +10 -6
  64. data/lib/blocks/block.rb +225 -0
  65. data/lib/blocks/blockBase.rb +155 -0
  66. data/lib/blocks/commandLine.rb +25 -0
  67. data/lib/blocks/compile.rb +382 -0
  68. data/lib/blocks/docu.rb +28 -0
  69. data/lib/blocks/executable.rb +143 -0
  70. data/lib/blocks/has_execute_command.rb +31 -0
  71. data/lib/blocks/library.rb +78 -0
  72. data/lib/blocks/lint.rb +53 -0
  73. data/lib/blocks/makefile.rb +87 -0
  74. data/lib/blocks/showIncludes.rb +114 -0
  75. data/lib/common/abortException.rb +4 -0
  76. data/lib/common/cleanup.rb +9 -0
  77. data/lib/common/exit_helper.rb +28 -0
  78. data/lib/common/ext/file.rb +88 -0
  79. data/lib/common/ext/stdout.rb +45 -0
  80. data/lib/common/ide_interface.rb +194 -0
  81. data/lib/common/options/option.rb +13 -0
  82. data/lib/common/options/parser.rb +59 -0
  83. data/lib/common/process.rb +64 -0
  84. data/lib/common/utils.rb +52 -0
  85. data/lib/{bake → common}/version.rb +3 -10
  86. data/lib/multithread/job.rb +44 -0
  87. data/lib/tocxx.rb +201 -932
  88. data/lib/vs/options.rb +3 -2
  89. data/license.txt +47 -22
  90. metadata +90 -30
  91. data/bin/bake-doc +0 -12
  92. data/lib/alias/loader.rb +0 -56
  93. data/lib/alias/model/language.rb +0 -22
  94. data/lib/alias/model/metamodel.rb +0 -29
  95. data/lib/bake/loader.rb +0 -92
  96. data/lib/bake/options.rb +0 -421
  97. data/lib/bakery/loader.rb +0 -57
  98. data/lib/bakery/options.rb +0 -105
  99. data/lib/option/parser.rb +0 -73
@@ -0,0 +1,3 @@
1
+ module Bake
2
+
3
+ end
@@ -0,0 +1,30 @@
1
+ require 'bake/toolchain/errorparser/error_parser'
2
+
3
+ module Bake
4
+ class TICompilerErrorParser < ErrorParser
5
+
6
+ def initialize()
7
+ @error_expression = /\"([^,^\"]+)\", line ([0-9]+)[:0-9]* (catastrophic |fatal )*([A-Za-z]+): (.+)/
8
+ end
9
+
10
+ def scan_lines(consoleOutput, proj_dir)
11
+ res = []
12
+ consoleOutputFullnames = ""
13
+ consoleOutput.each_line do |l|
14
+ d = ErrorDesc.new
15
+ scan_res = l.gsub(/\r\n?/, "").scan(@error_expression)
16
+ if scan_res.length > 0
17
+ d.file_name = File.expand_path(scan_res[0][0])
18
+ d.line_number = scan_res[0][1].to_i
19
+ d.message = scan_res[0][4]
20
+ d.severity = get_severity(scan_res[0][3])
21
+ l.gsub!(scan_res[0][0],d.file_name)
22
+ end
23
+ res << d
24
+ consoleOutputFullnames << l
25
+ end
26
+ [res, consoleOutputFullnames]
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ require 'bake/toolchain/errorparser/error_parser'
2
+
3
+ module Bake
4
+ class TILinkerErrorParser < ErrorParser
5
+
6
+ def initialize()
7
+ # todo: is every line an error?
8
+ # todo: some linker errors look like simple text, dunno how to parse properly...
9
+ # @error_expression1 = /(.*:\(\..*\)): (.*)/ # e.g. /c/Tool/Temp/ccAlar4R.o:x.cpp:(.text+0x17): undefined reference to `_a'
10
+ # @error_expression2 = /(.*):([0-9]+): (.*)/ # e.g. /usr/lib/gcc/i686-pc-cygwin/4.3.4/../../../../i686-pc-cygwin/bin/ld:roodi.yml.a:1: syntax error
11
+ end
12
+
13
+ def scan_lines(consoleOutput, proj_dir)
14
+ res = []
15
+ consoleOutput.each_line do |l|
16
+ l.rstrip!
17
+ d = ErrorDesc.new
18
+ if l != "<Linking>" then
19
+ d.file_name = proj_dir
20
+ d.line_number = 0
21
+ d.message = l
22
+ d.severity = SEVERITY_ERROR
23
+ end
24
+ res << d
25
+ end
26
+ [res, consoleOutput]
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,49 @@
1
+ require 'common/utils'
2
+ require 'bake/toolchain/provider'
3
+ require 'bake/toolchain/errorparser/error_parser'
4
+ require 'bake/toolchain/errorparser/gcc_compiler_error_parser'
5
+ require 'bake/toolchain/errorparser/gcc_linker_error_parser'
6
+
7
+ module Bake
8
+ module Toolchain
9
+
10
+ GCCChain = Provider.add("GCC")
11
+
12
+ GCCChain[:COMPILER][:CPP].update({
13
+ :COMMAND => "g++",
14
+ :DEFINE_FLAG => "-D",
15
+ :OBJECT_FILE_FLAG => "-o",
16
+ :OBJ_FLAG_SPACE => true,
17
+ :INCLUDE_PATH_FLAG => "-I",
18
+ :COMPILE_FLAGS => "-c ",
19
+ :DEP_FLAGS => "-MD -MF",
20
+ :DEP_FLAGS_SPACE => true,
21
+ :PREPRO_FLAGS => "-E -P"
22
+ })
23
+
24
+ GCCChain[:COMPILER][:C] = Utils.deep_copy(GCCChain[:COMPILER][:CPP])
25
+ GCCChain[:COMPILER][:C][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:C][:SOURCE_FILE_ENDINGS]
26
+ GCCChain[:COMPILER][:C][:COMMAND] = "gcc"
27
+
28
+ GCCChain[:COMPILER][:ASM] = Utils.deep_copy(GCCChain[:COMPILER][:C])
29
+ GCCChain[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS]
30
+
31
+ GCCChain[:ARCHIVER][:COMMAND] = "ar"
32
+ GCCChain[:ARCHIVER][:ARCHIVE_FLAGS] = "-rc"
33
+
34
+ GCCChain[:LINKER][:COMMAND] = "g++"
35
+ GCCChain[:LINKER][:SCRIPT] = "-T"
36
+ GCCChain[:LINKER][:USER_LIB_FLAG] = "-l:"
37
+ GCCChain[:LINKER][:EXE_FLAG] = "-o"
38
+ GCCChain[:LINKER][:LIB_FLAG] = "-l"
39
+ GCCChain[:LINKER][:LIB_PATH_FLAG] = "-L"
40
+
41
+ gccCompilerErrorParser = GCCCompilerErrorParser.new
42
+ GCCChain[:COMPILER][:C][:ERROR_PARSER] = gccCompilerErrorParser
43
+ GCCChain[:COMPILER][:CPP][:ERROR_PARSER] = gccCompilerErrorParser
44
+ GCCChain[:COMPILER][:ASM][:ERROR_PARSER] = gccCompilerErrorParser
45
+ GCCChain[:ARCHIVER][:ERROR_PARSER] = gccCompilerErrorParser
46
+ GCCChain[:LINKER][:ERROR_PARSER] = GCCLinkerErrorParser.new
47
+
48
+ end
49
+ end
@@ -0,0 +1,7 @@
1
+ module Bake
2
+ module Toolchain
3
+
4
+
5
+
6
+ end
7
+ end
@@ -0,0 +1,52 @@
1
+ require 'bake/toolchain/provider'
2
+ require 'common/utils'
3
+ require 'bake/toolchain/errorparser/greenhills_compiler_error_parser'
4
+ require 'bake/toolchain/errorparser/greenhills_linker_error_parser'
5
+
6
+ module Bake
7
+ module Toolchain
8
+
9
+ GreenHillsChain = Provider.add("GreenHills")
10
+
11
+ GreenHillsChain[:COMPILER][:C].update({
12
+ :COMMAND => "cxppc",
13
+ :FLAGS => "",
14
+ :DEFINE_FLAG => "-D",
15
+ :OBJECT_FILE_FLAG => "-o",
16
+ :OBJ_FLAG_SPACE => true,
17
+ :INCLUDE_PATH_FLAG => "-I",
18
+ :COMPILE_FLAGS => "-c",
19
+ :DEP_FLAGS => "-MD",
20
+ :DEP_FLAGS_FILENAME => false,
21
+ :PREPRO_FLAGS => "-P"
22
+ })
23
+
24
+ GreenHillsChain[:COMPILER][:CPP] = Utils.deep_copy(GreenHillsChain[:COMPILER][:C])
25
+ GreenHillsChain[:COMPILER][:CPP][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:CPP][:SOURCE_FILE_ENDINGS]
26
+
27
+ GreenHillsChain[:COMPILER][:ASM] = Utils.deep_copy(GreenHillsChain[:COMPILER][:C])
28
+ GreenHillsChain[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS]
29
+ GreenHillsChain[:COMPILER][:ASM][:PREPRO_FLAGS] = ""
30
+
31
+ GreenHillsChain[:ARCHIVER][:COMMAND] = "cxppc"
32
+ GreenHillsChain[:ARCHIVER][:ARCHIVE_FLAGS] = "-archive -o"
33
+
34
+ GreenHillsChain[:LINKER][:COMMAND] = "cxppc" # ??
35
+ GreenHillsChain[:LINKER][:SCRIPT] = "-T" # -T file.ld
36
+ GreenHillsChain[:LINKER][:USER_LIB_FLAG] = "-l" # user lib not supported? same as lib...
37
+ GreenHillsChain[:LINKER][:EXE_FLAG] = "-o"
38
+ GreenHillsChain[:LINKER][:LIB_FLAG] = "-l"
39
+ GreenHillsChain[:LINKER][:LIB_PATH_FLAG] = "-L"
40
+ GreenHillsChain[:LINKER][:MAP_FILE_FLAG] = "-map=" # -map=filename
41
+ GreenHillsChain[:LINKER][:MAP_FILE_PIPE] = false
42
+ GreenHillsChain[:LINKER][:OUTPUT_ENDING] = ".elf"
43
+
44
+ GreenHillsCompilerErrorParser = GreenHillsCompilerErrorParser.new
45
+ GreenHillsChain[:COMPILER][:C][:ERROR_PARSER] = GreenHillsCompilerErrorParser
46
+ GreenHillsChain[:COMPILER][:CPP][:ERROR_PARSER] = GreenHillsCompilerErrorParser
47
+ GreenHillsChain[:COMPILER][:ASM][:ERROR_PARSER] = GreenHillsCompilerErrorParser
48
+ GreenHillsChain[:ARCHIVER][:ERROR_PARSER] = GreenHillsCompilerErrorParser
49
+ GreenHillsChain[:LINKER][:ERROR_PARSER] = GreenHillsLinkerErrorParser.new
50
+
51
+ end
52
+ end
@@ -0,0 +1,55 @@
1
+ require 'common/utils'
2
+ require 'bake/toolchain/provider'
3
+ require 'bake/toolchain/errorparser/error_parser'
4
+ require 'bake/toolchain/errorparser/keil_compiler_error_parser'
5
+ require 'bake/toolchain/errorparser/keil_linker_error_parser'
6
+
7
+ module Bake
8
+ module Toolchain
9
+
10
+ KeilChain = Provider.add("Keil")
11
+
12
+ KeilChain[:COMPILER][:CPP].update({
13
+ :COMMAND => "armcc",
14
+ :DEFINE_FLAG => "-D",
15
+ :OBJECT_FILE_FLAG => "-o",
16
+ :OBJ_FLAG_SPACE => true,
17
+ :INCLUDE_PATH_FLAG => "-I",
18
+ :COMPILE_FLAGS => "-c ",
19
+ :DEP_FLAGS => "--depend=",
20
+ :DEP_FLAGS_SPACE => false,
21
+ :PREPRO_FLAGS => "-E -P"
22
+ })
23
+
24
+ KeilChain[:COMPILER][:C] = Utils.deep_copy(KeilChain[:COMPILER][:CPP])
25
+ KeilChain[:COMPILER][:C][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:C][:SOURCE_FILE_ENDINGS]
26
+
27
+ KeilChain[:COMPILER][:ASM] = Utils.deep_copy(KeilChain[:COMPILER][:C])
28
+ KeilChain[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS]
29
+ KeilChain[:COMPILER][:ASM][:COMMAND] = "armasm"
30
+ KeilChain[:COMPILER][:ASM][:COMPILE_FLAGS] = ""
31
+
32
+ KeilChain[:COMPILER][:DEP_FILE_SINGLE_LINE] = true
33
+
34
+ KeilChain[:ARCHIVER][:COMMAND] = "armar"
35
+ KeilChain[:ARCHIVER][:ARCHIVE_FLAGS] = "--create"
36
+
37
+ KeilChain[:LINKER][:COMMAND] = "armlink"
38
+ KeilChain[:LINKER][:SCRIPT] = "--scatter"
39
+ KeilChain[:LINKER][:USER_LIB_FLAG] = ""
40
+ KeilChain[:LINKER][:EXE_FLAG] = "-o"
41
+ KeilChain[:LINKER][:LIB_FLAG] = ""
42
+ KeilChain[:LINKER][:LIB_PATH_FLAG] = "--userlibpath="
43
+ KeilChain[:LINKER][:MAP_FILE_FLAG] = "--map --list="
44
+ KeilChain[:LINKER][:MAP_FILE_PIPE] = false
45
+ KeilChain[:LINKER][:LIST_MODE] = true
46
+
47
+ keilCompilerErrorParser = KeilCompilerErrorParser.new
48
+ KeilChain[:COMPILER][:C][:ERROR_PARSER] = keilCompilerErrorParser
49
+ KeilChain[:COMPILER][:CPP][:ERROR_PARSER] = keilCompilerErrorParser
50
+ KeilChain[:COMPILER][:ASM][:ERROR_PARSER] = keilCompilerErrorParser
51
+ KeilChain[:ARCHIVER][:ERROR_PARSER] = keilCompilerErrorParser
52
+ KeilChain[:LINKER][:ERROR_PARSER] = KeilLinkerErrorParser.new
53
+
54
+ end
55
+ end
@@ -0,0 +1,20 @@
1
+ require 'common/utils'
2
+ require 'bake/toolchain/provider'
3
+ require 'bake/toolchain/errorparser/lint_error_parser'
4
+
5
+ module Bake
6
+ module Toolchain
7
+
8
+ LintChain = Provider.add("Lint")
9
+
10
+ LintChain[:COMPILER][:CPP].update({
11
+ :COMMAND => "lint-nt.exe",
12
+ :DEFINE_FLAG => "-D",
13
+ :INCLUDE_PATH_FLAG => "-I",
14
+ :COMPILE_FLAGS => ["-b","-\"format=%f%(:%l:%) %t %n: %m\"", "-width(0)", "-hF1"], # array, not string!
15
+ })
16
+
17
+ LintChain[:COMPILER][:CPP][:ERROR_PARSER] = LintErrorParser.new
18
+
19
+ end
20
+ end
@@ -0,0 +1,136 @@
1
+ module Bake
2
+ module Toolchain
3
+
4
+ class Provider
5
+ @@settings = {}
6
+ @@default = {
7
+ :COMPILER =>
8
+ {
9
+ :CPP => {
10
+ :COMMAND => "",
11
+ :DEFINE_FLAG => "",
12
+ :OBJECT_FILE_FLAG => "",
13
+ :OBJ_FLAG_SPACE => false,
14
+ :INCLUDE_PATH_FLAG => "",
15
+ :COMPILE_FLAGS => "",
16
+ :DEFINES => [],
17
+ :FLAGS => "",
18
+ :SOURCE_FILE_ENDINGS => [".cxx", ".cpp", ".c++", ".cc", ".C"],
19
+ :DEP_FLAGS => "",
20
+ :DEP_FLAGS_SPACE => false,
21
+ :DEP_FLAGS_FILENAME => true,
22
+ :ERROR_PARSER => nil,
23
+ :PREPRO_FLAGS => ""
24
+ },
25
+ :C => {
26
+ :COMMAND => "",
27
+ :DEFINE_FLAG => "",
28
+ :OBJECT_FILE_FLAG => "",
29
+ :OBJ_FLAG_SPACE => false,
30
+ :INCLUDE_PATH_FLAG => "",
31
+ :COMPILE_FLAGS => "",
32
+ :DEFINES => [],
33
+ :FLAGS => "",
34
+ :SOURCE_FILE_ENDINGS => [".c"],
35
+ :DEP_FLAGS => "",
36
+ :DEP_FLAGS_SPACE => false,
37
+ :DEP_FLAGS_FILENAME => true,
38
+ :ERROR_PARSER => nil,
39
+ :PREPRO_FLAGS => ""
40
+ },
41
+ :ASM => {
42
+ :COMMAND => "",
43
+ :DEFINE_FLAG => "",
44
+ :OBJECT_FILE_FLAG => "",
45
+ :OBJ_FLAG_SPACE => false,
46
+ :INCLUDE_PATH_FLAG => "",
47
+ :COMPILE_FLAGS => "",
48
+ :DEFINES => [],
49
+ :FLAGS => "",
50
+ :SOURCE_FILE_ENDINGS => [".asm", ".s", ".S"],
51
+ :DEP_FLAGS => "",
52
+ :DEP_FLAGS_SPACE => false,
53
+ :DEP_FLAGS_FILENAME => true,
54
+ :ERROR_PARSER => nil,
55
+ :PREPRO_FLAGS => ""
56
+ }
57
+ },
58
+
59
+ :ARCHIVER =>
60
+ {
61
+ :COMMAND => "",
62
+ :ARCHIVE_FLAGS => "",
63
+ :FLAGS => "",
64
+ :ERROR_PARSER => nil
65
+ },
66
+
67
+ :LINKER =>
68
+ {
69
+ :COMMAND => "",
70
+ :MUST_FLAGS => "",
71
+ :SCRIPT => "",
72
+ :USER_LIB_FLAG => "",
73
+ :EXE_FLAG => "",
74
+ :LIB_FLAG => "",
75
+ :LIB_PATH_FLAG => "",
76
+ :LIB_PREFIX_FLAGS => "", # "-Wl,--whole-archive",
77
+ :LIB_POSTFIX_FLAGS => "", # "-Wl,--no-whole-archive",
78
+ :FLAGS => "",
79
+ :MAP_FILE_FLAG => "",
80
+ :MAP_FILE_PIPE => true,
81
+ :OUTPUT_ENDING => ".exe", # or .elf
82
+ :ERROR_PARSER => nil,
83
+ :LIST_MODE => false
84
+ },
85
+
86
+ :MAKE =>
87
+ {
88
+ :COMMAND => "make",
89
+ :FLAGS => "-j",
90
+ :FILE_FLAG => "-f",
91
+ :DIR_FLAG => "-C",
92
+ :CLEAN => "clean"
93
+ },
94
+
95
+ :LINT_POLICY => [],
96
+ :DOCU => "",
97
+ :DEP_FILE_SINGLE_LINE => false
98
+ }
99
+
100
+ def self.add(name, basedOn = nil)
101
+ chain = Marshal.load(Marshal.dump(basedOn.nil? ? @@default : @@settings[basedOn]))
102
+ @@settings[name] = chain
103
+ chain
104
+ end
105
+
106
+ def self.default
107
+ @@default
108
+ end
109
+
110
+ def self.modify_cpp_compiler(based_on, h)
111
+ chain = Marshal.load(Marshal.dump(@@settings[based_on]))
112
+ chain[:COMPILER][:CPP].update(h)
113
+ chain
114
+ end
115
+
116
+ def self.[](name)
117
+ return @@settings[name] if @@settings.include? name
118
+ nil
119
+ end
120
+
121
+ def self.list
122
+ return @@settings.delete_if {|x| x.include?"Lint" }
123
+ end
124
+
125
+ end
126
+
127
+ end
128
+ end
129
+
130
+ require 'bake/toolchain/diab'
131
+ require 'bake/toolchain/gcc'
132
+ require 'bake/toolchain/lint'
133
+ require 'bake/toolchain/clang'
134
+ require 'bake/toolchain/ti'
135
+ require 'bake/toolchain/greenhills'
136
+ require 'bake/toolchain/keil'
@@ -0,0 +1,47 @@
1
+ require 'common/utils'
2
+ require 'bake/toolchain/provider'
3
+ require 'bake/toolchain/errorparser/error_parser'
4
+ require 'bake/toolchain/errorparser/ti_compiler_error_parser'
5
+ require 'bake/toolchain/errorparser/ti_linker_error_parser'
6
+
7
+ module Bake
8
+ module Toolchain
9
+
10
+ TiChain = Provider.add("TI")
11
+
12
+ TiChain[:COMPILER][:CPP].update({
13
+ :COMMAND => "ti_cl",
14
+ :FLAGS => "",
15
+ :DEFINE_FLAG => "--define=",
16
+ :OBJECT_FILE_FLAG => "--output_file=",
17
+ :INCLUDE_PATH_FLAG => "--include_path=",
18
+ :COMPILE_FLAGS => "-c ",
19
+ :DEP_FLAGS => "--preproc_dependency=",
20
+ :DEP_FLAGS_SPACE => false
21
+ })
22
+
23
+ TiChain[:COMPILER][:C] = Utils.deep_copy(TiChain[:COMPILER][:CPP])
24
+ TiChain[:COMPILER][:C][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:C][:SOURCE_FILE_ENDINGS]
25
+
26
+ TiChain[:COMPILER][:ASM] = Utils.deep_copy(TiChain[:COMPILER][:C])
27
+ TiChain[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS] = Provider.default[:COMPILER][:ASM][:SOURCE_FILE_ENDINGS]
28
+
29
+ TiChain[:ARCHIVER][:COMMAND] = "ti_ar"
30
+ TiChain[:ARCHIVER][:ARCHIVE_FLAGS] = "r"
31
+
32
+ TiChain[:LINKER][:COMMAND] = "ti_cl"
33
+ TiChain[:LINKER][:FLAGS] = ""
34
+ TiChain[:LINKER][:MAP_FILE_FLAG] = '-m'
35
+ TiChain[:LINKER][:EXE_FLAG] = "-o"
36
+ TiChain[:LINKER][:LIB_FLAG] = "-l"
37
+ TiChain[:LINKER][:LIB_PATH_FLAG] = "-i"
38
+
39
+ tiCompilerErrorParser = TICompilerErrorParser.new
40
+ TiChain[:COMPILER][:C][:ERROR_PARSER] = tiCompilerErrorParser
41
+ TiChain[:COMPILER][:CPP][:ERROR_PARSER] = tiCompilerErrorParser
42
+ TiChain[:COMPILER][:ASM][:ERROR_PARSER] = tiCompilerErrorParser
43
+ TiChain[:ARCHIVER][:ERROR_PARSER] = tiCompilerErrorParser
44
+ TiChain[:LINKER][:ERROR_PARSER] = TILinkerErrorParser.new
45
+
46
+ end
47
+ end
data/lib/bake/util.rb CHANGED
@@ -1,32 +1,37 @@
1
1
  require 'bake/model/metamodel_ext'
2
2
  require 'bake/model/metamodel'
3
3
  require 'set'
4
- require 'cxxproject/utils/printer'
5
- require 'cxxproject/utils/exit_helper'
6
- require 'cxxproject/utils/utils'
4
+ require 'bake/toolchain/colorizing_formatter'
5
+ require 'common/exit_helper'
6
+ require 'common/utils'
7
+
8
+
9
+ def remove_empty_strings_and_join(a, j=' ')
10
+ return a.reject{|e|e.to_s.empty?}.join(j)
11
+ end
7
12
 
8
13
  def adjustFlags(orgStr, flags)
9
- orgSplitted = Cxxproject::Utils::flagSplit(orgStr, false)
14
+ orgSplitted = Bake::Utils::flagSplit(orgStr, false)
10
15
 
11
16
  flags.each do |f|
12
17
  if f.overwrite != ""
13
- orgSplitted = Cxxproject::Utils::flagSplit(f.overwrite, false)
18
+ orgSplitted = Bake::Utils::flagSplit(f.overwrite, false)
14
19
  end
15
20
 
16
21
  if f.remove != ""
17
- rmSplitted = Cxxproject::Utils::flagSplit(f.remove, false)
22
+ rmSplitted = Bake::Utils::flagSplit(f.remove, false)
18
23
  orgSplitted.delete_if {|o| rmSplitted.any? { |r|
19
24
  begin
20
25
  o.match("\\A"+r+"\\Z")
21
26
  rescue Exception => e
22
- Cxxproject::Printer.printError "Error: #{f.file_name}(#{f.line_number}): " + e.message
23
- Cxxproject::ExitHelper.exit(1)
27
+ Bake.formatter.printError(e.message, f)
28
+ Bake::ExitHelper.exit(1)
24
29
  end
25
30
  }}
26
31
  end
27
32
 
28
33
  if f.add != ""
29
- Cxxproject::Utils::flagSplit(f.add, false).each do |a|
34
+ Bake::Utils::flagSplit(f.add, false).each do |a|
30
35
  orgSplitted << a unless orgSplitted.any? { |o| o==a }
31
36
  end
32
37
  end
@@ -46,6 +51,7 @@ def integrateToolchain(tcs, toolchain)
46
51
  integrateCompiler(tcs, c, c.ctype)
47
52
  end
48
53
  integrateLintPolicy(tcs, toolchain.lintPolicy)
54
+ integrateDocu(tcs, toolchain.docu) if toolchain.docu
49
55
  end
50
56
 
51
57
  def integrateLintPolicy(tcs, policies)
@@ -54,6 +60,10 @@ def integrateLintPolicy(tcs, policies)
54
60
  end
55
61
  end
56
62
 
63
+ def integrateDocu(tcs, docu)
64
+ tcs[:DOCU] = docu.name if docu.name != ""
65
+ end
66
+
57
67
  def integrateLinker(tcs, linker)
58
68
  return tcs unless linker
59
69
  tcs[:LINKER][:COMMAND] = linker.command if linker.command != ""
@@ -75,7 +85,7 @@ def integrateCompiler(tcs, compiler, type)
75
85
  end
76
86
  tcs[:COMPILER][type][:FLAGS] = adjustFlags(tcs[:COMPILER][type][:FLAGS], compiler.flags)
77
87
  compiler.define.each do |d|
78
- tcs[:COMPILER][type][:DEFINES] << d.str
88
+ tcs[:COMPILER][type][:DEFINES] << d.str unless tcs[:COMPILER][type][:DEFINES].include? d.str
79
89
  end
80
90
  end
81
91
 
@@ -118,11 +128,13 @@ def calc_def_roots(dir)
118
128
  rootsFile = searchRootsFile(dir)
119
129
  if (rootsFile)
120
130
  File.open(rootsFile).each do |line|
121
- line.gsub!(/[\\]/,'/')
122
- if File.is_absolute?(line)
123
- def_roots << line
124
- else
125
- def_roots << File.dirname(rootsFile) + "/" + line
131
+ line = line.split("#")[0].strip.gsub(/[\\]/,'/')
132
+ if line != ""
133
+ if File.is_absolute?(line)
134
+ def_roots << line
135
+ else
136
+ def_roots << File.dirname(rootsFile) + "/" + line
137
+ end
126
138
  end
127
139
  end
128
140
  else