| Index: src/trusted/validator_ragel/build.scons
|
| ===================================================================
|
| --- src/trusted/validator_ragel/build.scons (revision 0)
|
| +++ src/trusted/validator_ragel/build.scons (revision 0)
|
| @@ -0,0 +1,118 @@
|
| +# -*- python -*-
|
| +# Copyright (c) 2011 The Native Client Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import os
|
| +import sys
|
| +Import('env')
|
| +
|
| +#
|
| +#
|
| +# Build on x86 only.
|
| +#
|
| +#
|
| +if not env.Bit('target_x86'):
|
| + Return()
|
| +
|
| +# General adjustments to the environment for builds.
|
| +
|
| +# TODO(khim): eliminate need for the following piece
|
| +if env.Bit('windows'):
|
| + env.FilterOut(CCFLAGS=['/O1'])
|
| + env.Append(CCFLAGS=['/O0'])
|
| +
|
| +# Defines the source directory where validator generated files should be added.
|
| +val_src_dir = '$MAIN_DIR/src/trusted/validator_ragel/generated'
|
| +
|
| +# Source generation:
|
| +#
|
| +# valgen : Regenerate any autogenerated source files.
|
| +
|
| +gen_env = env.Clone();
|
| +gen_env.Append(CCFLAGS=['-DNACL_TRUSTED_BUT_NOT_TCB'])
|
| +
|
| +generate = False
|
| +if 'valgen' in COMMAND_LINE_TARGETS: generate = True
|
| +if 'valclean' in COMMAND_LINE_TARGETS: generate = True
|
| +
|
| +# Set of generated (source) decoder tables.
|
| +tables = []
|
| +
|
| +# Ragel generator:
|
| +#
|
| +# We have generator which reads .def files and produced automata definition.
|
| +
|
| +env_gen_dfa = env.Clone()
|
| +env_gen_dfa.Append(CCFLAGS=['-std=c++0x', '-DNACL_TRUSTED_BUT_NOT_TCB'])
|
| +
|
| +gen_dfa = env_gen_dfa.ComponentProgram(
|
| + 'gen-dfa',
|
| + ['unreviewed/gen-dfa.cc'])
|
| +
|
| +# Source generation step 2: Generate decoder tables.
|
| +#
|
| +# Now we are back to conditionally defining the large tables generated
|
| +# by ncdecode_tablegen.
|
| +
|
| +# Generate 32 and 64 bit versions of decoders and validators.
|
| +if generate:
|
| + for bits in ['32', '64']:
|
| + for automata in ['decoder', 'validator']:
|
| + rl_file = '%s/%s-x86_%s-instruction.rl' % (val_src_dir, automata, bits)
|
| + exe_path = '${STAGING_DIR}/${PROGPREFIX}gen-dfa${PROGSUFFIX}'
|
| + gen_env.Command(
|
| + rl_file,
|
| + [exe_path,
|
| + 'unreviewed/general-purpose-instructions.def',
|
| + 'unreviewed/system-instructions.def',
|
| + 'unreviewed/x87-instructions.def',
|
| + 'unreviewed/mmx-instructions.def',
|
| + 'unreviewed/xmm-instructions.def',
|
| + 'unreviewed/nops.def'],
|
| + [('${SOURCES[0]} -o ${TARGET} -m %s -d %s ${SOURCES[1]} '
|
| + '${SOURCES[2]} ${SOURCES[3]} ${SOURCES[4]} ${SOURCES[5]} '
|
| + '${SOURCES[6]}') % (
|
| + {'32': 'ia32', '64': 'amd64'}[bits],
|
| + {'decoder32':
|
| + 'check_access,opcode,parse_operands_states,mark_data_fields',
|
| + 'decoder64':
|
| + 'check_access,opcode,parse_operands_states,mark_data_fields',
|
| + 'validator32':
|
| + ('check_access,opcode,parse_operands,parse_operands_states,'
|
| + 'instruction_name,mark_data_fields,nacl-forbidden,'
|
| + 'imm_operand_action,rel_operand_action'),
|
| + 'validator64':
|
| + 'opcode,instruction_name,mark_data_fields,rel_operand_action,' +
|
| + 'nacl-forbidden'}[automata+bits])]
|
| + )
|
| + tables.append(rl_file)
|
| + c_file = '%s/%s-x86_%s.c' % (val_src_dir, automata, bits)
|
| + gen_env.Command(
|
| + c_file,
|
| + ['unreviewed/%s-x86_%s.rl' % (automata, bits), rl_file],
|
| + ['ragel -G2 -I%s ${SOURCES[0]} -o ${TARGET}' % (val_src_dir)]
|
| + )
|
| + tables.append(c_file)
|
| +
|
| + # Generate 32 and 64 bit versions of decoders and validators
|
| + gen_env.AlwaysBuild(
|
| + gen_env.Alias('valgen', tables))
|
| + gen_env.AlwaysBuild(
|
| + gen_env.Alias('valclean', action=[Delete(x) for x in tables]))
|
| +
|
| +# Generate 32 and 64 bit versions of decoders and validators.
|
| +for bits in ['32', '64']:
|
| + for automata in ['decoder', 'validator']:
|
| + env.ComponentLibrary('%s-x86_%s' % (automata, bits),
|
| + ['generated/%s-x86_%s.c' % (automata, bits)])
|
| +
|
| +env.ComponentProgram(
|
| + 'decoder-test',
|
| + ['unreviewed/decoder-test.c'],
|
| + EXTRA_LIBS=['decoder-x86_32', 'decoder-x86_64'])
|
| +
|
| +env.ComponentProgram(
|
| + 'validator-test',
|
| + ['unreviewed/validator-test.c'],
|
| + EXTRA_LIBS=['validator-x86_32', 'validator-x86_64'])
|
|
|