Skip to content

Commit 9f18cd5

Browse files
authored
Merge pull request #50 from efabless/develop
Added a number of configuration options
2 parents dd331d3 + 8840422 commit 9f18cd5

File tree

2 files changed

+47
-30
lines changed

2 files changed

+47
-30
lines changed

pyverilog/vparser/parser.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from __future__ import print_function
1919
import sys
2020
import os
21+
import pathlib
2122

2223
from pyverilog.vparser.ply.yacc import yacc
2324
from pyverilog.vparser.plyparser import PLYParser, Coord, ParseError
@@ -48,14 +49,18 @@ class VerilogParser(PLYParser):
4849
# -> Strong
4950
)
5051

51-
def __init__(self):
52+
def __init__(self, outputdir=".", debug=True):
5253
self.lexer = VerilogLexer(error_func=self._lexer_error_func)
5354
self.lexer.build()
5455

5556
self.tokens = self.lexer.tokens
56-
#self.parser = yacc(module=self)
57-
# Use this if you want to build the parser using LALR(1) instead of SLR
58-
self.parser = yacc(module=self, method="LALR")
57+
pathlib.Path(outputdir).mkdir(parents=True, exist_ok=True)
58+
self.parser = yacc(
59+
module=self,
60+
method="LALR",
61+
outputdir=outputdir,
62+
debug=debug
63+
)
5964

6065
def _lexer_error_func(self, msg, line, column):
6166
self._parse_error(msg, self._coord(line, column))
@@ -2243,13 +2248,16 @@ class VerilogCodeParser(object):
22432248

22442249
def __init__(self, filelist, preprocess_output='preprocess.output',
22452250
preprocess_include=None,
2246-
preprocess_define=None):
2251+
preprocess_define=None,
2252+
outputdir=".",
2253+
debug=True
2254+
):
22472255
self.preprocess_output = preprocess_output
22482256
self.directives = ()
22492257
self.preprocessor = VerilogPreprocessor(filelist, preprocess_output,
22502258
preprocess_include,
22512259
preprocess_define)
2252-
self.parser = VerilogParser()
2260+
self.parser = VerilogParser(outputdir=outputdir, debug=debug)
22532261

22542262
def preprocess(self):
22552263
self.preprocessor.preprocess()
@@ -2267,10 +2275,20 @@ def get_directives(self):
22672275
return self.directives
22682276

22692277

2270-
def parse(filelist, preprocess_include=None, preprocess_define=None):
2271-
codeparser = VerilogCodeParser(filelist,
2272-
preprocess_include=preprocess_include,
2273-
preprocess_define=preprocess_define)
2278+
def parse(
2279+
filelist,
2280+
preprocess_include=None,
2281+
preprocess_define=None,
2282+
outputdir=".",
2283+
debug=True
2284+
):
2285+
codeparser = VerilogCodeParser(
2286+
filelist,
2287+
preprocess_include=preprocess_include,
2288+
preprocess_define=preprocess_define,
2289+
outputdir=outputdir,
2290+
debug=debug
2291+
)
22742292
ast = codeparser.parse()
22752293
directives = codeparser.get_directives()
22762294
return ast, directives

pyverilog/vparser/preprocessor.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,31 +30,30 @@
3030
class VerilogPreprocessor(object):
3131
def __init__(self, filelist, outputfile='pp.out', include=None, define=None):
3232
self.filelist = filelist
33-
cmd = []
34-
cmd.append('iverilog ')
35-
if include:
36-
for inc in include:
37-
cmd.append('-I ')
38-
cmd.append(inc)
39-
cmd.append(' ')
40-
if define:
41-
for d in define:
42-
cmd.append('-D')
43-
cmd.append(d)
44-
cmd.append(' ')
45-
cmd.append('-E -o ')
46-
cmd.append(outputfile)
47-
self.iv = ''.join(cmd)
33+
iverilog_invocable = os.environ.get("PYVERILOG_IVERILOG") or "iverilog"
34+
include = include or []
35+
define = define or []
36+
includes = map(
37+
lambda includable: "-I '{0}'".format(includable), include
38+
)
39+
defines = map(lambda definable: "-D {0}".format(definable), define)
40+
self.iv = "'{0}' {1} {2} -E -o '{3}'".format(
41+
iverilog_invocable, ' '.join(includes), ' '.join(defines),
42+
outputfile
43+
)
4844

4945
def preprocess(self):
50-
cmd = self.iv + ' '
51-
for f in self.filelist:
52-
cmd += ' ' + f
46+
files = map(lambda file: "'{0}'".format(file), self.filelist)
47+
cmd = "{0} {1}".format(self.iv, ' '.join(files))
5348
subprocess.call(cmd, shell=True)
5449

5550

56-
def preprocess(filelist,
57-
output='preprocess.output', include=None, define=None):
51+
def preprocess(
52+
filelist,
53+
output='preprocess.output',
54+
include=None,
55+
define=None
56+
):
5857
pre = VerilogPreprocessor(filelist, output, include, define)
5958
pre.preprocess()
6059
text = open(output).read()

0 commit comments

Comments
 (0)