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

Side by Side Diff: platform_tools/android/gyp_gen/makefile_writer.py

Issue 183953002: Updates to the Android.mk writer. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Remove import of deleted file. Created 6 years, 9 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 unified diff | Download patch
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 # Copyright 2014 Google Inc. 3 # Copyright 2014 Google Inc.
4 # 4 #
5 # Use of this source code is governed by a BSD-style license that can be 5 # Use of this source code is governed by a BSD-style license that can be
6 # found in the LICENSE file. 6 # found in the LICENSE file.
7 7
8 """ 8 """
9 Functions for creating an Android.mk from already created dictionaries. 9 Functions for creating an Android.mk from already created dictionaries.
10 """ 10 """
11 11
12 import os 12 import os
13 import variables
14 13
15 def write_group(f, name, items, append): 14 def write_group(f, name, items, append):
16 """ 15 """
17 Helper function to list all names passed to a variable. 16 Helper function to list all names passed to a variable.
18 @param f File open for writing (Android.mk) 17 @param f File open for writing (Android.mk)
19 @param name Name of the makefile variable (e.g. LOCAL_CFLAGS) 18 @param name Name of the makefile variable (e.g. LOCAL_CFLAGS)
20 @param items list of strings to be passed to the variable. 19 @param items list of strings to be passed to the variable.
21 @param append Whether to append to the variable or overwrite it. 20 @param append Whether to append to the variable or overwrite it.
22 """ 21 """
23 if not items: 22 if not items:
24 return 23 return
25 24
26 # Copy the list so we can prepend it with its name. 25 # Copy the list so we can prepend it with its name.
27 items_to_write = list(items) 26 items_to_write = list(items)
28 27
29 if append: 28 if append:
30 items_to_write.insert(0, '%s +=' % name) 29 items_to_write.insert(0, '%s +=' % name)
31 else: 30 else:
32 items_to_write.insert(0, '%s :=' % name) 31 items_to_write.insert(0, '%s :=' % name)
33 32
34 f.write(' \\\n\t'.join(items_to_write)) 33 f.write(' \\\n\t'.join(items_to_write))
35 34
36 f.write('\n\n') 35 f.write('\n\n')
37 36
38 37
39 def write_local_vars(f, var_dict, append): 38 def write_local_vars(f, var_dict, append, name):
40 """ 39 """
41 Helper function to write all the members of var_dict to the makefile. 40 Helper function to write all the members of var_dict to the makefile.
42 @param f File open for writing (Android.mk) 41 @param f File open for writing (Android.mk)
43 @param var_dict VarsDict holding the unique values for one configuration. 42 @param var_dict VarsDict holding the unique values for one configuration.
44 @param append Whether to append to each makefile variable or overwrite it. 43 @param append Whether to append to each makefile variable or overwrite it.
44 @param name If not None, a string to be appended to each key.
45 """ 45 """
46 for key in var_dict.keys(): 46 for key in var_dict.keys():
47 if key == 'LOCAL_CFLAGS': 47 if key == 'LOCAL_CFLAGS':
48 # Always append LOCAL_CFLAGS. This allows us to define some early on in 48 # Always append LOCAL_CFLAGS. This allows us to define some early on in
49 # the makefile and not overwrite them. 49 # the makefile and not overwrite them.
50 _append = True 50 _append = True
51 elif key == 'KNOWN_TARGETS': 51 elif key == 'KNOWN_TARGETS':
52 # KNOWN_TARGETS are not needed in the final make file. 52 # KNOWN_TARGETS are not needed in the final make file.
53 continue 53 continue
54 else: 54 else:
55 _append = append 55 _append = append
56 write_group(f, key, var_dict[key], _append) 56 _key = key
57 if name:
58 _key += '_' + name
59 write_group(f, _key, var_dict[key], _append)
57 60
58 61
59 AUTOGEN_WARNING = ( 62 AUTOGEN_WARNING = (
60 """ 63 """
61 ############################################################################### 64 ###############################################################################
62 # 65 #
63 # THIS FILE IS AUTOGENERATED BY GYP_TO_ANDROID.PY. DO NOT EDIT. 66 # THIS FILE IS AUTOGENERATED BY GYP_TO_ANDROID.PY. DO NOT EDIT.
64 # 67 #
65 ############################################################################### 68 ###############################################################################
66 69
(...skipping 23 matching lines...) Expand all
90 # (b) You can update all the users of libskia to define SK_DEBUG when they are 93 # (b) You can update all the users of libskia to define SK_DEBUG when they are
91 # building their sources. 94 # building their sources.
92 # 95 #
93 # NOTE: If neither SK_DEBUG or SK_RELEASE are defined then Skia checks NDEBUG to 96 # NOTE: If neither SK_DEBUG or SK_RELEASE are defined then Skia checks NDEBUG to
94 # determine which build type to use. 97 # determine which build type to use.
95 ############################################################################### 98 ###############################################################################
96 99
97 """ 100 """
98 ) 101 )
99 102
103 class VarsDictData(object):
104 """
105 Helper class for keeping a VarsDict along with a name and an optional
106 condition.
107 """
108 def __init__(self, vars_dict, name, condition=None):
109 """
110 Create a new VarsDictData.
111 @param vars_dict A VarsDict. Can be accessed via self.vars_dict.
112 @param name Name associated with the VarsDict. Can be accessed via
113 self.name.
114 @param condition Optional string representing a condition. If not None,
115 used to create a conditional inside the makefile.
116 """
117 self.vars_dict = vars_dict
118 self.condition = condition
119 self.name = name
100 120
101 # TODO (scroggo): Currently write_android_mk has intimate knowledge about its 121 def write_android_mk(target_dir, common, the_rest):
102 # parameters: e.g. arm_neon keeps track of differences from arm, whereas the
103 # others keep track of differences from common. Consider reworking this.
104 def write_android_mk(target_dir, common, arm, arm_neon, x86, default):
105 """ 122 """
106 Given all the variables, write the final make file. 123 Given all the variables, write the final make file.
107 @param target_dir The full path to the directory to write Android.mk, or None 124 @param target_dir The full path to the directory to write Android.mk, or None
108 to use the current working directory. 125 to use the current working directory.
109 @param common VarsDict holding variables definitions common to all 126 @param common VarsDict holding variables definitions common to all
110 configurations. 127 configurations.
111 @param arm VarsDict holding variable definitions unique to arm. Will be 128 @param the_rest List of VarsDictData, one for each possible configuration.
epoger 2014/02/28 15:56:43 Again, I think a name like deviations, deviations_
scroggo 2014/02/28 16:16:57 Done.
112 written to the makefile inside an 'ifeq ($(TARGET_ARCH), arm)' 129 VarsDictData.name will be appended to each key before writing
113 block. 130 it to the makefile. VarsDictData.condition, if not None, will
114 @param arm_neon VarsDict holding variable definitions unique to arm with neon. 131 be written to the makefile as a condition to determine
epoger 2014/02/28 15:56:43 I don't think it's a big deal, but http://google-s
scroggo 2014/02/28 16:16:57 For now, I'd like to stick with the surrounding co
115 Will be written inside an 'ifeq ($(ARCH_ARM_HAVE_NEON),true)' 132 whether to include VarsDictData.vars_dict.
116 block nested inside an 'ifeq ($(TARGET_ARCH), arm)' block.
117 @param x86 VarsDict holding variable definitions unique to x86. Will be
118 written inside an 'ifeq ($(TARGET_ARCH),x86)' block.
119 @param default VarsDict holding variable definitions for an architecture
120 without custom optimizations.
121 TODO: Add mips.
122 """ 133 """
123 target_file = 'Android.mk' 134 target_file = 'Android.mk'
124 if target_dir: 135 if target_dir:
125 target_file = os.path.join(target_dir, target_file) 136 target_file = os.path.join(target_dir, target_file)
126 with open(target_file, 'w') as f: 137 with open(target_file, 'w') as f:
127 f.write(AUTOGEN_WARNING) 138 f.write(AUTOGEN_WARNING)
128 f.write('BASE_PATH := $(call my-dir)\n') 139 f.write('BASE_PATH := $(call my-dir)\n')
129 f.write('LOCAL_PATH:= $(call my-dir)\n') 140 f.write('LOCAL_PATH:= $(call my-dir)\n')
130 141
131 f.write(DEBUGGING_HELP) 142 f.write(DEBUGGING_HELP)
132 143
133 f.write('include $(CLEAR_VARS)\n') 144 f.write('include $(CLEAR_VARS)\n')
134 145
135 f.write('LOCAL_ARM_MODE := thumb\n') 146 f.write('LOCAL_ARM_MODE := thumb\n')
136 147
137 # need a flag to tell the C side when we're on devices with large memory 148 # need a flag to tell the C side when we're on devices with large memory
138 # budgets (i.e. larger than the low-end devices that initially shipped) 149 # budgets (i.e. larger than the low-end devices that initially shipped)
139 f.write('ifeq ($(ARCH_ARM_HAVE_VFP),true)\n') 150 # On arm, only define the flag if it has VFP. For all other architectures,
151 # always define the flag.
152 f.write('ifeq ($(TARGET_ARCH),arm)\n')
153 f.write('\tifeq ($(ARCH_ARM_HAVE_VFP),true)\n')
154 f.write('\t\tLOCAL_CFLAGS += -DANDROID_LARGE_MEMORY_DEVICE\n')
155 f.write('\tendif\n')
156 f.write('else\n')
140 f.write('\tLOCAL_CFLAGS += -DANDROID_LARGE_MEMORY_DEVICE\n') 157 f.write('\tLOCAL_CFLAGS += -DANDROID_LARGE_MEMORY_DEVICE\n')
141 f.write('endif\n\n') 158 f.write('endif\n\n')
142 159
143 f.write('ifeq ($(TARGET_ARCH),x86)\n')
144 f.write('\tLOCAL_CFLAGS += -DANDROID_LARGE_MEMORY_DEVICE\n')
145 f.write('endif\n\n')
146
147 f.write('# used for testing\n') 160 f.write('# used for testing\n')
148 f.write('#LOCAL_CFLAGS += -g -O0\n\n') 161 f.write('#LOCAL_CFLAGS += -g -O0\n\n')
149 162
150 f.write('ifeq ($(NO_FALLBACK_FONT),true)\n') 163 f.write('ifeq ($(NO_FALLBACK_FONT),true)\n')
151 f.write('\tLOCAL_CFLAGS += -DNO_FALLBACK_FONT\n') 164 f.write('\tLOCAL_CFLAGS += -DNO_FALLBACK_FONT\n')
152 f.write('endif\n\n') 165 f.write('endif\n\n')
153 166
154 write_local_vars(f, common, False) 167 write_local_vars(f, common, False, None)
155 168
156 f.write('ifeq ($(TARGET_ARCH),arm)\n') 169 for data in the_rest:
157 f.write('ifeq ($(ARCH_ARM_HAVE_NEON),true)\n') 170 if data.condition:
epoger 2014/02/28 15:56:43 Please consider adding unittests at some point. T
scroggo 2014/02/28 16:16:57 Will do. Added a TODO.
158 write_local_vars(f, arm_neon, True) 171 f.write('ifeq ($(%s), true)\n' % data.condition)
159 f.write('endif\n\n') 172 write_local_vars(f, data.vars_dict, True, data.name)
160 write_local_vars(f, arm, True) 173 if data.condition:
161 174 f.write('endif\n\n')
162 if variables.INCLUDE_X86_OPTS:
163 f.write('else ifeq ($(TARGET_ARCH),x86)\n')
164 write_local_vars(f, x86, True)
165
166 f.write('else\n')
167 write_local_vars(f, default, True)
168 f.write('endif\n\n')
169 175
170 f.write('include external/stlport/libstlport.mk\n') 176 f.write('include external/stlport/libstlport.mk\n')
171 f.write('LOCAL_MODULE:= libskia\n') 177 f.write('LOCAL_MODULE:= libskia\n')
172 f.write('include $(BUILD_SHARED_LIBRARY)\n') 178 f.write('include $(BUILD_SHARED_LIBRARY)\n')
173 179
174 180
175 181
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698