| OLD | NEW | 
|    1 #!/usr/bin/env python |    1 #!/usr/bin/env python | 
|    2 # |    2 # | 
|    3 # Copyright 2012 the V8 project authors. All rights reserved. |    3 # Copyright 2012 the V8 project authors. All rights reserved. | 
|    4 # Redistribution and use in source and binary forms, with or without |    4 # Redistribution and use in source and binary forms, with or without | 
|    5 # modification, are permitted provided that the following conditions are |    5 # modification, are permitted provided that the following conditions are | 
|    6 # met: |    6 # met: | 
|    7 # |    7 # | 
|    8 #     * Redistributions of source code must retain the above copyright |    8 #     * Redistributions of source code must retain the above copyright | 
|    9 #       notice, this list of conditions and the following disclaimer. |    9 #       notice, this list of conditions and the following disclaimer. | 
|   10 #     * Redistributions in binary form must reproduce the above |   10 #     * Redistributions in binary form must reproduce the above | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|   23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |   23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
|   24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |   24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
|   25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |   25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
|   26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |   26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
|   27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |   27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
|   28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |   28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|   29  |   29  | 
|   30 # This script is wrapper for V8 that adds some support for how GYP |   30 # This script is wrapper for V8 that adds some support for how GYP | 
|   31 # is invoked by V8 beyond what can be done in the gclient hooks. |   31 # is invoked by V8 beyond what can be done in the gclient hooks. | 
|   32  |   32  | 
 |   33 import argparse | 
|   33 import glob |   34 import glob | 
|   34 import gyp_environment |   35 import gyp_environment | 
|   35 import os |   36 import os | 
|   36 import platform |   37 import platform | 
|   37 import shlex |   38 import shlex | 
|   38 import subprocess |   39 import subprocess | 
|   39 import sys |   40 import sys | 
 |   41 import vs_toolchain | 
|   40  |   42  | 
|   41 script_dir = os.path.dirname(os.path.realpath(__file__)) |   43 script_dir = os.path.dirname(os.path.realpath(__file__)) | 
|   42 v8_root = os.path.abspath(os.path.join(script_dir, os.pardir)) |   44 v8_root = os.path.abspath(os.path.join(script_dir, os.pardir)) | 
|   43  |   45  | 
|   44 sys.path.insert(0, os.path.join(v8_root, 'build', 'gyp', 'pylib')) |   46 sys.path.insert(0, os.path.join(v8_root, 'build', 'gyp', 'pylib')) | 
|   45 import gyp |   47 import gyp | 
|   46  |   48  | 
|   47 # Add paths so that pymod_do_main(...) can import files. |   49 # Add paths so that pymod_do_main(...) can import files. | 
|   48 sys.path.insert( |   50 sys.path.insert( | 
|   49     1, os.path.abspath(os.path.join(v8_root, 'tools', 'generate_shim_headers'))) |   51     1, os.path.abspath(os.path.join(v8_root, 'tools', 'generate_shim_headers'))) | 
|   50  |   52  | 
|   51  |   53  | 
 |   54 def GetOutputDirectory(): | 
 |   55   """Returns the output directory that GYP will use.""" | 
 |   56  | 
 |   57   # Handle command line generator flags. | 
 |   58   parser = argparse.ArgumentParser() | 
 |   59   parser.add_argument('-G', dest='genflags', default=[], action='append') | 
 |   60   genflags = parser.parse_known_args()[0].genflags | 
 |   61  | 
 |   62   # Handle generator flags from the environment. | 
 |   63   genflags += shlex.split(os.environ.get('GYP_GENERATOR_FLAGS', '')) | 
 |   64  | 
 |   65   needle = 'output_dir=' | 
 |   66   for item in genflags: | 
 |   67     if item.startswith(needle): | 
 |   68       return item[len(needle):] | 
 |   69  | 
 |   70   return 'out' | 
 |   71  | 
 |   72  | 
