| Index: platform_tools/android/gyp_gen/makefile_writer.py
|
| diff --git a/platform_tools/android/gyp_gen/makefile_writer.py b/platform_tools/android/gyp_gen/makefile_writer.py
|
| index ea3a27ff1e037ace20906169a2708aa2ac75f2cd..6057ccee303e7b5c10d54f60cc4edb134f675a7f 100644
|
| --- a/platform_tools/android/gyp_gen/makefile_writer.py
|
| +++ b/platform_tools/android/gyp_gen/makefile_writer.py
|
| @@ -10,8 +10,8 @@ Functions for creating an Android.mk from already created dictionaries.
|
| """
|
|
|
| import os
|
| -import variables
|
|
|
| +# TODO(scroggo): Add unit tests for this file.
|
| def write_group(f, name, items, append):
|
| """
|
| Helper function to list all names passed to a variable.
|
| @@ -36,12 +36,13 @@ def write_group(f, name, items, append):
|
| f.write('\n\n')
|
|
|
|
|
| -def write_local_vars(f, var_dict, append):
|
| +def write_local_vars(f, var_dict, append, name):
|
| """
|
| Helper function to write all the members of var_dict to the makefile.
|
| @param f File open for writing (Android.mk)
|
| @param var_dict VarsDict holding the unique values for one configuration.
|
| @param append Whether to append to each makefile variable or overwrite it.
|
| + @param name If not None, a string to be appended to each key.
|
| """
|
| for key in var_dict.keys():
|
| if key == 'LOCAL_CFLAGS':
|
| @@ -53,7 +54,10 @@ def write_local_vars(f, var_dict, append):
|
| continue
|
| else:
|
| _append = append
|
| - write_group(f, key, var_dict[key], _append)
|
| + _key = key
|
| + if name:
|
| + _key += '_' + name
|
| + write_group(f, _key, var_dict[key], _append)
|
|
|
|
|
| AUTOGEN_WARNING = (
|
| @@ -97,28 +101,38 @@ DEBUGGING_HELP = (
|
| """
|
| )
|
|
|
| -
|
| -# TODO (scroggo): Currently write_android_mk has intimate knowledge about its
|
| -# parameters: e.g. arm_neon keeps track of differences from arm, whereas the
|
| -# others keep track of differences from common. Consider reworking this.
|
| -def write_android_mk(target_dir, common, arm, arm_neon, x86, default):
|
| +class VarsDictData(object):
|
| + """
|
| + Helper class for keeping a VarsDict along with a name and an optional
|
| + condition.
|
| + """
|
| + def __init__(self, vars_dict, name, condition=None):
|
| + """
|
| + Create a new VarsDictData.
|
| + @param vars_dict A VarsDict. Can be accessed via self.vars_dict.
|
| + @param name Name associated with the VarsDict. Can be accessed via
|
| + self.name.
|
| + @param condition Optional string representing a condition. If not None,
|
| + used to create a conditional inside the makefile.
|
| + """
|
| + self.vars_dict = vars_dict
|
| + self.condition = condition
|
| + self.name = name
|
| +
|
| +def write_android_mk(target_dir, common, deviations_from_common):
|
| """
|
| 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
|
| - written to the makefile inside an 'ifeq ($(TARGET_ARCH), arm)'
|
| - block.
|
| - @param arm_neon VarsDict holding variable definitions unique to arm with neon.
|
| - Will be written inside an 'ifeq ($(ARCH_ARM_HAVE_NEON),true)'
|
| - block nested inside an 'ifeq ($(TARGET_ARCH), arm)' block.
|
| - @param x86 VarsDict holding variable definitions unique to x86. Will be
|
| - written inside an 'ifeq ($(TARGET_ARCH),x86)' block.
|
| - @param default VarsDict holding variable definitions for an architecture
|
| - without custom optimizations.
|
| - TODO: Add mips.
|
| + @param deviations_from_common List of VarsDictData, one for each possible
|
| + configuration. VarsDictData.name will be
|
| + appended to each key before writing it to the
|
| + makefile. VarsDictData.condition, if not None,
|
| + will be written to the makefile as a condition
|
| + to determine whether to include
|
| + VarsDictData.vars_dict.
|
| """
|
| target_file = 'Android.mk'
|
| if target_dir:
|
| @@ -136,11 +150,13 @@ def write_android_mk(target_dir, common, arm, arm_neon, x86, default):
|
|
|
| # need a flag to tell the C side when we're on devices with large memory
|
| # budgets (i.e. larger than the low-end devices that initially shipped)
|
| - f.write('ifeq ($(ARCH_ARM_HAVE_VFP),true)\n')
|
| - f.write('\tLOCAL_CFLAGS += -DANDROID_LARGE_MEMORY_DEVICE\n')
|
| - f.write('endif\n\n')
|
| -
|
| - f.write('ifeq ($(TARGET_ARCH),x86)\n')
|
| + # On arm, only define the flag if it has VFP. For all other architectures,
|
| + # always define the flag.
|
| + f.write('ifeq ($(TARGET_ARCH),arm)\n')
|
| + f.write('\tifeq ($(ARCH_ARM_HAVE_VFP),true)\n')
|
| + f.write('\t\tLOCAL_CFLAGS += -DANDROID_LARGE_MEMORY_DEVICE\n')
|
| + f.write('\tendif\n')
|
| + f.write('else\n')
|
| f.write('\tLOCAL_CFLAGS += -DANDROID_LARGE_MEMORY_DEVICE\n')
|
| f.write('endif\n\n')
|
|
|
| @@ -151,25 +167,16 @@ def write_android_mk(target_dir, common, arm, arm_neon, x86, default):
|
| f.write('\tLOCAL_CFLAGS += -DNO_FALLBACK_FONT\n')
|
| f.write('endif\n\n')
|
|
|
| - write_local_vars(f, common, False)
|
| + write_local_vars(f, common, False, None)
|
|
|
| - f.write('ifeq ($(TARGET_ARCH),arm)\n')
|
| - f.write('ifeq ($(ARCH_ARM_HAVE_NEON),true)\n')
|
| - write_local_vars(f, arm_neon, True)
|
| - f.write('endif\n\n')
|
| - write_local_vars(f, arm, True)
|
| -
|
| - if variables.INCLUDE_X86_OPTS:
|
| - f.write('else ifeq ($(TARGET_ARCH),x86)\n')
|
| - write_local_vars(f, x86, True)
|
| -
|
| - f.write('else\n')
|
| - write_local_vars(f, default, True)
|
| - f.write('endif\n\n')
|
| + for data in deviations_from_common:
|
| + if data.condition:
|
| + f.write('ifeq ($(%s), true)\n' % data.condition)
|
| + write_local_vars(f, data.vars_dict, True, data.name)
|
| + if data.condition:
|
| + f.write('endif\n\n')
|
|
|
| f.write('include external/stlport/libstlport.mk\n')
|
| f.write('LOCAL_MODULE:= libskia\n')
|
| f.write('include $(BUILD_SHARED_LIBRARY)\n')
|
|
|
| -
|
| -
|
|
|