| #!/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()) |