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

Side by Side Diff: build/android/gyp/pack_arm_relocations.py

Issue 456493002: Add native libraries to gn apks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 4 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
« no previous file with comments | « build/android/gyp/gcc_preprocess.py ('k') | build/android/gyp/push_libraries.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright 2014 The Chromium Authors. All rights reserved. 3 # Copyright 2014 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """Pack ARM relative relocations in a library (or copy unchanged). 7 """Pack ARM relative relocations in a library (or copy unchanged).
8 8
9 If --enable-packing and --configuration-name=='Release', invoke the 9 If --enable-packing and --configuration-name=='Release', invoke the
10 relocation_packer tool to pack the .rel.dyn section in the given library 10 relocation_packer tool to pack the .rel.dyn section in the given library
11 files. This step is inserted after the libraries are stripped. Packing 11 files. This step is inserted after the libraries are stripped. Packing
12 adds a new .android.rel.dyn section to the file and reduces the size of 12 adds a new .android.rel.dyn section to the file and reduces the size of
13 .rel.dyn accordingly. 13 .rel.dyn accordingly.
14 14
15 Currently packing only understands ARM32 shared libraries. For all other 15 Currently packing only understands ARM32 shared libraries. For all other
16 architectures --enable-packing should be set to zero. In this case the 16 architectures --enable-packing should be set to zero. In this case the
17 script copies files verbatim, with no attempt to pack relative relocations. 17 script copies files verbatim, with no attempt to pack relative relocations.
18 18
19 Any library listed in --exclude-packing-list is also copied verbatim, 19 Any library listed in --exclude-packing-list is also copied verbatim,
20 irrespective of any --enable-packing setting. Typically this would be 20 irrespective of any --enable-packing setting. Typically this would be
21 'libchromium_android_linker.so'. 21 'libchromium_android_linker.so'.
22 """ 22 """
23 23
24 import json
25 import optparse 24 import optparse
26 import os 25 import os
27 import shlex 26 import shlex
28 import shutil 27 import shutil
29 import sys 28 import sys
30 import tempfile 29 import tempfile
31 30
32 from util import build_utils 31 from util import build_utils
33 32
34 def PackArmLibraryRelocations(android_pack_relocations, 33 def PackArmLibraryRelocations(android_pack_relocations,
(...skipping 17 matching lines...) Expand all
52 build_utils.CheckOutput(pack_command) 51 build_utils.CheckOutput(pack_command)
53 52
54 53
55 def CopyArmLibraryUnchanged(library_path, output_path): 54 def CopyArmLibraryUnchanged(library_path, output_path):
56 if not build_utils.IsTimeStale(output_path, [library_path]): 55 if not build_utils.IsTimeStale(output_path, [library_path]):
57 return 56 return
58 57
59 shutil.copy(library_path, output_path) 58 shutil.copy(library_path, output_path)
60 59
61 60
62 def main(): 61 def main(args):
62 args = build_utils.ExpandFileArgs(args)
63 parser = optparse.OptionParser() 63 parser = optparse.OptionParser()
64 64
65 parser.add_option('--configuration-name', 65 parser.add_option('--configuration-name',
66 default='Release', 66 default='Release',
67 help='Gyp configuration name (i.e. Debug, Release)') 67 help='Gyp configuration name (i.e. Debug, Release)')
68 parser.add_option('--enable-packing', 68 parser.add_option('--enable-packing',
69 choices=['0', '1'], 69 choices=['0', '1'],
70 help=('Pack relocations if 1 and configuration name is \'Release\',' 70 help=('Pack relocations if 1 and configuration name is \'Release\','
71 ' otherwise plain file copy')) 71 ' otherwise plain file copy'))
72 parser.add_option('--exclude-packing-list', 72 parser.add_option('--exclude-packing-list',
73 default='', 73 default='',
74 help='Names of any libraries explicitly not packed') 74 help='Names of any libraries explicitly not packed')
75 parser.add_option('--android-pack-relocations', 75 parser.add_option('--android-pack-relocations',
76 help='Path to the ARM relocations packer binary') 76 help='Path to the ARM relocations packer binary')
77 parser.add_option('--android-objcopy', 77 parser.add_option('--android-objcopy',
78 help='Path to the toolchain\'s objcopy binary') 78 help='Path to the toolchain\'s objcopy binary')
79 parser.add_option('--stripped-libraries-dir', 79 parser.add_option('--stripped-libraries-dir',
80 help='Directory for stripped libraries') 80 help='Directory for stripped libraries')
81 parser.add_option('--packed-libraries-dir', 81 parser.add_option('--packed-libraries-dir',
82 help='Directory for packed libraries') 82 help='Directory for packed libraries')
83 parser.add_option('--libraries-file', 83 parser.add_option('--libraries',
84 help='Path to json file containing list of libraries') 84 help='List of libraries')
85 parser.add_option('--stamp', help='Path to touch on success') 85 parser.add_option('--stamp', help='Path to touch on success')
86 86
87 options, _ = parser.parse_args() 87 options, _ = parser.parse_args(args)
88 enable_packing = (options.enable_packing == '1' and 88 enable_packing = (options.enable_packing == '1' and
89 options.configuration_name == 'Release') 89 options.configuration_name == 'Release')
90 exclude_packing_set = set(shlex.split(options.exclude_packing_list)) 90 exclude_packing_set = set(shlex.split(options.exclude_packing_list))
91 91
92 with open(options.libraries_file, 'r') as libfile: 92 libraries = build_utils.ParseGypList(options.libraries)
93 libraries = json.load(libfile)
94 93
95 build_utils.MakeDirectory(options.packed_libraries_dir) 94 build_utils.MakeDirectory(options.packed_libraries_dir)
96 95
97 for library in libraries: 96 for library in libraries:
98 library_path = os.path.join(options.stripped_libraries_dir, library) 97 library_path = os.path.join(options.stripped_libraries_dir, library)
99 output_path = os.path.join(options.packed_libraries_dir, library) 98 output_path = os.path.join(options.packed_libraries_dir, library)
100 99
101 if enable_packing and library not in exclude_packing_set: 100 if enable_packing and library not in exclude_packing_set:
102 PackArmLibraryRelocations(options.android_pack_relocations, 101 PackArmLibraryRelocations(options.android_pack_relocations,
103 options.android_objcopy, 102 options.android_objcopy,
104 library_path, 103 library_path,
105 output_path) 104 output_path)
106 else: 105 else:
107 CopyArmLibraryUnchanged(library_path, output_path) 106 CopyArmLibraryUnchanged(library_path, output_path)
108 107
109 if options.stamp: 108 if options.stamp:
110 build_utils.Touch(options.stamp) 109 build_utils.Touch(options.stamp)
111 110
112 return 0 111 return 0
113 112
114 113
115 if __name__ == '__main__': 114 if __name__ == '__main__':
116 sys.exit(main()) 115 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « build/android/gyp/gcc_preprocess.py ('k') | build/android/gyp/push_libraries.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698