Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 #!/usr/bin/env python
3 import os
5 import locale
6 locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
8 header = """
9 # Please note this file is autogenerated from generate_mozbuild.py, so do not modify it directly
11 """
13 footer = """
15 # left out of UNIFIED_SOURCES for now; that's not C++ anyway, nothing else to unify it with
16 if not CONFIG['INTEL_ARCHITECTURE'] and CONFIG['CPU_ARCH'] == 'arm' and CONFIG['GNU_CC']:
17 SOURCES += [
18 'trunk/src/opts/memset.arm.S',
19 ]
20 if CONFIG['BUILD_ARM_NEON']:
21 SOURCES += [
22 'trunk/src/opts/memset16_neon.S',
23 'trunk/src/opts/memset32_neon.S',
24 ]
26 MSVC_ENABLE_PGO = True
28 FINAL_LIBRARY = 'gkmedias'
29 LOCAL_INCLUDES += [
30 'trunk/include/config',
31 'trunk/include/core',
32 'trunk/include/effects',
33 'trunk/include/gpu',
34 'trunk/include/images',
35 'trunk/include/lazy',
36 'trunk/include/pathops',
37 'trunk/include/pipe',
38 'trunk/include/ports',
39 'trunk/include/utils',
40 'trunk/include/utils/mac',
41 'trunk/include/utils/win',
42 'trunk/include/views',
43 'trunk/src/core',
44 'trunk/src/gpu',
45 'trunk/src/gpu/effects',
46 'trunk/src/gpu/gl',
47 'trunk/src/image',
48 'trunk/src/lazy',
49 'trunk/src/opts',
50 'trunk/src/sfnt',
51 'trunk/src/utils',
52 'trunk/src/utils/android',
53 'trunk/src/utils/mac',
54 'trunk/src/utils/win',
55 ]
57 DEFINES['SK_A32_SHIFT'] = 24
58 DEFINES['SK_R32_SHIFT'] = 16
59 DEFINES['SK_G32_SHIFT'] = 8
60 DEFINES['SK_B32_SHIFT'] = 0
62 if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gtk2', 'gtk3', 'qt', 'gonk', 'cocoa'):
63 DEFINES['SK_USE_POSIX_THREADS'] = 1
65 if CONFIG['INTEL_ARCHITECTURE'] and CONFIG['HAVE_TOOLCHAIN_SUPPORT_MSSSE3']:
66 DEFINES['SK_BUILD_SSSE3'] = 1
68 if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gonk'):
69 DEFINES['SK_FONTHOST_CAIRO_STANDALONE'] = 0
71 if (CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android') or \
72 (CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa') or \
73 (CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk') or \
74 (CONFIG['MOZ_WIDGET_TOOLKIT'] == 'qt') or \
75 CONFIG['MOZ_WIDGET_GTK']:
76 DEFINES['SK_FONTHOST_DOES_NOT_USE_FONTMGR'] = 1
78 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
79 DEFINES['SKIA_DLL'] = 1
80 DEFINES['GR_DLL'] = 1
82 if CONFIG['INTEL_ARCHITECTURE'] and CONFIG['GNU_CC']:
83 SOURCES['trunk/src/opts/SkBitmapFilter_opts_SSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
84 SOURCES['trunk/src/opts/SkBitmapProcState_opts_SSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
85 SOURCES['trunk/src/opts/SkBitmapProcState_opts_SSSE3.cpp'].flags += ['-mssse3']
86 SOURCES['trunk/src/opts/SkBlitRect_opts_SSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
87 SOURCES['trunk/src/opts/SkBlitRow_opts_SSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
88 SOURCES['trunk/src/opts/SkBlurImage_opts_SSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
89 SOURCES['trunk/src/opts/SkMorphology_opts_SSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
90 SOURCES['trunk/src/opts/SkUtils_opts_SSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
91 elif CONFIG['CPU_ARCH'] == 'arm' and CONFIG['GNU_CC'] and CONFIG['BUILD_ARM_NEON']:
92 DEFINES['__ARM_HAVE_OPTIONAL_NEON_SUPPORT'] = 1
93 DEFINES['USE_ANDROID_NDK_CPU_FEATURES'] = 0
95 DEFINES['SKIA_IMPLEMENTATION'] = 1
96 DEFINES['GR_IMPLEMENTATION'] = 1
98 if CONFIG['GNU_CXX']:
99 CXXFLAGS += [
100 '-Wno-overloaded-virtual',
101 '-Wno-unused-function',
102 ]
103 if not CONFIG['CLANG_CXX']:
104 CXXFLAGS += ['-Wno-logical-op']
105 """
107 import json
109 platforms = ['linux', 'mac', 'android', 'win']
111 custom_includes = {
112 'trunk/src/ports/SkAtomics_android.h': True,
113 'trunk/src/ports/SkAtomics_sync.h': True,
114 'trunk/src/ports/SkAtomics_win.h': True,
115 'trunk/src/ports/SkMutex_pthread.h': True,
116 'trunk/src/ports/SkMutex_win.h': True
117 }
119 def generate_includes():
120 includes = {}
121 for root, dirs, files in os.walk('trunk/include'):
122 for name in files:
123 if name.endswith('.h'):
124 includes[os.path.join(root, name)] = True
126 return dict(includes.items() + custom_includes.items())
128 def generate_opt_sources():
129 opt_sources = {'opts': {''}}
130 for root, dirs, files in os.walk('trunk/src/opts'):
131 for name in files:
132 if name.endswith('.cpp'):
133 opt_sources['opts'].add(os.path.join(root, name))
135 return opt_sources
137 def generate_platform_sources():
138 sources = {}
140 for plat in platforms:
141 if os.system("cd trunk && GYP_GENERATORS=dump_mozbuild ./gyp_skia -D OS=%s gyp/skia_lib.gyp" % plat) != 0:
142 print 'Failed to generate sources for ' + plat
143 continue
146 f = open('trunk/sources.json');
147 sources[plat] = set(json.load(f));
148 f.close()
150 return dict(sources.items() + generate_opt_sources().items())
153 def generate_separated_sources(platform_sources):
154 blacklist = [
155 'ChromeUtils',
156 'SkImageDecoder_',
157 '_gif',
158 'SkFontConfigParser_android',
159 'SkJpeg',
160 'SkXML',
161 'SkCity',
162 'GrGLCreateNativeInterface',
163 'fontconfig',
164 'SkThreadUtils_pthread_',
165 'SkImage_Codec',
166 'SkBitmapChecksummer',
167 'SkNativeGLContext',
168 'SkFontConfig',
169 'SkFontHost_win_dw',
170 'SkForceLinking',
171 'SkMovie',
172 'SkImageDecoder',
173 'SkImageEncoder',
174 'SkBitmapHasher',
175 'SkWGL',
176 'SkImages',
177 'SkDiscardableMemory_ashmem',
178 'SkMemory_malloc'
179 ]
181 def isblacklisted(value):
182 for item in blacklist:
183 if value.find(item) >= 0:
184 return True
186 return False
188 separated = {
189 'common': {
190 #'trunk/src/effects/gradients/SkGradientTileProc.cpp',
191 'trunk/src/gpu/gl/GrGLCreateNativeInterface_none.cpp',
192 'trunk/src/ports/SkDiscardableMemory_none.cpp',
193 'trunk/src/ports/SkImageDecoder_empty.cpp',
194 'trunk/src/ports/SkMemory_mozalloc.cpp',
195 # 'trunk/src/images/SkImages.cpp',
196 # 'trunk/src/images/SkImageRef.cpp',
197 # 'trunk/src/images/SkImageRef_GlobalPool.cpp',
198 # 'trunk/src/images/SkImageRefPool.cpp',
199 # 'trunk/src/images/SkImageDecoder.cpp',
200 # 'trunk/src/images/SkImageDecoder_Factory.cpp',
201 },
202 'android': {
203 # 'trunk/src/ports/SkDebug_android.cpp',
204 'trunk/src/ports/SkFontHost_android_old.cpp',
205 'trunk/src/ports/SkFontHost_cairo.cpp',
206 # 'trunk/src/ports/SkFontHost_FreeType.cpp',
207 # 'trunk/src/ports/SkFontHost_FreeType_common.cpp',
208 # 'trunk/src/ports/SkThread_pthread.cpp',
209 # 'trunk/src/ports/SkPurgeableMemoryBlock_android.cpp',
210 # 'trunk/src/ports/SkTime_Unix.cpp',
211 # 'trunk/src/utils/SkThreadUtils_pthread.cpp',
212 # 'trunk/src/images/SkImageRef_ashmem.cpp',
213 # 'trunk/src/utils/android/ashmem.cpp',
214 },
215 'linux': {
216 'trunk/src/ports/SkFontHost_cairo.cpp',
217 },
218 'intel': {
219 'trunk/src/opts/SkXfermode_opts_none.cpp',
220 },
221 'arm': {
222 'trunk/src/opts/SkUtils_opts_arm.cpp',
223 'trunk/src/core/SkUtilsArm.cpp',
224 },
225 'neon': {
226 'trunk/src/opts/SkBitmapProcState_arm_neon.cpp',
227 },
228 'none': {
229 'trunk/src/opts/SkUtils_opts_none.cpp',
230 }
231 }
233 for plat in platform_sources.keys():
234 if not separated.has_key(plat):
235 separated[plat] = set()
237 for value in platform_sources[plat]:
238 if isblacklisted(value):
239 continue
241 if value.find('_SSE') > 0 or value.find('_SSSE') > 0: #lol
242 separated['intel'].add(value)
243 continue
245 if value.find('_neon') > 0:
246 separated['neon'].add(value)
247 continue
249 if value.find('_arm') > 0:
250 separated['arm'].add(value)
251 continue
253 if value.find('_none') > 0:
254 separated['none'].add(value)
255 continue
257 found = True
258 for other in platforms:
259 if other == plat or not platform_sources.has_key(other):
260 continue
262 if not value in platform_sources[other]:
263 found = False
264 break;
266 if found:
267 separated['common'].add(value)
268 else:
269 separated[plat].add(value)
271 return separated
273 def uniq(seq):
274 seen = set()
275 seen_add = seen.add
276 return [ x for x in seq if x not in seen and not seen_add(x)]
278 def write_cflags(f, values, subsearch, cflag, indent):
279 def write_indent(indent):
280 for _ in range(indent):
281 f.write(' ')
283 val_list = uniq(sorted(map(lambda val: val.replace('../', 'trunk/'), values), key=lambda x: x.lower()))
285 if len(val_list) == 0:
286 return
288 for val in val_list:
289 if val.find(subsearch) > 0:
290 write_indent(indent)
291 f.write("SOURCES[\'" + val + "\'].flags += [\'" + cflag + "\']\n")
294 def write_list(f, name, values, indent):
295 def write_indent(indent):
296 for _ in range(indent):
297 f.write(' ')
299 val_list = uniq(sorted(map(lambda val: val.replace('../', 'trunk/'), values), key=lambda x: x.lower()))
301 if len(val_list) == 0:
302 return
304 write_indent(indent)
305 f.write(name + ' += [\n')
306 for val in val_list:
307 write_indent(indent + 4)
308 f.write('\'' + val + '\',\n')
310 write_indent(indent)
311 f.write(']\n')
313 def write_mozbuild(includes, sources):
314 filename = 'moz.build'
315 f = open(filename, 'w')
317 f.write(header)
319 write_list(f, 'EXPORTS.skia', includes, 0)
321 write_list(f, 'SOURCES', sources['common'], 0)
323 f.write("if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gonk'):\n")
324 write_list(f, 'SOURCES', sources['android'], 4)
326 f.write("if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':\n")
327 write_list(f, 'SOURCES', sources['mac'], 4)
329 f.write("if CONFIG['MOZ_WIDGET_GTK']:\n")
330 write_list(f, 'SOURCES', sources['linux'], 4)
332 f.write("if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'qt':\n")
333 write_list(f, 'SOURCES', sources['linux'], 4)
335 f.write("if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':\n")
336 write_list(f, 'SOURCES', sources['win'], 4)
338 f.write("\n\n")
339 f.write("if CONFIG['INTEL_ARCHITECTURE']:\n")
340 write_list(f, 'SOURCES', sources['intel'], 4)
342 f.write("elif CONFIG['CPU_ARCH'] == 'arm' and CONFIG['GNU_CC']:\n")
343 write_list(f, 'SOURCES', sources['arm'], 4)
345 f.write(" if CONFIG['BUILD_ARM_NEON']:\n")
346 write_list(f, 'SOURCES', sources['neon'], 8)
347 write_cflags(f, sources['neon'], 'neon', '-mfpu=neon', 8)
349 f.write("else:\n")
350 write_list(f, 'SOURCES', sources['none'], 4)
352 f.write(footer)
354 f.close()
356 print 'Wrote ' + filename
358 def main():
359 includes = generate_includes()
360 platform_sources = generate_platform_sources()
361 separated_sources = generate_separated_sources(platform_sources)
362 write_mozbuild(includes, separated_sources)
365 if __name__ == '__main__':
366 main()