Add SYSTEMPERL_INCLUDE envvar to assist RPM builds.
This commit is contained in:
parent
202a8bc3bb
commit
38669d0a10
2
Changes
2
Changes
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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",""); }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue