Added LogMessage@Test; added siCommonGetMessage function to sicommon interface
[spandex:spandex.git] / sct / unix / src / main.c
1 /*
2  * Spandex benchmark and test framework.
3  *
4  * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
5  *
6  * Contact: Kari J. Kangas <kari.j.kangas@nokia.com>
7  *
8  *   This framework is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU Lesser General Public License as published by the
10  * Free Software Foundation, version 2.1 of the License.
11  *
12  *   This framework is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
15  * for more details.
16  *
17  *   You should have received a copy of the GNU Lesser General Public License
18  * along with this framework; if not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25
26 #if defined( SCT_SICOMMON_UNIX_SUPPORT_MESSAGES )
27 # include "sct_unix_message_support.h"
28 # include <fcntl.h>
29 # include <sys/stat.h>
30 # include <mqueue.h>
31 #endif  /* defined( SCT_SICOMMON_UNIX_SUPPORT_MESSAGES ) */
32
33 #include "sct.h"
34 #include "sct_types.h"
35 #include "unix_globals.h"
36
37 #define INPUT_FILE_NAME     "benchmark.txt"
38 #define OUTPUT_FILE_NAME    "result.txt"
39
40 /*!
41  * Global variables
42  */
43 const char*     gInputFileName  = INPUT_FILE_NAME;
44 const char*     gOutputFileName = OUTPUT_FILE_NAME;
45 FILE*           gInputFile      = NULL;
46 FILE*           gOutputFile     = NULL;
47
48 /*!
49  *
50  */
51 static void showUsage( const char* binary )
52 {
53     printf( "Spandex benchmark and test system\n"
54             "Usage: %s [OPTION]... [BENCHMARK FILE]\n"
55             "\n"
56             "Default benchmark file: " INPUT_FILE_NAME "\n"
57             "Options:\n"
58             "    -h, --help      Command line options\n"
59             "    -o FILE         Output file name (" OUTPUT_FILE_NAME ")\n",
60             binary );
61 }
62
63 /*!
64  *
65  */
66 static int processArguments( int argc, char** argv )
67 {
68     int i;
69
70     for( i = 1; i < argc; i++ )
71     {
72         if( !strcmp( argv[ i ], "-h" ) || !strcmp( argv[ i ], "--help" ) )
73         {
74             showUsage( argv[ 0 ] );
75             return 1;
76         }
77         else if( !strcmp( argv[ i ], "-o" ) && i < argc - 1 )
78         {
79             gOutputFileName = argv[ ++i ];
80         }
81         else if( argv[ i ][ 0 ] != '-' )
82         {
83             gInputFileName = argv[ i ];
84         }
85         else
86         {
87             showUsage( argv[ 0 ] );
88             return 1;
89         }
90     }
91     return 0;
92 }
93
94 /*!
95  *
96  *
97  */
98 int main( int argc, char** argv )
99 {
100     void*           sctContext  = NULL;
101     SCTCycleStatus  status;
102     int             ret;
103
104 #if defined( SCT_SICOMMON_UNIX_SUPPORT_MESSAGES )    
105     mqd_t           mq          = ( mqd_t )( -1 );
106     mq_attr         attr;
107     SCTMessage      m;
108 #endif  /* defined( SCT_SICOMMON_UNIX_SUPPORT_MESSAGES ) */
109     
110     if( ( ret = processArguments( argc, argv ) ) )
111     {
112         return ret;
113     }
114
115     printf( "SPANDEX start.\n" );
116     
117     siInitializeUnblanker();
118
119     printf( "SPANDEX opening input file: %s.\n", gInputFileName );
120     gInputFile = fopen( gInputFileName, "r" );
121     if( gInputFile == NULL )
122     {
123         printf( "SPANDEX failed to open input file.\n" );
124         goto END;
125     }
126     
127     printf( "SPANDEX opening output file: %s.\n", gOutputFileName );
128     gOutputFile = fopen( gOutputFileName, "w+" );
129     if( gOutputFile == NULL )
130     {
131         printf( "SPANDEX failed to open output file.\n" );
132         goto END;
133     }
134
135 #if defined( SCT_SICOMMON_UNIX_SUPPORT_MESSAGES )        
136     printf( "SPANDEX creating message queue: %s.\n", SCT_UNIX_MESSAGE_QUEUE_NAME );
137
138     attr.mq_flags   = O_NONBLOCK;
139     attr.mq_maxmsg  = 2;
140     attr.mq_msgsize = sizeof( SCTMessage );
141     attr.mq_curmsgs = 0;
142     
143     mq = mq_open( SCT_UNIX_MESSAGE_QUEUE_NAME,
144                   O_CREAT | O_EXCL | O_RDWR | O_NONBLOCK,
145                   S_IRWXU | S_IRWXG | S_IRWXO,
146                   &attr);
147
148     if( mq == ( mqd_t )( -1 ) )
149     {
150         printf( "SPANDEX failed to open message queue.\n" );
151         goto END;
152     }
153 #endif  /* defined( SCT_SICOMMON_UNIX_SUPPORT_MESSAGES ) */
154     
155     printf( "SPANDEX sctInitialize.\n" );
156     sctContext = sctInitialize();
157     
158     if( sctContext == NULL )
159     {
160         printf( "SPANDEX sctInitialize failed.\n" );
161         goto END;
162     }
163     
164     printf( "SPANDEX benchmark cycle start.\n" );
165     while( 1 ) 
166     {
167         status = sctCycle( sctContext );
168         
169         if( status == SCT_CYCLE_FATAL_ERROR )
170         {
171             printf( "SPANDEX cycle fatal error.\n" );
172             break;            
173         }
174         else if( status == SCT_CYCLE_FINISHED )
175         {
176             break;
177         }
178     }
179     
180     printf( "SPANDEX benchmark cycle end.\n" );
181     
182 END:
183     
184     printf( "SPANDEX sctTerminate.\n" );
185     sctTerminate( sctContext );
186
187 #if defined( SCT_SICOMMON_UNIX_SUPPORT_MESSAGES )    
188     if( mq != ( mqd_t )( -1 ) )
189     {
190         printf( "SPANDEX closing message queue.\n" );
191         mq_unlink( SCT_UNIX_MESSAGE_QUEUE_NAME );
192         mq = ( mqd_t )( -1 );
193     }
194 #endif  /* defined( SCT_SICOMMON_UNIX_SUPPORT_MESSAGES ) */
195     
196     if( gInputFile != NULL )
197     {
198         printf( "SPANDEX closing input file.\n" );
199         fclose( gInputFile );
200         gInputFile = NULL;
201     }
202     if( gOutputFile != NULL )
203     {
204         printf( "SPANDEX closing output file.\n" );
205         fclose( gOutputFile );
206         gOutputFile = NULL;
207     }
208
209     siTerminateUnblanker();
210
211     printf( "SPANDEX done.\n" );
212     return 0;
213 }
214