diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2014-10-27 17:56:48 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2014-10-27 17:56:48 -0700 |
commit | c0db4d2a1206ea100b8ac3dd770d3abdf9b32322 (patch) | |
tree | cf3d1e92bf69a5528ae2c5dcd0393063e675b330 /src/base/main/main.c | |
parent | 736c2245ea4ce5e630d1d5db66f0f985a6440202 (diff) | |
download | abc-c0db4d2a1206ea100b8ac3dd770d3abdf9b32322.tar.gz abc-c0db4d2a1206ea100b8ac3dd770d3abdf9b32322.tar.bz2 abc-c0db4d2a1206ea100b8ac3dd770d3abdf9b32322.zip |
Changes to enable building external code.
Diffstat (limited to 'src/base/main/main.c')
-rw-r--r-- | src/base/main/main.c | 384 |
1 files changed, 6 insertions, 378 deletions
diff --git a/src/base/main/main.c b/src/base/main/main.c index 6208a7e8..0ba25735 100644 --- a/src/base/main/main.c +++ b/src/base/main/main.c @@ -1,384 +1,12 @@ -/*//////////////////////////////////////////////////////////////////////////// +#include "base/main/mainInt.h" -ABC: System for Sequential Synthesis and Verification +int Abc_RealMain(int argc, char *argv[]); -http://www.eecs.berkeley.edu/~alanmi/abc/ +//static Abc_FrameInitializer_t abc2_initializer = { Abc2_Init, Abc2_End }; -Copyright (c) The Regents of the University of California. All rights reserved. - -Permission is hereby granted, without written agreement and without license or -royalty fees, to use, copy, modify, and distribute this software and its -documentation for any purpose, provided that the above copyright notice and -the following two paragraphs appear in all copies of this software. - -IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF -THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF -CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, -AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, -SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - -////////////////////////////////////////////////////////////////////////////*/ - -/**CFile**************************************************************** - - FileName [main.c] - - SystemName [ABC: Logic synthesis and verification system.] - - PackageName [The main package.] - - Synopsis [Here everything starts.] - - Author [Alan Mishchenko] - - Affiliation [UC Berkeley] - - Date [Ver. 1.0. Started - June 20, 2005.] - - Revision [$Id: main.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] - -***********************************************************************/ - - -#ifdef ABC_PYTHON_EMBED -#include <Python.h> -#endif /* ABC_PYTHON_EMBED */ - -#include "base/abc/abc.h" -#include "mainInt.h" - -ABC_NAMESPACE_IMPL_START - -// this line should be included in the library project -//#define ABC_LIB - -//#define ABC_USE_BINARY 1 - -//////////////////////////////////////////////////////////////////////// -/// DECLARATIONS /// -//////////////////////////////////////////////////////////////////////// - -static int TypeCheck( Abc_Frame_t * pAbc, const char * s); - -//////////////////////////////////////////////////////////////////////// -/// FUNCTION DEFINITIONS /// -//////////////////////////////////////////////////////////////////////// - -#ifndef ABC_LIB - -/**Function************************************************************* - - Synopsis [The main() procedure.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -int Abc_RealMain( int argc, char * argv[] ) +int main(int argc, char *argv[]) { - Abc_Frame_t * pAbc; - char sCommandUsr[ABC_MAX_STR] = {0}, sCommandTmp[ABC_MAX_STR], sReadCmd[1000], sWriteCmd[1000]; - const char * sOutFile, * sInFile; - char * sCommand; - int fStatus = 0; - int c, fInitSource, fInitRead, fFinalWrite; - - enum { - INTERACTIVE, // interactive mode - BATCH, // batch mode, run a command and quit - BATCH_THEN_INTERACTIVE, // run a command, then back to interactive mode - BATCH_QUIET // as in batch mode, but don't echo the command - } fBatch; - - // added to detect memory leaks - // watch for {,,msvcrtd.dll}*__p__crtBreakAlloc() - // (http://support.microsoft.com/kb/151585) -#if defined(_DEBUG) && defined(_MSC_VER) - _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); -#endif - - // get global frame (singleton pattern) - // will be initialized on first call - pAbc = Abc_FrameGetGlobalFrame(); - pAbc->sBinary = argv[0]; - -#ifdef ABC_PYTHON_EMBED - { - PyObject* pModule; - void init_pyabc(void); - - Py_SetProgramName(argv[0]); - Py_NoSiteFlag = 1; - Py_Initialize(); - - init_pyabc(); - - pModule = PyImport_ImportModule("pyabc"); - if (pModule) - { - Py_DECREF(pModule); - } - else - { - fprintf( pAbc->Err, "error: pyabc.py not found. PYTHONPATH may not be set properly.\n"); - } - } -#endif /* ABC_PYTHON_EMBED */ - - // default options - fBatch = INTERACTIVE; - fInitSource = 1; - fInitRead = 0; - fFinalWrite = 0; - sInFile = sOutFile = NULL; - sprintf( sReadCmd, "read" ); - sprintf( sWriteCmd, "write" ); - - Extra_UtilGetoptReset(); - while ((c = Extra_UtilGetopt(argc, argv, "c:q:C:hf:F:o:st:T:xb")) != EOF) { - switch(c) { - case 'c': - strcpy( sCommandUsr, globalUtilOptarg ); - fBatch = BATCH; - break; - - case 'q': - strcpy( sCommandUsr, globalUtilOptarg ); - fBatch = BATCH_QUIET; - break; - - case 'C': - strcpy( sCommandUsr, globalUtilOptarg ); - fBatch = BATCH_THEN_INTERACTIVE; - break; - - case 'f': - sprintf(sCommandUsr, "source %s", globalUtilOptarg); - fBatch = BATCH; - break; - - case 'F': - sprintf(sCommandUsr, "source -x %s", globalUtilOptarg); - fBatch = BATCH; - break; - - case 'h': - goto usage; - break; +// Abc_FrameAddInitializer(&abc2_initializer); - case 'o': - sOutFile = globalUtilOptarg; - fFinalWrite = 1; - break; - - case 's': - fInitSource = 0; - break; - - case 't': - if ( TypeCheck( pAbc, globalUtilOptarg ) ) - { - if ( !strcmp(globalUtilOptarg, "none") == 0 ) - { - fInitRead = 1; - sprintf( sReadCmd, "read_%s", globalUtilOptarg ); - } - } - else { - goto usage; - } - fBatch = BATCH; - break; - - case 'T': - if ( TypeCheck( pAbc, globalUtilOptarg ) ) - { - if (!strcmp(globalUtilOptarg, "none") == 0) - { - fFinalWrite = 1; - sprintf( sWriteCmd, "write_%s", globalUtilOptarg); - } - } - else { - goto usage; - } - fBatch = BATCH; - break; - - case 'x': - fFinalWrite = 0; - fInitRead = 0; - fBatch = BATCH; - break; - - case 'b': - Abc_FrameSetBridgeMode(); - break; - - default: - goto usage; - } - } - - if ( Abc_FrameIsBridgeMode() ) - { - extern Gia_Man_t * Gia_ManFromBridge( FILE * pFile, Vec_Int_t ** pvInit ); - pAbc->pGia = Gia_ManFromBridge( stdin, NULL ); - } - else if ( fBatch!=INTERACTIVE && fBatch!=BATCH_QUIET && sCommandUsr[0] ) - Abc_Print( 1, "ABC command line: \"%s\".\n\n", sCommandUsr ); - - if ( fBatch!=INTERACTIVE ) - { - pAbc->fBatchMode = 1; - - - if (argc - globalUtilOptind == 0) - { - sInFile = NULL; - } - else if (argc - globalUtilOptind == 1) - { - fInitRead = 1; - sInFile = argv[globalUtilOptind]; - } - else - { - Abc_UtilsPrintUsage( pAbc, argv[0] ); - } - - // source the resource file - if ( fInitSource ) - { - Abc_UtilsSource( pAbc ); - } - - fStatus = 0; - if ( fInitRead && sInFile ) - { - sprintf( sCommandTmp, "%s %s", sReadCmd, sInFile ); - fStatus = Cmd_CommandExecute( pAbc, sCommandTmp ); - } - - if ( fStatus == 0 ) - { - /* cmd line contains `source <file>' */ - fStatus = Cmd_CommandExecute( pAbc, sCommandUsr ); - if ( (fStatus == 0 || fStatus == -1) && fFinalWrite && sOutFile ) - { - sprintf( sCommandTmp, "%s %s", sWriteCmd, sOutFile ); - fStatus = Cmd_CommandExecute( pAbc, sCommandTmp ); - } - } - - if (fBatch == BATCH_THEN_INTERACTIVE){ - fBatch = INTERACTIVE; - pAbc->fBatchMode = 0; - } - - } - - if ( fBatch==INTERACTIVE ) - { - // start interactive mode - - // print the hello line - Abc_UtilsPrintHello( pAbc ); - // print history of the recent commands - Cmd_HistoryPrint( pAbc, 10 ); - - // source the resource file - if ( fInitSource ) - { - Abc_UtilsSource( pAbc ); - } - - // execute commands given by the user - while ( !feof(stdin) ) - { - // print command line prompt and - // get the command from the user - sCommand = Abc_UtilsGetUsersInput( pAbc ); - - // execute the user's command - fStatus = Cmd_CommandExecute( pAbc, sCommand ); - - // stop if the user quitted or an error occurred - if ( fStatus == -1 || fStatus == -2 ) - break; - } - } - -#ifdef ABC_PYTHON_EMBED - { - Py_Finalize(); - } -#endif /* ABC_PYTHON_EMBED */ - - // if the memory should be freed, quit packages -// if ( fStatus < 0 ) - { - Abc_Stop(); - } - return 0; - -usage: - Abc_UtilsPrintHello( pAbc ); - Abc_UtilsPrintUsage( pAbc, argv[0] ); - return 1; -} - -#endif - -/**Function******************************************************************** - - Synopsis [Returns 1 if s is a file type recognized, else returns 0.] - - Description [Returns 1 if s is a file type recognized by ABC, else returns 0. - Recognized types are "blif", "bench", "pla", and "none".] - - SideEffects [] - -******************************************************************************/ -static int TypeCheck( Abc_Frame_t * pAbc, const char * s ) -{ - if (strcmp(s, "blif") == 0) - return 1; - else if (strcmp(s, "bench") == 0) - return 1; - else if (strcmp(s, "pla") == 0) - return 1; - else if (strcmp(s, "none") == 0) - return 1; - else { - fprintf( pAbc->Err, "unknown type %s\n", s ); - return 0; - } -} - - - - -//////////////////////////////////////////////////////////////////////// -/// END OF FILE /// -//////////////////////////////////////////////////////////////////////// - - -ABC_NAMESPACE_IMPL_END - -#if defined(ABC_USE_BINARY) -int main_( int argc, char * argv[] ) -#else -int main( int argc, char * argv[] ) -#endif -{ - return ABC_NAMESPACE_PREFIX Abc_RealMain(argc, argv); + return Abc_RealMain(argc, argv); } |