| 1 |
The STLport build system |
| 2 |
======================== |
| 3 |
|
| 4 |
This is a basic overview of the STLport build system. At the moment, I'm only familiar |
| 5 |
with the working of the nmake variant, i.e. for MSVC, eVC and ICC/win32, other variants |
| 6 |
may differ. |
| 7 |
|
| 8 |
Overview: |
| 9 |
---------- |
| 10 |
|
| 11 |
|
| 12 |
There are three basic classes to consider while building: |
| 13 |
1. The used make tool (currently that is make (GNU make) an nmake (Microsoft)). |
| 14 |
2. The used compiler |
| 15 |
3. The target type, either application or library |
| 16 |
|
| 17 |
Other than that, there are three different settings corresponding to the three different |
| 18 |
STLport modes, 'release', 'debug' and 'STLdebug' and each one has two modes for either |
| 19 |
static or dynamic linking. |
| 20 |
|
| 21 |
The whole build system lies under the build/ dir of the source tree. There, it first |
| 22 |
branches to Makefiles/ (which contains the base of the build system) and to lib/ (which |
| 23 |
contains files to build the STLport library) and test/ (which contains files to build |
| 24 |
tests) (TODO: what is the misc/ folder for?). |
| 25 |
|
| 26 |
Under Makefiles/, you see the initially mentioned branching according to the build tool. |
| 27 |
Here is also where the configure.bat file puts the generated config.mak file. (TODO: |
| 28 |
what are the other files in that folder?) |
| 29 |
|
| 30 |
nmake: |
| 31 |
------- |
| 32 |
|
| 33 |
Under nmake/, you then find the common support files for the different compilers and |
| 34 |
files that define generic rules. Here, it then splits into app/ and lib/, which are |
| 35 |
structured similar to each other and to the common nmake/ dir. In each dir you have |
| 36 |
files for the different compilers that are used to make application specific or library |
| 37 |
specific settings. |
| 38 |
|
| 39 |
The branching in the three STLport modes and the static/dynamic linking is not visible |
| 40 |
in the file structure but only in the used nmake variables. |
| 41 |
|
| 42 |
In order to make clear which file includes which other file, here an example when |
| 43 |
compiling the STLport library for eVC4. The call issued is 'nmake /f evc4.mak' in the |
| 44 |
build/lib folder. From there, the following include tree is created: |
| 45 |
|
| 46 |
build/lib/evc.mak |
| 47 |
build/Makefiles/config.mak ; generated by configure.bat |
| 48 |
build/Makefiles/nmake/top.mak |
| 49 |
build/Makefiles/config.mak |
| 50 |
build/Makefiles/nmake/sysid.mak |
| 51 |
build/Makefiles/nmake/sys.mak |
| 52 |
build/Makefiles/nmake/evc4.mak ; evc4 from config |
| 53 |
build/Makefiles/nmake/evc-common.mak |
| 54 |
build/Makefiles/nmake/targetdirs.mak |
| 55 |
build/Makefiles/nmake/extern.mak |
| 56 |
build/Makefiles/nmake/targets.mak |
| 57 |
build/Makefiles/nmake/rules-o.mak |
| 58 |
build/Makefiles/nmake/clean.mak |
| 59 |
build/Makefiles/nmake/lib/top.mak ; would be app/top.mak when building an application |
| 60 |
build/Makefiles/nmake/lib/macro.mak |
| 61 |
build/Makefiles/nmake/lib/evc4.mak ; evc4 from config |
| 62 |
build/Makefiles/nmake/lib/evc-common.mak |
| 63 |
build/Makefiles/nmake/lib/rules-so.mak |
| 64 |
build/Makefiles/nmake/lib/rules-a.mak |
| 65 |
build/Makefiles/nmake/lib/rules-install-so.mak |
| 66 |
build/Makefiles/nmake/lib/rules-install-a.mak |
| 67 |
build/Makefiles/nmake/lib/clean.mak |
| 68 |
|
| 69 |
TODO: build/Makefiles/config.mak is included both by build/lib/evc.mak and by |
| 70 |
build/Makefiles/nmake/top.mak. |
| 71 |
|
| 72 |
Known issues: |
| 73 |
-------------- |
| 74 |
|
| 75 |
- nmake: MSC doesn't support generating dependency information for makefiles. So, unless |
| 76 |
you modify the direct source file for an object file, no recompilation is triggered! You |
| 77 |
need to either delete all object files that need to be recompiled or 'make clean' |
| 78 |
|
| 79 |
- There are targets to only install e.g. the shared STLdebug version but there is no |
| 80 |
such thing for making clean. This would be useful in the context of above issue for |
| 81 |
making a selective clean only. |