xref: /aosp_15_r20/external/skia/tools/skqp/make_universal_apk.py (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker#! /usr/bin/env python
2*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2018 Google LLC.
3*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file.
5*c8dee2aaSAndroid Build Coastguard Worker
6*c8dee2aaSAndroid Build Coastguard Worker'''
7*c8dee2aaSAndroid Build Coastguard WorkerThis script can be run with no arguments, in which case it will produce an
8*c8dee2aaSAndroid Build Coastguard WorkerAPK with native libraries for all four architectures: arm, arm64, x86, and
9*c8dee2aaSAndroid Build Coastguard Workerx64.  You can instead list the architectures you want as arguments to this
10*c8dee2aaSAndroid Build Coastguard Workerscript.  For example:
11*c8dee2aaSAndroid Build Coastguard Worker
12*c8dee2aaSAndroid Build Coastguard Worker    python make_universal_apk.py arm x86
13*c8dee2aaSAndroid Build Coastguard Worker
14*c8dee2aaSAndroid Build Coastguard WorkerThe environment variables ANDROID_NDK_HOME and ANDROID_HOME must be set to the
15*c8dee2aaSAndroid Build Coastguard Workerlocations of the Android NDK and SDK.
16*c8dee2aaSAndroid Build Coastguard Worker
17*c8dee2aaSAndroid Build Coastguard WorkerAdditionally, `ninja` should be in your path.
18*c8dee2aaSAndroid Build Coastguard Worker
19*c8dee2aaSAndroid Build Coastguard WorkerIt assumes that the source tree is in the desired state, e.g. by having
20*c8dee2aaSAndroid Build Coastguard Workerrun 'python tools/git-sync-deps' in the root of the skia checkout.
21*c8dee2aaSAndroid Build Coastguard Worker
22*c8dee2aaSAndroid Build Coastguard WorkerAlso:
23*c8dee2aaSAndroid Build Coastguard Worker  * If the environment variable SKQP_BUILD_DIR is set, many of the
24*c8dee2aaSAndroid Build Coastguard Worker    intermediate build objects will be placed here.
25*c8dee2aaSAndroid Build Coastguard Worker  * If the environment variable SKQP_OUTPUT_DIR is set, the final APK
26*c8dee2aaSAndroid Build Coastguard Worker    will be placed in this directory.
27*c8dee2aaSAndroid Build Coastguard Worker  * If the environment variable SKQP_DEBUG is set, Skia will be compiled
28*c8dee2aaSAndroid Build Coastguard Worker    in debug mode.
29*c8dee2aaSAndroid Build Coastguard Worker'''
30*c8dee2aaSAndroid Build Coastguard Worker
31*c8dee2aaSAndroid Build Coastguard Workerimport os
32*c8dee2aaSAndroid Build Coastguard Workerimport sys
33*c8dee2aaSAndroid Build Coastguard Worker
34*c8dee2aaSAndroid Build Coastguard Workerimport create_apk
35*c8dee2aaSAndroid Build Coastguard Worker
36*c8dee2aaSAndroid Build Coastguard Workerdef make_apk(opts):
37*c8dee2aaSAndroid Build Coastguard Worker    assert '/' in [os.sep, os.altsep]  # 'a/b' over os.path.join('a', 'b')
38*c8dee2aaSAndroid Build Coastguard Worker
39*c8dee2aaSAndroid Build Coastguard Worker    skia_dir = os.path.dirname(__file__) + '/../..'
40*c8dee2aaSAndroid Build Coastguard Worker    create_apk.makedirs(opts.build_dir)
41*c8dee2aaSAndroid Build Coastguard Worker    assets_dir = skia_dir + '/platform_tools/android/apps/skqp/src/main/assets'
42*c8dee2aaSAndroid Build Coastguard Worker    resources_path = assets_dir + '/resources'
43*c8dee2aaSAndroid Build Coastguard Worker
44*c8dee2aaSAndroid Build Coastguard Worker    with create_apk.RemoveFiles(resources_path):  # always clean up
45*c8dee2aaSAndroid Build Coastguard Worker        create_apk.remove(resources_path)
46*c8dee2aaSAndroid Build Coastguard Worker        os.symlink('../../../../../../../resources', resources_path)
47*c8dee2aaSAndroid Build Coastguard Worker
48*c8dee2aaSAndroid Build Coastguard Worker        create_apk.create_apk(opts)
49*c8dee2aaSAndroid Build Coastguard Worker
50*c8dee2aaSAndroid Build Coastguard Workerdef main():
51*c8dee2aaSAndroid Build Coastguard Worker    options = create_apk.SkQP_Build_Options()
52*c8dee2aaSAndroid Build Coastguard Worker    if options.error:
53*c8dee2aaSAndroid Build Coastguard Worker        sys.stderr.write(options.error + __doc__)
54*c8dee2aaSAndroid Build Coastguard Worker        sys.exit(1)
55*c8dee2aaSAndroid Build Coastguard Worker    options.write(sys.stdout)
56*c8dee2aaSAndroid Build Coastguard Worker    make_apk(options)
57*c8dee2aaSAndroid Build Coastguard Worker
58*c8dee2aaSAndroid Build Coastguard Workerif __name__ == '__main__':
59*c8dee2aaSAndroid Build Coastguard Worker    main()
60