Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (c) 2012 Google Inc. All rights reserved. | 1 # Copyright (c) 2012 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 # Notes: | 5 # Notes: |
| 6 # | 6 # |
| 7 # This is all roughly based on the Makefile system used by the Linux | 7 # This is all roughly based on the Makefile system used by the Linux |
| 8 # kernel, but is a non-recursive make -- we put the entire dependency | 8 # kernel, but is a non-recursive make -- we put the entire dependency |
| 9 # graph in front of make and let it figure it out. | 9 # graph in front of make and let it figure it out. |
| 10 # | 10 # |
| (...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 711 extra_mac_bundle_resources = [] | 711 extra_mac_bundle_resources = [] |
| 712 mac_bundle_deps = [] | 712 mac_bundle_deps = [] |
| 713 | 713 |
| 714 if self.is_mac_bundle: | 714 if self.is_mac_bundle: |
| 715 self.output = self.ComputeMacBundleOutput(spec) | 715 self.output = self.ComputeMacBundleOutput(spec) |
| 716 self.output_binary = self.ComputeMacBundleBinaryOutput(spec) | 716 self.output_binary = self.ComputeMacBundleBinaryOutput(spec) |
| 717 else: | 717 else: |
| 718 self.output = self.output_binary = self.ComputeOutput(spec) | 718 self.output = self.output_binary = self.ComputeOutput(spec) |
| 719 | 719 |
| 720 self._INSTALLABLE_TARGETS = ('executable', 'loadable_module', | 720 self._INSTALLABLE_TARGETS = ('executable', 'loadable_module', |
| 721 'shared_library') | 721 'shared_library', 'standalone_static_library') |
| 722 if self.type in self._INSTALLABLE_TARGETS: | 722 if self.type in self._INSTALLABLE_TARGETS: |
| 723 self.alias = os.path.basename(self.output) | 723 self.alias = os.path.basename(self.output) |
| 724 install_path = self._InstallableTargetInstallPath() | 724 install_path = self._InstallableTargetInstallPath() |
| 725 else: | 725 else: |
| 726 self.alias = self.output | 726 self.alias = self.output |
| 727 install_path = self.output | 727 install_path = self.output |
| 728 | 728 |
| 729 self.WriteLn("TOOLSET := " + self.toolset) | 729 self.WriteLn("TOOLSET := " + self.toolset) |
| 730 self.WriteLn("TARGET := " + self.target) | 730 self.WriteLn("TARGET := " + self.target) |
| 731 | 731 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 778 if self.is_mac_bundle: | 778 if self.is_mac_bundle: |
| 779 mac_bundle_deps.append(self.output_binary) | 779 mac_bundle_deps.append(self.output_binary) |
| 780 | 780 |
| 781 self.WriteTarget(spec, configs, deps, extra_link_deps + link_deps, | 781 self.WriteTarget(spec, configs, deps, extra_link_deps + link_deps, |
| 782 mac_bundle_deps, extra_outputs, part_of_all) | 782 mac_bundle_deps, extra_outputs, part_of_all) |
| 783 | 783 |
| 784 # Update global list of target outputs, used in dependency tracking. | 784 # Update global list of target outputs, used in dependency tracking. |
| 785 target_outputs[qualified_target] = install_path | 785 target_outputs[qualified_target] = install_path |
| 786 | 786 |
| 787 # Update global list of link dependencies. | 787 # Update global list of link dependencies. |
| 788 if self.type in ('static_library', 'shared_library'): | 788 if self.type in ('static_library', 'standalone_static_library', |
| 789 'shared_library'): | |
| 789 target_link_deps[qualified_target] = self.output_binary | 790 target_link_deps[qualified_target] = self.output_binary |
| 790 | 791 |
| 791 # Currently any versions have the same effect, but in future the behavior | 792 # Currently any versions have the same effect, but in future the behavior |
| 792 # could be different. | 793 # could be different. |
| 793 if self.generator_flags.get('android_ndk_version', None): | 794 if self.generator_flags.get('android_ndk_version', None): |
| 794 self.WriteAndroidNdkModuleRule(self.target, all_sources, link_deps) | 795 self.WriteAndroidNdkModuleRule(self.target, all_sources, link_deps) |
| 795 | 796 |
| 796 self.fp.close() | 797 self.fp.close() |
| 797 | 798 |
| 798 | 799 |
| (...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1280 | 1281 |
| 1281 def ComputeOutputBasename(self, spec): | 1282 def ComputeOutputBasename(self, spec): |
| 1282 """Return the 'output basename' of a gyp spec. | 1283 """Return the 'output basename' of a gyp spec. |
| 1283 | 1284 |
| 1284 E.g., the loadable module 'foobar' in directory 'baz' will produce | 1285 E.g., the loadable module 'foobar' in directory 'baz' will produce |
| 1285 'libfoobar.so' | 1286 'libfoobar.so' |
| 1286 """ | 1287 """ |
| 1287 assert not self.is_mac_bundle | 1288 assert not self.is_mac_bundle |
| 1288 | 1289 |
| 1289 if self.flavor == 'mac' and self.type in ( | 1290 if self.flavor == 'mac' and self.type in ( |
| 1290 'static_library', 'executable', 'shared_library', 'loadable_module'): | 1291 'static_library', 'executable', 'shared_library', 'loadable_module', |
| 1292 'standalone_static_library'): | |
| 1291 return self.xcode_settings.GetExecutablePath() | 1293 return self.xcode_settings.GetExecutablePath() |
| 1292 | 1294 |
| 1293 target = spec['target_name'] | 1295 target = spec['target_name'] |
| 1294 target_prefix = '' | 1296 target_prefix = '' |
| 1295 target_ext = '' | 1297 target_ext = '' |
| 1296 if self.type == 'static_library': | 1298 if self.type in ('static_library', 'standalone_static_library'): |
| 1297 if target[:3] == 'lib': | 1299 if target[:3] == 'lib': |
| 1298 target = target[3:] | 1300 target = target[3:] |
| 1299 target_prefix = 'lib' | 1301 target_prefix = 'lib' |
| 1300 target_ext = '.a' | 1302 target_ext = '.a' |
| 1301 elif self.type in ('loadable_module', 'shared_library'): | 1303 elif self.type in ('loadable_module', 'shared_library'): |
| 1302 if target[:3] == 'lib': | 1304 if target[:3] == 'lib': |
| 1303 target = target[3:] | 1305 target = target[3:] |
| 1304 target_prefix = 'lib' | 1306 target_prefix = 'lib' |
| 1305 target_ext = '.so' | 1307 target_ext = '.so' |
| 1306 elif self.type == 'none': | 1308 elif self.type == 'none': |
| 1307 target = '%s.stamp' % target | 1309 target = '%s.stamp' % target |
| 1308 elif self.type != 'executable': | 1310 elif self.type != 'executable': |
| 1309 print ("ERROR: What output file should be generated?", | 1311 print ("ERROR: What output file should be generated?", |
| 1310 "type", self.type, "target", target) | 1312 "type", self.type, "target", target) |
| 1311 | 1313 |
| 1312 target_prefix = spec.get('product_prefix', target_prefix) | 1314 target_prefix = spec.get('product_prefix', target_prefix) |
| 1313 target = spec.get('product_name', target) | 1315 target = spec.get('product_name', target) |
| 1314 product_ext = spec.get('product_extension') | 1316 product_ext = spec.get('product_extension') |
| 1315 if product_ext: | 1317 if product_ext: |
| 1316 target_ext = '.' + product_ext | 1318 target_ext = '.' + product_ext |
| 1317 | 1319 |
| 1318 return target_prefix + target + target_ext | 1320 return target_prefix + target + target_ext |
| 1319 | 1321 |
| 1320 | 1322 |
| 1321 def _InstallImmediately(self): | 1323 def _InstallImmediately(self): |
| 1322 return self.toolset == 'target' and self.flavor == 'mac' and self.type in ( | 1324 return self.toolset == 'target' and self.flavor == 'mac' and self.type in ( |
| 1323 'static_library', 'executable', 'shared_library', 'loadable_module') | 1325 'static_library', 'standalone_static_library','executable', |
| 1326 'shared_library', 'loadable_module') | |
| 1324 | 1327 |
| 1325 | 1328 |
| 1326 def ComputeOutput(self, spec): | 1329 def ComputeOutput(self, spec): |
| 1327 """Return the 'output' (full output path) of a gyp spec. | 1330 """Return the 'output' (full output path) of a gyp spec. |
| 1328 | 1331 |
| 1329 E.g., the loadable module 'foobar' in directory 'baz' will produce | 1332 E.g., the loadable module 'foobar' in directory 'baz' will produce |
| 1330 '$(obj)/baz/libfoobar.so' | 1333 '$(obj)/baz/libfoobar.so' |
| 1331 """ | 1334 """ |
| 1332 assert not self.is_mac_bundle | 1335 assert not self.is_mac_bundle |
| 1333 | 1336 |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1527 else: | 1530 else: |
| 1528 self.WriteDoCmd([self.output_binary], link_deps, 'link', part_of_all, | 1531 self.WriteDoCmd([self.output_binary], link_deps, 'link', part_of_all, |
| 1529 postbuilds=postbuilds) | 1532 postbuilds=postbuilds) |
| 1530 | 1533 |
| 1531 elif self.type == 'static_library': | 1534 elif self.type == 'static_library': |
| 1532 for link_dep in link_deps: | 1535 for link_dep in link_deps: |
| 1533 assert ' ' not in link_dep, ( | 1536 assert ' ' not in link_dep, ( |
| 1534 "Spaces in alink input filenames not supported (%s)" % link_dep) | 1537 "Spaces in alink input filenames not supported (%s)" % link_dep) |
| 1535 self.WriteDoCmd([self.output_binary], link_deps, 'alink', part_of_all, | 1538 self.WriteDoCmd([self.output_binary], link_deps, 'alink', part_of_all, |
| 1536 postbuilds=postbuilds) | 1539 postbuilds=postbuilds) |
| 1540 elif self.type == 'standalone_static_library': | |
| 1541 self.WriteLn( | |
| 1542 'cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)') | |
| 1543 for link_dep in link_deps: | |
| 1544 assert ' ' not in link_dep, ( | |
| 1545 "Spaces in alink input filenames not supported (%s)" % link_dep) | |
| 1546 self.WriteDoCmd([self.output_binary], link_deps, 'alink', part_of_all, | |
| 1547 postbuilds=postbuilds) | |
|
borenet
2012/10/01 21:27:48
What should be the behavior when a standalone_stat
| |
| 1537 elif self.type == 'shared_library': | 1548 elif self.type == 'shared_library': |
| 1538 self.WriteLn('%s: LD_INPUTS := %s' % ( | 1549 self.WriteLn('%s: LD_INPUTS := %s' % ( |
| 1539 QuoteSpaces(self.output_binary), | 1550 QuoteSpaces(self.output_binary), |
| 1540 ' '.join(map(QuoteSpaces, link_deps)))) | 1551 ' '.join(map(QuoteSpaces, link_deps)))) |
| 1541 self.WriteDoCmd([self.output_binary], link_deps, 'solink', part_of_all, | 1552 self.WriteDoCmd([self.output_binary], link_deps, 'solink', part_of_all, |
| 1542 postbuilds=postbuilds) | 1553 postbuilds=postbuilds) |
| 1543 elif self.type == 'loadable_module': | 1554 elif self.type == 'loadable_module': |
| 1544 for link_dep in link_deps: | 1555 for link_dep in link_deps: |
| 1545 assert ' ' not in link_dep, ( | 1556 assert ' ' not in link_dep, ( |
| 1546 "Spaces in module input filenames not supported (%s)" % link_dep) | 1557 "Spaces in module input filenames not supported (%s)" % link_dep) |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 1569 comment = 'Add target alias to "all" target.', | 1580 comment = 'Add target alias to "all" target.', |
| 1570 phony = True) | 1581 phony = True) |
| 1571 | 1582 |
| 1572 # Add special-case rules for our installable targets. | 1583 # Add special-case rules for our installable targets. |
| 1573 # 1) They need to install to the build dir or "product" dir. | 1584 # 1) They need to install to the build dir or "product" dir. |
| 1574 # 2) They get shortcuts for building (e.g. "make chrome"). | 1585 # 2) They get shortcuts for building (e.g. "make chrome"). |
| 1575 # 3) They are part of "make all". | 1586 # 3) They are part of "make all". |
| 1576 if self.type in self._INSTALLABLE_TARGETS: | 1587 if self.type in self._INSTALLABLE_TARGETS: |
| 1577 if self.type == 'shared_library': | 1588 if self.type == 'shared_library': |
| 1578 file_desc = 'shared library' | 1589 file_desc = 'shared library' |
| 1590 elif self.type == 'standalone_static_library': | |
| 1591 file_desc = 'static library' | |
| 1579 else: | 1592 else: |
| 1580 file_desc = 'executable' | 1593 file_desc = 'executable' |
| 1581 install_path = self._InstallableTargetInstallPath() | 1594 install_path = self._InstallableTargetInstallPath() |
| 1582 installable_deps = [self.output] | 1595 installable_deps = [self.output] |
| 1583 if (self.flavor == 'mac' and not 'product_dir' in spec and | 1596 if (self.flavor == 'mac' and not 'product_dir' in spec and |
| 1584 self.toolset == 'target'): | 1597 self.toolset == 'target'): |
| 1585 # On mac, products are created in install_path immediately. | 1598 # On mac, products are created in install_path immediately. |
| 1586 assert install_path == self.output, '%s != %s' % ( | 1599 assert install_path == self.output, '%s != %s' % ( |
| 1587 install_path, self.output) | 1600 install_path, self.output) |
| 1588 | 1601 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1712 These variable definitions will be used by Android NDK but do nothing for | 1725 These variable definitions will be used by Android NDK but do nothing for |
| 1713 non-Android applications. | 1726 non-Android applications. |
| 1714 | 1727 |
| 1715 Arguments: | 1728 Arguments: |
| 1716 module_name: Android NDK module name, which must be unique among all | 1729 module_name: Android NDK module name, which must be unique among all |
| 1717 module names. | 1730 module names. |
| 1718 all_sources: A list of source files (will be filtered by Compilable). | 1731 all_sources: A list of source files (will be filtered by Compilable). |
| 1719 link_deps: A list of link dependencies, which must be sorted in | 1732 link_deps: A list of link dependencies, which must be sorted in |
| 1720 the order from dependencies to dependents. | 1733 the order from dependencies to dependents. |
| 1721 """ | 1734 """ |
| 1722 if self.type not in ('executable', 'shared_library', 'static_library'): | 1735 if self.type not in ('executable', 'shared_library', 'static_library', |
| 1736 'standalone_static_library'): | |
| 1723 return | 1737 return |
| 1724 | 1738 |
| 1725 self.WriteLn('# Variable definitions for Android applications') | 1739 self.WriteLn('# Variable definitions for Android applications') |
| 1726 self.WriteLn('include $(CLEAR_VARS)') | 1740 self.WriteLn('include $(CLEAR_VARS)') |
| 1727 self.WriteLn('LOCAL_MODULE := ' + module_name) | 1741 self.WriteLn('LOCAL_MODULE := ' + module_name) |
| 1728 self.WriteLn('LOCAL_CFLAGS := $(CFLAGS_$(BUILDTYPE)) ' | 1742 self.WriteLn('LOCAL_CFLAGS := $(CFLAGS_$(BUILDTYPE)) ' |
| 1729 '$(DEFS_$(BUILDTYPE)) ' | 1743 '$(DEFS_$(BUILDTYPE)) ' |
| 1730 # LOCAL_CFLAGS is applied to both of C and C++. There is | 1744 # LOCAL_CFLAGS is applied to both of C and C++. There is |
| 1731 # no way to specify $(CFLAGS_C_$(BUILDTYPE)) only for C | 1745 # no way to specify $(CFLAGS_C_$(BUILDTYPE)) only for C |
| 1732 # sources. | 1746 # sources. |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1777 self.WriteList( | 1791 self.WriteList( |
| 1778 DepsToModules(link_deps, | 1792 DepsToModules(link_deps, |
| 1779 generator_default_variables['STATIC_LIB_PREFIX'], | 1793 generator_default_variables['STATIC_LIB_PREFIX'], |
| 1780 generator_default_variables['STATIC_LIB_SUFFIX']), | 1794 generator_default_variables['STATIC_LIB_SUFFIX']), |
| 1781 'LOCAL_STATIC_LIBRARIES') | 1795 'LOCAL_STATIC_LIBRARIES') |
| 1782 | 1796 |
| 1783 if self.type == 'executable': | 1797 if self.type == 'executable': |
| 1784 self.WriteLn('include $(BUILD_EXECUTABLE)') | 1798 self.WriteLn('include $(BUILD_EXECUTABLE)') |
| 1785 elif self.type == 'shared_library': | 1799 elif self.type == 'shared_library': |
| 1786 self.WriteLn('include $(BUILD_SHARED_LIBRARY)') | 1800 self.WriteLn('include $(BUILD_SHARED_LIBRARY)') |
| 1787 elif self.type == 'static_library': | 1801 elif self.type in ('static_library', 'standalone_static_library'): |
| 1788 self.WriteLn('include $(BUILD_STATIC_LIBRARY)') | 1802 self.WriteLn('include $(BUILD_STATIC_LIBRARY)') |
| 1789 self.WriteLn() | 1803 self.WriteLn() |
| 1790 | 1804 |
| 1791 | 1805 |
| 1792 def WriteLn(self, text=''): | 1806 def WriteLn(self, text=''): |
| 1793 self.fp.write(text + '\n') | 1807 self.fp.write(text + '\n') |
| 1794 | 1808 |
| 1795 | 1809 |
| 1796 def GetSortedXcodeEnv(self, additional_settings=None): | 1810 def GetSortedXcodeEnv(self, additional_settings=None): |
| 1797 return gyp.xcode_emulation.GetSortedXcodeEnv( | 1811 return gyp.xcode_emulation.GetSortedXcodeEnv( |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2127 root_makefile.write("endif\n") | 2141 root_makefile.write("endif\n") |
| 2128 root_makefile.write('\n') | 2142 root_makefile.write('\n') |
| 2129 | 2143 |
| 2130 if (not generator_flags.get('standalone') | 2144 if (not generator_flags.get('standalone') |
| 2131 and generator_flags.get('auto_regeneration', True)): | 2145 and generator_flags.get('auto_regeneration', True)): |
| 2132 WriteAutoRegenerationRule(params, root_makefile, makefile_name, build_files) | 2146 WriteAutoRegenerationRule(params, root_makefile, makefile_name, build_files) |
| 2133 | 2147 |
| 2134 root_makefile.write(SHARED_FOOTER) | 2148 root_makefile.write(SHARED_FOOTER) |
| 2135 | 2149 |
| 2136 root_makefile.close() | 2150 root_makefile.close() |
| OLD | NEW |