HowTo.txt - Copyright 2008 Symbian Software Ltd.

This document describes how to use this test suite for stress-testing Linux-emulation type systems on Windows.

Structure of tests
==================

The Linux emulation layer tests are structured as follows:

LinuxEmulationLayerStressTests\HowTo.txt (this file)
LinuxEmulationLayerStressTests\makemakefile.py (described below)
LinuxEmulationLayerStressTests\mingw.tar.bz2
LinuxEmulationLayerStressTests\msys.tar.bz2
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun01\makefiles_testrun01.zip
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun01\testrig01.bat
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun02\makefiles_testrun02.zip
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun02\testrig02.bat
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun03\makefiles_testrun03.zip
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun03\testrig03.bat
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun04\makefiles_testrun04.zip
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun04\testrig04.bat
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun05\makefiles_testrun05.zip
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun05\testrig05.bat
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun06\makefiles_testrun06.zip
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun06\testrig06.bat
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun07\makefiles_testrun07.zip
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun07\testrig07.bat
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun08\makefiles_testrun08.zip
LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun08\testrig08.bat
LinuxEmulationLayerStressTests\src\msys-sed-4.1.5-src.tar.gz

Each test run has its makefiles preserved in the corresponding zip file (e.g. makefiles_testrun01.zip). 

The testrigNN.bat are very basic batch scripts that do not take any parameters. They are simply there as a 
bootstrap to 

1) Set the PATH to contain either MSYS's or Cygwin's bin folder (but not both!) 
2) Set the PATH to contain MinGW's bin folder (for MinGW's make)
3) Generate the makefiles in a number of for-loops (optional)
4) Run the make over the makefiles in a number of for-loops

In future, if any of these batch files are re-used, it will be necessary to adjust them so that 
they set the PATH environment variable correctly to contain the place where MSYS or Cygwin 
was unzipped. Then decide if you wish to generate further makefiles using the Python script,
or if it's just enough to run the existing makefiles.

For convenience, both MSYS and Cygwin are provided in the files

LinuxEmulationLayerStressTests\mingw.tar.bz2
LinuxEmulationLayerStressTests\msys.tar.bz2

These are the versions that were tested and were shipped with SBSv2. Simply untar to a convenient
location and update the batch files bootstraps to add these to your PATH.

makemakefile.py
===============

This script, as its name suggests, makes a range of makefiles. Use the command

python makemakefile.py -h

to see a list of available options. At time of writing, the usage help is as follows:

Usage: makemakefile.py [options]

Options:
  -h, --help            show this help message and exit
  -t TARGETS, --targets=TARGETS
                        Number of main (or "level1") targets to generate -
                        these are the targets that actually perform some
                        simulated actions.
  -d DIVISIONS, --divisions=DIVISIONS
                        The number of "level2" targets. Each level2 target
                        will depend on t/d level1 targets. This makes makefile
                        generation more logical.
  -m MAKEFILE, --makefile=MAKEFILE
                        Name of makefile to generate. If blank, makefile is
                        printed to STDOUT.
  -c CASE, --case=CASE  Type of commands to use in each rule. Default is
                        "all"; other options are "env", "echo", "cp" and "sed"



The -t option specifies total the number of makefile targets. This should be a positive integer. 

The -d option specifies total the number of subdivisions of the makefile targets into level1/level2 targets. 
This should be a positive integer. 

The makefiles are structured in such as way, so that the dependency tree has three levels. The aim is to 
introduce some complexity into the makefile's dependency tree rather than just having a "flat" dependency tree. 
The top level in the dependency tree contains only one target called "main"; below this are the level2 targets
which are all prerequisites of main; lastly are the level1 targets which split into groups and each group is 
the set of prerequisites for a level2 target.

The size of these groups of level1 targets is <= DIVISIONS depending if DIVISIONS divides into TARGETS exactly or not. 

