|  | #!/usr/bin/env python3 | 
|  | # | 
|  | # Copyright 2019 The Chromium Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | """Writes list of native libraries to srcjar file.""" | 
|  |  | 
|  | import argparse | 
|  | import os | 
|  | import sys | 
|  | import zipfile | 
|  |  | 
|  | from util import build_utils | 
|  |  | 
|  |  | 
|  | _NATIVE_LIBRARIES_TEMPLATE = """\ | 
|  | // This file is autogenerated by | 
|  | //     build/android/gyp/write_native_libraries_java.py | 
|  | // Please do not change its content. | 
|  |  | 
|  | package org.chromium.build; | 
|  |  | 
|  | public class NativeLibraries {{ | 
|  | public static final int CPU_FAMILY_UNKNOWN = 0; | 
|  | public static final int CPU_FAMILY_ARM = 1; | 
|  | public static final int CPU_FAMILY_MIPS = 2; | 
|  | public static final int CPU_FAMILY_X86 = 3; | 
|  |  | 
|  | // Set to true to enable the use of the Chromium Linker. | 
|  | public static {MAYBE_FINAL}boolean sUseLinker{USE_LINKER}; | 
|  | public static {MAYBE_FINAL}boolean sUseLibraryInZipFile{USE_LIBRARY_IN_ZIP_FILE}; | 
|  | public static {MAYBE_FINAL}boolean sUseModernLinker{USE_MODERN_LINKER}; | 
|  |  | 
|  | // This is the list of native libraries to be loaded (in the correct order) | 
|  | // by LibraryLoader.java. | 
|  | public static {MAYBE_FINAL}String[] LIBRARIES = {{{LIBRARIES}}}; | 
|  |  | 
|  | public static {MAYBE_FINAL}int sCpuFamily = {CPU_FAMILY}; | 
|  | }} | 
|  | """ | 
|  |  | 
|  |  | 
|  | def _FormatLibraryName(library_name): | 
|  | filename = os.path.split(library_name)[1] | 
|  | assert filename.startswith('lib') | 
|  | assert filename.endswith('.so') | 
|  | # Remove lib prefix and .so suffix. | 
|  | return '"%s"' % filename[3:-3] | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | parser = argparse.ArgumentParser() | 
|  |  | 
|  | build_utils.AddDepfileOption(parser) | 
|  | parser.add_argument('--final', action='store_true', help='Use final fields.') | 
|  | parser.add_argument( | 
|  | '--enable-chromium-linker', | 
|  | action='store_true', | 
|  | help='Enable Chromium linker.') | 
|  | parser.add_argument( | 
|  | '--load-library-from-apk', | 
|  | action='store_true', | 
|  | help='Load libaries from APK without uncompressing.') | 
|  | parser.add_argument( | 
|  | '--use-modern-linker', action='store_true', help='To use ModernLinker.') | 
|  | parser.add_argument( | 
|  | '--native-libraries-list', help='File with list of native libraries.') | 
|  | parser.add_argument( | 
|  | '--cpu-family', | 
|  | choices={ | 
|  | 'CPU_FAMILY_ARM', 'CPU_FAMILY_X86', 'CPU_FAMILY_MIPS', | 
|  | 'CPU_FAMILY_UNKNOWN' | 
|  | }, | 
|  | required=True, | 
|  | default='CPU_FAMILY_UNKNOWN', | 
|  | help='CPU family.') | 
|  | parser.add_argument( | 
|  | '--main-component-library', | 
|  | help='If used, the list of native libraries will only contain this ' | 
|  | 'library. Dependencies are found in the library\'s "NEEDED" section.') | 
|  |  | 
|  | parser.add_argument( | 
|  | '--output', required=True, help='Path to the generated srcjar file.') | 
|  |  | 
|  | options = parser.parse_args(build_utils.ExpandFileArgs(sys.argv[1:])) | 
|  |  | 
|  | assert (options.enable_chromium_linker or not options.load_library_from_apk) | 
|  |  | 
|  | native_libraries_list = [] | 
|  | if options.main_component_library: | 
|  | native_libraries_list.append( | 
|  | _FormatLibraryName(options.main_component_library)) | 
|  | elif options.native_libraries_list: | 
|  | with open(options.native_libraries_list) as f: | 
|  | for path in f: | 
|  | path = path.strip() | 
|  | native_libraries_list.append(_FormatLibraryName(path)) | 
|  |  | 
|  | def bool_str(value): | 
|  | if value: | 
|  | return ' = true' | 
|  | elif options.final: | 
|  | return ' = false' | 
|  | return '' | 
|  |  | 
|  | format_dict = { | 
|  | 'MAYBE_FINAL': 'final ' if options.final else '', | 
|  | 'USE_LINKER': bool_str(options.enable_chromium_linker), | 
|  | 'USE_LIBRARY_IN_ZIP_FILE': bool_str(options.load_library_from_apk), | 
|  | 'USE_MODERN_LINKER': bool_str(options.use_modern_linker), | 
|  | 'LIBRARIES': ','.join(native_libraries_list), | 
|  | 'CPU_FAMILY': options.cpu_family, | 
|  | } | 
|  | with build_utils.AtomicOutput(options.output) as f: | 
|  | with zipfile.ZipFile(f.name, 'w') as srcjar_file: | 
|  | build_utils.AddToZipHermetic( | 
|  | zip_file=srcjar_file, | 
|  | zip_path='org/chromium/build/NativeLibraries.java', | 
|  | data=_NATIVE_LIBRARIES_TEMPLATE.format(**format_dict)) | 
|  |  | 
|  | if options.depfile: | 
|  | assert options.native_libraries_list | 
|  | build_utils.WriteDepfile(options.depfile, | 
|  | options.output, | 
|  | inputs=[options.native_libraries_list]) | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(main()) |