Commit 50e9d9c4 authored by sakal's avatar sakal Committed by Commit bot

Add support for .so files in generate_gradle.py.

Only supports ARM for now.

BUG=620034

Review-Url: https://codereview.chromium.org/2622133004
Cr-Commit-Position: refs/heads/master@{#443191}
parent 5c3ca4cb
...@@ -74,14 +74,15 @@ android { ...@@ -74,14 +74,15 @@ android {
main.manifest.srcFile "{{ android_manifest }}" main.manifest.srcFile "{{ android_manifest }}"
{% if template_type == 'android_library' %} {{ sourceSetName }} {
main {
{% else %}
test {
{% endif %}
java.srcDirs = [ java.srcDirs = [
{% for path in java_dirs %} {% for path in java_dirs %}
"{{ path }}", "{{ path }}",
{% endfor %}
]
jniLibs.srcDirs = [
{% for path in jni_libs %}
"{{ path }}",
{% endfor %} {% endfor %}
] ]
} }
......
...@@ -34,6 +34,8 @@ _JINJA_TEMPLATE_PATH = os.path.join( ...@@ -34,6 +34,8 @@ _JINJA_TEMPLATE_PATH = os.path.join(
_JAVA_SUBDIR = 'symlinked-java' _JAVA_SUBDIR = 'symlinked-java'
_SRCJARS_SUBDIR = 'extracted-srcjars' _SRCJARS_SUBDIR = 'extracted-srcjars'
_JNI_LIBS_SUBDIR = 'symlinked-libs'
_ARMEABI_SUBDIR = 'armeabi'
_DEFAULT_TARGETS = [ _DEFAULT_TARGETS = [
# TODO(agrieve): Requires alternate android.jar to compile. # TODO(agrieve): Requires alternate android.jar to compile.
...@@ -183,6 +185,13 @@ def _ComputeJavaSourceDirs(java_files): ...@@ -183,6 +185,13 @@ def _ComputeJavaSourceDirs(java_files):
return list(found_roots) return list(found_roots)
def _CreateRelativeSymlink(target_path, link_path):
link_dir = os.path.dirname(link_path)
relpath = os.path.relpath(target_path, link_dir)
logging.debug('Creating symlink %s -> %s', link_path, relpath)
os.symlink(relpath, link_path)
def _CreateSymlinkTree(entry_output_dir, symlink_dir, desired_files, def _CreateSymlinkTree(entry_output_dir, symlink_dir, desired_files,
parent_dirs): parent_dirs):
"""Creates a directory tree of symlinks to the given files. """Creates a directory tree of symlinks to the given files.
...@@ -199,9 +208,7 @@ def _CreateSymlinkTree(entry_output_dir, symlink_dir, desired_files, ...@@ -199,9 +208,7 @@ def _CreateSymlinkTree(entry_output_dir, symlink_dir, desired_files,
symlinked_dir = os.path.dirname(symlinked_path) symlinked_dir = os.path.dirname(symlinked_path)
if not os.path.exists(symlinked_dir): if not os.path.exists(symlinked_dir):
os.makedirs(symlinked_dir) os.makedirs(symlinked_dir)
relpath = os.path.relpath(target_path, symlinked_dir) _CreateRelativeSymlink(target_path, symlinked_path)
logging.debug('Creating symlink %s -> %s', symlinked_path, relpath)
os.symlink(relpath, symlinked_path)
def _CreateJavaSourceDir(output_dir, entry_output_dir, java_files): def _CreateJavaSourceDir(output_dir, entry_output_dir, java_files):
...@@ -239,6 +246,27 @@ def _CreateJavaSourceDir(output_dir, entry_output_dir, java_files): ...@@ -239,6 +246,27 @@ def _CreateJavaSourceDir(output_dir, entry_output_dir, java_files):
return java_dirs return java_dirs
def _CreateJniLibsDir(output_dir, entry_output_dir, so_files):
"""Creates directory with symlinked .so files if necessary.
Returns list of JNI libs directories."""
if so_files:
symlink_dir = os.path.join(entry_output_dir, _JNI_LIBS_SUBDIR)
shutil.rmtree(symlink_dir, True)
abi_dir = os.path.join(symlink_dir, _ARMEABI_SUBDIR)
if not os.path.exists(abi_dir):
os.makedirs(abi_dir)
for so_file in so_files:
target_path = os.path.join(output_dir, so_file)
symlinked_path = os.path.join(abi_dir, so_file)
_CreateRelativeSymlink(target_path, symlinked_path)
return [symlink_dir]
return []
def _GenerateLocalProperties(sdk_dir): def _GenerateLocalProperties(sdk_dir):
"""Returns the data for project.properties as a string.""" """Returns the data for project.properties as a string."""
return '\n'.join([ return '\n'.join([
...@@ -247,8 +275,9 @@ def _GenerateLocalProperties(sdk_dir): ...@@ -247,8 +275,9 @@ def _GenerateLocalProperties(sdk_dir):
'']) ''])
def _GenerateGradleFile(build_config, build_vars, java_dirs, relativize, def _GenerateGradleFile(build_config, build_vars, java_dirs, jni_libs,
use_gradle_process_resources, jinja_processor): relativize, use_gradle_process_resources,
jinja_processor):
"""Returns the data for a project's build.gradle.""" """Returns the data for a project's build.gradle."""
deps_info = build_config['deps_info'] deps_info = build_config['deps_info']
gradle = build_config['gradle'] gradle = build_config['gradle']
...@@ -288,6 +317,7 @@ def _GenerateGradleFile(build_config, build_vars, java_dirs, relativize, ...@@ -288,6 +317,7 @@ def _GenerateGradleFile(build_config, build_vars, java_dirs, relativize,
_DEFAULT_ANDROID_MANIFEST_PATH) _DEFAULT_ANDROID_MANIFEST_PATH)
variables['android_manifest'] = relativize(android_manifest) variables['android_manifest'] = relativize(android_manifest)
variables['java_dirs'] = relativize(java_dirs) variables['java_dirs'] = relativize(java_dirs)
variables['jni_libs'] = relativize(jni_libs)
# TODO(agrieve): Add an option to use interface jars and see if that speeds # TODO(agrieve): Add an option to use interface jars and see if that speeds
# things up at all. # things up at all.
variables['prebuilts'] = relativize(gradle['dependent_prebuilt_jars']) variables['prebuilts'] = relativize(gradle['dependent_prebuilt_jars'])
...@@ -444,8 +474,15 @@ def main(): ...@@ -444,8 +474,15 @@ def main():
if srcjars: if srcjars:
java_dirs.append(os.path.join(entry_output_dir, _SRCJARS_SUBDIR)) java_dirs.append(os.path.join(entry_output_dir, _SRCJARS_SUBDIR))
data = _GenerateGradleFile(build_config, build_vars, java_dirs, relativize, native_section = build_config.get('native')
args.use_gradle_process_resources, if native_section:
jni_libs = _CreateJniLibsDir(
output_dir, entry_output_dir, native_section.get('libraries'))
else:
jni_libs = []
data = _GenerateGradleFile(build_config, build_vars, java_dirs, jni_libs,
relativize, args.use_gradle_process_resources,
jinja_processor) jinja_processor)
if data: if data:
project_entries.append(entry) project_entries.append(entry)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment