diff --git a/.travis.yml b/.travis.yml index b0623c38c..e99bbd848 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,6 +28,7 @@ cache: before_install: # Perl modules needed for testing # Not listing Bit::Vector as slow to install, and only skips one test + - touch temp.cpp ; g++ -E -dM -c temp.cpp | sort ; rm -rf temp.cpp - yes yes | sudo cpan -fi Unix::Processors Parallel::Forker - sudo apt-get install gdb gtkwave - sudo apt-get install libgoogle-perftools-dev diff --git a/include/verilated.mk.in b/include/verilated.mk.in index 0a5254610..47e3f61a9 100644 --- a/include/verilated.mk.in +++ b/include/verilated.mk.in @@ -114,9 +114,16 @@ endif ####################################################################### ##### Threaded builds +ifneq ($(VM_C11),0) + ifneq ($(VM_C11),) + VK_C11=1 + endif +endif + ifneq ($(VM_THREADS),0) ifneq ($(VM_THREADS),) CPPFLAGS += -DVL_THREADED + VK_C11=1 VK_LIBS_THREADED=1 endif endif @@ -124,14 +131,20 @@ endif ifneq ($(VM_TRACE_THREADED),0) ifneq ($(VM_TRACE_THREADED),) CPPFLAGS += -DVL_TRACE_THREADED + VK_C11=1 VK_LIBS_THREADED=1 endif endif +ifneq ($(VK_C11),0) + ifneq ($(VK_C11),) + # Need C++11 at least, so always default to newest + CPPFLAGS += $(CFG_CXXFLAGS_STD_NEWEST) + endif +endif + ifneq ($(VK_LIBS_THREADED),0) ifneq ($(VK_LIBS_THREADED),) - # Need C++11 at least, so always default to newest - CPPFLAGS += $(CFG_CXXFLAGS_STD_NEWEST) LDLIBS += $(CFG_LDLIBS_THREADS) endif endif diff --git a/src/V3EmitMk.cpp b/src/V3EmitMk.cpp index 9efdad47f..e6147acf4 100644 --- a/src/V3EmitMk.cpp +++ b/src/V3EmitMk.cpp @@ -45,6 +45,8 @@ public: of.puts("# See "+v3Global.opt.prefix()+".mk"+" for the caller.\n"); of.puts("\n### Switches...\n"); + of.puts("# C11 constructs required? 0/1 (from --threads or use of classes)\n"); + of.puts("VM_C11 = " + cvtToStr(v3Global.needC11() || v3Global.opt.threads()) + "\n"); of.puts("# Coverage output mode? 0/1 (from --coverage)\n"); of.puts("VM_COVERAGE = "); of.puts(v3Global.opt.coverage()?"1":"0"); of.puts("\n"); of.puts("# Parallel builds? 0/1 (from --output-split)\n"); diff --git a/src/V3Global.h b/src/V3Global.h index d97c20274..5c9503032 100644 --- a/src/V3Global.h +++ b/src/V3Global.h @@ -73,9 +73,10 @@ class V3Global { int m_debugFileNumber; // Number to append to debug files created bool m_assertDTypesResolved; // Tree should have dtypep()'s bool m_constRemoveXs; // Const needs to strip any Xs - bool m_needTraceDumper; // Need __Vm_dumperp in symbols + bool m_needC11; // Need C++11 bool m_needHInlines; // Need __Inlines file bool m_needHeavy; // Need verilated_heavy.h include + bool m_needTraceDumper; // Need __Vm_dumperp in symbols bool m_dpi; // Need __Dpi include files public: @@ -89,9 +90,10 @@ public: m_widthMinUsage = VWidthMinUsage::LINT_WIDTH; m_assertDTypesResolved = false; m_constRemoveXs = false; - m_needTraceDumper = false; + m_needC11 = false; m_needHInlines = false; m_needHeavy = false; + m_needTraceDumper = false; m_dpi = false; m_rootp = NULL; // created by makeInitNetlist() so static constructors run first } @@ -117,12 +119,14 @@ public: char digits[100]; sprintf(digits, "%03d", m_debugFileNumber); return opt.makeDir()+"/"+opt.prefix()+"_"+digits+"_"+nameComment; } - bool needTraceDumper() const { return m_needTraceDumper; } - void needTraceDumper(bool flag) { m_needTraceDumper = flag; } + bool needC11() const { return m_needC11; } + void needC11(bool flag) { m_needC11 = flag; } bool needHInlines() const { return m_needHInlines; } void needHInlines(bool flag) { m_needHInlines = flag; } bool needHeavy() const { return m_needHeavy; } void needHeavy(bool flag) { m_needHeavy = flag; } + bool needTraceDumper() const { return m_needTraceDumper; } + void needTraceDumper(bool flag) { m_needTraceDumper = flag; } bool dpi() const { return m_dpi; } void dpi(bool flag) { m_dpi = flag; } };