| OLD | NEW |
| 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 relocations in a library (or copy unchanged). | 7 """Pack 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 or .rela.dyn section in the given | 10 relocation_packer tool to pack the .rel.dyn or .rela.dyn section in the given |
| 11 library files. This step is inserted after the libraries are stripped. | 11 library files. This step is inserted after the libraries are stripped. |
| 12 | 12 |
| 13 If --enable-packing is zero, the script copies files verbatim, with no | 13 If --enable-packing is zero, the script copies files verbatim, with no |
| 14 attempt to pack relocations. | 14 attempt to pack relocations. |
| 15 | |
| 16 Any library listed in --exclude-packing-list is also copied verbatim, | |
| 17 irrespective of any --enable-packing setting. Typically this would be | |
| 18 'libchromium_android_linker.so'. | |
| 19 """ | 15 """ |
| 20 | 16 |
| 17 import ast |
| 21 import optparse | 18 import optparse |
| 22 import os | 19 import os |
| 23 import shutil | 20 import shutil |
| 24 import sys | 21 import sys |
| 25 import tempfile | 22 import tempfile |
| 26 | 23 |
| 27 from util import build_utils | 24 from util import build_utils |
| 28 | 25 |
| 29 def PackLibraryRelocations(android_pack_relocations, library_path, output_path): | 26 def PackLibraryRelocations(android_pack_relocations, library_path, output_path): |
| 30 shutil.copy(library_path, output_path) | 27 shutil.copy(library_path, output_path) |
| (...skipping 14 matching lines...) Expand all Loading... |
| 45 'before copying files to it. This is highly recommended to ' | 42 'before copying files to it. This is highly recommended to ' |
| 46 'ensure that no stale files are left in the directory.') | 43 'ensure that no stale files are left in the directory.') |
| 47 | 44 |
| 48 parser.add_option('--configuration-name', | 45 parser.add_option('--configuration-name', |
| 49 default='Release', | 46 default='Release', |
| 50 help='Gyp configuration name (i.e. Debug, Release)') | 47 help='Gyp configuration name (i.e. Debug, Release)') |
| 51 parser.add_option('--enable-packing', | 48 parser.add_option('--enable-packing', |
| 52 choices=['0', '1'], | 49 choices=['0', '1'], |
| 53 help=('Pack relocations if 1 and configuration name is \'Release\',' | 50 help=('Pack relocations if 1 and configuration name is \'Release\',' |
| 54 ' otherwise plain file copy')) | 51 ' otherwise plain file copy')) |
| 55 parser.add_option('--exclude-packing-list', | |
| 56 default='', | |
| 57 help='Names of any libraries explicitly not packed') | |
| 58 parser.add_option('--android-pack-relocations', | 52 parser.add_option('--android-pack-relocations', |
| 59 help='Path to the relocations packer binary') | 53 help='Path to the relocations packer binary') |
| 60 parser.add_option('--stripped-libraries-dir', | 54 parser.add_option('--stripped-libraries-dir', |
| 61 help='Directory for stripped libraries') | 55 help='Directory for stripped libraries') |
| 62 parser.add_option('--packed-libraries-dir', | 56 parser.add_option('--packed-libraries-dir', |
| 63 help='Directory for packed libraries') | 57 help='Directory for packed libraries') |
| 64 parser.add_option('--libraries', action='append', | 58 parser.add_option('--libraries', action='append', |
| 65 help='List of libraries') | 59 help='List of libraries in Python dictionary format') |
| 66 parser.add_option('--stamp', help='Path to touch on success') | 60 parser.add_option('--stamp', help='Path to touch on success') |
| 67 parser.add_option('--filelistjson', | 61 parser.add_option('--filelistjson', |
| 68 help='Output path of filelist.json to write') | 62 help='Output path of filelist.json to write') |
| 69 | 63 |
| 70 options, _ = parser.parse_args(args) | 64 options, _ = parser.parse_args(args) |
| 71 enable_packing = (options.enable_packing == '1' and | 65 enable_packing = (options.enable_packing == '1' and |
| 72 options.configuration_name == 'Release') | 66 options.configuration_name == 'Release') |
| 73 exclude_packing_set = set(build_utils.ParseGypList( | |
| 74 options.exclude_packing_list)) | |
| 75 | 67 |
| 76 libraries = [] | 68 libraries = [] |
| 77 for libs_arg in options.libraries: | 69 for libs_arg in options.libraries: |
| 78 libraries += build_utils.ParseGypList(libs_arg) | 70 libraries += ast.literal_eval(libs_arg) |
| 79 | 71 |
| 80 if options.clear_dir: | 72 if options.clear_dir: |
| 81 build_utils.DeleteDirectory(options.packed_libraries_dir) | 73 build_utils.DeleteDirectory(options.packed_libraries_dir) |
| 82 | 74 |
| 83 build_utils.MakeDirectory(options.packed_libraries_dir) | 75 build_utils.MakeDirectory(options.packed_libraries_dir) |
| 84 | 76 |
| 85 output_paths = [] | 77 output_paths = [] |
| 86 for library in libraries: | 78 for library in libraries: |
| 87 library_path = os.path.join(options.stripped_libraries_dir, library) | 79 library_path = os.path.join(options.stripped_libraries_dir, library) |
| 88 output_path = os.path.join( | 80 output_path = os.path.join( |
| 89 options.packed_libraries_dir, os.path.basename(library)) | 81 options.packed_libraries_dir, os.path.basename(library)) |
| 90 output_paths.append(output_path) | 82 output_paths.append(output_path) |
| 91 | 83 |
| 92 if enable_packing and library not in exclude_packing_set: | 84 if enable_packing: |
| 93 PackLibraryRelocations(options.android_pack_relocations, | 85 PackLibraryRelocations(options.android_pack_relocations, |
| 94 library_path, | 86 library_path, |
| 95 output_path) | 87 output_path) |
| 96 else: | 88 else: |
| 97 CopyLibraryUnchanged(library_path, output_path) | 89 CopyLibraryUnchanged(library_path, output_path) |
| 98 | 90 |
| 99 if options.filelistjson: | 91 if options.filelistjson: |
| 100 build_utils.WriteJson({ 'files': output_paths }, options.filelistjson) | 92 build_utils.WriteJson({ 'files': output_paths }, options.filelistjson) |
| 101 | 93 |
| 102 if options.depfile: | 94 if options.depfile: |
| 103 build_utils.WriteDepfile( | 95 build_utils.WriteDepfile( |
| 104 options.depfile, | 96 options.depfile, |
| 105 libraries + build_utils.GetPythonDependencies()) | 97 libraries + build_utils.GetPythonDependencies()) |
| 106 | 98 |
| 107 if options.stamp: | 99 if options.stamp: |
| 108 build_utils.Touch(options.stamp) | 100 build_utils.Touch(options.stamp) |
| 109 | 101 |
| 110 return 0 | 102 return 0 |
| 111 | 103 |
| 112 | 104 |
| 113 if __name__ == '__main__': | 105 if __name__ == '__main__': |
| 114 sys.exit(main(sys.argv[1:])) | 106 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |