summaryrefslogtreecommitdiffstats
path: root/src/base/main
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2006-08-20 08:01:00 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2006-08-20 08:01:00 -0700
commit2fd3c1a25bb7a7ce334d2de5bac96bce446855d8 (patch)
treebf7cdb446399d47863e9b88f11217293b10ad6ad /src/base/main
parenteb2a5b43a46b90f3c46b388f50ea0ca8918983aa (diff)
downloadabc-2fd3c1a25bb7a7ce334d2de5bac96bce446855d8.tar.gz
abc-2fd3c1a25bb7a7ce334d2de5bac96bce446855d8.tar.bz2
abc-2fd3c1a25bb7a7ce334d2de5bac96bce446855d8.zip
Version abc60820
Diffstat (limited to 'src/base/main')
-rw-r--r--src/base/main/libSupport.c85
-rw-r--r--src/base/main/main.h2
-rw-r--r--src/base/main/mainFrame.c4
-rw-r--r--src/base/main/mainInt.h1
4 files changed, 64 insertions, 28 deletions
diff --git a/src/base/main/libSupport.c b/src/base/main/libSupport.c
index feb7a47e..cdfd98b8 100644
--- a/src/base/main/libSupport.c
+++ b/src/base/main/libSupport.c
@@ -44,42 +44,71 @@ void open_libs() {
#else
DIR* dirp;
struct dirent* dp;
+ char *env, *init_p, *p;
+ int done;
+
+ env = getenv ("ABC_LIB_PATH");
+ if (env == NULL) {
+ printf("Warning: ABC_LIB_PATH not defined. Looking into the current directory.\n");
+ init_p = malloc (2*sizeof(char));
+ init_p[0]='.'; init_p[1] = 0;
+ } else {
+ init_p = malloc ((strlen(env)+1)*sizeof(char));
+ strcpy (init_p, env);
+ }
- dirp = opendir(".");
- while ((dp = readdir(dirp)) != NULL) {
+ // Extract directories and read libraries
+ done = 0;
+ p = init_p;
+ while (!done) {
+ char *endp = strchr (p,':');
+ if (endp == NULL) done = 1; // last directory in the list
+ else *endp = 0; // end of string
+
+ dirp = opendir(p);
+ if (dirp == NULL) {
+ printf("Warning: directory in ABC_LIB_PATH does not exist (%s).\n", p);
+ continue;
+ }
+
+ while ((dp = readdir(dirp)) != NULL) {
if ((strncmp("libabc_", dp->d_name, 7) == 0) &&
(strcmp(".so", dp->d_name + strlen(dp->d_name) - 3) == 0)) {
- // make sure we don't overflow the handle array
- if (curr_lib >= MAX_LIBS) {
- printf("Warning: maximum number of ABC libraries (%d) exceeded. Not loading %s.\n",
- MAX_LIBS,
- dp->d_name);
- }
-
- // attempt to load it
- else {
- char* szPrefixed = malloc((strlen(dp->d_name) + 3) * sizeof(char));
- strcpy(szPrefixed, "./");
- strcat(szPrefixed, dp->d_name);
-
- libHandles[curr_lib] = dlopen(szPrefixed, RTLD_NOW | RTLD_LOCAL);
-
- // did the load succeed?
- if (libHandles[curr_lib] != 0) {
- printf("Loaded ABC library: %s (Abc library extension #%d)\n", szPrefixed, curr_lib);
- curr_lib++;
- } else {
- printf("Warning: failed to load ABC library %s:\n\t%s\n", szPrefixed, dlerror());
- }
-
- free(szPrefixed);
+ // make sure we don't overflow the handle array
+ if (curr_lib >= MAX_LIBS) {
+ printf("Warning: maximum number of ABC libraries (%d) exceeded. Not loading %s.\n",
+ MAX_LIBS,
+ dp->d_name);
+ }
+
+ // attempt to load it
+ else {
+ char* szPrefixed = malloc((strlen(dp->d_name) + strlen(p) + 2) *
+ sizeof(char));
+ sprintf(szPrefixed, "%s/", p);
+ strcat(szPrefixed, dp->d_name);
+ libHandles[curr_lib] = dlopen(szPrefixed, RTLD_NOW | RTLD_LOCAL);
+
+ // did the load succeed?
+ if (libHandles[curr_lib] != 0) {
+ printf("Loaded ABC library: %s (Abc library extension #%d)\n", szPrefixed, curr_lib);
+ curr_lib++;
+ } else {
+ printf("Warning: failed to load ABC library %s:\n\t%s\n", szPrefixed, dlerror());
}
+
+ free(szPrefixed);
+ }
}
+ }
+ closedir(dirp);
+ p = endp+1;
}
- closedir(dirp);
-#endif
+ free(init_p);
+#endif
+
// null terminate the list of handles
libHandles[curr_lib] = 0;
}
diff --git a/src/base/main/main.h b/src/base/main/main.h
index fe511314..80238a05 100644
--- a/src/base/main/main.h
+++ b/src/base/main/main.h
@@ -97,6 +97,7 @@ extern int Abc_FrameReadNtkStoreSize();
extern void * Abc_FrameReadLibLut();
extern void * Abc_FrameReadLibGen();
extern void * Abc_FrameReadLibSuper();
+extern void * Abc_FrameReadLibVer();
extern void * Abc_FrameReadManDd();
extern void * Abc_FrameReadManDec();
extern char * Abc_FrameReadFlag( char * pFlag );
@@ -107,6 +108,7 @@ extern void Abc_FrameSetNtkStoreSize( int nStored );
extern void Abc_FrameSetLibLut( void * pLib );
extern void Abc_FrameSetLibGen( void * pLib );
extern void Abc_FrameSetLibSuper( void * pLib );
+extern void Abc_FrameSetLibVer( void * pLib );
extern void Abc_FrameSetFlag( char * pFlag, char * pValue );
#ifdef __cplusplus
diff --git a/src/base/main/mainFrame.c b/src/base/main/mainFrame.c
index a1011a36..068a8bfb 100644
--- a/src/base/main/mainFrame.c
+++ b/src/base/main/mainFrame.c
@@ -48,6 +48,7 @@ int Abc_FrameReadNtkStoreSize() { return s_GlobalFrame->nSt
void * Abc_FrameReadLibLut() { return s_GlobalFrame->pLibLut; }
void * Abc_FrameReadLibGen() { return s_GlobalFrame->pLibGen; }
void * Abc_FrameReadLibSuper() { return s_GlobalFrame->pLibSuper; }
+void * Abc_FrameReadLibVer() { return s_GlobalFrame->pLibVer; }
void * Abc_FrameReadManDd() { if ( s_GlobalFrame->dd == NULL ) s_GlobalFrame->dd = Cudd_Init( 0, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0 ); return s_GlobalFrame->dd; }
void * Abc_FrameReadManDec() { if ( s_GlobalFrame->pManDec == NULL ) s_GlobalFrame->pManDec = Dec_ManStart(); return s_GlobalFrame->pManDec; }
char * Abc_FrameReadFlag( char * pFlag ) { return Cmd_FlagReadByName( s_GlobalFrame, pFlag ); }
@@ -57,6 +58,7 @@ void Abc_FrameSetNtkStoreSize( int nStored ) { s_GlobalFrame->nStored =
void Abc_FrameSetLibLut( void * pLib ) { s_GlobalFrame->pLibLut = pLib; }
void Abc_FrameSetLibGen( void * pLib ) { s_GlobalFrame->pLibGen = pLib; }
void Abc_FrameSetLibSuper( void * pLib ) { s_GlobalFrame->pLibSuper = pLib; }
+void Abc_FrameSetLibVer( void * pLib ) { s_GlobalFrame->pLibVer = pLib; }
void Abc_FrameSetFlag( char * pFlag, char * pValue ) { Cmd_FlagUpdateValue( s_GlobalFrame, pFlag, pValue ); }
/**Function*************************************************************
@@ -135,11 +137,13 @@ void Abc_FrameDeallocate( Abc_Frame_t * p )
{
extern void Rwt_ManGlobalStop();
extern void undefine_cube_size();
+ extern void Ver_ParseFreeLibrary( st_table * pLibVer );
// extern void Ivy_TruthManStop();
// Abc_HManStop();
undefine_cube_size();
Rwt_ManGlobalStop();
// Ivy_TruthManStop();
+ if ( p->pLibVer ) Ver_ParseFreeLibrary( p->pLibVer );
if ( p->pManDec ) Dec_ManStop( p->pManDec );
if ( p->dd ) Extra_StopManager( p->dd );
Abc_FrameDeleteAllNetworks( p );
diff --git a/src/base/main/mainInt.h b/src/base/main/mainInt.h
index d2bca1ab..13c71759 100644
--- a/src/base/main/mainInt.h
+++ b/src/base/main/mainInt.h
@@ -72,6 +72,7 @@ struct Abc_Frame_t_
void * pLibLut; // the current LUT library
void * pLibGen; // the current genlib
void * pLibSuper; // the current supergate library
+ void * pLibVer; // the current Verilog library
};
////////////////////////////////////////////////////////////////////////