You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.5 KiB
96 lines
2.5 KiB
/*------------------------------------------------------------------------- |
|
* drawElements Quality Program Execution Server |
|
* --------------------------------------------- |
|
* |
|
* Copyright 2014 The Android Open Source Project |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
* |
|
*//*! |
|
* \file |
|
* \brief ExecServer main(). |
|
*//*--------------------------------------------------------------------*/ |
|
|
|
#include "xsExecutionServer.hpp" |
|
#include "deCommandLine.hpp" |
|
#include "deString.h" |
|
|
|
#if (DE_OS == DE_OS_WIN32) |
|
# include "xsWin32TestProcess.hpp" |
|
#else |
|
# include "xsPosixTestProcess.hpp" |
|
#endif |
|
|
|
#include <iostream> |
|
|
|
namespace opt |
|
{ |
|
|
|
DE_DECLARE_COMMAND_LINE_OPT(Port, int); |
|
DE_DECLARE_COMMAND_LINE_OPT(SingleExec, bool); |
|
|
|
void registerOptions (de::cmdline::Parser& parser) |
|
{ |
|
using de::cmdline::Option; |
|
using de::cmdline::NamedValue; |
|
|
|
parser << Option<Port> ("p", "port", "Port", "50016") |
|
<< Option<SingleExec>("s", "single", "Kill execserver after first session"); |
|
} |
|
|
|
} |
|
|
|
int main (int argc, const char* const* argv) |
|
{ |
|
de::cmdline::CommandLine cmdLine; |
|
|
|
#if (DE_OS == DE_OS_WIN32) |
|
xs::Win32TestProcess testProcess; |
|
#else |
|
xs::PosixTestProcess testProcess; |
|
|
|
// Set line buffered mode to stdout so executor gets any log messages in a timely manner. |
|
setvbuf(stdout, DE_NULL, _IOLBF, 4*1024); |
|
#endif |
|
|
|
// Parse command line. |
|
{ |
|
de::cmdline::Parser parser; |
|
opt::registerOptions(parser); |
|
|
|
if (!parser.parse(argc, argv, &cmdLine, std::cerr)) |
|
{ |
|
parser.help(std::cout); |
|
return -1; |
|
} |
|
} |
|
|
|
try |
|
{ |
|
const xs::ExecutionServer::RunMode runMode = cmdLine.getOption<opt::SingleExec>() |
|
? xs::ExecutionServer::RUNMODE_SINGLE_EXEC |
|
: xs::ExecutionServer::RUNMODE_FOREVER; |
|
const int port = cmdLine.getOption<opt::Port>(); |
|
xs::ExecutionServer server (&testProcess, DE_SOCKETFAMILY_INET4, port, runMode); |
|
|
|
std::cout << "Listening on port " << port << ".\n"; |
|
server.runServer(); |
|
} |
|
catch (const std::exception& e) |
|
{ |
|
std::cerr << e.what() << "\n"; |
|
return -1; |
|
} |
|
|
|
return 0; |
|
}
|
|
|