Chromium Code Reviews| 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(): | |
|
Michael Achenbach
2015/10/30 10:44:20
1:1 c/p from chromium
| |
| 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() | |
|
Michael Achenbach
2015/10/30 10:44:20
1:1 c/p from chromium
| |
| 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 |