Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(841)

Unified Diff: site_scons/site_tools/library_deps.py

Issue 10167012: Scons: Move some library dependency declarations into library_deps.py (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: Tidy Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/custom_desc/nacl.scons » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: site_scons/site_tools/library_deps.py
diff --git a/site_scons/site_tools/library_deps.py b/site_scons/site_tools/library_deps.py
index a86c6b8eed5e251d8e6da2f3b4ec7d79fdc487ca..9f242b40eb4ee6773b2648db9330ba64aeae1566 100644
--- a/site_scons/site_tools/library_deps.py
+++ b/site_scons/site_tools/library_deps.py
@@ -4,34 +4,40 @@
"""Simple harness for defining library dependencies for scons files."""
+
# The following is a map from a library, to the corresponding
# list of dependent libraries that must be included after that library, in
# the list of libraries.
-# Note: These are default rules that are used if platform specific rules are
-# not specified below in PLATFORM_LIBRARY_DEPENDENCIES.
LIBRARY_DEPENDENCIES_DEFAULT = {
'platform': [
'gio',
],
+ 'sel': [
+ 'manifest_proxy',
+ 'simple_service',
+ 'thread_interface',
+ 'gio_wrapped_desc',
+ 'nonnacl_srpc',
+ 'nrd_xfer',
+ 'nacl_perf_counter',
+ 'nacl_base',
+ 'imc',
+ 'container',
+ 'nacl_fault_inject',
+ 'nacl_interval',
+ 'platform',
+ 'platform_qual_lib',
+ 'gio',
+ ],
}
-def _AddDefaultLibraryDependencies(dependencies):
- """ Adds default library dependencies to library dependencies.
-
- Takes the contents of the platform-specific library dependencies, and
- adds default dependencies if needed.
- """
- for key in LIBRARY_DEPENDENCIES_DEFAULT:
- if key not in dependencies:
- dependencies[key] = LIBRARY_DEPENDENCIES_DEFAULT[key]
- return dependencies
# Platform specific library dependencies. Mapping from a platform,
# to a map from a library, to the corresponding list of dependendent
# libraries that must be included after that library, in the list
# of libraries.
PLATFORM_LIBRARY_DEPENDENCIES = {
- 'x86-32': _AddDefaultLibraryDependencies({
+ 'x86-32': {
'nc_decoder_x86_32': [
'ncval_base_x86_32',
'nc_opcode_modeling_x86_32',
@@ -84,8 +90,8 @@ PLATFORM_LIBRARY_DEPENDENCIES = {
'sel': [
'ncvalidate_x86_32',
],
- }),
- 'x86-64': _AddDefaultLibraryDependencies({
+ },
+ 'x86-64': {
'nc_decoder_x86_64': [
'ncval_base_x86_64',
'nc_opcode_modeling_x86_64',
@@ -138,22 +144,23 @@ PLATFORM_LIBRARY_DEPENDENCIES = {
'sel': [
'ncvalidate_x86_64',
],
- }),
- 'arm': _AddDefaultLibraryDependencies({
+ },
+ 'arm': {
'ncvalidate_arm_v2': [
'arm_validator_core',
],
'sel': [
'ncvalidate_arm_v2',
],
- }),
- 'arm-thumb2': _AddDefaultLibraryDependencies({
+ },
+ 'arm-thumb2': {
'ncvalidate_arm_v2': [
'arm_validator_core',
],
- }),
+ },
}
+
def AddLibDeps(platform, libraries):
""" Adds dependent libraries to list of libraries.
@@ -166,47 +173,28 @@ def AddLibDeps(platform, libraries):
Note: Keeps libraries (in same order) as given
in the argument list. This includes duplicates if specified.
"""
- if not libraries: return []
-
visited = set() # Nodes already visited
closure = [] # Collected closure
- if platform in PLATFORM_LIBRARY_DEPENDENCIES:
- # Use platform specific library dependencies.
- dependencies = PLATFORM_LIBRARY_DEPENDENCIES[platform]
- else:
- # No specific library dependencies defined, use default.
- dependencies = LIBRARY_DEPENDENCIES_DEFAULT
- # Add dependencies of each library to the closure, then add the library to
- # the closure.
- for lib in reversed(libraries):
- # Be sure to remove the library if it is already there, so that it will be
- # added again.
- if lib in visited: visited.remove(lib)
- to_visit = [lib] # Nodes needing dependencies added.
- expanding = [] # libraries with expanded dependencies,
- # but not yet added to the closure.
- while to_visit:
- lib = to_visit.pop()
- if lib in visited:
- if expanding and lib is expanding[-1]:
- # Second visit, so we know that dependencies have been added.
- # It is now safe to add lib.
- closure.append(lib)
- expanding.pop()
- else:
- visited.add(lib)
- if lib in dependencies:
- # Must process library dependencies first.
- # Be sure to add library to list of nodes to visit,
- # so that we can add it to the closure once all
- # dependencies have been added.
- to_visit.append(lib)
- for dep in dependencies[lib]:
- to_visit.append(dep)
- expanding.append(lib)
- else:
- # No dependent library, just add.
- closure.append(lib)
+ # If library A depends on library B, B must appear in the link line
+ # after A. This is why we reverse the list and reverse it back
+ # again later.
+ def VisitList(libraries):
+ for library in reversed(libraries):
+ if library not in visited:
+ VisitLibrary(library)
+
+ def VisitLibrary(library):
+ visited.add(library)
+ VisitList(LIBRARY_DEPENDENCIES_DEFAULT.get(library, []))
+ VisitList(PLATFORM_LIBRARY_DEPENDENCIES.get(platform, {}).get(library, []))
+ closure.append(library)
+
+ # Ideally we would just do "VisitList(libraries)" here, but some
+ # PPAPI tests (specifically, tests/ppapi_gles_book) list "ppapi_cpp"
+ # twice in the link line, and we need to maintain these duplicates.
+ for library in reversed(libraries):
+ VisitLibrary(library)
+
closure.reverse()
return closure
« no previous file with comments | « no previous file | tests/custom_desc/nacl.scons » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698