Add SYSTEMPERL_INCLUDE envvar to assist RPM builds.

This commit is contained in:
Wilson Snyder 2009-03-28 10:18:53 -04:00
parent 202a8bc3bb
commit 38669d0a10
10 changed files with 75 additions and 20 deletions

View File

@ -7,6 +7,8 @@ indicates the contributor was also the author of the fix; Thanks!
*** Add --pins-bv option to use sc_bv for all ports. [Brian Small] *** Add --pins-bv option to use sc_bv for all ports. [Brian Small]
*** Add SYSTEMPERL_INCLUDE envvar to assist RPM builds. [Chitlesh Goorah]
**** Report errors when duplicate labels are used, bug72. [Vasu Kandadi] **** Report errors when duplicate labels are used, bug72. [Vasu Kandadi]
**** Fix the SC_MODULE name() to not include __PVT__. [Bob Fredieu] **** Fix the SC_MODULE name() to not include __PVT__. [Bob Fredieu]

View File

@ -953,10 +953,18 @@ building the SystemC model.
=item SYSTEMPERL =item SYSTEMPERL
Specifies the directory containing the Verilog-Perl distribution kit. This Specifies the directory containing the SystemPerl distribution kit. This
is used to find the Verilog-Perl library and include files. If not is used to find the SystemPerl library and include files. If not
specified, it will come from a default optionally specified at configure specified, it will come from a default optionally specified at configure
time (before Verilator was compiled). time (before Verilator was compiled). See also SYSTEMPERL_INCLUDE.
=item SYSTEMPERL_INCLUDE
Specifies the directory containing the Verilog-Perl include .cpp files,
from the src/ directory of the SystemPerl kit. If not specified, it will
be computed from the SYSTEMPERL environment variable if it is set, and if
SYSTEMPERL is not set SYSTEMPERL_INCLUDE will come from a default
optionally specified at configure time (before Verilator was compiled).
=item VCS_HOME =item VCS_HOME

View File

@ -89,8 +89,8 @@ endif
##### SystemPerl builds ##### SystemPerl builds
ifeq ($(VM_SP),1) ifeq ($(VM_SP),1)
CPPFLAGS += -I$(SYSTEMPERL)/src -DSYSTEMPERL CPPFLAGS += -I$(SYSTEMPERL_INCLUDE) -DSYSTEMPERL
VPATH += $(SYSTEMPERL)/src VPATH += $(SYSTEMPERL_INCLUDE)
LIBS += -lm -lstdc++ LIBS += -lm -lstdc++
VK_CLASSES_SP = $(addsuffix .sp, $(VM_CLASSES)) VK_CLASSES_SP = $(addsuffix .sp, $(VM_CLASSES))
@ -110,8 +110,8 @@ endif
ifeq ($(VM_SC),1) ifeq ($(VM_SC),1)
LIBS += -lm -lstdc++ LIBS += -lm -lstdc++
ifeq ($(VM_TRACE),1) ifeq ($(VM_TRACE),1)
CPPFLAGS += -I$(SYSTEMPERL)/src CPPFLAGS += -I$(SYSTEMPERL_INCLUDE)
VPATH += $(SYSTEMPERL)/src VPATH += $(SYSTEMPERL_INCLUDE)
endif endif
endif endif
@ -121,8 +121,8 @@ endif
ifeq ($(VM_PCLI),1) ifeq ($(VM_PCLI),1)
LIBS += -lm -lstdc++ LIBS += -lm -lstdc++
ifeq ($(VM_TRACE),1) ifeq ($(VM_TRACE),1)
CPPFLAGS += -I$(SYSTEMPERL)/src CPPFLAGS += -I$(SYSTEMPERL_INCLUDE)
VPATH += $(SYSTEMPERL)/src VPATH += $(SYSTEMPERL_INCLUDE)
endif endif
endif endif

View File

