| Index: pylib/gyp/generator/make.py
|
| ===================================================================
|
| --- pylib/gyp/generator/make.py (revision 1569)
|
| +++ pylib/gyp/generator/make.py (working copy)
|
| @@ -62,6 +62,7 @@
|
| def CalculateVariables(default_variables, params):
|
| """Calculate additional variables for use in the build (called by gyp)."""
|
| flavor = gyp.common.GetFlavor(params)
|
| + default_variables.setdefault('HOST_OS', gyp.common.GetHostOS())
|
| if flavor == 'mac':
|
| default_variables.setdefault('OS', 'mac')
|
| default_variables.setdefault('SHARED_LIB_SUFFIX', '.dylib')
|
| @@ -161,8 +162,11 @@
|
|
|
| LINK_COMMANDS_MAC = """\
|
| quiet_cmd_alink = LIBTOOL-STATIC $@
|
| -cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^)
|
| +cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -v -static -o $@ $(filter %.o,$^)
|
|
|
| +quiet_cmd_alink_thin = LIBTOOL-STATIC-THIN-FAKE $@
|
| +cmd_alink_thin = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -v -static -o $@ $(filter %.o,$^)
|
| +
|
| quiet_cmd_link = LINK($(TOOLSET)) $@
|
| cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS)
|
|
|
| @@ -178,28 +182,26 @@
|
| """
|
|
|
| LINK_COMMANDS_ANDROID = """\
|
| -quiet_cmd_alink = AR($(TOOLSET)) $@
|
| -cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
|
| +quiet_cmd_alink_target = AR($(TOOLSET)) $@
|
| +cmd_alink_target = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
|
|
|
| -quiet_cmd_alink_thin = AR($(TOOLSET)) $@
|
| -cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^)
|
| +quiet_cmd_alink_thin_target = AR($(TOOLSET)) $@
|
| +cmd_alink_thin_target = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^)
|
|
|
| # Due to circular dependencies between libraries :(, we wrap the
|
| # special "figure out circular dependencies" flags around the entire
|
| # input list during linking.
|
| -quiet_cmd_link = LINK($(TOOLSET)) $@
|
| -quiet_cmd_link_host = LINK($(TOOLSET)) $@
|
| -cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS)
|
| -cmd_link_host = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
|
| +quiet_cmd_link_target = LINK($(TOOLSET)) $@
|
| +cmd_link_target = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS)
|
|
|
| # Other shared-object link notes:
|
| # - Set SONAME to the library filename so our binaries don't reference
|
| # the local, absolute paths used on the link command-line.
|
| -quiet_cmd_solink = SOLINK($(TOOLSET)) $@
|
| -cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS)
|
| +quiet_cmd_solink_target = SOLINK($(TOOLSET)) $@
|
| +cmd_solink_target = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS)
|
|
|
| -quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
|
| -cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS)
|
| +quiet_cmd_solink_module_target = SOLINK_MODULE($(TOOLSET)) $@
|
| +cmd_solink_module_target = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS)
|
| quiet_cmd_solink_module_host = SOLINK_MODULE($(TOOLSET)) $@
|
| cmd_solink_module_host = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
|
| """
|
| @@ -1515,8 +1517,8 @@
|
| self.WriteLn('%s: LD_INPUTS := %s' % (
|
| QuoteSpaces(self.output_binary),
|
| ' '.join(map(QuoteSpaces, link_deps))))
|
| - if self.toolset == 'host' and self.flavor == 'android':
|
| - self.WriteDoCmd([self.output_binary], link_deps, 'link_host',
|
| + if self.toolset == 'target' and self.flavor == 'android':
|
| + self.WriteDoCmd([self.output_binary], link_deps, 'link_target',
|
| part_of_all, postbuilds=postbuilds)
|
| else:
|
| self.WriteDoCmd([self.output_binary], link_deps, 'link', part_of_all,
|
| @@ -1528,24 +1530,36 @@
|
| "Spaces in alink input filenames not supported (%s)" % link_dep)
|
| if (self.flavor not in ('mac', 'win') and not
|
| self.is_standalone_static_library):
|
| - self.WriteDoCmd([self.output_binary], link_deps, 'alink_thin',
|
| - part_of_all, postbuilds=postbuilds)
|
| + if self.toolset == 'target' and self.flavor == 'android':
|
| + self.WriteDoCmd([self.output_binary], link_deps, 'alink_thin_target',
|
| + part_of_all, postbuilds=postbuilds)
|
| + else:
|
| + self.WriteDoCmd([self.output_binary], link_deps, 'alink_thin',
|
| + part_of_all, postbuilds=postbuilds)
|
| else:
|
| - self.WriteDoCmd([self.output_binary], link_deps, 'alink', part_of_all,
|
| - postbuilds=postbuilds)
|
| + if self.toolset == 'target' and self.flavor == 'android':
|
| + self.WriteDoCmd([self.output_binary], link_deps, 'alink_target',
|
| + part_of_all, postbuilds=postbuilds)
|
| + else:
|
| + self.WriteDoCmd([self.output_binary], link_deps, 'alink', part_of_all,
|
| + postbuilds=postbuilds)
|
| elif self.type == 'shared_library':
|
| self.WriteLn('%s: LD_INPUTS := %s' % (
|
| QuoteSpaces(self.output_binary),
|
| ' '.join(map(QuoteSpaces, link_deps))))
|
| - self.WriteDoCmd([self.output_binary], link_deps, 'solink', part_of_all,
|
| - postbuilds=postbuilds)
|
| + if self.toolset == 'target' and self.flavor == 'android':
|
| + self.WriteDoCmd([self.output_binary], link_deps, 'solink_target',
|
| + part_of_all, postbuilds=postbuilds)
|
| + else:
|
| + self.WriteDoCmd([self.output_binary], link_deps, 'solink', part_of_all,
|
| + postbuilds=postbuilds)
|
| elif self.type == 'loadable_module':
|
| for link_dep in link_deps:
|
| assert ' ' not in link_dep, (
|
| "Spaces in module input filenames not supported (%s)" % link_dep)
|
| - if self.toolset == 'host' and self.flavor == 'android':
|
| - self.WriteDoCmd([self.output_binary], link_deps, 'solink_module_host',
|
| - part_of_all, postbuilds=postbuilds)
|
| + if self.toolset == 'target' and self.flavor == 'android':
|
| + self.WriteDoCmd([self.output_binary], link_deps, 'solink_module_target',
|
| + part_of_all, postbuilds=postbuilds)
|
| else:
|
| self.WriteDoCmd(
|
| [self.output_binary], link_deps, 'solink_module', part_of_all,
|
| @@ -1913,6 +1927,7 @@
|
| def GenerateOutput(target_list, target_dicts, data, params):
|
| options = params['options']
|
| flavor = gyp.common.GetFlavor(params)
|
| + host_os = gyp.common.GetHostOS()
|
| generator_flags = params.get('generator_flags', {})
|
| builddir_name = generator_flags.get('output_dir', 'out')
|
| android_ndk_version = generator_flags.get('android_ndk_version', None)
|
| @@ -1967,27 +1982,36 @@
|
| 'extra_commands': '',
|
| 'srcdir': srcdir,
|
| }
|
| - if flavor == 'mac':
|
| + if host_os == 'mac':
|
| flock_command = './gyp-mac-tool flock'
|
| header_params.update({
|
| 'flock': flock_command,
|
| 'flock_index': 2,
|
| 'link_commands': LINK_COMMANDS_MAC,
|
| - 'extra_commands': SHARED_HEADER_MAC_COMMANDS,
|
| })
|
| - elif flavor == 'android':
|
| + elif host_os == 'solaris':
|
| + flock_command = './gyp-sun-tool flock',
|
| header_params.update({
|
| - 'link_commands': LINK_COMMANDS_ANDROID,
|
| + 'flock': flock_command,
|
| + 'flock_index': 2,
|
| })
|
| + elif host_os == 'freebsd':
|
| + flock_command = 'lockf',
|
| + header_params.update({
|
| + 'flock': flock_command,
|
| + })
|
| +
|
| + if flavor == 'mac':
|
| + header_params.update({
|
| + 'extra_commands': SHARED_HEADER_MAC_COMMANDS,
|
| + })
|
| elif flavor == 'solaris':
|
| header_params.update({
|
| - 'flock': './gyp-sun-tool flock',
|
| - 'flock_index': 2,
|
| 'extra_commands': SHARED_HEADER_SUN_COMMANDS,
|
| })
|
| - elif flavor == 'freebsd':
|
| + elif flavor == 'android':
|
| header_params.update({
|
| - 'flock': 'lockf',
|
| + 'extra_commands': LINK_COMMANDS_ANDROID,
|
| })
|
|
|
| header_params.update({
|
| @@ -2010,7 +2034,7 @@
|
| if key == 'LINK':
|
| make_global_settings += ('%s ?= %s $(builddir)/linker.lock %s\n' %
|
| (key, flock_command, value))
|
| - elif key in ('CC', 'CC.host', 'CXX', 'CXX.host'):
|
| + elif key in ('CC', 'CC.host', 'CXX', 'CXX.host', 'AR', 'AR.host'):
|
| make_global_settings += (
|
| 'ifneq (,$(filter $(origin %s), undefined default))\n' % key)
|
| # Let gyp-time envvars win over global settings.
|
| @@ -2038,7 +2062,7 @@
|
|
|
| # Put build-time support tools next to the root Makefile.
|
| dest_path = os.path.dirname(makefile_path)
|
| - gyp.common.CopyTool(flavor, dest_path)
|
| + gyp.common.CopyTool(host_os, dest_path)
|
|
|
| # Find the list of targets that derive from the gyp file(s) being built.
|
| needed_targets = set()
|
|
|