Generate ninja files for api assembly and run ninja.
Change-Id: I003536e4ed4481acbdc041a6450106f8459d5978
This commit is contained in:
@@ -14,11 +14,18 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import collections
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
def assemble_apis(inner_trees):
|
||||
import api_assembly_cc
|
||||
import ninja_tools
|
||||
|
||||
|
||||
ContributionData = collections.namedtuple("ContributionData", ("inner_tree", "json_data"))
|
||||
|
||||
def assemble_apis(context, inner_trees):
|
||||
# Find all of the contributions from the inner tree
|
||||
contribution_files_dict = inner_trees.for_each_tree(api_contribution_files_for_inner_tree)
|
||||
|
||||
@@ -27,25 +34,33 @@ def assemble_apis(inner_trees):
|
||||
contributions = []
|
||||
for tree_key, filenames in contribution_files_dict.items():
|
||||
for filename in filenames:
|
||||
contribution_data = load_contribution_file(filename)
|
||||
if not contribution_data:
|
||||
json_data = load_contribution_file(filename)
|
||||
if not json_data:
|
||||
continue
|
||||
# TODO: Validate the configs, especially that the domains match what we asked for
|
||||
# from the lunch config.
|
||||
contributions.append(contribution_data)
|
||||
contributions.append(ContributionData(inner_trees.get(tree_key), json_data))
|
||||
|
||||
# Group contributions by language and API surface
|
||||
stub_libraries = collate_contributions(contributions)
|
||||
|
||||
# Iterate through all of the stub libraries and generate rules to assemble them
|
||||
# and Android.bp/BUILD files to make those available to inner trees.
|
||||
# TODO: Parallelize? Skip unnecessary work?
|
||||
ninja_file = NinjaFile() # TODO: parameters?
|
||||
build_file = BuildFile() # TODO: parameters?
|
||||
for stub_library in stub_libraries:
|
||||
STUB_LANGUAGE_HANDLERS[stub_library.language](ninja_file, build_file, stub_library)
|
||||
# Initialize the ninja file writer
|
||||
with open(context.out.api_ninja_file(), "w") as ninja_file:
|
||||
ninja = ninja_tools.Ninja(context, ninja_file)
|
||||
|
||||
# TODO: Handle host_executables separately or as a StubLibrary language?
|
||||
# Initialize the build file writer
|
||||
build_file = BuildFile() # TODO: parameters?
|
||||
|
||||
# Iterate through all of the stub libraries and generate rules to assemble them
|
||||
# and Android.bp/BUILD files to make those available to inner trees.
|
||||
# TODO: Parallelize? Skip unnecessary work?
|
||||
for stub_library in stub_libraries:
|
||||
STUB_LANGUAGE_HANDLERS[stub_library.language](context, ninja, build_file, stub_library)
|
||||
|
||||
# TODO: Handle host_executables separately or as a StubLibrary language?
|
||||
|
||||
# Finish writing the ninja file
|
||||
ninja.write()
|
||||
|
||||
|
||||
def api_contribution_files_for_inner_tree(tree_key, inner_tree, cookie):
|
||||
@@ -72,7 +87,8 @@ def load_contribution_file(filename):
|
||||
|
||||
|
||||
class StubLibraryContribution(object):
|
||||
def __init__(self, api_domain, library_contribution):
|
||||
def __init__(self, inner_tree, api_domain, library_contribution):
|
||||
self.inner_tree = inner_tree
|
||||
self.api_domain = api_domain
|
||||
self.library_contribution = library_contribution
|
||||
|
||||
@@ -96,54 +112,42 @@ def collate_contributions(contributions):
|
||||
grouped = {}
|
||||
for contribution in contributions:
|
||||
for language in STUB_LANGUAGE_HANDLERS.keys():
|
||||
for library in contribution.get(language, []):
|
||||
key = (language, contribution["name"], contribution["version"], library["name"])
|
||||
for library in contribution.json_data.get(language, []):
|
||||
key = (language, contribution.json_data["name"],
|
||||
contribution.json_data["version"], library["name"])
|
||||
stub_library = grouped.get(key)
|
||||
if not stub_library:
|
||||
stub_library = StubLibrary(language, contribution["name"],
|
||||
contribution["version"], library["name"])
|
||||
stub_library = StubLibrary(language, contribution.json_data["name"],
|
||||
contribution.json_data["version"], library["name"])
|
||||
grouped[key] = stub_library
|
||||
stub_library.add_contribution(StubLibraryContribution(
|
||||
contribution["api_domain"], library))
|
||||
stub_library.add_contribution(StubLibraryContribution(contribution.inner_tree,
|
||||
contribution.json_data["api_domain"], library))
|
||||
return list(grouped.values())
|
||||
|
||||
|
||||
def assemble_cc_api_library(ninja_file, build_file, stub_library):
|
||||
print("assembling cc_api_library %s-%s %s from:" % (stub_library.api_surface, stub_library.api_surface_version,
|
||||
stub_library.name))
|
||||
def assemble_java_api_library(context, ninja, build_file, stub_library):
|
||||
print("assembling java_api_library %s-%s %s from:" % (stub_library.api_surface,
|
||||
stub_library.api_surface_version, stub_library.name))
|
||||
for contrib in stub_library.contributions:
|
||||
print(" %s %s" % (contrib.api_domain, contrib.library_contribution["api"]))
|
||||
# TODO: Implement me
|
||||
|
||||
|
||||
def assemble_java_api_library(ninja_file, build_file, stub_library):
|
||||
print("assembling java_api_library %s-%s %s from:" % (stub_library.api_surface, stub_library.api_surface_version,
|
||||
stub_library.name))
|
||||
for contrib in stub_library.contributions:
|
||||
print(" %s %s" % (contrib.api_domain, contrib.library_contribution["api"]))
|
||||
# TODO: Implement me
|
||||
|
||||
|
||||
def assemble_resource_api_library(ninja_file, build_file, stub_library):
|
||||
print("assembling resource_api_library %s-%s %s from:" % (stub_library.api_surface, stub_library.api_surface_version,
|
||||
stub_library.name))
|
||||
def assemble_resource_api_library(context, ninja, build_file, stub_library):
|
||||
print("assembling resource_api_library %s-%s %s from:" % (stub_library.api_surface,
|
||||
stub_library.api_surface_version, stub_library.name))
|
||||
for contrib in stub_library.contributions:
|
||||
print(" %s %s" % (contrib.api_domain, contrib.library_contribution["api"]))
|
||||
# TODO: Implement me
|
||||
|
||||
|
||||
STUB_LANGUAGE_HANDLERS = {
|
||||
"cc_libraries": assemble_cc_api_library,
|
||||
"cc_libraries": api_assembly_cc.assemble_cc_api_library,
|
||||
"java_libraries": assemble_java_api_library,
|
||||
"resource_libraries": assemble_resource_api_library,
|
||||
}
|
||||
|
||||
|
||||
class NinjaFile(object):
|
||||
"Generator for build actions and dependencies."
|
||||
pass
|
||||
|
||||
|
||||
class BuildFile(object):
|
||||
"Abstract generator for Android.bp files and BUILD files."
|
||||
pass
|
||||
|
Reference in New Issue
Block a user