Bug 1319228 - Link libxul in the Tup backend. draft
authorChris Manchester <cmanchester@mozilla.com>
Wed, 13 Jun 2018 22:33:23 -0700
changeset 807316 25ceeb4da18d2835e5b7761f14b94751385113dd
parent 807315 76c2e5230d57fcd4ff5812d503c93bbe89f5773a
child 807317 43641ab7be8d20f8181045f116dd2729f39e48d2
push id113083
push userbmo:cmanchester@mozilla.com
push dateThu, 14 Jun 2018 06:09:19 +0000
bugs1319228
milestone62.0a1
Bug 1319228 - Link libxul in the Tup backend. MozReview-Commit-ID: sqCdlqP9pj
python/mozbuild/mozbuild/backend/tup.py
--- a/python/mozbuild/mozbuild/backend/tup.py
+++ b/python/mozbuild/mozbuild/backend/tup.py
@@ -95,18 +95,16 @@ class BackendTupfile(object):
         self.host_programs = []
         self.host_library = None
         self.exports = set()
 
         # These files are special, ignore anything that generates them or
         # depends on them.
         self._skip_files = [
             'signmar',
-            'libxul.so',
-            'libtestcrasher.so',
         ]
 
         self.fh = FileAvoidWrite(self.name, capture_diff=True, dry_run=dry_run)
         self.fh.write('# THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT EDIT.\n')
         self.fh.write('\n')
 
     def write(self, buf):
         self.fh.write(buf)
@@ -320,16 +318,19 @@ class TupBackend(CommonBackend):
 
     def _lib_paths(self, objdir, libs):
         return [mozpath.relpath(mozpath.join(l.objdir, l.import_name), objdir)
                 for l in libs]
 
     def _gen_shared_library(self, backend_file):
         shlib = backend_file.shared_lib
 
+        if backend_file.objdir.endswith('gtest') and shlib.name == 'libxul.so':
+            return
+
         if shlib.cxx_link:
             mkshlib = (
                 [backend_file.environment.substs['CXX']] +
                 backend_file.local_flags['CXX_LDFLAGS']
             )
         else:
             mkshlib = (
                 [backend_file.environment.substs['CC']] +
@@ -345,18 +346,27 @@ class TupBackend(CommonBackend):
 
         objs, _, shared_libs, os_libs, static_libs = self._expand_libs(shlib)
         static_libs = self._lib_paths(backend_file.objdir, static_libs)
         shared_libs = self._lib_paths(backend_file.objdir, shared_libs)
 
         list_file_name = '%s.list' % shlib.name.replace('.', '_')
         list_file = self._make_list_file(backend_file.objdir, objs, list_file_name)
 
+        rust_linked = self._lib_paths(backend_file.objdir,
+                                      (l for l in backend_file.shared_lib.linked_libraries
+                                       if isinstance(l, RustLibrary)))
+
         inputs = objs + static_libs + shared_libs
 
+        extra_inputs = []
+        if rust_linked:
+            extra_inputs = [self._rust_libs]
+            static_libs += rust_linked
+
         symbols_file = []
         if shlib.symbols_file:
             inputs.append(shlib.symbols_file)
             # TODO: Assumes GNU LD
             symbols_file = ['-Wl,--version-script,%s' % shlib.symbols_file]
 
         cmd = (
             mkshlib +
@@ -366,16 +376,17 @@ class TupBackend(CommonBackend):
             shared_libs +
             symbols_file +
             [backend_file.environment.substs['OS_LIBS']] +
             os_libs
         )
         backend_file.rule(
             cmd=cmd,
             inputs=inputs,
+            extra_inputs=extra_inputs,
             outputs=[shlib.lib_name],
             display='LINK %o'
         )
         backend_file.symlink_rule(mozpath.join(backend_file.objdir,
                                                shlib.lib_name),
                                   output=mozpath.join(self.environment.topobjdir,
                                                       shlib.install_target,
                                                       shlib.lib_name))
@@ -796,22 +807,17 @@ class TupBackend(CommonBackend):
             explicit_env=cargo_env)
 
         cargo_plan = json.loads(''.join(output_lines))
         self._gen_cargo_rules(backend_file, cargo_plan, cargo_env)
         self.backend_input_files |= set(cargo_plan['inputs'])
 
 
     def _process_generated_file(self, backend_file, obj):
-        # TODO: These are directories that don't work in the tup backend
-        # yet, because things they depend on aren't built yet.
-        skip_directories = (
-            'toolkit/library', # libxul.so
-        )
-        if obj.script and obj.method and obj.relobjdir not in skip_directories:
+        if obj.script and obj.method:
             backend_file.export_shell()
             cmd = self._py_action('file_generate')
             if obj.localized:
                 cmd.append('--locale=en-US')
             cmd.extend([
                 obj.script,
                 obj.method,
                 obj.outputs[0],