summaryrefslogtreecommitdiff
path: root/tools/icu4c_srcgen
diff options
context:
space:
mode:
Diffstat (limited to 'tools/icu4c_srcgen')
-rwxr-xr-xtools/icu4c_srcgen/generate_libandroidicu.py10
-rwxr-xr-xtools/icu4c_srcgen/generate_ndk.py10
-rw-r--r--tools/icu4c_srcgen/genutil.py46
3 files changed, 43 insertions, 23 deletions
diff --git a/tools/icu4c_srcgen/generate_libandroidicu.py b/tools/icu4c_srcgen/generate_libandroidicu.py
index 25c538057..85ca8893b 100755
--- a/tools/icu4c_srcgen/generate_libandroidicu.py
+++ b/tools/icu4c_srcgen/generate_libandroidicu.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
#
# Copyright (C) 2018 The Android Open Source Project
#
@@ -88,13 +88,11 @@ def main():
with open(android_path('external/icu/libandroidicu/static_shim/shim.cpp'),
'w') as out_file:
out_file.write(generate_shim(functions, includes, SYMBOL_SUFFIX,
- 'libandroidicu_shim.cpp.j2')
- .encode('utf8'))
+ 'libandroidicu_shim.cpp.j2'))
with open(android_path('external/icu/libandroidicu/libandroidicu.map.txt'),
'w') as out_file:
- out_file.write(generate_symbol_txt(functions, [], 'libandroidicu.map.txt.j2')
- .encode('utf8'))
+ out_file.write(generate_symbol_txt(functions, [], 'libandroidicu.map.txt.j2'))
for path in parser.header_paths_to_copy:
basename = os.path.basename(path)
@@ -102,5 +100,7 @@ def main():
copy_header_only_files()
+ print("Done. See libandroidicu/ for the generated content.")
+
if __name__ == '__main__':
main()
diff --git a/tools/icu4c_srcgen/generate_ndk.py b/tools/icu4c_srcgen/generate_ndk.py
index 802d07ea4..42e6808bf 100755
--- a/tools/icu4c_srcgen/generate_ndk.py
+++ b/tools/icu4c_srcgen/generate_ndk.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
#
# Copyright (C) 2018 The Android Open Source Project
#
@@ -221,12 +221,10 @@ def main():
with open(android_path('external/icu/libicu/src/shim.cpp'),
'w') as out_file:
- out_file.write(generate_shim(functions, includes, SYMBOL_SUFFIX, 'libicu_shim.cpp.j2')
- .encode('utf8'))
+ out_file.write(generate_shim(functions, includes, SYMBOL_SUFFIX, 'libicu_shim.cpp.j2'))
with open(android_path('external/icu/libicu/libicu.map.txt'), 'w') as out_file:
- out_file.write(generate_symbol_txt(functions, [], 'libicu.map.txt.j2')
- .encode('utf8'))
+ out_file.write(generate_symbol_txt(functions, [], 'libicu.map.txt.j2'))
# Process the C headers and put them into the ndk folder.
for src_path in parser.header_paths_to_copy:
@@ -245,5 +243,7 @@ def main():
subprocess.check_call(
[android_path('external/icu/tools/icu4c_srcgen/doc_patches/apply_patches.sh')])
+ print("Done. See the generated headers at libicu/ndk_headers/.")
+
if __name__ == '__main__':
main()
diff --git a/tools/icu4c_srcgen/genutil.py b/tools/icu4c_srcgen/genutil.py
index d652ac2e6..39b4eda06 100644
--- a/tools/icu4c_srcgen/genutil.py
+++ b/tools/icu4c_srcgen/genutil.py
@@ -70,15 +70,38 @@ def android_path(*args):
return os.path.join(ANDROID_TOP, *args)
-# TODO: Include clang bindings in prebuilt package. http://b/119270767
-site.addsitedir(android_path('external/clang/bindings/python'))
-import clang.cindex # pylint: disable=import-error,wrong-import-position
+def get_clang_path():
+ """Find the latest clang version and return the full path"""
+ base_path = android_path('prebuilts/clang/host/linux-x86/')
+ files = [f for f in os.listdir(base_path) if f.startswith('clang-r')]
+ # TODO: Don't use sort() because it assumes the same number of digits in the version name
+ files.sort(reverse=True)
+ selected = files[0]
+ print("Using clang version %s" % selected)
+ path = os.path.join(base_path, selected)
+ return path
+
+
+def get_clang_lib_path(clang_path):
+ """Return the libclang.so path"""
+ base_path = os.path.join(clang_path, 'lib64')
+ files = [f for f in os.listdir(base_path) if f.startswith('libclang.so.')]
+ return os.path.join(base_path, files[0])
+
-# TODO: Do not hardcode clang version. http://b/119270767
-CLANG_REVISION = 'r383902c'
-CLANG_LIB_VERSION = '11git'
-CLANG_HEADER_VERSION = '11.0.3'
-CLANG_PATH = android_path('prebuilts/clang/host/linux-x86/clang-%s' % CLANG_REVISION)
+def get_clang_header_dir(clang_path):
+ """Return the path to clang header directory"""
+ base_path = os.path.join(clang_path, 'lib64/clang/')
+ files = os.listdir(base_path)
+ return os.path.join(base_path, files[0], 'include/')
+
+
+CLANG_PATH = get_clang_path()
+CLANG_LIB_PATH = get_clang_lib_path(CLANG_PATH)
+CLANG_HEADER_PATH = get_clang_header_dir(CLANG_PATH)
+
+site.addsitedir(os.path.join(CLANG_PATH, 'lib64/python3/site-packages/'))
+import clang.cindex # pylint: disable=import-error,wrong-import-position
class Function:
@@ -170,9 +193,7 @@ class DeclaredFunctionsParser:
# Configures libclang to load in our environment
# Set up LD_LIBRARY_PATH to include libclang.so, libLLVM.so, etc. Note
# that setting LD_LIBRARY_PATH with os.putenv() sometimes doesn't help.
- # clang.cindex.Config.set_library_path(os.path.join(CLANG_PATH, 'lib64'))
- clang.cindex.Config.set_library_file(
- os.path.join(CLANG_PATH, 'lib64', 'libclang.so.%s' % CLANG_LIB_VERSION))
+ clang.cindex.Config.set_library_file(CLANG_LIB_PATH)
def set_va_functions_mapping(self, mapping):
"""Set mapping from a variable argument function to an implementation.
@@ -232,8 +253,7 @@ class DeclaredFunctionsParser:
]
include_dirs = [
- # TODO: Do not hardcode clang version. http://b/119270767
- os.path.join(CLANG_PATH, 'lib64/clang/', CLANG_HEADER_VERSION, 'include/'),
+ CLANG_HEADER_PATH,
android_path('bionic/libc/include'),
android_path('external/icu/android_icu4c/include'),
android_path('external/icu/icu4c/source/common'),