summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/base/main/main.c384
-rw-r--r--src/base/main/mainReal.c369
-rw-r--r--src/base/main/module.make1
3 files changed, 376 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);
}
diff --git a/src/base/main/mainReal.c b/src/base/main/mainReal.c
new file mode 100644
index 00000000..204e7491
--- /dev/null
+++ b/src/base/main/mainReal.c
@@ -0,0 +1,369 @@
+/*////////////////////////////////////////////////////////////////////////////
+
+ABC: System for Sequential Synthesis and Verification
+
+http://www.eecs.berkeley.edu/~alanmi/abc/
+
+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
+
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+static int TypeCheck( Abc_Frame_t * pAbc, const char * s);
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+
+/**Function*************************************************************
+
+ Synopsis [The main() procedure.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Abc_RealMain( 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;
+
+ 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;
+}
+
+/**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
+
diff --git a/src/base/main/module.make b/src/base/main/module.make
index 3d03cc12..889bc3ad 100644
--- a/src/base/main/module.make
+++ b/src/base/main/module.make
@@ -2,5 +2,6 @@ SRC += src/base/main/main.c \
src/base/main/mainFrame.c \
src/base/main/mainInit.c \
src/base/main/mainLib.c \
+ src/base/main/mainReal.c \
src/base/main/libSupport.c \
src/base/main/mainUtils.c