blob: 4dac40dee157ba3a3a7a0df6427a12b8747e1587 [file] [log] [blame]
Mike Klein308b5ac2016-12-06 16:03:52 -05001#!/usr/bin/env python
2#
3# Copyright 2016 Google Inc.
4#
5# Use of this source code is governed by a BSD-style license that can be
6# found in the LICENSE file.
7
8# Generate Android.bp for Skia from GN configuration.
9
Martin Vejdarskibeaaf472020-03-03 13:53:20 +070010from __future__ import print_function
11
Mike Klein308b5ac2016-12-06 16:03:52 -050012import os
13import pprint
14import string
15import subprocess
Mike Klein308b5ac2016-12-06 16:03:52 -050016import tempfile
17
Derek Sollenberger5d3f7702018-02-01 09:22:53 -050018import gn_to_bp_utils
19
Mike Klein308b5ac2016-12-06 16:03:52 -050020# First we start off with a template for Android.bp,
21# with holes for source lists and include directories.
22bp = string.Template('''// This file is autogenerated by gn_to_bp.py.
23
Derek Sollenberger5a932162017-09-21 14:25:14 -040024cc_library_static {
Mike Kleinee43f6f2016-12-12 14:09:38 -050025 name: "libskia",
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -050026 host_supported: true,
Mike Kleinee43f6f2016-12-12 14:09:38 -050027 cflags: [
Leon Scroggins III981a31e2017-10-06 11:53:53 -040028 $cflags
29 ],
30
31 cppflags:[
32 $cflags_cc
Mike Kleinee43f6f2016-12-12 14:09:38 -050033 ],
Mike Klein308b5ac2016-12-06 16:03:52 -050034
Mike Kleinee43f6f2016-12-12 14:09:38 -050035 export_include_dirs: [
36 $export_includes
37 ],
Mike Klein27eb22b2016-12-07 12:27:56 -050038
Mike Kleinee43f6f2016-12-12 14:09:38 -050039 local_include_dirs: [
40 $local_includes
41 ],
Mike Klein27eb22b2016-12-07 12:27:56 -050042
Mike Kleinee43f6f2016-12-12 14:09:38 -050043 srcs: [
44 $srcs
45 ],
Mike Klein308b5ac2016-12-06 16:03:52 -050046
Mike Kleinee43f6f2016-12-12 14:09:38 -050047 arch: {
48 arm: {
49 srcs: [
50 $arm_srcs
51 ],
Mike Klein27eb22b2016-12-07 12:27:56 -050052
Leon Scroggins IIIf7332d32017-08-10 09:09:54 -040053 neon: {
Mike Kleinee43f6f2016-12-12 14:09:38 -050054 srcs: [
55 $arm_neon_srcs
56 ],
57 },
58 },
59
60 arm64: {
61 srcs: [
62 $arm64_srcs
63 ],
64 },
65
Mike Kleinee43f6f2016-12-12 14:09:38 -050066 x86: {
67 srcs: [
68 $x86_srcs
69 ],
70 },
71
72 x86_64: {
73 srcs: [
74 $x86_srcs
75 ],
76 },
Mike Klein308b5ac2016-12-06 16:03:52 -050077 },
Mike Klein27eb22b2016-12-07 12:27:56 -050078
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -050079 target: {
80 android: {
81 srcs: [
82 $android_srcs
83 "third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp",
84 ],
85 local_include_dirs: [
Mike Kleinc0bd9f92019-04-23 12:05:21 -050086 "android",
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -050087 "third_party/vulkanmemoryallocator/",
88 ],
89 export_include_dirs: [
Mike Kleinc0bd9f92019-04-23 12:05:21 -050090 "android",
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -050091 ],
92 },
93 linux_glibc: {
94 cflags: [
95 "-mssse3",
96 ],
97 srcs: [
98 $linux_srcs
99 ],
100 local_include_dirs: [
Mike Kleinc0bd9f92019-04-23 12:05:21 -0500101 "linux",
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500102 ],
103 export_include_dirs: [
Mike Kleinc0bd9f92019-04-23 12:05:21 -0500104 "linux",
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500105 ],
106 },
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500107 darwin: {
108 cflags: [
109 "-mssse3",
110 ],
111 srcs: [
112 $mac_srcs
113 ],
114 local_include_dirs: [
Mike Kleinc0bd9f92019-04-23 12:05:21 -0500115 "mac",
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500116 ],
117 export_include_dirs: [
Mike Kleinc0bd9f92019-04-23 12:05:21 -0500118 "mac",
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500119 ],
120 },
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500121 windows: {
122 cflags: [
123 "-mssse3",
124 "-Wno-unknown-pragmas",
125 ],
126 srcs: [
127 $win_srcs
128 ],
129 local_include_dirs: [
Mike Kleinc0bd9f92019-04-23 12:05:21 -0500130 "win",
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500131 ],
132 export_include_dirs: [
Mike Kleinc0bd9f92019-04-23 12:05:21 -0500133 "win",
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500134 ],
135 },
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500136 },
137
Zhizhou Yange18b7792017-12-11 10:37:44 -0800138 defaults: ["skia_deps",
139 "skia_pgo",
140 ],
141}
142
143// Build libskia with PGO by default.
144// Location of PGO profile data is defined in build/soong/cc/pgo.go
145// and is separate from skia.
146// To turn it off, set ANDROID_PGO_NO_PROFILE_USE environment variable
147// or set enable_profile_use property to false.
148cc_defaults {
149 name: "skia_pgo",
150 pgo: {
151 instrumentation: true,
Pirama Arumuga Nainar068ccaa2018-03-05 10:20:38 -0800152 profile_file: "hwui/hwui.profdata",
Zhizhou Yange18b7792017-12-11 10:37:44 -0800153 benchmarks: ["hwui", "skia"],
Pirama Arumuga Nainar068ccaa2018-03-05 10:20:38 -0800154 enable_profile_use: true,
Zhizhou Yange18b7792017-12-11 10:37:44 -0800155 },
Derek Sollenberger5a932162017-09-21 14:25:14 -0400156}
157
Pirama Arumuga Nainarde2b95e2017-12-13 11:07:39 -0800158// "defaults" property to disable profile use for Skia tools and benchmarks.
159cc_defaults {
160 name: "skia_pgo_no_profile_use",
161 defaults: [
162 "skia_pgo",
163 ],
164 pgo: {
165 enable_profile_use: false,
166 },
167}
168
Derek Sollenberger5a932162017-09-21 14:25:14 -0400169cc_defaults {
170 name: "skia_deps",
Mike Kleinee43f6f2016-12-12 14:09:38 -0500171 shared_libs: [
Derek Sollenberger3de76842019-01-08 13:36:38 -0500172 "libandroidicu",
Mike Kleinee43f6f2016-12-12 14:09:38 -0500173 "libdng_sdk",
174 "libexpat",
175 "libft2",
Mike Kleinee43f6f2016-12-12 14:09:38 -0500176 "libjpeg",
177 "liblog",
178 "libpiex",
179 "libpng",
Mike Kleinee43f6f2016-12-12 14:09:38 -0500180 "libz",
181 ],
182 static_libs: [
Matt Saretta3091092017-02-20 12:50:52 -0500183 "libarect",
Mike Kleinee43f6f2016-12-12 14:09:38 -0500184 "libsfntly",
185 "libwebp-decode",
186 "libwebp-encode",
187 ],
Derek Sollenberger5a932162017-09-21 14:25:14 -0400188 group_static_libs: true,
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500189 target: {
190 android: {
191 shared_libs: [
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500192 "libcutils",
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500193 "libEGL",
194 "libGLESv2",
195 "libheif",
196 "libvulkan",
197 "libnativewindow",
198 ],
Stan Iliev12b89162019-03-11 13:33:02 -0400199 export_shared_lib_headers: [
200 "libvulkan",
201 ],
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500202 },
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500203 host: {
204 static_libs: [
205 "libcutils",
206 ],
207 },
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500208 darwin: {
209 host_ldlibs: [
210 "-framework AppKit",
211 ],
212 },
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500213 windows: {
Leon Scroggins IIIa09d2322020-02-14 16:07:56 -0500214 enabled: true,
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500215 host_ldlibs: [
216 "-lgdi32",
217 "-loleaut32",
218 "-lole32",
219 "-lopengl32",
220 "-luuid",
221 "-lwindowscodecs",
222 ],
223 },
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500224 },
Derek Sollenberger5a932162017-09-21 14:25:14 -0400225}
226
227cc_defaults {
228 name: "skia_tool_deps",
229 defaults: [
Pirama Arumuga Nainarde2b95e2017-12-13 11:07:39 -0800230 "skia_deps",
231 "skia_pgo_no_profile_use"
Derek Sollenberger5a932162017-09-21 14:25:14 -0400232 ],
233 static_libs: [
Derek Sollenberger5a932162017-09-21 14:25:14 -0400234 "libskia",
235 ],
236 cflags: [
Derek Sollenberger1821a5b2018-09-11 14:48:36 -0400237 "-Wno-implicit-fallthrough",
Derek Sollenberger9a72ae12017-12-14 13:01:30 -0500238 "-Wno-unused-parameter",
239 "-Wno-unused-variable",
Derek Sollenberger5a932162017-09-21 14:25:14 -0400240 ],
Leon Scroggins III6ccd2ca2017-01-26 17:21:27 -0500241}
242
243cc_test {
244 name: "skia_dm",
245
Derek Sollenberger5a932162017-09-21 14:25:14 -0400246 defaults: [
247 "skia_tool_deps"
Leon Scroggins III6ccd2ca2017-01-26 17:21:27 -0500248 ],
249
250 local_include_dirs: [
251 $dm_includes
252 ],
253
254 srcs: [
255 $dm_srcs
256 ],
Dongwon Kang0c7861f2018-02-16 10:55:21 -0800257
258 shared_libs: [
259 "libbinder",
260 "libutils",
261 ],
Leon Scroggins III6ccd2ca2017-01-26 17:21:27 -0500262}
263
264cc_test {
265 name: "skia_nanobench",
266
Derek Sollenberger5a932162017-09-21 14:25:14 -0400267 defaults: [
268 "skia_tool_deps"
Leon Scroggins III6ccd2ca2017-01-26 17:21:27 -0500269 ],
270
271 local_include_dirs: [
272 $nanobench_includes
273 ],
274
275 srcs: [
276 $nanobench_srcs
277 ],
Pirama Arumuga Nainar68c3fac2018-01-09 21:05:55 -0800278
279 data: [
Pirama Arumuga Nainar5be3c132019-09-30 17:18:02 -0700280 "resources/**/*",
Pirama Arumuga Nainar68c3fac2018-01-09 21:05:55 -0800281 ],
Mike Kleinee43f6f2016-12-12 14:09:38 -0500282}''')
Mike Klein308b5ac2016-12-06 16:03:52 -0500283
284# We'll run GN to get the main source lists and include directories for Skia.
Leon Scroggins IIIa55445e2018-11-28 16:09:35 -0500285def generate_args(target_os, enable_gpu):
286 d = {
287 'is_official_build': 'true',
Mike Klein308b5ac2016-12-06 16:03:52 -0500288
Leon Scroggins IIIa55445e2018-11-28 16:09:35 -0500289 # gn_to_bp_utils' GetArchSources will take care of architecture-specific
290 # files.
291 'target_cpu': '"none"',
Hal Canary23564b92018-09-07 14:33:14 -0400292
Leon Scroggins III63cfb362020-04-24 13:00:48 -0400293 'skia_enable_android_utils': 'true',
Leon Scroggins IIIa55445e2018-11-28 16:09:35 -0500294 # Use the custom FontMgr, as the framework will handle fonts.
295 'skia_enable_fontmgr_custom': 'false',
296 'skia_enable_fontmgr_custom_empty': 'true',
297 'skia_enable_fontmgr_android': 'false',
Leon Scroggins III631dbc82019-03-04 13:54:02 -0500298 'skia_enable_fontmgr_win': 'false',
299 'skia_enable_fontmgr_win_gdi': 'false',
Leon Scroggins IIIa55445e2018-11-28 16:09:35 -0500300 'skia_use_fonthost_mac': 'false',
301
Nathaniel Nifong60c37e72019-10-16 11:21:47 -0400302 # enable features used in skia_nanobench
303 'skia_enable_sksl_interpreter': 'true',
304 'skia_tools_require_resources': 'true',
305
Leon Scroggins IIIa55445e2018-11-28 16:09:35 -0500306 'skia_use_freetype': 'true',
307 'skia_use_fontconfig': 'false',
308 'skia_use_fixed_gamma_text': 'true',
Nathaniel Nifong0c4fbf12019-06-25 15:48:47 -0400309 'skia_include_multiframe_procs': 'false',
Hal Canary2dad9902019-11-20 16:01:31 -0500310 'skia_libgifcodec_path': '"third_party/libgifcodec"',
Leon Scroggins IIIa55445e2018-11-28 16:09:35 -0500311 }
312 d['target_os'] = target_os
313 if target_os == '"android"':
314 d['skia_enable_tools'] = 'true'
315 d['skia_use_libheif'] = 'true'
Nathaniel Nifong0c4fbf12019-06-25 15:48:47 -0400316 d['skia_include_multiframe_procs'] = 'true'
Leon Scroggins IIIa55445e2018-11-28 16:09:35 -0500317 else:
318 d['skia_use_libheif'] = 'false'
319
320 if enable_gpu:
321 d['skia_use_vulkan'] = 'true'
322 else:
323 d['skia_use_vulkan'] = 'false'
324 d['skia_enable_gpu'] = 'false'
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500325
326 if target_os == '"win"':
327 # The Android Windows build system does not provide FontSub.h
328 d['skia_use_xps'] = 'false'
329
330 # BUILDCONFIG.gn expects these to be set when building for Windows, but
331 # we're just creating Android.bp, so we don't need them. Populate with
332 # some dummy values.
333 d['win_vc'] = '"dummy_version"'
334 d['win_sdk_version'] = '"dummy_version"'
Hal Canaryf72728e2019-07-10 11:24:52 -0400335 d['win_toolchain_version'] = '"dummy_version"'
Leon Scroggins IIIa55445e2018-11-28 16:09:35 -0500336 return d
337
338gn_args = generate_args('"android"', True)
339gn_args_linux = generate_args('"linux"', False)
340gn_args_mac = generate_args('"mac"', False)
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500341gn_args_win = generate_args('"win"', False)
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500342
Derek Sollenberger5d3f7702018-02-01 09:22:53 -0500343js = gn_to_bp_utils.GenerateJSONFromGN(gn_args)
Mike Klein308b5ac2016-12-06 16:03:52 -0500344
345def strip_slashes(lst):
Ben Wagnere1275232017-02-23 18:00:06 -0500346 return {str(p.lstrip('/')) for p in lst}
Mike Klein27eb22b2016-12-07 12:27:56 -0500347
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500348android_srcs = strip_slashes(js['targets']['//:skia']['sources'])
Leon Scroggins III981a31e2017-10-06 11:53:53 -0400349cflags = strip_slashes(js['targets']['//:skia']['cflags'])
350cflags_cc = strip_slashes(js['targets']['//:skia']['cflags_cc'])
Mike Klein308b5ac2016-12-06 16:03:52 -0500351local_includes = strip_slashes(js['targets']['//:skia']['include_dirs'])
352export_includes = strip_slashes(js['targets']['//:public']['include_dirs'])
353
Leon Scroggins III6ccd2ca2017-01-26 17:21:27 -0500354dm_srcs = strip_slashes(js['targets']['//:dm']['sources'])
355dm_includes = strip_slashes(js['targets']['//:dm']['include_dirs'])
356
357nanobench_target = js['targets']['//:nanobench']
358nanobench_srcs = strip_slashes(nanobench_target['sources'])
359nanobench_includes = strip_slashes(nanobench_target['include_dirs'])
360
Derek Sollenberger5d3f7702018-02-01 09:22:53 -0500361gn_to_bp_utils.GrabDependentValues(js, '//:dm', 'sources', dm_srcs, 'skia')
362gn_to_bp_utils.GrabDependentValues(js, '//:nanobench', 'sources',
363 nanobench_srcs, 'skia')
Mike Klein27eb22b2016-12-07 12:27:56 -0500364
Mike Kleinf536c452018-05-01 10:36:42 -0400365# skcms is a little special, kind of a second-party library.
Brian Osman35ea04d2019-05-01 11:03:36 -0400366local_includes.add("include/third_party/skcms")
367dm_includes .add("include/third_party/skcms")
Mike Kleinf536c452018-05-01 10:36:42 -0400368
Mike Kleind505b192018-09-05 15:55:25 -0400369# Android's build will choke if we list headers.
370def strip_headers(sources):
371 return {s for s in sources if not s.endswith('.h')}
372
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500373gn_to_bp_utils.GrabDependentValues(js, '//:skia', 'sources', android_srcs, None)
374android_srcs = strip_headers(android_srcs)
375
376js_linux = gn_to_bp_utils.GenerateJSONFromGN(gn_args_linux)
377linux_srcs = strip_slashes(js_linux['targets']['//:skia']['sources'])
378gn_to_bp_utils.GrabDependentValues(js_linux, '//:skia', 'sources', linux_srcs,
379 None)
380linux_srcs = strip_headers(linux_srcs)
381
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500382js_mac = gn_to_bp_utils.GenerateJSONFromGN(gn_args_mac)
383mac_srcs = strip_slashes(js_mac['targets']['//:skia']['sources'])
384gn_to_bp_utils.GrabDependentValues(js_mac, '//:skia', 'sources', mac_srcs,
385 None)
386mac_srcs = strip_headers(mac_srcs)
387
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500388js_win = gn_to_bp_utils.GenerateJSONFromGN(gn_args_win)
389win_srcs = strip_slashes(js_win['targets']['//:skia']['sources'])
390gn_to_bp_utils.GrabDependentValues(js_win, '//:skia', 'sources', win_srcs,
391 None)
392win_srcs = strip_headers(win_srcs)
393
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500394srcs = android_srcs.intersection(linux_srcs).intersection(mac_srcs)
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500395srcs = srcs.intersection(win_srcs)
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500396android_srcs = android_srcs.difference(srcs)
397linux_srcs = linux_srcs.difference(srcs)
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500398mac_srcs = mac_srcs.difference(srcs)
399win_srcs = win_srcs.difference(srcs)
Mike Kleind505b192018-09-05 15:55:25 -0400400dm_srcs = strip_headers(dm_srcs)
401nanobench_srcs = strip_headers(nanobench_srcs)
Mike Klein27eb22b2016-12-07 12:27:56 -0500402
Derek Sollenberger5d3f7702018-02-01 09:22:53 -0500403cflags = gn_to_bp_utils.CleanupCFlags(cflags)
404cflags_cc = gn_to_bp_utils.CleanupCCFlags(cflags_cc)
Leon Scroggins III981a31e2017-10-06 11:53:53 -0400405
Leon Scroggins III4f8a4672016-12-19 09:32:21 -0500406here = os.path.dirname(__file__)
Derek Sollenberger5d3f7702018-02-01 09:22:53 -0500407defs = gn_to_bp_utils.GetArchSources(os.path.join(here, 'opts.gni'))
Mike Klein308b5ac2016-12-06 16:03:52 -0500408
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500409def get_defines(json):
410 return {str(d) for d in json['targets']['//:skia']['defines']}
411android_defines = get_defines(js)
412linux_defines = get_defines(js_linux)
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500413mac_defines = get_defines(js_mac)
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500414win_defines = get_defines(js_win)
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500415
416def mkdir_if_not_exists(path):
417 if not os.path.exists(path):
Mike Kleinc0bd9f92019-04-23 12:05:21 -0500418 os.makedirs(path)
419mkdir_if_not_exists('android/include/config/')
420mkdir_if_not_exists('linux/include/config/')
421mkdir_if_not_exists('mac/include/config/')
422mkdir_if_not_exists('win/include/config/')
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500423
424platforms = { 'IOS', 'MAC', 'WIN', 'ANDROID', 'UNIX' }
425
426def disallow_platforms(config, desired):
427 with open(config, 'a') as f:
428 p = sorted(platforms.difference({ desired }))
429 s = '#if '
430 for i in range(len(p)):
431 s = s + 'defined(SK_BUILD_FOR_%s)' % p[i]
432 if i < len(p) - 1:
433 s += ' || '
434 if i % 2 == 1:
435 s += '\\\n '
Martin Vejdarskibeaaf472020-03-03 13:53:20 +0700436 print(s, file=f)
437 print(' #error "Only SK_BUILD_FOR_%s should be defined!"' % desired, file=f)
438 print('#endif', file=f)
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500439
440def append_to_file(config, s):
441 with open(config, 'a') as f:
Martin Vejdarskibeaaf472020-03-03 13:53:20 +0700442 print(s, file=f)
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500443
Mike Kleinc0bd9f92019-04-23 12:05:21 -0500444android_config = 'android/include/config/SkUserConfig.h'
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500445gn_to_bp_utils.WriteUserConfig(android_config, android_defines)
446append_to_file(android_config, '''
447#ifndef SK_BUILD_FOR_ANDROID
448 #error "SK_BUILD_FOR_ANDROID must be defined!"
449#endif''')
450disallow_platforms(android_config, 'ANDROID')
451
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500452def write_config(config_path, defines, platform):
453 gn_to_bp_utils.WriteUserConfig(config_path, defines)
454 append_to_file(config_path, '''
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500455// Correct SK_BUILD_FOR flags that may have been set by
Mike Klein81d35a72020-02-05 10:17:57 -0600456// SkTypes.h/Android.bp
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500457#ifndef SK_BUILD_FOR_%s
458 #define SK_BUILD_FOR_%s
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500459#endif
460#ifdef SK_BUILD_FOR_ANDROID
461 #undef SK_BUILD_FOR_ANDROID
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500462#endif''' % (platform, platform))
463 disallow_platforms(config_path, platform)
464
Mike Kleinc0bd9f92019-04-23 12:05:21 -0500465write_config('linux/include/config/SkUserConfig.h', linux_defines, 'UNIX')
466write_config('mac/include/config/SkUserConfig.h', mac_defines, 'MAC')
467write_config('win/include/config/SkUserConfig.h', win_defines, 'WIN')
Mike Klein308b5ac2016-12-06 16:03:52 -0500468
Mike Kleinee43f6f2016-12-12 14:09:38 -0500469# Turn a list of strings into the style bpfmt outputs.
Leon Scroggins III6ccd2ca2017-01-26 17:21:27 -0500470def bpfmt(indent, lst, sort=True):
471 if sort:
472 lst = sorted(lst)
473 return ('\n' + ' '*indent).join('"%s",' % v for v in lst)
Mike Klein308b5ac2016-12-06 16:03:52 -0500474
475# OK! We have everything to fill in Android.bp...
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500476with open('Android.bp', 'w') as Android_bp:
Martin Vejdarskibeaaf472020-03-03 13:53:20 +0700477 print(bp.substitute({
Mike Kleinee43f6f2016-12-12 14:09:38 -0500478 'export_includes': bpfmt(8, export_includes),
479 'local_includes': bpfmt(8, local_includes),
480 'srcs': bpfmt(8, srcs),
Leon Scroggins III981a31e2017-10-06 11:53:53 -0400481 'cflags': bpfmt(8, cflags, False),
482 'cflags_cc': bpfmt(8, cflags_cc),
Mike Klein308b5ac2016-12-06 16:03:52 -0500483
Mike Kleind505b192018-09-05 15:55:25 -0400484 'arm_srcs': bpfmt(16, strip_headers(defs['armv7'])),
485 'arm_neon_srcs': bpfmt(20, strip_headers(defs['neon'])),
486 'arm64_srcs': bpfmt(16, strip_headers(defs['arm64'] +
487 defs['crc32'])),
Mike Kleind505b192018-09-05 15:55:25 -0400488 'x86_srcs': bpfmt(16, strip_headers(defs['sse2'] +
489 defs['ssse3'] +
490 defs['sse41'] +
491 defs['sse42'] +
492 defs['avx' ] +
493 defs['hsw' ])),
Leon Scroggins III6ccd2ca2017-01-26 17:21:27 -0500494
Leon Scroggins III6ccd2ca2017-01-26 17:21:27 -0500495 'dm_includes' : bpfmt(8, dm_includes),
496 'dm_srcs' : bpfmt(8, dm_srcs),
497
498 'nanobench_includes' : bpfmt(8, nanobench_includes),
499 'nanobench_srcs' : bpfmt(8, nanobench_srcs),
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500500
501 'android_srcs': bpfmt(10, android_srcs),
502 'linux_srcs': bpfmt(10, linux_srcs),
Leon Scroggins III85e22fc2018-11-28 08:58:47 -0500503 'mac_srcs': bpfmt(10, mac_srcs),
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500504 'win_srcs': bpfmt(10, win_srcs),
Martin Vejdarskibeaaf472020-03-03 13:53:20 +0700505 }), file=Android_bp)