@ -116,8 +116,9 @@ If you will be using SystemC, download and install Verilog-Perl,
If you will be using SystemC, download and install System-Perl, If you will be using SystemC, download and install System-Perl,
@url{http://search.cpan.org/search?module=SystemC::Netlist}. Note @url{http://search.cpan.org/search?module=SystemC::Netlist}. Note
you'll need to set a @samp{SYSTEMPERL} environment variable to point you'll need to set a @samp{SYSTEMPERL} environment variable to point
to the downloaded kit (not the installed files.) Also, make sure to to the downloaded kit. Optionally also set @samp{SYSTEMPERL_INCLUDE}
do a @code{make sc_patch}. to point to the installed headers. Also, make sure to do a @code{make
sc_patch}.
@item @item
@code{cd} to the Verilator directory containing this README. @code{cd} to the Verilator directory containing this README.
@ -128,8 +129,8 @@ Type @samp{./configure} to configure Verilator for your system.
If you are configuring Verilator to be part of a RPM or other If you are configuring Verilator to be part of a RPM or other
distribution package system, you may want to use the --enable-defenv distribution package system, you may want to use the --enable-defenv
configure flag. This will take the current value of VERILATOR_ROOT, configure flag. This will take the current value of VERILATOR_ROOT,
SYSTEMC, SYSTEMC_ARCH, and SYSTEMPERL and build them as defaults into SYSTEMC, SYSTEMC_ARCH, SYSTEMPERL, and SYSTEMPERL_INCLUDE and build
the executable. them as defaults into the executable.
@item @item
Type @samp{make} to compile Verilator. Type @samp{make} to compile Verilator.

View File

@ -81,12 +81,19 @@ CPPFLAGS += -W -Wall -Wno-unused-parameter -Wno-char-subscripts -Werror
#CPPFLAGS += -pedantic-errors #CPPFLAGS += -pedantic-errors
endif endif
ifneq ($(SYSTEMPERL),) # Intuit SYSTEMPERL_INCLUDE as it's new
SYSTEMPERL_INCLUDE ?= $(SYSTEMPERL)/src
#else if set, leave as-is.
#else if SYSTEMPERL="" don't set _INCLUDE so source will figure it out
endif
# Allow RPM builds to specify hardcoded data directories # Allow RPM builds to specify hardcoded data directories
# To do this: # To do this:
ifeq ($(CFG_WITH_DEFENV),yes) ifeq ($(CFG_WITH_DEFENV),yes)
CPPFLAGS += -DDEFENV_SYSTEMC=\"$(SYSTEMC)\" CPPFLAGS += -DDEFENV_SYSTEMC=\"$(SYSTEMC)\"
CPPFLAGS += -DDEFENV_SYSTEMC_ARCH=\"$(SYSTEMC_ARCH)\" CPPFLAGS += -DDEFENV_SYSTEMC_ARCH=\"$(SYSTEMC_ARCH)\"
CPPFLAGS += -DDEFENV_SYSTEMPERL=\"$(SYSTEMPERL)\" CPPFLAGS += -DDEFENV_SYSTEMPERL=\"$(SYSTEMPERL)\"
CPPFLAGS += -DDEFENV_SYSTEMPERL_INCLUDE=\"$(SYSTEMPERL_INCLUDE)\"
ifeq ($(VERILATOR_ROOT),) # Use what we're given, or intuit ifeq ($(VERILATOR_ROOT),) # Use what we're given, or intuit
CPPFLAGS += -DDEFENV_VERILATOR_ROOT=\"$(pkgdatadir)\" CPPFLAGS += -DDEFENV_VERILATOR_ROOT=\"$(pkgdatadir)\"
else else
@ -280,4 +287,3 @@ DEPS := $(wildcard *.d)
ifneq ($(DEPS),) ifneq ($(DEPS),)
include $(DEPS) include $(DEPS)
endif endif

View File

@ -87,6 +87,7 @@ public:
of.puts("PERL = "+V3Options::getenvPERL()+"\n"); of.puts("PERL = "+V3Options::getenvPERL()+"\n");
of.puts("VERILATOR_ROOT = "+V3Options::getenvVERILATOR_ROOT()+"\n"); of.puts("VERILATOR_ROOT = "+V3Options::getenvVERILATOR_ROOT()+"\n");
of.puts("SYSTEMPERL = "+V3Options::getenvSYSTEMPERL()+"\n"); of.puts("SYSTEMPERL = "+V3Options::getenvSYSTEMPERL()+"\n");
of.puts("SYSTEMPERL_INCLUDE = "+V3Options::getenvSYSTEMPERL_INCLUDE()+"\n");
of.puts("\n# Switches...\n"); of.puts("\n# Switches...\n");
of.puts(string("VM_SP = ")+(v3Global.opt.systemPerl()?"1":"0")+"\n"); of.puts(string("VM_SP = ")+(v3Global.opt.systemPerl()?"1":"0")+"\n");

View File

@ -327,8 +327,7 @@ string V3Options::getenvSYSTEMC() {
setenvStr("SYSTEMC", var, "Hardcoded at build time"); setenvStr("SYSTEMC", var, "Hardcoded at build time");
} }
// Only correct or check it if we really need the value // Only correct or check it if we really need the value
if ((v3Global.opt.systemPerl() || v3Global.opt.systemC()) if (v3Global.opt.usingSystemCLibs()) {
&& !v3Global.opt.lintOnly()) {
if (var == "") { if (var == "") {
v3fatal("Need $SYSTEMC in environment\n" v3fatal("Need $SYSTEMC in environment\n"
"Probably System-C isn't installed, see http://www.systemc.org\n"); "Probably System-C isn't installed, see http://www.systemc.org\n");
@ -356,13 +355,21 @@ string V3Options::getenvSYSTEMC_ARCH() {
} }
string V3Options::getenvSYSTEMPERL() { string V3Options::getenvSYSTEMPERL() {
// Must be careful to set SYSTEMPERL_INCLUDE first else we'd setenv
// SYSTEMPERL which would override a DEFENVed SYSTEMPERL_INCLUDE.
V3Options::getenvSYSTEMPERL_INCLUDE();
return V3Options::getenvSYSTEMPERLGuts();
}
string V3Options::getenvSYSTEMPERLGuts() {
// Get SYSTEMPERL when SYSTEMPERL_INCLUDE has already been tested
string var = getenvStr("SYSTEMPERL",""); string var = getenvStr("SYSTEMPERL","");
if (var == "" && string(DEFENV_SYSTEMPERL) != "") { if (var == "" && string(DEFENV_SYSTEMPERL) != "") {
var = DEFENV_SYSTEMPERL; var = DEFENV_SYSTEMPERL;
setenvStr("SYSTEMC_PERL", var, "Hardcoded at build time"); setenvStr("SYSTEMPERL", var, "Hardcoded at build time");
} }
// Only correct or check it if we really need the value // Only correct or check it if we really need the value
if ((v3Global.opt.systemPerl() || v3Global.opt.trace()) && !v3Global.opt.lintOnly()) { if (v3Global.opt.usingSystemPerlLibs()) {
if (var == "") { if (var == "") {
string testdir = V3Options::getenvW() + "/hw/utils/perltools/SystemC"; // Hack for internal testing string testdir = V3Options::getenvW() + "/hw/utils/perltools/SystemC"; // Hack for internal testing
if (V3Options::fileStatDir(testdir)) { if (V3Options::fileStatDir(testdir)) {
@ -370,13 +377,35 @@ string V3Options::getenvSYSTEMPERL() {
setenvStr ("SYSTEMPERL", var, "From W"); setenvStr ("SYSTEMPERL", var, "From W");
} }
} }
// Test for correctness in SYSTEMPERL_INCLUDE
}
return var;
}
string V3Options::getenvSYSTEMPERL_INCLUDE() {
string var = getenvStr("SYSTEMPERL_INCLUDE","");
if (var == "" && string(DEFENV_SYSTEMPERL_INCLUDE) != "") {
// Note if SYSTEMPERL is DEFENVed, then SYSTEMPERL_INCLUDE is also DEFENVed
// So we don't need to sweat testing SYSTEMPERL also
var = DEFENV_SYSTEMPERL_INCLUDE;
setenvStr("SYSTEMPERL_INCLUDE", var, "Hardcoded at build time");
}
// Only correct or check it if we really need the value
if (v3Global.opt.usingSystemPerlLibs()) {
if (var == "") {
string sp = V3Options::getenvSYSTEMPERLGuts();
var = sp+"/src";
setenvStr ("SYSTEMPERL_INCLUDE", var, "From $SYSTEMPERL/src");
}
// We warn about $SYSTEMPERL instead of _INCLUDE since that's more likely
// what users will want to set.
if (var == "") { if (var == "") {
v3fatal("Need $SYSTEMPERL in environment for --sp or --trace\n" v3fatal("Need $SYSTEMPERL in environment for --sp or --trace\n"
"Probably System-Perl isn't installed, see http://www.veripool.org/systemperl\n"); "Probably System-Perl isn't installed, see http://www.veripool.org/systemperl\n");
} }
if (var != "" if (var != ""
&& !V3Options::fileStatNormal(var+"/src/systemperl.h")) { && !V3Options::fileStatNormal(var+"/systemperl.h")) {
v3fatal("$SYSTEMPERL environment var doesn't seem to point to System-Perl kit\n"); v3fatal("Neither $SYSTEMPERL nor $SYSTEMPERL_INCLUDE environment vars to point to System-Perl kit: "<<var<<endl);
} }
} }
return var; return var;

View File

@ -170,6 +170,7 @@ class V3Options {
static bool wildmatchi(const char* s, const char* p); static bool wildmatchi(const char* s, const char* p);
static string getenvStr(const string& envvar, const string& defaultValue); static string getenvStr(const string& envvar, const string& defaultValue);
static void setenvStr(const string& envvar, const string& value, const string& why); static void setenvStr(const string& envvar, const string& value, const string& why);
static string getenvSYSTEMPERLGuts();
public: public:
// CREATORS // CREATORS
@ -193,6 +194,8 @@ class V3Options {
string flags() const { return m_flags; } string flags() const { return m_flags; }
bool systemC() const { return m_systemC; } bool systemC() const { return m_systemC; }
bool systemPerl() const { return m_systemPerl; } bool systemPerl() const { return m_systemPerl; }
bool usingSystemCLibs() const { return !lintOnly() && (systemPerl() || systemC()); }
bool usingSystemPerlLibs() const { return !lintOnly() && (systemPerl() || trace()); }
bool skipIdentical() const { return m_skipIdentical; } bool skipIdentical() const { return m_skipIdentical; }
bool stats() const { return m_stats; } bool stats() const { return m_stats; }
bool assertOn() const { return m_assert; } // assertOn as __FILE__ may be defined bool assertOn() const { return m_assert; } // assertOn as __FILE__ may be defined
@ -290,6 +293,7 @@ class V3Options {
static string getenvSYSTEMC(); static string getenvSYSTEMC();
static string getenvSYSTEMC_ARCH(); static string getenvSYSTEMC_ARCH();
static string getenvSYSTEMPERL(); static string getenvSYSTEMPERL();
static string getenvSYSTEMPERL_INCLUDE();
static string getenvVERILATOR_ROOT(); static string getenvVERILATOR_ROOT();
static string getenvW() { return getenvStr("W",""); } static string getenvW() { return getenvStr("W",""); }

View File

@ -538,6 +538,7 @@ int main(int argc, char** argv, char** env) {
V3Options::getenvSYSTEMC(); V3Options::getenvSYSTEMC();
V3Options::getenvSYSTEMC_ARCH(); V3Options::getenvSYSTEMC_ARCH();
V3Options::getenvSYSTEMPERL(); V3Options::getenvSYSTEMPERL();
V3Options::getenvSYSTEMPERL_INCLUDE();
V3Error::abortIfErrors(); V3Error::abortIfErrors();

View File

@ -73,6 +73,9 @@
#ifndef DEFENV_SYSTEMPERL #ifndef DEFENV_SYSTEMPERL
# define DEFENV_SYSTEMPERL "" # define DEFENV_SYSTEMPERL ""
#endif #endif
#ifndef DEFENV_SYSTEMPERL_INCLUDE
# define DEFENV_SYSTEMPERL_INCLUDE ""
#endif
#ifndef DEFENV_VERILATOR_ROOT #ifndef DEFENV_VERILATOR_ROOT
# define DEFENV_VERILATOR_ROOT "" # define DEFENV_VERILATOR_ROOT ""
#endif #endif