|   52 def additional_include_files(args=[]): |   73 def additional_include_files(args=[]): | 
|   53   """ |   74   """ | 
|   54   Returns a list of additional (.gypi) files to include, without |   75   Returns a list of additional (.gypi) files to include, without | 
|   55   duplicating ones that are already specified on the command line. |   76   duplicating ones that are already specified on the command line. | 
|   56   """ |   77   """ | 
|   57   # Determine the include files specified on the command line. |   78   # Determine the include files specified on the command line. | 
|   58   # This doesn't cover all the different option formats you can use, |   79   # This doesn't cover all the different option formats you can use, | 
|   59   # but it's mainly intended to avoid duplicating flags on the automatic |   80   # but it's mainly intended to avoid duplicating flags on the automatic | 
|   60   # makefile regeneration which only uses this format. |   81   # makefile regeneration which only uses this format. | 
|   61   specified_includes = set() |   82   specified_includes = set() | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|   75   supplements = glob.glob(os.path.join(v8_root, '*', 'supplement.gypi')) |   96   supplements = glob.glob(os.path.join(v8_root, '*', 'supplement.gypi')) | 
|   76   for supplement in supplements: |   97   for supplement in supplements: | 
|   77     AddInclude(supplement) |   98     AddInclude(supplement) | 
|   78  |   99  | 
|   79   return result |  100   return result | 
|   80  |  101  | 
|   81  |  102  | 
|   82 def run_gyp(args): |  103 def run_gyp(args): | 
|   83   rc = gyp.main(args) |  104   rc = gyp.main(args) | 
|   84  |  105  | 
 |  106   vs2013_runtime_dll_dirs = vs_toolchain.SetEnvironmentAndGetRuntimeDllDirs() | 
 |  107   if vs2013_runtime_dll_dirs: | 
 |  108     x64_runtime, x86_runtime = vs2013_runtime_dll_dirs | 
 |  109     vs_toolchain.CopyVsRuntimeDlls( | 
 |  110       os.path.join(v8_root, GetOutputDirectory()), | 
 |  111       (x86_runtime, x64_runtime)) | 
 |  112  | 
|   85   if rc != 0: |  113   if rc != 0: | 
|   86     print 'Error running GYP' |  114     print 'Error running GYP' | 
|   87     sys.exit(rc) |  115     sys.exit(rc) | 
|   88  |  116  | 
|   89  |  117  | 
|   90 if __name__ == '__main__': |  118 if __name__ == '__main__': | 
|   91   args = sys.argv[1:] |  119   args = sys.argv[1:] | 
|   92  |  120  | 
|   93   gyp_environment.set_environment() |  121   gyp_environment.set_environment() | 
|   94  |  122  | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
|  123   # to enfore syntax checking. |  151   # to enfore syntax checking. | 
|  124   syntax_check = os.environ.get('V8_GYP_SYNTAX_CHECK') |  152   syntax_check = os.environ.get('V8_GYP_SYNTAX_CHECK') | 
|  125   if syntax_check and int(syntax_check): |  153   if syntax_check and int(syntax_check): | 
|  126     args.append('--check') |  154     args.append('--check') | 
|  127  |  155  | 
|  128   print 'Updating projects from gyp files...' |  156   print 'Updating projects from gyp files...' | 
|  129   sys.stdout.flush() |  157   sys.stdout.flush() | 
|  130  |  158  | 
|  131   # Generate for the architectures supported on the given platform. |  159   # Generate for the architectures supported on the given platform. | 
|  132   gyp_args = list(args) |  160   gyp_args = list(args) | 
 |  161   gyp_args.extend(['-D', 'gyp_output_dir=' + GetOutputDirectory()]) | 
|  133   gyp_generators = os.environ.get('GYP_GENERATORS', '') |  162   gyp_generators = os.environ.get('GYP_GENERATORS', '') | 
|  134   if platform.system() == 'Linux' and gyp_generators != 'ninja': |  163   if platform.system() == 'Linux' and gyp_generators != 'ninja': | 
|  135     # Work around for crbug.com/331475. |  164     # Work around for crbug.com/331475. | 
|  136     for f in glob.glob(os.path.join(v8_root, 'out', 'Makefile.*')): |  165     for f in glob.glob(os.path.join(v8_root, 'out', 'Makefile.*')): | 
|  137       os.unlink(f) |  166       os.unlink(f) | 
|  138     # --generator-output defines where the Makefile goes. |  167     # --generator-output defines where the Makefile goes. | 
|  139     gyp_args.append('--generator-output=out') |  168     gyp_args.append('--generator-output=out') | 
|  140     # -Goutput_dir defines where the build output goes, relative to the |  169     # -Goutput_dir defines where the build output goes, relative to the | 
|  141     # Makefile. Set it to . so that the build output doesn't end up in out/out. |  170     # Makefile. Set it to . so that the build output doesn't end up in out/out. | 
|  142     gyp_args.append('-Goutput_dir=.') |  171     gyp_args.append('-Goutput_dir=.') | 
|  143  |  172  | 
|  144   gyp_defines = os.environ.get('GYP_DEFINES', '') |  173   gyp_defines = os.environ.get('GYP_DEFINES', '') | 
|  145  |  174  | 
|  146   # Automatically turn on crosscompile support for platforms that need it. |  175   # Automatically turn on crosscompile support for platforms that need it. | 
|  147   if all(('ninja' in gyp_generators, |  176   if all(('ninja' in gyp_generators, | 
|  148           'OS=android' in gyp_defines, |  177           'OS=android' in gyp_defines, | 
|  149           'GYP_CROSSCOMPILE' not in os.environ)): |  178           'GYP_CROSSCOMPILE' not in os.environ)): | 
|  150     os.environ['GYP_CROSSCOMPILE'] = '1' |  179     os.environ['GYP_CROSSCOMPILE'] = '1' | 
|  151  |  180  | 
|  152   run_gyp(gyp_args) |  181   run_gyp(gyp_args) | 
| OLD | NEW |