mirror of https://github.com/YosysHQ/abc.git
Changes to enable building external code.
This commit is contained in:
parent
736c2245ea
commit
c0db4d2a12
2
Makefile
2
Makefile
|
|
@ -12,7 +12,7 @@ $(info $(MSG_PREFIX)Using LD=$(LD))
|
|||
PROG := abc
|
||||
|
||||
MODULES := \
|
||||
$(wildcard src/ext) src/misc/ext \
|
||||
$(wildcard src/ext*) src/misc/ext \
|
||||
src/base/abc src/base/abci src/base/cmd src/base/io \
|
||||
src/base/main src/base/ver src/base/wlc src/base/test \
|
||||
src/bdd/cudd src/bdd/dsd src/bdd/epd src/bdd/mtr src/bdd/parse \
|
||||
|
|
|
|||
|
|
@ -691,6 +691,10 @@ SOURCE=.\src\base\main\mainLib.c
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\base\main\mainReal.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\base\main\mainUtils.c
|
||||
# End Source File
|
||||
# End Group
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
// Abc_FrameAddInitializer(&abc2_initializer);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
#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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue