| OLD | NEW |
| 1 # Copyright (c) 2013 Google Inc. All rights reserved. | 1 # Copyright (c) 2013 Google Inc. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import copy | 5 import copy |
| 6 import hashlib | 6 import hashlib |
| 7 import json | 7 import json |
| 8 import multiprocessing | 8 import multiprocessing |
| 9 import os.path | 9 import os.path |
| 10 import re | 10 import re |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 'RULE_INPUT_DIRNAME': '${dirname}', | 51 'RULE_INPUT_DIRNAME': '${dirname}', |
| 52 'RULE_INPUT_PATH': '${source}', | 52 'RULE_INPUT_PATH': '${source}', |
| 53 'RULE_INPUT_EXT': '${ext}', | 53 'RULE_INPUT_EXT': '${ext}', |
| 54 'RULE_INPUT_NAME': '${name}', | 54 'RULE_INPUT_NAME': '${name}', |
| 55 } | 55 } |
| 56 | 56 |
| 57 # Placates pylint. | 57 # Placates pylint. |
| 58 generator_additional_non_configuration_keys = [] | 58 generator_additional_non_configuration_keys = [] |
| 59 generator_additional_path_sections = [] | 59 generator_additional_path_sections = [] |
| 60 generator_extra_sources_for_rules = [] | 60 generator_extra_sources_for_rules = [] |
| 61 generator_filelist_path = None |
| 61 | 62 |
| 62 # TODO: figure out how to not build extra host objects in the non-cross-compile | 63 # TODO: figure out how to not build extra host objects in the non-cross-compile |
| 63 # case when this is enabled, and enable unconditionally. | 64 # case when this is enabled, and enable unconditionally. |
| 64 generator_supports_multiple_toolsets = ( | 65 generator_supports_multiple_toolsets = ( |
| 65 os.environ.get('GYP_CROSSCOMPILE') or | 66 os.environ.get('GYP_CROSSCOMPILE') or |
| 66 os.environ.get('AR_host') or | 67 os.environ.get('AR_host') or |
| 67 os.environ.get('CC_host') or | 68 os.environ.get('CC_host') or |
| 68 os.environ.get('CXX_host') or | 69 os.environ.get('CXX_host') or |
| 69 os.environ.get('AR_target') or | 70 os.environ.get('AR_target') or |
| 70 os.environ.get('CC_target') or | 71 os.environ.get('CC_target') or |
| (...skipping 1380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1451 operating_system = flavor | 1452 operating_system = flavor |
| 1452 if flavor == 'android': | 1453 if flavor == 'android': |
| 1453 operating_system = 'linux' # Keep this legacy behavior for now. | 1454 operating_system = 'linux' # Keep this legacy behavior for now. |
| 1454 default_variables.setdefault('OS', operating_system) | 1455 default_variables.setdefault('OS', operating_system) |
| 1455 default_variables.setdefault('SHARED_LIB_SUFFIX', '.so') | 1456 default_variables.setdefault('SHARED_LIB_SUFFIX', '.so') |
| 1456 default_variables.setdefault('SHARED_LIB_DIR', | 1457 default_variables.setdefault('SHARED_LIB_DIR', |
| 1457 os.path.join('$!PRODUCT_DIR', 'lib')) | 1458 os.path.join('$!PRODUCT_DIR', 'lib')) |
| 1458 default_variables.setdefault('LIB_DIR', | 1459 default_variables.setdefault('LIB_DIR', |
| 1459 os.path.join('$!PRODUCT_DIR', 'obj')) | 1460 os.path.join('$!PRODUCT_DIR', 'obj')) |
| 1460 | 1461 |
| 1462 def ComputeOutputDir(params): |
| 1463 """Returns the path from the toplevel_dir to the build output directory.""" |
| 1464 # generator_dir: relative path from pwd to where make puts build files. |
| 1465 # Makes migrating from make to ninja easier, ninja doesn't put anything here. |
| 1466 generator_dir = os.path.relpath(params['options'].generator_output or '.') |
| 1467 |
| 1468 # output_dir: relative path from generator_dir to the build directory. |
| 1469 output_dir = params.get('generator_flags', {}).get('output_dir', 'out') |
| 1470 |
| 1471 # Relative path from source root to our output files. e.g. "out" |
| 1472 return os.path.normpath(os.path.join(generator_dir, output_dir)) |
| 1473 |
| 1474 |
| 1475 def CalculateGeneratorInputInfo(params): |
| 1476 """Called by __init__ to initialize generator values based on params.""" |
| 1477 # E.g. "out/gypfiles" |
| 1478 qualified_out_dir = os.path.normpath(os.path.join( |
| 1479 params['options'].toplevel_dir, ComputeOutputDir(params), 'gypfiles')) |
| 1480 |
| 1481 def gypfile_path(build_file_dir, name): |
| 1482 # build_file_dir is absolute, make it relative to toplevel |
| 1483 if os.path.isabs(build_file_dir): |
| 1484 build_file_dir = gyp.common.RelativePath(build_file_dir, toplevel) |
| 1485 name = os.path.join(qualified_out_dir, build_file_dir, name) |
| 1486 if not os.path.isdir(os.path.dirname(name)): |
| 1487 os.makedirs(os.path.dirname(name)) |
| 1488 return name |
| 1489 |
| 1490 global generator_filelist_path |
| 1491 generator_filelist_path = gypfile_path |
| 1492 |
| 1461 | 1493 |
| 1462 def OpenOutput(path, mode='w'): | 1494 def OpenOutput(path, mode='w'): |
| 1463 """Open |path| for writing, creating directories if necessary.""" | 1495 """Open |path| for writing, creating directories if necessary.""" |
| 1464 try: | 1496 try: |
| 1465 os.makedirs(os.path.dirname(path)) | 1497 os.makedirs(os.path.dirname(path)) |
| 1466 except OSError: | 1498 except OSError: |
| 1467 pass | 1499 pass |
| 1468 return open(path, mode) | 1500 return open(path, mode) |
| 1469 | 1501 |
| 1470 | 1502 |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1601 rspfile_content='$in_newline $libs $ldflags', | 1633 rspfile_content='$in_newline $libs $ldflags', |
| 1602 pool='link_pool') | 1634 pool='link_pool') |
| 1603 | 1635 |
| 1604 | 1636 |
| 1605 def GenerateOutputForConfig(target_list, target_dicts, data, params, | 1637 def GenerateOutputForConfig(target_list, target_dicts, data, params, |
| 1606 config_name): | 1638 config_name): |
| 1607 options = params['options'] | 1639 options = params['options'] |
| 1608 flavor = gyp.common.GetFlavor(params) | 1640 flavor = gyp.common.GetFlavor(params) |
| 1609 generator_flags = params.get('generator_flags', {}) | 1641 generator_flags = params.get('generator_flags', {}) |
| 1610 | 1642 |
| 1611 # generator_dir: relative path from pwd to where make puts build files. | |
| 1612 # Makes migrating from make to ninja easier, ninja doesn't put anything here. | |
| 1613 generator_dir = os.path.relpath(params['options'].generator_output or '.') | |
| 1614 | |
| 1615 # output_dir: relative path from generator_dir to the build directory. | |
| 1616 output_dir = generator_flags.get('output_dir', 'out') | |
| 1617 | |
| 1618 # build_dir: relative path from source root to our output files. | 1643 # build_dir: relative path from source root to our output files. |
| 1619 # e.g. "out/Debug" | 1644 # e.g. "out/Debug" |
| 1620 build_dir = os.path.normpath(os.path.join(generator_dir, | 1645 build_dir = os.path.normpath( |
| 1621 output_dir, | 1646 os.path.join(ComputeOutputDir(params), config_name)) |
| 1622 config_name)) | |
| 1623 | 1647 |
| 1624 toplevel_build = os.path.join(options.toplevel_dir, build_dir) | 1648 toplevel_build = os.path.join(options.toplevel_dir, build_dir) |
| 1625 | 1649 |
| 1626 master_ninja = ninja_syntax.Writer( | 1650 master_ninja = ninja_syntax.Writer( |
| 1627 OpenOutput(os.path.join(toplevel_build, 'build.ninja')), | 1651 OpenOutput(os.path.join(toplevel_build, 'build.ninja')), |
| 1628 width=120) | 1652 width=120) |
| 1629 | 1653 |
| 1630 # Put build-time support tools in out/{config_name}. | 1654 # Put build-time support tools in out/{config_name}. |
| 1631 gyp.common.CopyTool(flavor, toplevel_build) | 1655 gyp.common.CopyTool(flavor, toplevel_build) |
| 1632 | 1656 |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2108 arglists.append( | 2132 arglists.append( |
| 2109 (target_list, target_dicts, data, params, config_name)) | 2133 (target_list, target_dicts, data, params, config_name)) |
| 2110 pool.map(CallGenerateOutputForConfig, arglists) | 2134 pool.map(CallGenerateOutputForConfig, arglists) |
| 2111 except KeyboardInterrupt, e: | 2135 except KeyboardInterrupt, e: |
| 2112 pool.terminate() | 2136 pool.terminate() |
| 2113 raise e | 2137 raise e |
| 2114 else: | 2138 else: |
| 2115 for config_name in config_names: | 2139 for config_name in config_names: |
| 2116 GenerateOutputForConfig(target_list, target_dicts, data, params, | 2140 GenerateOutputForConfig(target_list, target_dicts, data, params, |
| 2117 config_name) | 2141 config_name) |
| OLD | NEW |