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

Unified Diff: platform_tools/android/bin/gyp_to_android.py

Issue 142173002: Add self tests for gyp_to_android. (Closed) Base URL: https://skia.googlesource.com/skia.git@GYP2
Patch Set: Rebase onto Patch Set 8 of https://codereview.chromium.org/140503007/ Created 6 years, 11 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 | « platform_tools/android/bin/android_framework_gyp.py ('k') | tools/tests/gyp_to_android_tests.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: platform_tools/android/bin/gyp_to_android.py
diff --git a/platform_tools/android/bin/gyp_to_android.py b/platform_tools/android/bin/gyp_to_android.py
index ee1f86ef823f0647cf1e7d6603382dfdf0f153ba..dafd42b7af8c0989dc62391d7c56a05c146b8eac 100644
--- a/platform_tools/android/bin/gyp_to_android.py
+++ b/platform_tools/android/bin/gyp_to_android.py
@@ -11,6 +11,8 @@ files.
"""
import os
+import shutil
+import tempfile
# Folder containing all gyp files and generated gypd files.
GYP_FOLDER = 'gyp'
@@ -141,9 +143,11 @@ DEBUGGING_HELP = (
"""
)
-def WriteAndroidMk(common, arm, armNeon, x86, default):
+def WriteAndroidMk(target_dir, common, arm, armNeon, x86, default):
"""
Given all the variables, write the final make file.
+ @param target_dir The full path to the directory to write Android.mk, or None
+ to use the current working directory.
@param common VarsDict holding variables definitions common to all
configurations.
@param arm VarsDict holding variable definitions unique to arm. Will be
@@ -158,7 +162,10 @@ def WriteAndroidMk(common, arm, armNeon, x86, default):
without custom optimizations.
TODO: Add mips.
"""
- with open('Android.mk', 'w') as f:
+ target_file = 'Android.mk'
+ if target_dir:
+ target_file = os.path.join(target_dir, target_file)
+ with open(target_file, 'w') as f:
f.write(AUTOGEN_WARNING)
f.write('BASE_PATH := $(call my-dir)\n')
f.write('LOCAL_PATH:= $(call my-dir)\n')
@@ -354,79 +361,100 @@ def Intersect(var_dict_list):
var_dict[key].remove(item)
return intersection
-def CleanGypdFiles():
+def CleanGypdFiles(folder):
"""
Remove the gypd files generated by android_framework_gyp.main().
+ @param folder Folder in which to delete all files ending with 'gypd'.
"""
- assert os.path.isdir(GYP_FOLDER)
- files = os.listdir(GYP_FOLDER)
+ assert os.path.isdir(folder)
+ files = os.listdir(folder)
for f in files:
if f.endswith('gypd'):
- os.remove(os.path.join(GYP_FOLDER, f))
+ os.remove(os.path.join(folder, f))
import android_framework_gyp
-def main():
+def main(target_dir=None):
+ """
+ Read gyp files and create Android.mk for the Android framework's
+ external/skia.
+ @param target_dir Directory in which to place 'Android.mk'. If None, the file
+ will be placed in skia's root directory.
+ """
# Move up to top of trunk
- script_dir = os.path.dirname(__file__)
+ script_dir = os.path.abspath(os.path.dirname(__file__))
skia_dir = os.path.normpath(os.path.join(script_dir, os.pardir, os.pardir,
os.pardir))
- os.chdir(skia_dir)
-
- main_gypd_file = os.path.join(GYP_FOLDER, 'android_framework_lib.gypd')
-
- print 'Creating Android.mk',
-
- # Call the script to generate gypd files, first using a non-existant archtype.
- android_framework_gyp.main('other', False)
- # And store its variables in the default dict
- default_var_dict = VarsDict()
- ParseGypd(default_var_dict, main_gypd_file)
- CleanGypdFiles()
-
- print '.',
-
- # Now do the same for Arm. arm_var_dict will contain all the variable
- # definitions needed to build with arm (meaning that it will share most
- # with default_var_dict).
- android_framework_gyp.main('arm', False)
- arm_var_dict = VarsDict()
- ParseGypd(arm_var_dict, main_gypd_file)
- CleanGypdFiles()
-
- print '.',
-
- # Now do the same for Arm/Neon.
- android_framework_gyp.main('arm', True)
- arm_neon_var_dict = VarsDict()
- ParseGypd(arm_neon_var_dict, main_gypd_file)
- CleanGypdFiles()
-
- print '.'
-
- # Now do the same for x86.
- x86_var_dict = VarsDict()
- if INCLUDE_X86_OPTS:
- android_framework_gyp.main('x86', False)
- ParseGypd(x86_var_dict, main_gypd_file)
- CleanGypdFiles()
-
- # Compute the intersection of all targets. All the files in the intersection
- # should be part of the makefile always. Each dict will now contain trimmed
- # lists containing only variable definitions specific to that configuration.
- var_dict_list = [default_var_dict, arm_var_dict, arm_neon_var_dict]
- if INCLUDE_X86_OPTS:
- var_dict_list.append(x86_var_dict)
- common = Intersect(var_dict_list)
-
- # Further trim arm_neon_var_dict with arm_var_dict. After this call,
- # arm_var_dict (which will now be the intersection) includes all definitions
- # used by both arm and arm + neon, and arm_neon_var_dict will only contain
- # those specific to arm + neon.
- arm_var_dict = Intersect([arm_var_dict, arm_neon_var_dict])
-
- WriteAndroidMk(common, arm_var_dict, arm_neon_var_dict, x86_var_dict,
- default_var_dict)
+ # Create a temporary folder to hold gyp and gypd files. Create it in skia_dir
+ # so that it is a sibling of gyp/, so the relationships between gyp files and
+ # other files (e.g. platform_tools/android/gyp/dependencies.gypi, referenced
+ # by android_deps.gyp as a relative path) is unchanged.
+ # Use mkdtemp to find an unused folder name, but then delete it so copytree
+ # can be called with a non-existent directory.
+ tmp_folder = tempfile.mkdtemp(dir=skia_dir)
+ os.rmdir(tmp_folder)
+ shutil.copytree(os.path.join(skia_dir, GYP_FOLDER), tmp_folder)
+
+ try:
+ main_gyp_file = 'android_framework_lib.gyp'
+ main_gypd_file = os.path.join(tmp_folder, main_gyp_file + 'd')
+
+ print 'Creating Android.mk',
+
+ # Call the script to generate gypd files, first using a non-existant
+ # archtype.
+ android_framework_gyp.main(tmp_folder, main_gyp_file, 'other', False)
+ # And store its variables in the default dict
+ default_var_dict = VarsDict()
+ ParseGypd(default_var_dict, main_gypd_file)
+ CleanGypdFiles(tmp_folder)
+
+ print '.',
+
+ # Now do the same for Arm. arm_var_dict will contain all the variable
+ # definitions needed to build with arm (meaning that it will share most
+ # with default_var_dict).
+ android_framework_gyp.main(tmp_folder, main_gyp_file, 'arm', False)
+ arm_var_dict = VarsDict()
+ ParseGypd(arm_var_dict, main_gypd_file)
+ CleanGypdFiles(tmp_folder)
+
+ print '.',
+
+ # Now do the same for Arm/Neon.
+ android_framework_gyp.main(tmp_folder, main_gyp_file, 'arm', True)
+ arm_neon_var_dict = VarsDict()
+ ParseGypd(arm_neon_var_dict, main_gypd_file)
+ CleanGypdFiles(tmp_folder)
+
+ print '.'
+
+ # Now do the same for x86.
+ x86_var_dict = VarsDict()
+ if INCLUDE_X86_OPTS:
+ android_framework_gyp.main(tmp_folder, main_gyp_file, 'x86', False)
+ ParseGypd(x86_var_dict, main_gypd_file)
+ CleanGypdFiles(tmp_folder)
+
+ # Compute the intersection of all targets. All the files in the intersection
+ # should be part of the makefile always. Each dict will now contain trimmed
+ # lists containing only variable definitions specific to that configuration.
+ var_dict_list = [default_var_dict, arm_var_dict, arm_neon_var_dict]
+ if INCLUDE_X86_OPTS:
+ var_dict_list.append(x86_var_dict)
+ common = Intersect(var_dict_list)
+
+ # Further trim arm_neon_var_dict with arm_var_dict. After this call,
+ # arm_var_dict (which will now be the intersection) includes all definitions
+ # used by both arm and arm + neon, and arm_neon_var_dict will only contain
+ # those specific to arm + neon.
+ arm_var_dict = Intersect([arm_var_dict, arm_neon_var_dict])
+
+ WriteAndroidMk(target_dir, common, arm_var_dict, arm_neon_var_dict,
+ x86_var_dict, default_var_dict)
+
+ finally:
+ shutil.rmtree(tmp_folder)
if __name__ == '__main__':
main()
« no previous file with comments | « platform_tools/android/bin/android_framework_gyp.py ('k') | tools/tests/gyp_to_android_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698