| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 | 2 |
| 3 # Copyright 2011 The Android Open Source Project | 3 # Copyright 2011 The Android Open Source Project |
| 4 # | 4 # |
| 5 # Use of this source code is governed by a BSD-style license that can be | 5 # Use of this source code is governed by a BSD-style license that can be |
| 6 # found in the LICENSE file. | 6 # found in the LICENSE file. |
| 7 | 7 |
| 8 # This script is a wrapper which invokes gyp with the correct --depth argument, | 8 # This script is a wrapper which invokes gyp with the correct --depth argument, |
| 9 # and supports the automatic regeneration of build files if all.gyp is | 9 # and supports the automatic regeneration of build files if all.gyp is |
| 10 # changed (Linux-only). | 10 # changed (Linux-only). |
| 11 | 11 |
| 12 import glob | 12 import glob |
| 13 import os | 13 import os |
| 14 import platform | 14 import platform |
| 15 import shlex | 15 import shlex |
| 16 import stat |
| 16 import sys | 17 import sys |
| 17 | 18 |
| 18 script_dir = os.path.abspath(os.path.dirname(__file__)) | 19 script_dir = os.path.abspath(os.path.dirname(__file__)) |
| 19 | 20 |
| 20 # Directory within which we can find the gyp source. | 21 # Directory within which we can find the gyp source. |
| 21 gyp_source_dir = os.path.join(script_dir, 'third_party', 'externals', 'gyp') | 22 gyp_source_dir = os.path.join(script_dir, 'third_party', 'externals', 'gyp') |
| 22 | 23 |
| 23 # Directory within which we can find most of Skia's gyp configuration files. | 24 # Directory within which we can find most of Skia's gyp configuration files. |
| 24 gyp_config_dir = os.path.join(script_dir, 'gyp') | 25 gyp_config_dir = os.path.join(script_dir, 'gyp') |
| 25 | 26 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 elif sys.platform.startswith('win'): | 84 elif sys.platform.startswith('win'): |
| 84 default_gyp_generators = 'ninja,msvs-ninja' | 85 default_gyp_generators = 'ninja,msvs-ninja' |
| 85 elif sys.platform.startswith('cygwin'): | 86 elif sys.platform.startswith('cygwin'): |
| 86 default_gyp_generators = 'ninja,msvs-ninja' | 87 default_gyp_generators = 'ninja,msvs-ninja' |
| 87 else: | 88 else: |
| 88 default_gyp_generators = 'ninja' | 89 default_gyp_generators = 'ninja' |
| 89 os.environ[ENVVAR_GYP_GENERATORS] = default_gyp_generators | 90 os.environ[ENVVAR_GYP_GENERATORS] = default_gyp_generators |
| 90 print ('%s environment variable not set, using default, %s' % | 91 print ('%s environment variable not set, using default, %s' % |
| 91 (ENVVAR_GYP_GENERATORS, default_gyp_generators)) | 92 (ENVVAR_GYP_GENERATORS, default_gyp_generators)) |
| 92 | 93 |
| 93 vs2013_runtime_dll_dirs = None | 94 vs_runtime_dll_dirs = None |
| 94 if os.getenv('CHROME_HEADLESS', '0') == '1': | 95 if os.getenv('CHROME_HEADLESS', '0') == '1': |
| 95 if sys.platform.startswith('win') or sys.platform.startswith('cygwin'): | 96 if sys.platform.startswith('win') or sys.platform.startswith('cygwin'): |
| 96 chrome_path = os.getenv('CHROME_PATH') | 97 chrome_path = os.getenv('CHROME_PATH') |
| 97 os.chdir(chrome_path) | 98 os.chdir(chrome_path) |
| 98 sys.path.append(os.path.join(chrome_path, 'build')) | 99 sys.path.append(os.path.join(chrome_path, 'build')) |
| 99 sys.path.append(os.path.join(chrome_path, 'tools')) | 100 sys.path.append(os.path.join(chrome_path, 'tools')) |
| 100 import vs_toolchain | 101 import vs_toolchain |
| 101 vs2013_runtime_dll_dirs = \ | 102 vs_runtime_dll_dirs = \ |
| 102 vs_toolchain.SetEnvironmentAndGetRuntimeDllDirs() | 103 vs_toolchain.SetEnvironmentAndGetRuntimeDllDirs() |
| 103 | 104 |
| 104 # Set CWD to the directory containing this script. | 105 # Set CWD to the directory containing this script. |
| 105 # This allows us to launch it from other directories, in spite of gyp's | 106 # This allows us to launch it from other directories, in spite of gyp's |
| 106 # finickyness about the current working directory. | 107 # finickyness about the current working directory. |
| 107 # See http://b.corp.google.com/issue?id=5019517 ('Linux make build | 108 # See http://b.corp.google.com/issue?id=5019517 ('Linux make build |
| 108 # (from out dir) no longer runs skia_gyp correctly') | 109 # (from out dir) no longer runs skia_gyp correctly') |
| 109 os.chdir(os.path.abspath(script_dir)) | 110 os.chdir(os.path.abspath(script_dir)) |
| 110 | 111 |
| 111 # This could give false positives since it doesn't actually do real option | 112 # This could give false positives since it doesn't actually do real option |
| 112 # parsing. Oh well. | 113 # parsing. Oh well. |
| 113 gyp_file_specified = False | 114 gyp_file_specified = False |
| 114 for arg in args: | 115 for arg in args: |
| 115 if arg.endswith('.gyp'): | 116 if arg.endswith('.gyp'): |
| 116 gyp_file_specified = True | 117 gyp_file_specified = True |
| 117 break | 118 break |
| 118 | 119 |
| 119 # If we didn't get a file, then fall back to assuming 'skia.gyp' from the | 120 # If we didn't get a file, then fall back to assuming 'skia.gyp' from the |
| 120 # same directory as the script. | 121 # same directory as the script. |
| 121 # The gypfile must be passed as a relative path, not an absolute path, | 122 # The gypfile must be passed as a relative path, not an absolute path, |
| 122 # or else the gyp code doesn't write into the proper output dir. | 123 # or else the gyp code doesn't write into the proper output dir. |
| 123 if not gyp_file_specified: | 124 if not gyp_file_specified: |
| 124 args.append('skia.gyp') | 125 args.append('skia.gyp') |
| 125 | 126 |
| 126 args.extend(['-I' + i for i in additional_include_files(args)]) | 127 args.extend(['-I' + i for i in additional_include_files(args)]) |
| 127 args.extend(['--depth', '.']) | 128 args.extend(['--depth', '.']) |
| 128 | 129 |
| 129 # Tell gyp to write the build files into output_dir. | 130 # Tell gyp to write the build files into output_dir. |
| 130 args.extend(['--generator-output', os.path.abspath(get_output_dir())]) | 131 out_dir = os.path.abspath(get_output_dir()) |
| 132 args.extend(['--generator-output', out_dir]) |
| 131 | 133 |
| 132 # Tell ninja to write its output into the same directory. | 134 # Tell ninja to write its output into the same directory. |
| 133 args.extend(['-Goutput_dir=%s' % gyp_output_dir]) | 135 args.extend(['-Goutput_dir=%s' % gyp_output_dir]) |
| 134 | 136 |
| 135 # By default, we build 'most' instead of 'all' or 'everything'. See skia.gyp. | 137 # By default, we build 'most' instead of 'all' or 'everything'. See skia.gyp. |
| 136 args.extend(['-Gdefault_target=most']) | 138 args.extend(['-Gdefault_target=most']) |
| 137 | 139 |
| 138 # Fail if any files specified in the project are missing | 140 # Fail if any files specified in the project are missing |
| 139 if sys.platform.startswith('win'): | 141 if sys.platform.startswith('win'): |
| 140 gyp_generator_flags = os.getenv(ENVVAR_GYP_GENERATOR_FLAGS, '') | 142 gyp_generator_flags = os.getenv(ENVVAR_GYP_GENERATOR_FLAGS, '') |
| (...skipping 10 matching lines...) Expand all Loading... |
| 151 args.remove('--dry-run') | 153 args.remove('--dry-run') |
| 152 print gyp_source_dir, ' '.join(args) | 154 print gyp_source_dir, ' '.join(args) |
| 153 else: | 155 else: |
| 154 # Off we go... | 156 # Off we go... |
| 155 res = gyp.main(args) | 157 res = gyp.main(args) |
| 156 if res: | 158 if res: |
| 157 sys.exit(res) | 159 sys.exit(res) |
| 158 | 160 |
| 159 # This code is copied from Chrome's build/gyp_chromium. It's not clear why | 161 # This code is copied from Chrome's build/gyp_chromium. It's not clear why |
| 160 # the *_runtime variables are reversed. | 162 # the *_runtime variables are reversed. |
| 161 if vs2013_runtime_dll_dirs: | 163 if vs_runtime_dll_dirs: |
| 162 x64_runtime, x86_runtime = vs2013_runtime_dll_dirs | 164 # The DLLs might be read-only, which will cause an error when attempting to |
| 165 # overwrite them. Make them writeable first. |
| 166 for path, dirs, files in os.walk(out_dir): |
| 167 for f in files: |
| 168 if f.endswith('.dll'): |
| 169 os.chmod(os.path.join(path, f), stat.S_IWRITE) |
| 170 |
| 171 x64_runtime, x86_runtime = vs_runtime_dll_dirs |
| 163 vs_toolchain.CopyVsRuntimeDlls( | 172 vs_toolchain.CopyVsRuntimeDlls( |
| 164 os.path.join(os.getenv('CHROME_PATH'), get_output_dir()), | 173 os.path.join(os.getenv('CHROME_PATH'), out_dir), |
| 165 (x86_runtime, x64_runtime)) | 174 (x86_runtime, x64_runtime)) |
| OLD | NEW |