| # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
 | # Use of this source code is governed by a BSD-style license that can be | 
 | # found in the LICENSE file. | 
 |  | 
 | # The yasm build process creates a slew of small C subprograms that | 
 | # dynamically generate files at various point in the build process.  This makes | 
 | # the build integration moderately complex. | 
 | # | 
 | # There are three classes of dynamically generated files: | 
 | #   1) C source files that should be included in the build (eg., lc3bid.c) | 
 | #   2) C source files that are #included by static C sources (eg., license.c) | 
 | #   3) Intermediate files that are used as input by other subprograms to | 
 | #      further generate files in category #1 or #2.  (eg., version.mac) | 
 | # | 
 | # This structure is represented with the following targets: | 
 | #   1) yasm -- Sources, flags for the main yasm executable. Also has most of | 
 | #              of the actions and rules that invoke the subprograms. | 
 | #   2) config_sources -- Checked in version of files generated by manually | 
 | #                        running configure that are used by all binaries. | 
 | #   3) generate_files -- Actions and rules for files of type #3. | 
 | #   4) genperf_libs -- Object files shared between yasm and the genperf | 
 | #                      subprogram. | 
 | #   5) genmacro, genmodule, etc. -- One executable target for each subprogram. | 
 | # | 
 | # You will notice that a lot of the action targets seem very similar -- | 
 | # especially for genmacro invocations. This makes it seem like they should | 
 | # be a rule. The problem is that the correct invocation cannot be inferred | 
 | # purely from the file name, or extension.  Nor is it obvious whether the | 
 | # output should be processed as a source or not.  Thus, we are left with a | 
 | # large amount of repetitive code. | 
 |  | 
 | { | 
 |   'variables': { | 
 |     'yasm_include_dirs': [ | 
 |       'source/config/<(OS)', | 
 |       'source/patched-yasm', | 
 |     ], | 
 |  | 
 |     # The cflags used by any target that will be directly linked into yasm. | 
 |     # These are specifically not used when building the subprograms.  While | 
 |     # it would probably be safe to use these flags there as well, the | 
 |     # ./configure based build does not use the same flags between the main | 
 |     # yasm executable, and its subprograms. | 
 |     'yasm_defines': ['HAVE_CONFIG_H'], | 
 |     'yasm_cflags': [ | 
 |       '-std=gnu99', | 
 |       '-ansi', | 
 |       '-pedantic', | 
 |     ], | 
 |  | 
 |     # Locations for various generated artifacts. | 
 |     'shared_generated_dir': '<(SHARED_INTERMEDIATE_DIR)/third_party/yasm', | 
 |     'generated_dir': '<(INTERMEDIATE_DIR)/third_party/yasm', | 
 |  | 
 |     # Various files referenced by multiple targets. | 
 |     'version_file': 'version.mac',  # Generated by genversion. | 
 |     'genmodule_source': 'genmodule_outfile.c', | 
 |   }, | 
 |   'target_defaults': { | 
 |     # Silence warnings in libc++ builds (C code doesn't need this flag). | 
 |     'ldflags!': [ '-stdlib=libc++', ], | 
 |   }, | 
 |   'targets': [ | 
 |     { | 
 |       'target_name': 'yasm', | 
 |       'type': 'executable', | 
 |       'toolsets': ['host'], | 
 |       'dependencies': [ | 
 |         'config_sources', | 
 |         'genmacro', | 
 |         'genmodule', | 
 |         'genperf', | 
 |         'genperf_libs', | 
 |         'generate_files',  # Needed to generate gperf and instruction files. | 
 |         'genstring', | 
 |         're2c', | 
 |       ], | 
 |       'variables': { | 
 |         'clang_warning_flags': [ | 
 |           # yasm passes a `const elf_machine_sym*` through `void*`. | 
 |           '-Wno-incompatible-pointer-types', | 
 |         ], | 
 |       }, | 
 |       'conditions': [ | 
 |         ['OS=="win"', { | 
 |           # As of VS 2013 Update 3, building this project with /analyze hits an | 
 |           # internal compiler error on elf-x86-amd64.c in release builds with | 
 |           # the amd64_x86 compiler. This halts the build and prevents subsequent | 
 |           # analysis. Therefore, /analyze is disabled for this project. See this | 
 |           # bug for details: | 
 |           # https://connect.microsoft.com/VisualStudio/feedback/details/1014799/internal-compiler-error-when-using-analyze | 
 |           'msvs_settings': { | 
 |             'VCCLCompilerTool': { | 
 |               'AdditionalOptions!': [ '/analyze' ] | 
 |             }, | 
 |           }, | 
 |         }], | 
 |       ], | 
 |       'sources': [ | 
 |          'source/patched-yasm/frontends/yasm/yasm-options.c', | 
 |          'source/patched-yasm/frontends/yasm/yasm.c', | 
 |          'source/patched-yasm/libyasm/assocdat.c', | 
 |          'source/patched-yasm/libyasm/bc-align.c', | 
 |          'source/patched-yasm/libyasm/bc-data.c', | 
 |          'source/patched-yasm/libyasm/bc-incbin.c', | 
 |          'source/patched-yasm/libyasm/bc-org.c', | 
 |          'source/patched-yasm/libyasm/bc-reserve.c', | 
 |          'source/patched-yasm/libyasm/bitvect.c', | 
 |          'source/patched-yasm/libyasm/bytecode.c', | 
 |          'source/patched-yasm/libyasm/errwarn.c', | 
 |          'source/patched-yasm/libyasm/expr.c', | 
 |          'source/patched-yasm/libyasm/file.c', | 
 |          'source/patched-yasm/libyasm/floatnum.c', | 
 |          'source/patched-yasm/libyasm/hamt.c', | 
 |          'source/patched-yasm/libyasm/insn.c', | 
 |          'source/patched-yasm/libyasm/intnum.c', | 
 |          'source/patched-yasm/libyasm/inttree.c', | 
 |          'source/patched-yasm/libyasm/linemap.c', | 
 |          'source/patched-yasm/libyasm/md5.c', | 
 |          'source/patched-yasm/libyasm/mergesort.c', | 
 |          'source/patched-yasm/libyasm/section.c', | 
 |          'source/patched-yasm/libyasm/strcasecmp.c', | 
 |          'source/patched-yasm/libyasm/strsep.c', | 
 |          'source/patched-yasm/libyasm/symrec.c', | 
 |          'source/patched-yasm/libyasm/valparam.c', | 
 |          'source/patched-yasm/libyasm/value.c', | 
 |          'source/patched-yasm/modules/arch/lc3b/lc3barch.c', | 
 |          'source/patched-yasm/modules/arch/lc3b/lc3bbc.c', | 
 |          'source/patched-yasm/modules/arch/x86/x86arch.c', | 
 |          'source/patched-yasm/modules/arch/x86/x86bc.c', | 
 |          'source/patched-yasm/modules/arch/x86/x86expr.c', | 
 |          'source/patched-yasm/modules/arch/x86/x86id.c', | 
 |          'source/patched-yasm/modules/dbgfmts/codeview/cv-dbgfmt.c', | 
 |          'source/patched-yasm/modules/dbgfmts/codeview/cv-symline.c', | 
 |          'source/patched-yasm/modules/dbgfmts/codeview/cv-type.c', | 
 |          'source/patched-yasm/modules/dbgfmts/dwarf2/dwarf2-aranges.c', | 
 |          'source/patched-yasm/modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c', | 
 |          'source/patched-yasm/modules/dbgfmts/dwarf2/dwarf2-info.c', | 
 |          'source/patched-yasm/modules/dbgfmts/dwarf2/dwarf2-line.c', | 
 |          'source/patched-yasm/modules/dbgfmts/null/null-dbgfmt.c', | 
 |          'source/patched-yasm/modules/dbgfmts/stabs/stabs-dbgfmt.c', | 
 |          'source/patched-yasm/modules/listfmts/nasm/nasm-listfmt.c', | 
 |          'source/patched-yasm/modules/objfmts/bin/bin-objfmt.c', | 
 |          'source/patched-yasm/modules/objfmts/coff/coff-objfmt.c', | 
 |          'source/patched-yasm/modules/objfmts/coff/win64-except.c', | 
 |          'source/patched-yasm/modules/objfmts/dbg/dbg-objfmt.c', | 
 |          'source/patched-yasm/modules/objfmts/elf/elf-objfmt.c', | 
 |          'source/patched-yasm/modules/objfmts/elf/elf-x86-amd64.c', | 
 |          'source/patched-yasm/modules/objfmts/elf/elf-x86-x86.c', | 
 |          'source/patched-yasm/modules/objfmts/elf/elf.c', | 
 |          'source/patched-yasm/modules/objfmts/macho/macho-objfmt.c', | 
 |          'source/patched-yasm/modules/objfmts/rdf/rdf-objfmt.c', | 
 |          'source/patched-yasm/modules/objfmts/xdf/xdf-objfmt.c', | 
 |          'source/patched-yasm/modules/parsers/gas/gas-parse.c', | 
 |          'source/patched-yasm/modules/parsers/gas/gas-parse-intel.c', | 
 |          'source/patched-yasm/modules/parsers/gas/gas-parser.c', | 
 |          'source/patched-yasm/modules/parsers/nasm/nasm-parse.c', | 
 |          'source/patched-yasm/modules/parsers/nasm/nasm-parser.c', | 
 |          'source/patched-yasm/modules/preprocs/cpp/cpp-preproc.c', | 
 |          'source/patched-yasm/modules/preprocs/nasm/nasm-eval.c', | 
 |          'source/patched-yasm/modules/preprocs/nasm/nasm-pp.c', | 
 |          'source/patched-yasm/modules/preprocs/nasm/nasm-preproc.c', | 
 |          'source/patched-yasm/modules/preprocs/nasm/nasmlib.c', | 
 |          'source/patched-yasm/modules/preprocs/raw/raw-preproc.c', | 
 |  | 
 |          # Sources needed by re2c. | 
 |          'source/patched-yasm/modules/parsers/gas/gas-token.re', | 
 |          'source/patched-yasm/modules/parsers/nasm/nasm-token.re', | 
 |  | 
 |          # Sources needed by genperf. Make sure the generated gperf files | 
 |          # (the ones in shared_generated_dir) are synced with the outputs | 
 |          # for the related generate_*_insn actions in the generate_files | 
 |          # target below. | 
 |          '<(shared_generated_dir)/x86insn_nasm.gperf', | 
 |          '<(shared_generated_dir)/x86insn_gas.gperf', | 
 |          '<(shared_generated_dir)/x86cpu.c', | 
 |          '<(shared_generated_dir)/x86regtmod.c', | 
 |       ], | 
 |       'include_dirs': [ | 
 |         '<@(yasm_include_dirs)', | 
 |         '<(shared_generated_dir)', | 
 |         '<(generated_dir)', | 
 |       ], | 
 |       'defines': [ '<@(yasm_defines)' ], | 
 |       'cflags': [ '<@(yasm_cflags)', ], | 
 |       'msvs_disabled_warnings': [ 4267 ], | 
 |       'rules': [ | 
 |         { | 
 |           'rule_name': 'generate_gperf', | 
 |           'extension': 'gperf', | 
 |           'inputs': [ '<(PRODUCT_DIR)/' | 
 |                       '<(EXECUTABLE_PREFIX)genperf<(EXECUTABLE_SUFFIX)' ], | 
 |           'outputs': [ | 
 |             '<(generated_dir)/<(RULE_INPUT_ROOT).c', | 
 |           ], | 
 |           'action': ['<(PRODUCT_DIR)/genperf', | 
 |                      '<(RULE_INPUT_PATH)', | 
 |                      '<(generated_dir)/<(RULE_INPUT_ROOT).c', | 
 |           ], | 
 |           # These files are #included, so do not treat them as sources. | 
 |           'process_outputs_as_sources': 0, | 
 |           'message': 'yasm gperf for <(RULE_INPUT_PATH)', | 
 |         }, | 
 |         { | 
 |           'rule_name': 'generate_re2c', | 
 |           'extension': 're', | 
 |           'inputs': [ '<(PRODUCT_DIR)/' | 
 |                       '<(EXECUTABLE_PREFIX)re2c<(EXECUTABLE_SUFFIX)' ], | 
 |           'outputs': [ '<(generated_dir)/<(RULE_INPUT_ROOT).c', ], | 
 |           'action': [ | 
 |             '<(PRODUCT_DIR)/re2c', | 
 |             '-b', | 
 |             '-o', | 
 |             '<(generated_dir)/<(RULE_INPUT_ROOT).c', | 
 |             '<(RULE_INPUT_PATH)', | 
 |           ], | 
 |           'process_outputs_as_sources': 1, | 
 |           'message': 'yasm re2c for <(RULE_INPUT_PATH)', | 
 |         }, | 
 |       ], | 
 |       'actions': [ | 
 |         ### | 
 |         ###  genmacro calls. | 
 |         ### | 
 |         { | 
 |           'action_name': 'generate_nasm_macros', | 
 |           'variables': { | 
 |             'infile': 'source/patched-yasm/modules/parsers/nasm/nasm-std.mac', | 
 |             'varname': 'nasm_standard_mac', | 
 |             'outfile': '<(generated_dir)/nasm-macros.c', | 
 |           }, | 
 |           'inputs': [ '<(PRODUCT_DIR)/' | 
 |                       '<(EXECUTABLE_PREFIX)genmacro<(EXECUTABLE_SUFFIX)', | 
 |                       '<(infile)', ], | 
 |           'outputs': [ '<(outfile)', ], | 
 |           'action': ['<(PRODUCT_DIR)/genmacro', | 
 |                      '<(outfile)', '<(varname)', '<(infile)', ], | 
 |            # Not a direct source because this is #included by | 
 |            #   source/patched-yasm/modules/parsers/nasm/nasm-parser.c | 
 |           'process_outputs_as_sources': 1, | 
 |           'message': 'yasm genmacro for <(infile)', | 
 |         }, | 
 |         { | 
 |           'action_name': 'generate_nasm_version', | 
 |           'variables': { | 
 |             'infile': '<(shared_generated_dir)/<(version_file)', | 
 |             'varname': 'nasm_version_mac', | 
 |             'outfile': '<(generated_dir)/nasm-version.c', | 
 |           }, | 
 |           'inputs': [ '<(PRODUCT_DIR)/' | 
 |                       '<(EXECUTABLE_PREFIX)genmacro<(EXECUTABLE_SUFFIX)', | 
 |                       '<(infile)', ], | 
 |           'outputs': [ '<(outfile)', ], | 
 |           'action': ['<(PRODUCT_DIR)/genmacro', | 
 |                      '<(outfile)', '<(varname)', '<(infile)', | 
 |           ], | 
 |            # Not a direct source because this is #included by | 
 |            #   source/patched-yasm/modules/preprocs/nasm/nasm-preproc.c | 
 |           'process_outputs_as_sources': 0, | 
 |           'message': 'yasm genmacro for <(infile)', | 
 |         }, | 
 |         { | 
 |           'action_name': 'generate_win64_gas', | 
 |           'variables': { | 
 |             'infile': 'source/patched-yasm/modules/objfmts/coff/win64-gas.mac', | 
 |             'varname': 'win64_gas_stdmac', | 
 |             'outfile': '<(generated_dir)/win64-gas.c', | 
 |           }, | 
 |           'inputs': [ '<(PRODUCT_DIR)/' | 
 |                       '<(EXECUTABLE_PREFIX)genmacro<(EXECUTABLE_SUFFIX)', | 
 |                       '<(infile)', ], | 
 |           'outputs': [ '<(outfile)', ], | 
 |           'action': ['<(PRODUCT_DIR)/genmacro', | 
 |                      '<(outfile)', '<(varname)', '<(infile)', | 
 |           ], | 
 |            # Not a direct source because this is #included by | 
 |            #   source/patched-yasm/modules/objfmts/coff/coff-objfmt.c | 
 |           'process_outputs_as_sources': 0, | 
 |           'message': 'yasm genmacro for <(infile)', | 
 |         }, | 
 |         { | 
 |           'action_name': 'generate_win64_nasm', | 
 |           'variables': { | 
 |             'infile': 'source/patched-yasm/modules/objfmts/coff/win64-nasm.mac', | 
 |             'varname': 'win64_nasm_stdmac', | 
 |             'outfile': '<(generated_dir)/win64-nasm.c', | 
 |           }, | 
 |           'inputs': [ '<(PRODUCT_DIR)/' | 
 |                       '<(EXECUTABLE_PREFIX)genmacro<(EXECUTABLE_SUFFIX)', | 
 |                       '<(infile)', ], | 
 |           'outputs': [ '<(outfile)', ], | 
 |           'action': ['<(PRODUCT_DIR)/genmacro', | 
 |                      '<(outfile)', | 
 |                      '<(varname)', | 
 |                      '<(infile)', | 
 |           ], | 
 |            # Not a direct source because this is #included by | 
 |            #   source/patched-yasm/modules/objfmts/coff/coff-objfmt.c | 
 |           'process_outputs_as_sources': 0, | 
 |           'message': 'yasm genmacro for <(infile)', | 
 |         }, | 
 |  | 
 |         ### | 
 |         ###  genstring call. | 
 |         ### | 
 |         { | 
 |           'action_name': 'generate_license', | 
 |           'variables': { | 
 |             'infile': 'source/patched-yasm/COPYING', | 
 |             'varname': 'license_msg', | 
 |             'outfile': '<(generated_dir)/license.c', | 
 |           }, | 
 |           'inputs': [ '<(PRODUCT_DIR)/' | 
 |                       '<(EXECUTABLE_PREFIX)genstring<(EXECUTABLE_SUFFIX)', | 
 |                       '<(infile)', ], | 
 |           'outputs': [ '<(outfile)', ], | 
 |           'action': ['<(PRODUCT_DIR)/genstring', | 
 |                      '<(varname)', | 
 |                      '<(outfile)', | 
 |                      '<(infile)', | 
 |           ], | 
 |           # Not a direct source because this is #included by | 
 |           #   source/patched-yasm/frontends/yasm/yasm.c | 
 |           'process_outputs_as_sources': 0, | 
 |           'message': 'Generating yasm embeddable license', | 
 |         }, | 
 |  | 
 |         ### | 
 |         ###  A re2c call that doesn't fit into the rule below. | 
 |         ### | 
 |         { | 
 |           'action_name': 'generate_lc3b_token', | 
 |           'variables': { | 
 |             'infile': 'source/patched-yasm/modules/arch/lc3b/lc3bid.re', | 
 |             # The license file is #included by yasm.c. | 
 |             'outfile': '<(generated_dir)/lc3bid.c', | 
 |           }, | 
 |           'inputs': [ '<(PRODUCT_DIR)/' | 
 |                       '<(EXECUTABLE_PREFIX)re2c<(EXECUTABLE_SUFFIX)', | 
 |                       '<(infile)', ], | 
 |           'outputs': [ '<(outfile)', ], | 
 |           'action': [ | 
 |             '<(PRODUCT_DIR)/re2c', | 
 |             '-s', | 
 |             '-o', '<(outfile)', | 
 |             '<(infile)' | 
 |           ], | 
 |           'process_outputs_as_sources': 1, | 
 |           'message': 'Generating yasm tokens for lc3b', | 
 |         }, | 
 |  | 
 |         ### | 
 |         ###  genmodule call. | 
 |         ### | 
 |         { | 
 |           'action_name': 'generate_module', | 
 |           'variables': { | 
 |             'makefile': 'source/config/<(OS)/Makefile', | 
 |             'module_in': 'source/patched-yasm/libyasm/module.in', | 
 |             'outfile': '<(generated_dir)/module.c', | 
 |           }, | 
 |           'inputs': [ | 
 |             '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)genmodule<(EXECUTABLE_SUFFIX)', | 
 |             '<(module_in)', | 
 |             '<(makefile)' | 
 |           ], | 
 |           'outputs': [ '<(generated_dir)/module.c' ], | 
 |           'action': [ | 
 |             '<(PRODUCT_DIR)/genmodule', | 
 |             '<(module_in)', | 
 |             '<(makefile)', | 
 |             '<(outfile)' | 
 |           ], | 
 |           'process_outputs_as_sources': 1, | 
 |           'message': 'Generating yasm module information', | 
 |         }, | 
 |       ], | 
 |     }, | 
 |     { | 
 |       'target_name': 'config_sources', | 
 |       'type': 'none', | 
 |       'toolsets': ['host'], | 
 |       'sources': [ | 
 |         'source/config/<(OS)/Makefile', | 
 |         'source/config/<(OS)/config.h', | 
 |         'source/config/<(OS)/libyasm-stdint.h', | 
 |       ], | 
 |     }, | 
 |     { | 
 |       'target_name': 'generate_files', | 
 |       'type': 'none', | 
 |       'toolsets': ['host'], | 
 |       'dependencies': [ | 
 |         'genperf', | 
 |         'genversion', | 
 |       ], | 
 |       'sources': [ | 
 |          'source/patched-yasm/modules/arch/x86/x86cpu.gperf', | 
 |          'source/patched-yasm/modules/arch/x86/x86regtmod.gperf', | 
 |       ], | 
 |       'rules': [ | 
 |         { | 
 |           'rule_name': 'generate_gperf', | 
 |           'extension': 'gperf', | 
 |           'inputs': [ '<(PRODUCT_DIR)/' | 
 |                       '<(EXECUTABLE_PREFIX)genperf<(EXECUTABLE_SUFFIX)' ], | 
 |           'outputs': [ '<(shared_generated_dir)/<(RULE_INPUT_ROOT).c', ], | 
 |           'action': [ | 
 |             '<(PRODUCT_DIR)/genperf', | 
 |             '<(RULE_INPUT_PATH)', | 
 |             '<(shared_generated_dir)/<(RULE_INPUT_ROOT).c', | 
 |           ], | 
 |           'process_outputs_as_sources': 0, | 
 |           'message': 'yasm genperf for <(RULE_INPUT_PATH)', | 
 |         }, | 
 |       ], | 
 |       'actions': [ | 
 |         { | 
 |           'action_name': 'generate_x86_insn', | 
 |           'variables': { | 
 |             'gen_insn_path': | 
 |                 'source/patched-yasm/modules/arch/x86/gen_x86_insn.py', | 
 |           }, | 
 |           'inputs': [ '<(gen_insn_path)', ], | 
 |           'outputs': [ | 
 |             '<(shared_generated_dir)/x86insns.c', | 
 |             '<(shared_generated_dir)/x86insn_gas.gperf', | 
 |             '<(shared_generated_dir)/x86insn_nasm.gperf', | 
 |           ], | 
 |           'action': [ | 
 |             'python', | 
 |             '<(gen_insn_path)', | 
 |             '<(shared_generated_dir)', | 
 |           ], | 
 |           'message': 'Running <(gen_insn_path)', | 
 |           'process_outputs_as_sources': 0, | 
 |         }, | 
 |         { | 
 |           'action_name': 'generate_version', | 
 |           'inputs': [ '<(PRODUCT_DIR)/' | 
 |                       '<(EXECUTABLE_PREFIX)genversion<(EXECUTABLE_SUFFIX)' ], | 
 |           'outputs': [ '<(shared_generated_dir)/<(version_file)', ], | 
 |           'action': [ | 
 |             '<(PRODUCT_DIR)/genversion', | 
 |             '<(shared_generated_dir)/<(version_file)' | 
 |           ], | 
 |           'message': 'Generating yasm version file: ' | 
 |                      '<(shared_generated_dir)/<(version_file)', | 
 |           'process_outputs_as_sources': 0, | 
 |         }, | 
 |       ], | 
 |     }, | 
 |     { | 
 |       'target_name': 'genperf_libs', | 
 |       'type': 'static_library', | 
 |       'toolsets': ['host'], | 
 |       'dependencies': [ 'config_sources', ], | 
 |       'sources': [ | 
 |          'source/patched-yasm/libyasm/phash.c', | 
 |          'source/patched-yasm/libyasm/xmalloc.c', | 
 |          'source/patched-yasm/libyasm/xstrdup.c', | 
 |       ], | 
 |       'include_dirs': [ | 
 |         '<@(yasm_include_dirs)', | 
 |       ], | 
 |       'defines': [ '<@(yasm_defines)' ], | 
 |       'cflags': [ | 
 |         '<@(yasm_cflags)', | 
 |       ], | 
 |     }, | 
 |     { | 
 |       'target_name': 'genstring', | 
 |       'type': 'executable', | 
 |       'toolsets': ['host'], | 
 |       'dependencies': [ 'config_sources', ], | 
 |       'sources': [ | 
 |          'source/patched-yasm/genstring.c', | 
 |       ], | 
 |       'include_dirs': [ | 
 |         '<@(yasm_include_dirs)', | 
 |       ], | 
 |       'cflags': [ | 
 |         '-std=gnu99', | 
 |       ], | 
 |     }, | 
 |     { | 
 |       'target_name': 'genperf', | 
 |       'type': 'executable', | 
 |       'toolsets': ['host'], | 
 |       'dependencies': [ | 
 |         'genperf_libs', | 
 |       ], | 
 |       'sources': [ | 
 |          'source/patched-yasm/tools/genperf/genperf.c', | 
 |          'source/patched-yasm/tools/genperf/perfect.c', | 
 |       ], | 
 |       'include_dirs': [ | 
 |         '<@(yasm_include_dirs)', | 
 |       ], | 
 |       'cflags': [ | 
 |         '-std=gnu99', | 
 |       ], | 
 |     }, | 
 |     { | 
 |       'target_name': 'genmacro', | 
 |       'type': 'executable', | 
 |       'toolsets': ['host'], | 
 |       'dependencies': [ 'config_sources', ], | 
 |       'sources': [ | 
 |         'source/patched-yasm/tools/genmacro/genmacro.c', | 
 |       ], | 
 |       'include_dirs': [ | 
 |         '<@(yasm_include_dirs)', | 
 |       ], | 
 |       'cflags': [ | 
 |         '-std=gnu99', | 
 |       ], | 
 |     }, | 
 |     { | 
 |       'target_name': 'genversion', | 
 |       'type': 'executable', | 
 |       'toolsets': ['host'], | 
 |       'dependencies': [ 'config_sources', ], | 
 |       'sources': [ | 
 |          'source/patched-yasm/modules/preprocs/nasm/genversion.c', | 
 |       ], | 
 |       'include_dirs': [ | 
 |         '<@(yasm_include_dirs)', | 
 |       ], | 
 |       'cflags': [ | 
 |         '-std=gnu99', | 
 |       ], | 
 |     }, | 
 |     { | 
 |       'target_name': 're2c', | 
 |       'type': 'executable', | 
 |       'toolsets': ['host'], | 
 |       'dependencies': [ 'config_sources', ], | 
 |       'sources': [ | 
 |          'source/patched-yasm/tools/re2c/main.c', | 
 |          'source/patched-yasm/tools/re2c/code.c', | 
 |          'source/patched-yasm/tools/re2c/dfa.c', | 
 |          'source/patched-yasm/tools/re2c/parser.c', | 
 |          'source/patched-yasm/tools/re2c/actions.c', | 
 |          'source/patched-yasm/tools/re2c/scanner.c', | 
 |          'source/patched-yasm/tools/re2c/mbo_getopt.c', | 
 |          'source/patched-yasm/tools/re2c/substr.c', | 
 |          'source/patched-yasm/tools/re2c/translate.c', | 
 |       ], | 
 |       'include_dirs': [ | 
 |         '<@(yasm_include_dirs)', | 
 |       ], | 
 |       'cflags': [ | 
 |         '-std=gnu99', | 
 |       ], | 
 |       'variables': { | 
 |           # re2c is missing CLOSEVOP from one switch. | 
 |         'clang_warning_flags': [ '-Wno-switch' ], | 
 |       }, | 
 |       'msvs_disabled_warnings': [ 4267 ], | 
 |     }, | 
 |     { | 
 |       'target_name': 'genmodule', | 
 |       'type': 'executable', | 
 |       'toolsets': ['host'], | 
 |       'dependencies': [ | 
 |         'config_sources', | 
 |       ], | 
 |       'sources': [ | 
 |         'source/patched-yasm/libyasm/genmodule.c', | 
 |       ], | 
 |       'include_dirs': [ | 
 |         '<@(yasm_include_dirs)', | 
 |  | 
 |       ], | 
 |       'cflags': [ | 
 |         '-std=gnu99', | 
 |       ], | 
 |     }, | 
 |   ], | 
 | } |