isa_parser: Make SCons import the isa_parser
this is instead of forking a new interpreter
This commit is contained in:
parent
629e8df196
commit
ac106767c8
1 changed files with 27 additions and 22 deletions
|
@ -90,41 +90,46 @@ env.Append(SCANNERS = isa_scanner)
|
||||||
# output from the ISA description (*.isa) files.
|
# output from the ISA description (*.isa) files.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Grab the CPU Model information
|
||||||
|
#
|
||||||
|
|
||||||
# Convert to File node to fix path
|
# Convert to File node to fix path
|
||||||
isa_parser = File('isa_parser.py')
|
|
||||||
cpu_models_file = File('../cpu/cpu_models.py')
|
cpu_models_file = File('../cpu/cpu_models.py')
|
||||||
|
|
||||||
# This sucks in the defintions of the CpuModel objects.
|
# This sucks in the defintions of the CpuModel objects.
|
||||||
execfile(cpu_models_file.srcnode().abspath)
|
execfile(cpu_models_file.srcnode().abspath)
|
||||||
|
|
||||||
# Several files are generated from the ISA description.
|
|
||||||
# We always get the basic decoder and header file.
|
|
||||||
isa_desc_gen_files = [ 'decoder.cc', 'decoder.hh', 'max_inst_regs.hh' ]
|
|
||||||
# We also get an execute file for each selected CPU model.
|
|
||||||
isa_desc_gen_files += [CpuModel.dict[cpu].filename
|
|
||||||
for cpu in env['CPU_MODELS']]
|
|
||||||
|
|
||||||
# Also include the CheckerCPU as one of the models if it is being
|
|
||||||
# enabled via command line.
|
|
||||||
if env['USE_CHECKER']:
|
|
||||||
isa_desc_gen_files += [CpuModel.dict['CheckerCPU'].filename]
|
|
||||||
|
|
||||||
# The emitter patches up the sources & targets to include the
|
# The emitter patches up the sources & targets to include the
|
||||||
# autogenerated files as targets and isa parser itself as a source.
|
# autogenerated files as targets and isa parser itself as a source.
|
||||||
def isa_desc_emitter(target, source, env):
|
def isa_desc_emitter(target, source, env):
|
||||||
return (isa_desc_gen_files, [isa_parser, cpu_models_file] + source)
|
cpu_models = list(env['CPU_MODELS'])
|
||||||
|
if env['USE_CHECKER']:
|
||||||
|
cpu_models.append('CheckerCPU')
|
||||||
|
|
||||||
# Pieces are in place, so create the builder.
|
# Several files are generated from the ISA description.
|
||||||
python = sys.executable # use same Python binary used to run scons
|
# We always get the basic decoder and header file.
|
||||||
|
target = [ 'decoder.cc', 'decoder.hh', 'max_inst_regs.hh' ]
|
||||||
|
# We also get an execute file for each selected CPU model.
|
||||||
|
target += [CpuModel.dict[cpu].filename for cpu in cpu_models]
|
||||||
|
|
||||||
|
return target, source + [ Value(m) for m in cpu_models ]
|
||||||
|
|
||||||
|
ARCH_DIR = Dir('.')
|
||||||
|
|
||||||
|
def isa_desc_action(target, source, env):
|
||||||
|
# Add the current directory to the system path so we can import files
|
||||||
|
sys.path[0:0] = [ ARCH_DIR.srcnode().abspath ]
|
||||||
|
import isa_parser
|
||||||
|
|
||||||
|
models = [ s.get_contents() for s in source[1:] ]
|
||||||
|
cpu_models = [CpuModel.dict[cpu] for cpu in models]
|
||||||
|
parser = isa_parser.ISAParser(target[0].dir.abspath, cpu_models)
|
||||||
|
parser.parse_isa_desc(source[0].abspath)
|
||||||
|
|
||||||
# Also include the CheckerCPU as one of the models if it is being
|
# Also include the CheckerCPU as one of the models if it is being
|
||||||
# enabled via command line.
|
# enabled via command line.
|
||||||
if env['USE_CHECKER']:
|
isa_desc_builder = Builder(action=isa_desc_action, emitter=isa_desc_emitter)
|
||||||
isa_desc_builder = Builder(action=python + ' $SOURCES $TARGET.dir $CPU_MODELS CheckerCPU',
|
|
||||||
emitter = isa_desc_emitter)
|
|
||||||
else:
|
|
||||||
isa_desc_builder = Builder(action=python + ' $SOURCES $TARGET.dir $CPU_MODELS',
|
|
||||||
emitter = isa_desc_emitter)
|
|
||||||
|
|
||||||
env.Append(BUILDERS = { 'ISADesc' : isa_desc_builder })
|
env.Append(BUILDERS = { 'ISADesc' : isa_desc_builder })
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue