| The STLport build system |
| ======================== |
| |
| This is a basic overview of the STLport build system. At the moment, I'm only familiar |
| with the working of the nmake variant, i.e. for MSVC, eVC and ICC/win32, other variants |
| may differ. |
| |
| Overview: |
| ---------- |
| |
| |
| There are three basic classes to consider while building: |
| 1. The used make tool (currently that is make (GNU make) an nmake (Microsoft)). |
| 2. The used compiler |
| 3. The target type, either application or library |
| |
| Other than that, there are three different settings corresponding to the three different |
| STLport modes, 'release', 'debug' and 'STLdebug' and each one has two modes for either |
| static or dynamic linking. |
| |
| The whole build system lies under the build/ dir of the source tree. There, it first |
| branches to Makefiles/ (which contains the base of the build system) and to lib/ (which |
| contains files to build the STLport library) and test/ (which contains files to build |
| tests) (TODO: what is the misc/ folder for?). |
| |
| Under Makefiles/, you see the initially mentioned branching according to the build tool. |
| Here is also where the configure.bat file puts the generated config.mak file. (TODO: |
| what are the other files in that folder?) |
| |
| nmake: |
| ------- |
| |
| Under nmake/, you then find the common support files for the different compilers and |
| files that define generic rules. Here, it then splits into app/ and lib/, which are |
| structured similar to each other and to the common nmake/ dir. In each dir you have |
| files for the different compilers that are used to make application specific or library |
| specific settings. |
| |
| The branching in the three STLport modes and the static/dynamic linking is not visible |
| in the file structure but only in the used nmake variables. |
| |
| In order to make clear which file includes which other file, here an example when |
| compiling the STLport library for eVC4. The call issued is 'nmake /f evc4.mak' in the |
| build/lib folder. From there, the following include tree is created: |
| |
| build/lib/evc.mak |
| build/Makefiles/config.mak ; generated by configure.bat |
| build/Makefiles/nmake/top.mak |
| build/Makefiles/config.mak |
| build/Makefiles/nmake/sysid.mak |
| build/Makefiles/nmake/sys.mak |
| build/Makefiles/nmake/evc4.mak ; evc4 from config |
| build/Makefiles/nmake/evc-common.mak |
| build/Makefiles/nmake/targetdirs.mak |
| build/Makefiles/nmake/extern.mak |
| build/Makefiles/nmake/targets.mak |
| build/Makefiles/nmake/rules-o.mak |
| build/Makefiles/nmake/clean.mak |
| build/Makefiles/nmake/lib/top.mak ; would be app/top.mak when building an application |
| build/Makefiles/nmake/lib/macro.mak |
| build/Makefiles/nmake/lib/evc4.mak ; evc4 from config |
| build/Makefiles/nmake/lib/evc-common.mak |
| build/Makefiles/nmake/lib/rules-so.mak |
| build/Makefiles/nmake/lib/rules-a.mak |
| build/Makefiles/nmake/lib/rules-install-so.mak |
| build/Makefiles/nmake/lib/rules-install-a.mak |
| build/Makefiles/nmake/lib/clean.mak |
| |
| TODO: build/Makefiles/config.mak is included both by build/lib/evc.mak and by |
| build/Makefiles/nmake/top.mak. |
| |
| Known issues: |
| -------------- |
| |
| - nmake: MSC doesn't support generating dependency information for makefiles. So, unless |
| you modify the direct source file for an object file, no recompilation is triggered! You |
| need to either delete all object files that need to be recompiled or 'make clean' |
| |
| - There are targets to only install e.g. the shared STLdebug version but there is no |
| such thing for making clean. This would be useful in the context of above issue for |
| making a selective clean only. |
| |