- // Disable IO buffering for C and C++ standard libraries
- setvbuf(stdin, NULL, _IONBF, 0);
- setvbuf(stdout, NULL, _IONBF, 0);
- cout.rdbuf()->pubsetbuf(NULL, 0);
- cin.rdbuf()->pubsetbuf(NULL, 0);
-
- // Startup initializations
- init_bitboards();
- init_uci_options();
- Position::init_zobrist();
- Position::init_piece_square_tables();
- init_eval(1);
- init_bitbases();
- init_search();
- init_threads();
-
-#ifdef USE_CALLGRIND
- CALLGRIND_START_INSTRUMENTATION;
-#endif
-
- if (argc <= 1)
- {
- // Print copyright notice
- cout << engine_name() << " by " << engine_author() << endl;
-
- if (CpuHasPOPCNT)
- cout << "Good! CPU has hardware POPCNT." << endl;
-
- // Wait for a command from the user, and passes this command to
- // execute_uci_command() and also intercepts EOF from stdin, by
- // translating EOF to the "quit" command. This ensures that we
- // exit gracefully if the GUI dies unexpectedly.
- string cmd;
-
- do {
- // Wait for a command from stdin
- if (!getline(cin, cmd))
- cmd = "quit";
-
- } while (execute_uci_command(cmd));
- }
- else // Process command line arguments
- {
- if (string(argv[1]) != "bench" || argc > 7)
- cout << "Usage: stockfish bench [hash size = 128] [threads = 1] "
- << "[limit = 12] [fen positions file = default] "
- << "[depth, time, perft or node limited = depth]" << endl;
- else
- benchmark(argc, argv);
- }
-
- exit_threads();
- quit_eval();