bake-toolkit 1.0.24 → 1.0.25

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <head>
4
+ <title>Documentation of the bake-tookit</title>
5
+ </head>
6
+ <body>
7
+ <h1>Known Issues</h1>
8
+
9
+ <ul>
10
+ <li><b>Issue</b>: If an archive or executable has been built successfully and one source file will be deleted without changing anything else, bake will leave the archive/executable unchanged when rebuilding.<br>
11
+ <b>Workaround 1</b>: Clean the project.<br>
12
+ <b>Workaround 2</b>: Delete the archive/executable manually.<br>
13
+ <b>Workaround 3</b>: Touch, edit, create another source file.<br>
14
+ </ul>
15
+
16
+ </body>
17
+
18
+ </html>
@@ -0,0 +1,54 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <head>
4
+ <title>Documentation of the bake-tookit</title>
5
+ </head>
6
+ <body>
7
+ <h1>Performance Analysis</h1>
8
+
9
+ <h2>Eclipse vs. bake</h2>
10
+
11
+ Test system: Intel Xeon W3520 (4x 2.67 GHz), 4GB Ram, Windows XP, HDD Raid<br>
12
+ Real test application with ~ 200 projects<br>
13
+ <b>ruby 1.9.2</b><p>
14
+
15
+ <table border="1">
16
+ <tr><th bgcolor="#CCCCCC"></th><th bgcolor="#CCCCCC">Eclipse 3.6.1, CDT 6</th><th bgcolor="#CCCCCC">bake</th></tr>
17
+ <tr><td>Build whole workspace</td><td bgcolor="#FFCCCC">13:01 min</td><td bgcolor="#CCFFCC">7:19 min</td></tr>
18
+ <tr><td>Build again without clean</td><td bgcolor="#FFCCCC">3:05 min</td><td bgcolor="#CCFFCC">0:50 min</td></tr>
19
+ <tr><td>Clean whole workspace</td><td bgcolor="#FFCCCC">0:41 min</td><td bgcolor="#CCFFCC">0:08 min</td></tr>
20
+ <tr><td>Clean the cleaned workspace again</td><td bgcolor="#FFCCCC">0:35 min</td><td bgcolor="#CCFFCC">0:02 min</td></tr>
21
+ <tr><td>Memory consumption of build environment<br>(exclusive compiler, etc.)</td><td bgcolor="#FFCCCC">Eclipse needs additional<br>300MB, stays in memory</td><td bgcolor="#CCFFCC">35MB peak,freed after build<br></td></tr>
22
+ </table>
23
+
24
+
25
+
26
+ <h2>ruby vs. ruby</h2>
27
+
28
+ Test system: Intel Xeon W3520 (4x 2.67 GHz), 4GB Ram, Windows XP, HDD Raid<br>
29
+ Real test application with ~ 200 projects<br>
30
+ Results averaged out of 30 runs<p>
31
+
32
+ <table border="1">
33
+ <tr><th bgcolor="#CCCCCC"></th><th bgcolor="#CCCCCC">ruby 1.8.6p398</th><th bgcolor="#CCCCCC">ruby 1.8.7p352</th><th bgcolor="#CCCCCC">ruby 1.9.2p180</th><th bgcolor="#CCCCCC">ruby 1.9.3p0</th></tr>
34
+ <tr><td>Build whole workspace</td><td bgcolor="#FFCCCC">13:58 min</td><td bgcolor="#FFFFCC">8:07 min</td><td bgcolor="#CCFFCC">7:19 min</td><td bgcolor="#CCFFCC">7:28 min</td></tr>
35
+ <tr><td>Build single file</td><td bgcolor="#CCFFCC">1,20 sec</td><td bgcolor="#FFFFCC">1,87 sec</td><td bgcolor="#FFCCCC">2,38 sec</td><td bgcolor="#CCFFCC">1,29 sec</td></tr>
36
+ </table>
37
+ <br>
38
+ ruby 1.8.6 uses only ONE native thread for multiple ruby threads.<br>
39
+ ruby 1.9.2 for Windows needs very long to startup for complex applications, which is fixed in 1.9.3
40
+
41
+ <h2>CMake with Unix makefiles vs. bake</h2>
42
+
43
+ Test system: Intel Xeon W3520 (4x 2.67 GHz), 4GB Ram, Windows XP, HDD Raid<br>
44
+ Real test application with ~ 100 projects<p>
45
+
46
+ <li> Build whole workspace: bake is ~10% faster
47
+ <li> Build again without clean: bake is ~50% faster
48
+ <li> Clean whole workspace: bake is ~80% faster
49
+ <p>
50
+ More details will follow.
51
+
52
+ </body>
53
+
54
+ </html>
@@ -0,0 +1,39 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <head>
4
+ <title>Documentation of the bake-tookit</title>
5
+ </head>
6
+ <body>
7
+ <h1>Wishes and planned features</h1>
8
+
9
+ Features listed on this page are open for discussion.
10
+ <ul>
11
+ <li>Project configurations are placed in Project.meta. If more than one meta file would be supported, different applications may edit different meta files.
12
+ <ul>
13
+ <li>Applications can change e.g. compiler flags without breaking another application.
14
+ <li>However, if e.g. a new include path is needed, all meta-files have to be adapted.
15
+ </ul>
16
+ <li>Another way to define IncludeDirs, etc. which avoids repeating the work IncludeDir for every include dir (rtext change?)
17
+ <li>meta files: "{" not only at the end of a line, should be possible to place anywhere
18
+ <li>New lines in problems view are shown as a square sign. These signs should be somehow removed without breaking the annotations in the source files.
19
+ <li>Maybe a project property page can be introduced as Project.meta-Viewer/Editor - this could be a feature for a later version.
20
+ <li>Global bake config (e.g. for -v or -a black)
21
+ <li>Support toolchain settings for files with wildcards. Clarify how to proceed with ambiguous declarations.
22
+ <li>Word wrap in colored console in Eclipse (seems a bit tricky)
23
+ <li>Build order of files currently the same as in Eclipse makefiles. Should that be changed to reflect order of "Files" tags in Project.meta?
24
+ <li>bakery shall call bake with relative pathnames, which results in nicer outputs in nightly builds
25
+ <li>Introduce background ruby process for Eclipse to workaround the require bug in ruby 1.9.x for Windows.<br>
26
+ Reason: require statements take round about two seconds before the build can be started. Two seconds is very much when building a single file.
27
+ <li>Exporter: add some more logic for exclude build directories to reduce useless definitions in Project.meta files
28
+ <li>Additional redirect from errors and warnings in a log file.
29
+ <li>Variables in main Project.meta which are usable in subprojects.
30
+ <li>Conditional variables like ifeq ($(VIDEO_MODE_12BIT_JPEG), 1)
31
+ <li>Better annotations undefined symbol errors (if e.g. filename is given in error message)
32
+ <li>Doxygen parameter to generate Doxygen, maybe with AutoOpen from Eclipse?
33
+ <li>Meta Config in Workspace root
34
+ <li>Even shorter command line options
35
+ </ul>
36
+
37
+ </body>
38
+
39
+ </html>
data/doc/index.html ADDED
@@ -0,0 +1,78 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <head>
4
+ <title>Documentation of the bake-tookit</title>
5
+ </head>
6
+ <body>
7
+
8
+ <h1>bake</h1>
9
+
10
+ bake is used to build software <font color="#009900"><b>fast</b></font> and <font color="#009900"><b>easy</b></font>.
11
+
12
+ <h2>Key features</h2>
13
+ <img src="src/ok.png"/> faster than many other well known build systems<br>
14
+ <img src="src/ok.png"/> can be run on command line with colored output<br>
15
+ <img src="src/ok.png"/> Eclipse and Visual Studio integration plugins provided<br>
16
+ <img src="src/ok.png"/> configuration files easy to understand and maintain<br>
17
+
18
+ <h2>Guidelines</h2>
19
+
20
+ <h3>Concepts</h3>
21
+ <ul>
22
+ <li><a href="concepts/configfile.html">The configuration file Project.meta</a>
23
+ <li><a href="concepts/mainproject.html">The main project</a>
24
+ <li><a href="concepts/buildhierarchy.html">The build hierarchy</a>
25
+ </ul>
26
+
27
+ <h3>Command Line</h3>
28
+ <ul>
29
+ <li><a href="cmd/install.html">How to install bake command line tool</a>
30
+ <li><a href="cmd/usecmd.html">How to use bake on command line</a>
31
+ <li><a href="cmd/usecygwin.html">How to use bake in Cygwin</a>
32
+ </ul>
33
+
34
+ <h3>Eclipse</h3>
35
+ <ul>
36
+ <li><a href="eclipse/install.html">How to install bake Eclipse integration</a>
37
+ <li><a href="eclipse/use.html">How to use bake in Eclipse</a>
38
+ <li><a href="eclipse/export.html">How to convert existing CDT workspaces</a>
39
+ <li><a href="eclipse/import.html">How to create a workspace in Eclipse</a>
40
+ <li><a href="eclipse/new.html">How to create a new project in Eclipse</a>
41
+ </ul>
42
+
43
+ <h3>Visual Studio</h3>
44
+ <ul>
45
+ <li><a href="vs/install.html">How to install bake Visual Studio integration</a>
46
+ <li><a href="vs/use.html">How to use bake in Visual Studio</a>
47
+ <li><a href="vs/create.html">How to create a solution / projects in Visual Studio</a>
48
+ </ul>
49
+
50
+ <h3>Syntax</h3>
51
+ <ul>
52
+ <li><a href="syntax/syntax.html">Syntax of Project.meta</a>
53
+ <li><a href="syntax/subst.html">Variable substitution in Project.meta</a>
54
+ <li><a href="syntax/derive.html">Derive configs</a>
55
+ </ul>
56
+
57
+ <h3>Did you know?</h3>
58
+ <ul>
59
+ <li><a href="dyk/tipps.html">Tipps and Tricks</a>
60
+ </ul>
61
+
62
+ <h3>Further readings</h3>
63
+ <ul>
64
+ <li><a href="further/collections.html">Build Collections</a>
65
+ <li><a href="further/perf.html">Performance Analysis</a>
66
+ <li><a href="further/change.html">Changelog</a>
67
+ <li><a href="further/wish.html">Wishlist</a>
68
+ <li><a href="further/issues.html">Known Issues</a>
69
+ <li><a href="further/internal.html">Internal developing notes</a>
70
+ </ul>
71
+
72
+ <p>
73
+ <hr>
74
+ <table width="100%" border="0"><tr><td align="left">Described bake-toolkit version: 1.0.25</td><td align="right">January 21, 2014</td></tr></table>
75
+
76
+ </body>
77
+
78
+ </html>
data/doc/src/ok.png ADDED
Binary file
@@ -0,0 +1,89 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <head>
4
+ <title>Documentation of the bake-tookit</title>
5
+ <style type="text/css">
6
+ #rundrum {
7
+ border-width:1px;
8
+ border-style:dashed;
9
+ border-color:blue;
10
+ padding:0.2cm;
11
+ text-align:justify; }
12
+ }
13
+ </style>
14
+ </head>
15
+ <body>
16
+ <h1>Derive configs</h1>
17
+
18
+ A config can be derived from another config in Project.meta like this:
19
+ <pre id="rundrum"><code>ExecutableConfig A<br>LibraryConfig B, extends: A<br>CustomConfig C, extends: B<br>ExecutableConfig D, extends: C</code></pre>
20
+
21
+ The config type of the parent config does not matter, but only settings which are valid in BOTH configs will be inherited.<br>
22
+ In the example above D gets the dependencies from A, because "Dependency" is valid in all configs, but D does not get the "Files" from A, because "Files" is not valid in CustomConfig.
23
+ <p>
24
+ The following listing shows HOW settings will be derived:
25
+
26
+ <table border="1">
27
+ <tr><th bgcolor="#CCCCCC">Setting</th><th bgcolor="#CCCCCC">Derived</th></tr>
28
+ <tr><td>Dependency</td> <td>parent + child</td></tr>
29
+ <tr><td>ExternalLibrary<br>ExternalLibrarySearchPath<br>UserLibrary</td> <td>parent + child (ordered by line number!)</td></tr>
30
+ <tr><td>PreSteps</td> <td>parent + child</td></tr>
31
+ <tr><td>PostSteps</td> <td>parent + child</td></tr>
32
+ <tr><td>Toolchain<br>DefaultToolchain</td> <td>Compiler, Archiver and Linker settings used from parent<br>if not existing in child - see below</td></tr>
33
+ <tr><td>Makefile/CommandLine<br>(in CustomConfig)</td> <td>used from parent if not in child</td></tr>
34
+ <tr><td>Files</td> <td>parent + child</td></tr>
35
+ <tr><td>ExcludeFiles</td> <td>parent + child</td></tr>
36
+ <tr><td>IncludeDir</td> <td>parent + child</td></tr>
37
+ <tr><td>LinkerScript</td> <td>used from parent if not in child</td></tr>
38
+ <tr><td>ArtifactName</td> <td>used from parent if not in child</td></tr>
39
+ <tr><td>MapFile</td> <td>used from parent if not in child</td></tr>
40
+ </table>
41
+ <br>
42
+ Example for deriving toolchains:
43
+
44
+ <pre id="rundrum"><code>ExecutableConfig A {
45
+ Toolchain {
46
+ Compiler CPP {
47
+ Define "DefA"
48
+ }
49
+ Linker {
50
+ Flags "-O3"
51
+ }
52
+ }
53
+ }
54
+
55
+ ExecutableConfig B, extends: A {
56
+ Toolchain {
57
+ Compiler CPP {
58
+ Define "DefB1"
59
+ }
60
+ Compiler ASM {
61
+ Define "DefB2"
62
+ }
63
+ Archiver {
64
+ Flags "-B"
65
+ }
66
+ }
67
+ }</code></pre>
68
+
69
+ B derives from A, but B redefines Compiler CPP, therefore "DefA" will not be defined in B. But the toolchain of B does not include a Linker tag, therefore the Linker will be inherited.<br>
70
+ The toolchain of B is treated like this:
71
+
72
+ <pre id="rundrum"><code>Toolchain {
73
+ Compiler CPP {
74
+ Define "DefB1"
75
+ }
76
+ Compiler ASM {
77
+ Define "DefB2"
78
+ }
79
+ Archiver {
80
+ Flags "-B"
81
+ }
82
+ Linker {
83
+ Flags "-O3"
84
+ }
85
+ }</code></pre>
86
+
87
+ </body>
88
+
89
+ </html>
@@ -0,0 +1,103 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <head>
4
+ <title>Documentation of the bake-tookit</title>
5
+ <style type="text/css">
6
+ #rundrum {
7
+ border-width:1px;
8
+ border-style:dashed;
9
+ border-color:blue;
10
+ padding:0.2cm;
11
+ text-align:justify; }
12
+ }
13
+ </style>
14
+ </head>
15
+ <body>
16
+ <h1>Variable substitution in Project.meta</h1>
17
+
18
+ <h3>Substituted variables</h3>
19
+
20
+ <table border="1">
21
+ <tr><th bgcolor="#CCCCCC">Variable</th><th bgcolor="#CCCCCC">Example</th></tr>
22
+ <tr><td>$(MainConfigName)</td> <td>Debug</td></tr>
23
+ <tr><td>$(MainProjectName)</td> <td>bootloader</td></tr>
24
+ <tr><td>$(ConfigName)</td> <td>lib</td></tr>
25
+ <tr><td>$(ProjectName)</td> <td>canDriver</td></tr>
26
+ <tr><td>$(OutputDir)</td> <td>Debug_bootloader</td></tr>
27
+ <tr><td>$(ArtifactName)</td> <td>bootloader_1.0.elf</td></tr>
28
+ <tr><td>$(ArtifactNameBase)</td> <td>bootloader_1.0</td></tr>
29
+ <tr><td>$(Time)</td> <td>2012-12-24 20:00:00 +0200</td></tr>
30
+ <tr><td>$(Hostname)</td> <td>MY_COMPUTER</td></tr>
31
+ </table>
32
+ <br>
33
+ <table border="1">
34
+ <tr><th bgcolor="#CCCCCC">Variable</th><th bgcolor="#CCCCCC">Windows</th><th bgcolor="#CCCCCC">Other</th></tr>
35
+ <tr><td>$(/)</td> <td>\</td><td>/</td></tr>
36
+ </table>
37
+ <p>
38
+ Otherwise:
39
+ <p>
40
+ <table border="1">
41
+ <tr><th bgcolor="#CCCCCC">Variable</th><th bgcolor="#CCCCCC">Example</th></tr>
42
+ <tr><td>$(environment variable)</td> <td>whatever</td></tr>
43
+ </table>
44
+ <p>
45
+ An error will be generated if the environment variable does not exist, except
46
+ <p>
47
+ <table border="1">
48
+ <tr><th bgcolor="#CCCCCC">Variable</th><th bgcolor="#CCCCCC">Example</th></tr>
49
+ <tr><td>$(PATH_TO_CYGWIN)</td> <td>c:/tool/cygwin</td></tr>
50
+ </table>
51
+ <p>
52
+ will be substituted to an empty string if not set.
53
+
54
+ <h3>Equal variables</h3>
55
+
56
+ <h4>In main project</h4>
57
+ <table border="1">
58
+ <tr><th bgcolor="#CCCCCC">Variable</th><th bgcolor="#CCCCCC">is equal to</th></tr>
59
+ <tr><td>$(MainConfigName)</td> <td>$(ConfigName)</td></tr>
60
+ <tr><td>$(MainProjectName)</td> <td>$(ProjectName)</td></tr>
61
+ <tr><td>$(OutputDir)</td> <td>$(MainConfigName)</td></tr>
62
+ </table>
63
+
64
+ <h4>In subproject</h4>
65
+ <table border="1">
66
+ <tr><th bgcolor="#CCCCCC">Variable</th><th bgcolor="#CCCCCC">is equal to</th></tr>
67
+ <tr><td>$(OutputDir)</td> <td>$(MainConfigName)_$(MainProjectName)</td></tr>
68
+ </table>
69
+
70
+ <h3>Auto-adjustment of paths to existing projects</h3>
71
+
72
+ If paths to other projects are needed, e.g. to "bootloaderUpdater", don't write a hard coded relative path like this:<br>
73
+ <font color="red">CommandLine "../bootloaderUpdater/tools/PrimaryBootloader2Include.exe</font><br>
74
+ bootloaderUpdater might be checked out into a different workspace root. If you write<br>
75
+ <font color="green">CommandLine "bootloaderUpdater/tools/PrimaryBootloader2Include.exe</font><br>
76
+ bake recognizes that the first part of the path is a valid project name and calculates the relative path to the project automatically.<br>
77
+
78
+ <h4>Special case:</h4>
79
+ If you have a directory in the current project, which has the same name as a valid project and you need to reference the directory, write<br>
80
+ <font color="green">IncludeDir "myProjectName/bootloaderUpdater/whatever"</font><br>
81
+ which will then adjusted to<br>
82
+ <font color="green">-I"bootloaderUpdater/whatever"</font><br>
83
+ instead of<br>
84
+ <font color="red">-I"../bootloaderUpdater/whatever" (depending of the location of the project bootloaderUpdater).</font>
85
+
86
+ <h4>Supported elements for auto-adjustment:</h4>
87
+ <ul>
88
+ <li>IncludeDir
89
+ <li>ExternalLibrary
90
+ <li>ExternalLibrarySearchPath
91
+ <li>UserLibrary
92
+ <li>CommandLine
93
+ </ul>
94
+ <h3>Examples</h3>
95
+ <pre id="rundrum"><code>CommandLine "ddump -Ruv -y 0xFFFFF -o$(OutputDir)/$(ArtifactNameBase).bin $(OutputDir)/$(ArtifactName)"
96
+ ExternalLibrarySearchPath "$(PATH_TO_CYGWIN)/usr/local/lib"
97
+ IncludeDir "bspDma/include"</code></pre>
98
+
99
+
100
+
101
+ </body>
102
+
103
+ </html>
@@ -0,0 +1,587 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
2
+ "http://www.w3.org/TR/html4/strict.dtd">
3
+ <html>
4
+ <head></head>
5
+ <title>Documentation of the bake-tookit</title>
6
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
7
+
8
+ <body >
9
+
10
+ <h1>Syntax of Project.meta</h1>
11
+ <h2>Instructions for the Interactive Syntax Viewer</h2>
12
+ <ul>
13
+ <li>Move the mouse cursor over the blue elements to display more information.
14
+ <li>Three config types exist: ExecutableConfig, LibraryConfig and CustomConfig. Move the mouse cursor over these elements to display the supported content.
15
+ </ul>
16
+ <b>General Notes:</b>
17
+ <ul>
18
+ <li>Specify the paths always relative to the current project root, but keep the variable substitution in Project.meta in mind.
19
+ <li>Use double quotes (") if the strings have spaces or slashes.
20
+ <li>Use hash marks (#) for comments.
21
+ </ul>
22
+
23
+ <style type="text/css">
24
+
25
+ #dhtmltooltip{
26
+ position: absolute;
27
+ width: 150px;
28
+ border: 2px solid black;
29
+ padding: 2px;
30
+ background-color: lightyellow;
31
+ visibility: hidden;
32
+ z-index: 100;
33
+ }
34
+
35
+ </style>
36
+
37
+ <style type="text/css">
38
+ .hide {
39
+ display:none;
40
+ }
41
+ .show {
42
+ display:block
43
+ }
44
+ .showInline {
45
+ display:inline
46
+ }
47
+ .help {
48
+ color:blue
49
+ }
50
+ .showRadio {
51
+ font-weight:bold;color:blue;text-decoration:overline underline
52
+ }
53
+ .hideRadio {
54
+ color:#AAAAFF;
55
+ }
56
+ .mycomment {
57
+ color:green
58
+ }
59
+ </style>
60
+
61
+
62
+
63
+
64
+
65
+ <table border="1" style="font-family:monospace"; font-size:10><td>
66
+
67
+ <span class="help" onMouseover="showProject()" onMouseout="notip()">Project</span> {<br>
68
+ &nbsp; <br>
69
+
70
+ &nbsp; <span class="help" onMouseover="showResponsible()" onMouseout="notip()">Responsible</span> {<br>
71
+ &nbsp; &nbsp; <span class="help" onMouseover="showPerson()" onMouseout="notip()">Person</span> &#60;name&#62;,
72
+ <span class="help" onMouseover="showPersonEmail()" onMouseout="notip()">email</span>: &#60;adr&#62;<br>
73
+ &nbsp; }<br><br>
74
+
75
+ &nbsp; <span class="mycomment"># 0..n configs</span><br>
76
+ &nbsp; <span class="showRadio" onMouseover="showExecutableConfig()" onMouseout="notip()" id="executableConfig">ExecutableConfig</span> |
77
+ <span class="hideRadio" onMouseover="showLibraryConfig()" onMouseout="notip()" id="libraryConfig">LibraryConfig</span> |
78
+ <span class="hideRadio" onMouseover="showCustomConfig()" onMouseout="notip()" id="customConfig">CustomConfig</span> &#60;name&#62; <span class="help" onMouseover="showExtends()" onMouseout="notip()">extends</span>: &#60;parent&#62; {<br><br>
79
+
80
+ <span><span style="background-color:#EEEEEE;" class="show">
81
+ &nbsp; &nbsp; <span class="mycomment"># Valid for all config types</span><br><br>
82
+ &nbsp; &nbsp; <span class="help" onMouseover="showDependency()" onMouseout="notip()">Dependency</span> &#60;project&#62;,
83
+ <span class="help" onMouseover="showDependencyConfig()" onMouseout="notip()">config</span>: &#60;name&#62;<br>
84
+ &nbsp; &nbsp; <span class="help" onMouseover="showExternalLibrary()" onMouseout="notip()">ExternalLibrary</span> &#60;lib&#62;,
85
+ <span class="help" onMouseover="showExternalLibrarySearch()" onMouseout="notip()">search</span>: true|false<br>
86
+ &nbsp; &nbsp; <span class="help" onMouseover="showUserLibrary()" onMouseout="notip()">UserLibrary</span> &#60;lib&#62;<br>
87
+ &nbsp; &nbsp; <span class="help" onMouseover="showExternalLibrarySearchPath()" onMouseout="notip()">ExternalLibrarySearchPath</span> &#60;path&#62;<br>
88
+ &nbsp; &nbsp; <span class="help" onMouseover="showPreSteps()" onMouseout="notip()">PreSteps</span> {<br>
89
+ &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showMakefile()" onMouseout="notip()">Makefile</span> &#60;file&#62;,
90
+ <span class="help" onMouseover="showMakefileLib()" onMouseout="notip()">lib</span>: &#60;lib&#62;,
91
+ <span class="help" onMouseover="showMakefileTarget()" onMouseout="notip()">target</span>: &#60;target&#62;,
92
+ <span class="help" onMouseover="showMakefilePathTo()" onMouseout="notip()">pathTo</span>: &#60;paths&#62;,
93
+ <span class="help" onMouseover="showStepDefault()" onMouseout="notip()">default</span>: on|off,
94
+ <span class="help" onMouseover="showStepFilter()" onMouseout="notip()">filter</span>: &#60;name&#62; {<br>
95
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showMakefileFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;<br>
96
+ &nbsp; &nbsp; &nbsp; }<br>
97
+ &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showCommandLine()" onMouseout="notip()">CommandLine</span> &#60;line&#62;,
98
+ <span class="help" onMouseover="showStepDefault()" onMouseout="notip()">default</span>: on|off,
99
+ <span class="help" onMouseover="showStepFilter()" onMouseout="notip()">filter</span>: &#60;name&#62;<br>
100
+ &nbsp; &nbsp; }<br>
101
+ &nbsp; &nbsp; <span class="help" onMouseover="showPostSteps()" onMouseout="notip()">PostSteps</span> {<br>
102
+ &nbsp; &nbsp; &nbsp; <span class="mycomment"># Same as for PreSteps</span><br>
103
+ &nbsp; &nbsp; }<br>
104
+ &nbsp; &nbsp; <span class="help" onMouseover="showDefaultToolchain()" onMouseout="notip()">DefaultToolchain</span> &#60;basedOn&#62; {<br>
105
+ &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showDefaultCompiler()" onMouseout="notip()">Compiler</span> ASM | CPP | C,
106
+ <span class="help" onMouseover="showCommand()" onMouseout="notip()">command</span>: &#60;cmd&#62; {</i><br>
107
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showDefaultFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;<br>
108
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showDefaultDefine()" onMouseout="notip()">Define</span> &#60;define&#62;<br>
109
+ &nbsp; &nbsp; &nbsp; }<br>
110
+ &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showDefaultArchiver()" onMouseout="notip()">Archiver</span>
111
+ <span class="help" onMouseover="showCommand()" onMouseout="notip()">command</span>: &#60;cmd&#62; {</i><br>
112
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showDefaultFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;<br>
113
+ &nbsp; &nbsp; &nbsp; }<br>
114
+ &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showDefaultLinker()" onMouseout="notip()">Linker</span>
115
+ <span class="help" onMouseover="showCommand()" onMouseout="notip()">command</span>: &#60;cmd&#62; {</i><br>
116
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showDefaultFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;<br>
117
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showLibPrefixFlags()" onMouseout="notip()">LibPrefixFlags</span> &#60;flags&#62;<br>
118
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showLibPostfixFlags()" onMouseout="notip()">LibPostfixFlags</span> &#60;flags&#62;<br>
119
+ &nbsp; &nbsp; &nbsp; }<br>
120
+ &nbsp; &nbsp; }<br></span><br></span>
121
+
122
+ <span id="libExe_part"><span class="show" style="background-color:#EEEEEE;">
123
+ &nbsp; &nbsp; <span class="mycomment"># Valid for ExecutableConfig and LibraryConfig</span><br><br>
124
+ &nbsp; &nbsp; <span class="help" onMouseover="showFiles()" onMouseout="notip()">Files</span> &#60;pattern&#62; {<br>
125
+ &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showFilesFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;, add: &#60;flags&#62;, remove: &#60;flags&#62;<br>
126
+ &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showFilesDefine()" onMouseout="notip()">Define</span> &#60;define&#62;<br>
127
+ &nbsp; &nbsp; }<br>
128
+ &nbsp; &nbsp; <span class="help" onMouseover="showExcludeFiles()" onMouseout="notip()">ExcludeFiles</span> &#60;pattern&#62;<br>
129
+ &nbsp; &nbsp; <span class="help" onMouseover="showIncludeDir()" onMouseout="notip()">IncludeDir</span> &#60;dir&#62;<br>
130
+ &nbsp; &nbsp; <span class="help" onMouseover="showToolchainProject()" onMouseout="notip()">Toolchain</span> {<br>
131
+ &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showCompiler()" onMouseout="notip()">Compiler</span> ASM | CPP | C,
132
+ <span class="help" onMouseover="showCommand()" onMouseout="notip()">command</span>: &#60;cmd&#62; {</i><br>
133
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;, add: &#60;flags&#62;, remove: &#60;flags&#62;<br>
134
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showDefine()" onMouseout="notip()">Define</span> &#60;define&#62;<br>
135
+ &nbsp; &nbsp; &nbsp; }<br>
136
+ &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showArchiver()" onMouseout="notip()">Archiver</span>
137
+ <span class="help" onMouseover="showCommand()" onMouseout="notip()">command</span>: &#60;cmd&#62; {</i><br>
138
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;, add: &#60;flags&#62;, remove: &#60;flags&#62;<br>
139
+ &nbsp; &nbsp; &nbsp; }<br>
140
+ &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showLinker()" onMouseout="notip()">Linker</span>
141
+ <span class="help" onMouseover="showCommand()" onMouseout="notip()">command</span>: &#60;cmd&#62; {</i><br>
142
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;, add: &#60;flags&#62;, remove: &#60;flags&#62<br>
143
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showLibPrefixFlags()" onMouseout="notip()">LibPrefixFlags</span> &#60;flags&#62;, add: &#60;flags&#62;, remove: &#60;flags&#62<br>
144
+ &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showLibPostfixFlags()" onMouseout="notip()">LibPostfixFlags</span> &#60;flags&#62;, add: &#60;flags&#62;, remove: &#60;flags&#62<br>
145
+ &nbsp; &nbsp; &nbsp; }<br>
146
+ &nbsp; &nbsp; }<br></span><br></span>
147
+
148
+ <span id="exe_part"><span class="show" style="background-color:#EEEEEE;">
149
+ &nbsp; &nbsp; <span class="mycomment"># Valid for ExecutableConfig</span><br><br>
150
+ &nbsp; &nbsp; <span class="help" onMouseover="showLinkerScript()" onMouseout="notip()">LinkerScript</span> &#60;script&#62;<br>
151
+ &nbsp; &nbsp; <span class="help" onMouseover="showMapFile()" onMouseout="notip()">MapFile</span> &#60;name&#62;<br>
152
+ &nbsp; &nbsp; <span class="help" onMouseover="showArtifactName()" onMouseout="notip()">ArtifactName</span> &#60;name&#62;<br></span><br></span>
153
+
154
+ <span id="custom_part" class="hide"><span style="background-color:#EEEEEE;" class="show">
155
+ &nbsp; &nbsp; <span class="mycomment"># Valid for CustomConfig</span><br><br>
156
+ &nbsp; &nbsp; <span class="showRadio" id="makefile" onMouseover="showMakefileCustom()" onMouseout="notip()">Makefile</span> |
157
+ <span class="hideRadio" id="commandline" onMouseover="showCommandlineCustom()" onMouseout="notip()">CommandLine</span>
158
+ <span style="background-color:#DDDDDD;" id="makefile_part" class="showInline"> &#60;name&#62;,
159
+ <span class="help" onMouseover="showMakefileLib()" onMouseout="notip()">lib</span>: &#60;lib&#62;,
160
+ <span class="help" onMouseover="showMakefileTarget()" onMouseout="notip()">target</span>: &#60;target&#62;,
161
+ <span class="help" onMouseover="showMakefilePathTo()" onMouseout="notip()">pathTo</span>: &#60;paths&#62; {<br>
162
+ &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showMakefileFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;<br>
163
+ &nbsp; &nbsp; }<br>
164
+ </span>
165
+ <span style="background-color:#DDDDDD;" id="commandline_part" class="hide">&#60;line&#62;</span>
166
+ &nbsp; &nbsp; <br></span><br></span>
167
+ &nbsp; }<br>
168
+ }<br>
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+ <div id="dhtmltooltip"></div>
177
+
178
+ <script type="text/javascript">
179
+
180
+
181
+ function showProject() {
182
+ str = 'A bake project is very similiar to a project in Eclipse, Visual Studio, etc.<br>'+
183
+ 'The name of the project is the directory name of the Project.meta file.'
184
+ ddrivetip("Project", "Yes", "1", "-",str)
185
+ }
186
+
187
+ function showResponsible() {
188
+ str = "Specify all responsible persons of the project."
189
+ ddrivetip("Responsible", "Not yet, but in future,", "0..1", "-",str)
190
+ }
191
+
192
+ function showPerson() {
193
+ str = 'Person who is responsible for the project.'
194
+ ddrivetip("Person", "Not yet, but in future", "0..1", "-",str)
195
+ }
196
+
197
+ function showPersonEmail() {
198
+ str = 'Use always double quotes (") for the email address.'
199
+ ddrivetip("email", "Not yet, but in future", "-", "-",str)
200
+ }
201
+
202
+ function showExecutableConfig() {
203
+ document.getElementById('libExe_part').className="show"
204
+ document.getElementById('exe_part').className="show"
205
+ document.getElementById('custom_part').className="hide"
206
+ document.getElementById('executableConfig').className="showRadio"
207
+ document.getElementById('libraryConfig').className="hideRadio"
208
+ document.getElementById('customConfig').className="hideRadio"
209
+
210
+ str = 'This is the main config of an application. This is the only config type which has dependencies.'
211
+ ddrivetip("ExecutableConfig", "No","0..n","-",str)
212
+ }
213
+
214
+ function showLibraryConfig() {
215
+ document.getElementById('libExe_part').className="show"
216
+ document.getElementById('exe_part').className="hide"
217
+ document.getElementById('custom_part').className="hide"
218
+ document.getElementById('executableConfig').className="hideRadio"
219
+ document.getElementById('libraryConfig').className="showRadio"
220
+ document.getElementById('customConfig').className="hideRadio"
221
+
222
+ str = 'This config is used for a source library. The library will be linked automatically to the executable.'
223
+ ddrivetip("LibraryConfig", "No","0..n","-",str)
224
+ }
225
+
226
+ function showCustomConfig() {
227
+ document.getElementById('libExe_part').className="hide"
228
+ document.getElementById('exe_part').className="hide"
229
+ document.getElementById('custom_part').className="show"
230
+ document.getElementById('executableConfig').className="hideRadio"
231
+ document.getElementById('libraryConfig').className="hideRadio"
232
+ document.getElementById('customConfig').className="showRadio"
233
+
234
+ str = 'This config is used for special projects, e.g. for Makefile projects.<br>'+
235
+ 'It is valid to leave a CustomConfig completely empty - nothing will be done in that case.'
236
+ ddrivetip("CustomConfig", "No","0..n","-",str)
237
+ }
238
+
239
+ function showExternalLibrary() {
240
+ str = 'Every config can specify libs which have to be linked to the executable.<br>'+
241
+ 'It\'s possible to add a path, e.g.:<br>'+
242
+ '<i> &nbsp; &nbsp; ExternalLibrary "xy/z/ab"</i><br>'+
243
+ 'In this case the lib "ab" is added to the linker command line as well as the lib search path "xy/z".<br>'+
244
+ 'Note, that the linker will look for "libab.a".'
245
+ ddrivetip("ExternalLibrary", "No","0..n","-",str)
246
+ }
247
+
248
+ function showExternalLibrarySearch() {
249
+ str = 'If the attribute "search: false" is specified, the lib will not be searched but linked with the full name, e.g.<br>'+
250
+ '<i> &nbsp; &nbsp; ExternalLibrary "xy/z/libpq.a", search: false</i><br>'+
251
+ 'will link "xy/z/libpq.a" to the executable.<br>'+
252
+ 'It is also possible to specify an object file when using "search: false".'
253
+ ddrivetip("search", "No","-","true",str)
254
+ }
255
+
256
+ function showUserLibrary() {
257
+ str = 'A user library will be linked <i>before</i> any other libraries or objects to the executable.<br>'+
258
+ 'It is also possible to specify an object file.<br>'+
259
+ 'The library will be searched like an ExternalLibrary, but with the full name, e.g.<br>'+
260
+ '<i> &nbsp; &nbsp; UserLibrary "xy/z/libUser.a"</i><br>'+
261
+ '<i> &nbsp; &nbsp; UserLibrary "xy/z/something.o"</i><br>'+
262
+ 'will link "libUser.a" and "something.o" before regular objects and libraries.<br>'+
263
+ '"xy/z" will be added as an ExternalLibrarySearchPath.'
264
+ ddrivetip("UserLibrary", "No","0..n","-",str)
265
+ }
266
+
267
+ function showExternalLibrarySearchPath() {
268
+ str = 'The linker looks for libraries in search paths.<br>'+
269
+ 'Search paths can be defined implicitly by ExternalLibrary/UserLibrary or explicitly by this tag.'
270
+ ddrivetip("ExternalLibrarySearchPath", "No","0..n","-",str)
271
+ }
272
+
273
+ function showPreSteps() {
274
+ str = 'PreSteps are executed before compiling files of the project.<br>'+
275
+ 'The number of steps are not limited.<br>'+
276
+ 'If a step fails, all further steps of the project will be skipped.'
277
+ ddrivetip("PreSteps", "No","0..1","-",str)
278
+ }
279
+
280
+ function showPostSteps() {
281
+ str = 'PostSteps are executed after the main task of the project, e.g. linking an executable.<br>'+
282
+ 'The number of steps are not limited.<br>'+
283
+ 'If a step fails, all further steps of the project will be skipped.'
284
+ ddrivetip("PostSteps", "No","0..1","-",str)
285
+ }
286
+
287
+ function showStepDefault() {
288
+ str = 'Specifies if a step will be executed by default.<br>'+
289
+ 'Disabling a step by default is useful if the step shall not be executed every build, e.g. special steps for releasing a software or some kind of developer test steps.'
290
+ ddrivetip("default", "No","-","on",str)
291
+ }
292
+
293
+ function showStepFilter() {
294
+ str = 'A step can be switched on or off explicitly regardless of the "default" attribute with the command line options<br>'+
295
+ '<i> &nbsp; &nbsp; --include_filter &#60;filter name&#62;</i><br>'+
296
+ '<i> &nbsp; &nbsp; --exclude_filter &#60;filter name&#62;</i><br>'
297
+ ddrivetip("filter", "No","-","-",str)
298
+ }
299
+
300
+ function getMakefileDesc() {
301
+ return 'Makefile to be started, e.g.:<br>'+
302
+ '<i> &nbsp; &nbsp; Makefile "subDir/makefile"</i><br>'
303
+ }
304
+
305
+ function showMakefile() {
306
+ ddrivetip("Makefile", "No","0..n","-",getMakefileDesc())
307
+ }
308
+
309
+ function showMakefileLib() {
310
+ str = 'If the result of the makefile is a library which shall be linked to the executable, name it here.'
311
+ ddrivetip("lib", "No","-","-",str)
312
+ }
313
+
314
+ function showMakefileTarget() {
315
+ str = 'The target of the makefile.'
316
+ ddrivetip("target", "No","-","all",str)
317
+ }
318
+
319
+ function showMakefilePathTo() {
320
+ str = 'Comma separated list, e.g. "common, abc, xy".<br>'+
321
+ 'The makefile can use variables like $(PATH_TO_common). This is very useful if paths to other projects are needed in the makefile.<br>'+
322
+ 'Remember that more than one workspace root can exist and a hardcoded "../common" is not reliable in that case.<br>'+
323
+ '$(PATH_TO_common) will result in the path from the parent directory of the current project to the common project without the common directory itself. '+
324
+ 'So if the current project and the common project have the same parent folder, the string will be empty.<br>'+
325
+ 'Example:<br>'+
326
+ 'makefile: c:\\workspaceroot\\yourProject\\makefile<br>'+
327
+ 'usage in makefile: gcc -I$../../$(PATH_TO_common)common/include ...<br>'+
328
+ 'It\'s done like this due to compatibility reasons.'
329
+ ddrivetip("pathTo", "No","-","-",str)
330
+ }
331
+
332
+ function showMakefileFlags() {
333
+ ddrivetip("Flags", "No","0..n","-j","Additional makefile flags.")
334
+ }
335
+
336
+ function getCommandLineDesc() {
337
+ return 'A command to execute, e.g.:<br>'+
338
+ '<i> &nbsp; &nbsp; CommandLine "ddump -Ruv -y 0xFFFFF -oRelease/application.bin Release/application.elf"</i><br>'+
339
+ '<i> &nbsp; &nbsp; CommandLine "echo Hello world!"</i><br>'
340
+ }
341
+
342
+ function showCommandLine() {
343
+ ddrivetip("CommandLine", "No","0..n","-",getCommandLineDesc())
344
+ }
345
+
346
+ function showExtends() {
347
+ ddrivetip("extends", "No","0..1","-","Inherit settings from a parent config.<br>For more information see docu page 'Derive configs'.")
348
+ }
349
+
350
+ function showFiles() {
351
+ str = 'Specifies the files to build.<br>'+
352
+ 'It\'s valid to specify a single file, e.g.<br>'+
353
+ '<i> &nbsp; &nbsp; Files "src/abc/def.asm"</i><br>'+
354
+ 'or a pattern, e.g.<br>'+
355
+ '<i> &nbsp; &nbsp; Files "*/**/.cpp"</i><br>'+
356
+ 'which builds all files with the ending ".cpp" in all subdirectories.<br>'+
357
+ 'Note: ".." is not allowed in the file path. All files must be located within the project.<br>'+
358
+ 'Note: if patterns are used, Flags and Define are ignored.'
359
+ ddrivetip("Files", "No","0..n","-",str)
360
+ }
361
+
362
+ function showExcludeFiles() {
363
+ str = 'Used to ignore files or directories.<br>'+
364
+ 'ExcludeFiles has higher priority than Files.'
365
+ ddrivetip("ExcludeFiles", "No","0..n","-",str)
366
+ }
367
+
368
+ function showIncludeDir() {
369
+ str = 'Specifies the include directories for the assembler, C and C++ compiler.<p>'+
370
+ 'Use always relative paths, not absolute paths due to portability.<p>'+
371
+ 'Use always "/" and not "\\".<p>'+
372
+ 'It is possible to work with different workspace roots. Do not include something like this: <br>'+
373
+ '<i> &nbsp; &nbsp; IncludeDir "../abc/include"</i><br>'+
374
+ 'but<br>'+
375
+ '<i> &nbsp; &nbsp; IncludeDir "abc/include"</i><br>'+
376
+ 'because it may happen, that abc does not exist in the same root as the current project. The path to abc will be calculated automatically.<p>'+
377
+ 'To include directories of the current project, the project name can be omitted like this:<br>'+
378
+ '<i> &nbsp; &nbsp; IncludeDir "include"</i><br>'+
379
+ '<i> &nbsp; &nbsp; IncludeDir "generated/include"</i><br>'
380
+ ddrivetip("IncludeDir", "No","0..n","-",str)
381
+ }
382
+
383
+ function showDependency() {
384
+ str = 'Specifies another project to be built before this project.<br>'+
385
+ 'The archive, linker libs and search paths are imported from this project to the this project automatically.'
386
+ ddrivetip("Dependency", "No","0..n","-",str)
387
+ }
388
+
389
+ function showDependencyConfig() {
390
+ str = 'Config name of the project to build.'
391
+ ddrivetip("config", "Yes","-","-",str)
392
+ }
393
+
394
+ function showLinkerScript() {
395
+ str = 'Specifies the name including path of the linker script.'
396
+ ddrivetip("Dependency", "No","0..1","-",str)
397
+ }
398
+
399
+ function showMapFile() {
400
+ str = 'A mapfile will be written by the linker.'
401
+ ddrivetip("MapFile", "No","0..1","If name attribute is omitted: $(OutputDir)/$(ArtifactNameBase).map",str)
402
+ }
403
+
404
+ function showArtifactName() {
405
+ str = 'The artifact name inclusive file ending.<br>'+
406
+ 'The artifact will be placed in the output directory.'
407
+ ddrivetip("ArtifactName","No","0..1","The project name and as file ending the default linker file ending.",str)
408
+ }
409
+
410
+ function showMakefileCustom() {
411
+ document.getElementById('makefile_part').className="showInline"
412
+ document.getElementById('commandline_part').className="hide"
413
+ document.getElementById('makefile').className="showRadio"
414
+ document.getElementById('commandline').className="hideRadio"
415
+ ddrivetip("Makefile", "No","0..1 - Either Makefile or CommandLine","-",getMakefileDesc())
416
+ }
417
+
418
+ function showCommandlineCustom() {
419
+ document.getElementById('makefile_part').className="hide"
420
+ document.getElementById('commandline_part').className="showInline"
421
+ document.getElementById('makefile').className="hideRadio"
422
+ document.getElementById('commandline').className="showRadio"
423
+ ddrivetip("CommandLine", "No","0..1 - Either Makefile or CommandLine","-",getCommandLineDesc())
424
+ }
425
+
426
+ function flagExample() {
427
+ return "<br>For removing flags use regular expressions which can be interpreted by ruby.<br>"+
428
+ "Regex options for start and stop string are automatically added in order to avoid substring matches.<br><br>"+
429
+ "Flag strings are always splitted at spaces and computed individually.<br><br>"+
430
+ "<b>Examples:</b><br>"+
431
+ "&nbsp;&nbsp; <i>Flags \"-x -y\"</i> overwrites the inherited flags<br><br>"+
432
+ "&nbsp;&nbsp; <i>Flags add: \"-x -y\"</i> adds -x and -y if not exist<br><br>"+
433
+ "&nbsp;&nbsp; <i>Flags remove: \"-x -y\"</i> removes -x and -y if exist<br><br>"+
434
+ "&nbsp;&nbsp; It is possible to combine the attributes like this:<br>"+
435
+ "&nbsp;&nbsp; <i>Flags remove: \"-x\", add: \"-y\"</i><br><br>"+
436
+ "&nbsp;&nbsp; To remove -g followed by any string, e.g. -g3, the command is:<br>"+
437
+ "&nbsp;&nbsp; <i>Flags remove: \"-g.*\"</i><br>"+
438
+ "&nbsp;&nbsp; An inherited flag string \"-abc -g3 -xy\" will end up in \"-abc -xy\"."
439
+ }
440
+
441
+
442
+ function showToolchainProject() {
443
+ str = 'Toolchain adaptions for a project.'
444
+ ddrivetip("Toolchain", "No","0..1","The DefaultToolchain settings from the main project",str)
445
+ }
446
+
447
+ function showDefaultToolchain() {
448
+ str = 'Settings which are valid for all projects and files unless they will be overwritten.<br>'+
449
+ 'The attribute "basedOn" specifies the basic toolchain configuration provided by bake, e.g. "GCC", "Diab", etc.'
450
+ ddrivetip("DefaultToolchain", "In main project","0..1","-",str)
451
+ }
452
+
453
+ function showFilesFlags() {
454
+ ddrivetip("Flags", "No","0..n","Flags from project","Flags from the project can be overwritten, extended or (partly) removed.<br>"+flagExample())
455
+ }
456
+
457
+ function showFilesDefine() {
458
+ ddrivetip("Define", "No","0..n","-","Defines which are valid only for a specific file.")
459
+ }
460
+
461
+ function showFlags() {
462
+ ddrivetip("Flags", "No","0..n","Flags from DefaultToolchain","Flags from the DefaultToolchain can be overwritten, extended or (partly) removed.<br>"+flagExample())
463
+ }
464
+
465
+ function showDefine() {
466
+ ddrivetip("Define", "No","0..n","-","Defines valid for all files in the project.")
467
+ }
468
+
469
+ function showLibPrefixFlags() {
470
+ ddrivetip("LibPrefixFlags", "No","0..n","-","Linker libs can be prefixed if needed, e.g. with \"-Wl,--whole-archive\".")
471
+ }
472
+
473
+ function showLibPostfixFlags() {
474
+ ddrivetip("LibPostfixFlags", "No","0..n","-","Linker libs can be postfixed if needed, e.g. with \"-Wl,--no-whole-archive\".")
475
+ }
476
+
477
+ function showCompiler() {
478
+ ddrivetip("Compiler", "No","0..3 (for each compiler type: ASM, CPP, C)","-","Flags and defines can be specified independently for each compiler type.")
479
+ }
480
+
481
+ function showArchiver() {
482
+ ddrivetip("Archiver", "No","0..1","-","Settings for the archiver.")
483
+ }
484
+
485
+ function showLinker() {
486
+ ddrivetip("Linker", "No","0..1","-","Makes sense only for ExecutableConfigs.")
487
+ }
488
+
489
+ function showDefaultFlags() {
490
+ ddrivetip("Flags", "No","0..n","-","Default flags.")
491
+ }
492
+
493
+ function showDefaultDefine() {
494
+ ddrivetip("Define", "No","0..n","-","Defines which are valid for all files.")
495
+ }
496
+
497
+ function showDefaultCompiler() {
498
+ ddrivetip("Compiler", "No","0..3 (for each compiler type: ASM, CPP, C)","-","Default compiler settings.")
499
+ }
500
+
501
+ function showDefaultArchiver() {
502
+ ddrivetip("Archiver", "No","0..1","-","Default settings for the archiver.")
503
+ }
504
+
505
+ function showDefaultLinker() {
506
+ ddrivetip("Linker", "No","0..1","-","Default settings for the linker.")
507
+ }
508
+
509
+ function showCommand() {
510
+ ddrivetip("command", "No","-","Depending on toolchain, e.g. \"gcc\"","Change command, e.g. \"$(PATH_TO_EXE)/gcc_speciale.exe\"")
511
+ }
512
+
513
+
514
+
515
+ var offsetxpoint=20 //Customize x offset of tooltip
516
+ var offsetypoint=20 //Customize y offset of tooltip
517
+ var ie=document.all
518
+ var ns6=document.getElementById && !document.all
519
+ var enabletip=false
520
+ if (ie||ns6)
521
+ var tipobj=document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : ""
522
+
523
+ function ietruebody(){
524
+ return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
525
+ }
526
+
527
+ function ddrivetip(item, manda, quan, def, desc){
528
+ if (ns6||ie){
529
+
530
+ var abc=ie&&!window.opera? ietruebody().clientWidth : window.innerWidth
531
+
532
+ tipobj.style.width=(abc/2-offsetxpoint*2).toString()+"px"
533
+ tipobj.style.backgroundColor="#DDFFDD"
534
+ tipobj.innerHTML="<b><u>"+item+"</u><br><br>Mandatory:</b> "+manda+"<br><b>Quantity</b>: "+quan+"<br><b>Default</b>: "+def+"<br><br><b>Description</b>:<br>"+desc
535
+ enabletip=true
536
+ return false
537
+ }
538
+ }
539
+
540
+ function positiontip(e){
541
+ if (enabletip){
542
+ var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
543
+ var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
544
+ //Find out how close the mouse is to the corner of the window
545
+ var rightedge=ie&&!window.opera? ietruebody().clientWidth-event.clientX-offsetxpoint : window.innerWidth-e.clientX-offsetxpoint
546
+ var bottomedge=ie&&!window.opera? ietruebody().clientHeight-event.clientY-offsetypoint*2 : window.innerHeight-e.clientY-offsetypoint
547
+ var bottom=ie&&!window.opera? ietruebody().clientHeight : window.innerHeight
548
+
549
+ var leftedge=(offsetxpoint<0)? offsetxpoint*(-1) : -1000
550
+
551
+ //if the horizontal distance isn't enough to accomodate the width of the context menu
552
+ if (rightedge<tipobj.offsetWidth+offsetxpoint/2)
553
+ //move the horizontal position of the menu to the left by it's width
554
+ tipobj.style.left=ie? ietruebody().scrollLeft+event.clientX-tipobj.offsetWidth-offsetxpoint+"px" : window.pageXOffset+e.clientX-tipobj.offsetWidth-offsetxpoint+"px"
555
+ else if (curX<leftedge)
556
+ tipobj.style.left="5px"
557
+ else
558
+ //position the horizontal position of the menu where the mouse is positioned
559
+ tipobj.style.left=curX+offsetxpoint+"px"
560
+
561
+ //same concept with the vertical position
562
+ if (bottomedge<tipobj.offsetHeight)
563
+ tipobj.style.top=ie? ietruebody().scrollTop+bottom-tipobj.offsetHeight-offsetypoint+"px" : window.pageYOffset+bottom-tipobj.offsetHeight-offsetypoint+"px"
564
+ else
565
+ tipobj.style.top=curY+offsetypoint+"px"
566
+ tipobj.style.visibility="visible"
567
+ }
568
+ }
569
+
570
+ function notip(){
571
+ if (ns6||ie){
572
+ enabletip=false
573
+ tipobj.style.visibility="hidden"
574
+ tipobj.style.left="-1000px"
575
+ tipobj.style.backgroundColor=''
576
+ tipobj.style.width=''
577
+ }
578
+ }
579
+
580
+ document.onmousemove=positiontip
581
+
582
+ </script>
583
+
584
+ </td></table>
585
+
586
+ </body>
587
+ </html>