13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Tester Core 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ---------------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Generic main(). 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuDefs.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuCommandLine.hpp" 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuPlatform.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuApp.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuResource.hpp" 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestLog.hpp" 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deUniquePtr.hpp" 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <cstdio> 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Implement this in your platform port. 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::Platform* createPlatform (void); 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryint main (int argc, const char* argv[]) 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if (DE_OS != DE_OS_WIN32) 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Set stdout to line-buffered mode (will be fully buffered by default if stdout is pipe). 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry setvbuf(stdout, DE_NULL, _IOLBF, 4*1024); 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry try 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::CommandLine cmdLine (argc, argv); 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::DirArchive archive ("."); 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestLog log (cmdLine.getLogFileName(), cmdLine.getLogFlags()); 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::UniquePtr<tcu::Platform> platform (createPlatform()); 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::UniquePtr<tcu::App> app (new tcu::App(*platform, archive, log, cmdLine)); 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Main loop. 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (;;) 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!app->iterate()) 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry catch (const std::exception& e) 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::die("%s", e.what()); 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return 0; 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 66