summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-06-15 21:50:29 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-06-15 21:50:29 +0000
commit44540c07b1dd3addb6d418234838c17f9d2361d6 (patch)
tree538f2862490075cda112e6e17786a116eed28768
parent1a8515183b085bcf7ae915fbecf6ba00cafb741d (diff)
parent0473d50cdeb87d17fdc3e77f4a413282b9e22357 (diff)
downloadndk-aml_tz3_314012010.tar.gz
Change-Id: Ie69082a7204994f90f9ec525f1ff24b52b176a5c
-rw-r--r--.gitignore138
-rw-r--r--Android.bp22
-rw-r--r--current/source.properties2
-rw-r--r--current/sources/android/cpufeatures/Android.mk12
-rw-r--r--current/sources/android/cpufeatures/cpu-features.c80
-rw-r--r--current/sources/android/native_app_glue/Android.mk16
-rw-r--r--current/sources/android/support/Android.mk138
-rw-r--r--current/sources/android/support/include/inttypes.h5
-rw-r--r--current/sources/android/support/include/math.h81
-rw-r--r--current/sources/android/support/include/stdlib.h4
-rw-r--r--current/sources/android/support/src/posix_memalign.cpp20
-rw-r--r--current/sources/android/support/src/support_preinclude.h41
-rw-r--r--current/sources/cxx-stl/llvm-libc++/Android.mk207
-rw-r--r--current/sources/cxx-stl/llvm-libc++/include/complex8
-rw-r--r--current/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h8
-rwxr-xr-xcurrent/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.sobin6783104 -> 6934760 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_static.abin10489810 -> 10956564 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++abi.abin2438050 -> 2392210 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libunwind.abin91574 -> 83228 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libandroid_support.abin90346 -> 349332 bytes
-rwxr-xr-xcurrent/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.sobin4181376 -> 4367056 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_static.abin5834028 -> 6217326 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++abi.abin1186248 -> 1178212 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libunwind.abin55754 -> 52520 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/x86/libandroid_support.abin85534 -> 376288 bytes
-rwxr-xr-xcurrent/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.sobin5313524 -> 5651432 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/x86/libc++_static.abin6334724 -> 6841916 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/x86/libc++abi.abin1362762 -> 1413726 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/x86/libunwind.abin69290 -> 69414 bytes
-rwxr-xr-xcurrent/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_shared.sobin6458768 -> 6719496 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_static.abin9867090 -> 10555596 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++abi.abin2121024 -> 2082160 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++/libs/x86_64/libunwind.abin96650 -> 91970 bytes
-rw-r--r--current/sources/cxx-stl/llvm-libc++abi/Android.mk112
-rw-r--r--current/sources/cxx-stl/llvm-libc++abi/src/cxa_exception.cpp31
-rw-r--r--pylintrc17
-rwxr-xr-xupdate.py211
37 files changed, 827 insertions, 326 deletions
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index a81c8ee12..000000000
--- a/.gitignore
+++ /dev/null
@@ -1,138 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
diff --git a/Android.bp b/Android.bp
index 61ccdd4cb..dba243ef7 100644
--- a/Android.bp
+++ b/Android.bp
@@ -38,10 +38,10 @@ libcxx_includes = [
ndk_prebuilt_static_stl {
name: "ndk_libandroid_support",
- min_sdk_version: "33",
- export_include_dirs: [
- "current/sources/android/support/include",
- ],
+ // libandroid_support headers are exported by libc++ rather than by
+ // libandroid_support itself because it's the only way we can enforce the
+ // correct ordering of the includes (libc++ first, libandroid_support
+ // second).
arch: {
arm64: {
enabled: false,
@@ -65,12 +65,26 @@ ndk_prebuilt_static_stl {
ndk_prebuilt_static_stl {
name: "ndk_libc++_static",
export_include_dirs: libcxx_includes,
+ multilib: {
+ lib32: {
+ export_include_dirs: [
+ "current/sources/android/support/include",
+ ],
+ },
+ },
min_sdk_version: "16",
}
ndk_prebuilt_shared_stl {
name: "ndk_libc++_shared",
export_include_dirs: libcxx_includes,
+ multilib: {
+ lib32: {
+ export_include_dirs: [
+ "current/sources/android/support/include",
+ ],
+ },
+ }
}
cc_library_static {
diff --git a/current/source.properties b/current/source.properties
index d7470d43f..1fbecca6d 100644
--- a/current/source.properties
+++ b/current/source.properties
@@ -1,2 +1,2 @@
Pkg.Desc = Android NDK
-Pkg.Revision = 25.0.8474149
+Pkg.Revision = 23.0.7243079
diff --git a/current/sources/android/cpufeatures/Android.mk b/current/sources/android/cpufeatures/Android.mk
new file mode 100644
index 000000000..7b53d2318
--- /dev/null
+++ b/current/sources/android/cpufeatures/Android.mk
@@ -0,0 +1,12 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := cpufeatures
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE
+LOCAL_SRC_FILES := cpu-features.c
+LOCAL_CFLAGS := -Wall -Wextra -Werror
+LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
+LOCAL_EXPORT_LDLIBS := -ldl
+include $(BUILD_STATIC_LIBRARY)
diff --git a/current/sources/android/cpufeatures/cpu-features.c b/current/sources/android/cpufeatures/cpu-features.c
index 7569d3e5d..6dae30c21 100644
--- a/current/sources/android/cpufeatures/cpu-features.c
+++ b/current/sources/android/cpufeatures/cpu-features.c
@@ -70,7 +70,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/auxv.h>
#include <sys/system_properties.h>
#include <unistd.h>
@@ -492,6 +491,56 @@ cpulist_read_from(CpuList* list, const char* filename)
HWCAP_IDIVT )
#endif
+#if defined(__mips__)
+// see <uapi/asm/hwcap.h> kernel header
+#define HWCAP_MIPS_R6 (1 << 0)
+#define HWCAP_MIPS_MSA (1 << 1)
+#endif
+
+#if defined(__arm__) || defined(__aarch64__) || defined(__mips__)
+
+#define AT_HWCAP 16
+#define AT_HWCAP2 26
+
+// Probe the system's C library for a 'getauxval' function and call it if
+// it exits, or return 0 for failure. This function is available since API
+// level 20.
+//
+// This code does *NOT* check for '__ANDROID_API__ >= 20' to support the
+// edge case where some NDK developers use headers for a platform that is
+// newer than the one really targetted by their application.
+// This is typically done to use newer native APIs only when running on more
+// recent Android versions, and requires careful symbol management.
+//
+// Note that getauxval() can't really be re-implemented here, because
+// its implementation does not parse /proc/self/auxv. Instead it depends
+// on values that are passed by the kernel at process-init time to the
+// C runtime initialization layer.
+static uint32_t
+get_elf_hwcap_from_getauxval(int hwcap_type) {
+ typedef unsigned long getauxval_func_t(unsigned long);
+
+ dlerror();
+ void* libc_handle = dlopen("libc.so", RTLD_NOW);
+ if (!libc_handle) {
+ D("Could not dlopen() C library: %s\n", dlerror());
+ return 0;
+ }
+
+ uint32_t ret = 0;
+ getauxval_func_t* func = (getauxval_func_t*)
+ dlsym(libc_handle, "getauxval");
+ if (!func) {
+ D("Could not find getauxval() in C library\n");
+ } else {
+ // Note: getauxval() returns 0 on failure. Doesn't touch errno.
+ ret = (uint32_t)(*func)(hwcap_type);
+ }
+ dlclose(libc_handle);
+ return ret;
+}
+#endif
+
#if defined(__arm__)
// Parse /proc/self/auxv to extract the ELF HW capabilities bitmap for the
// current CPU. Note that this file is not accessible from regular
@@ -610,6 +659,11 @@ android_cpuInitFamily(void)
g_cpuFamily = ANDROID_CPU_FAMILY_ARM;
#elif defined(__i386__)
g_cpuFamily = ANDROID_CPU_FAMILY_X86;
+#elif defined(__mips64)
+/* Needs to be before __mips__ since the compiler defines both */
+ g_cpuFamily = ANDROID_CPU_FAMILY_MIPS64;
+#elif defined(__mips__)
+ g_cpuFamily = ANDROID_CPU_FAMILY_MIPS;
#elif defined(__aarch64__)
g_cpuFamily = ANDROID_CPU_FAMILY_ARM64;
#elif defined(__x86_64__)
@@ -721,7 +775,8 @@ android_cpuInit(void)
}
/* Extract the list of CPU features from ELF hwcaps */
- uint32_t hwcaps = getauxval(AT_HWCAP);
+ uint32_t hwcaps = 0;
+ hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);
if (!hwcaps) {
D("Parsing /proc/self/auxv to extract ELF hwcaps!\n");
hwcaps = get_elf_hwcap_from_proc_self_auxv();
@@ -794,7 +849,8 @@ android_cpuInit(void)
}
/* Extract the list of CPU features from ELF hwcaps2 */
- uint32_t hwcaps2 = getauxval(AT_HWCAP2);
+ uint32_t hwcaps2 = 0;
+ hwcaps2 = get_elf_hwcap_from_getauxval(AT_HWCAP2);
if (hwcaps2 != 0) {
int has_aes = (hwcaps2 & HWCAP2_AES);
int has_pmull = (hwcaps2 & HWCAP2_PMULL);
@@ -903,7 +959,8 @@ android_cpuInit(void)
#ifdef __aarch64__
{
/* Extract the list of CPU features from ELF hwcaps */
- uint32_t hwcaps = getauxval(AT_HWCAP);
+ uint32_t hwcaps = 0;
+ hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);
if (hwcaps != 0) {
int has_fp = (hwcaps & HWCAP_FP);
int has_asimd = (hwcaps & HWCAP_ASIMD);
@@ -987,6 +1044,21 @@ android_cpuInit(void)
#endif
+#if defined( __mips__)
+ { /* MIPS and MIPS64 */
+ /* Extract the list of CPU features from ELF hwcaps */
+ uint32_t hwcaps = 0;
+ hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);
+ if (hwcaps != 0) {
+ int has_r6 = (hwcaps & HWCAP_MIPS_R6);
+ int has_msa = (hwcaps & HWCAP_MIPS_MSA);
+ if (has_r6)
+ g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_R6;
+ if (has_msa)
+ g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_MSA;
+ }
+ }
+#endif /* __mips__ */
free(cpuinfo);
}
diff --git a/current/sources/android/native_app_glue/Android.mk b/current/sources/android/native_app_glue/Android.mk
new file mode 100644
index 000000000..a41b80f38
--- /dev/null
+++ b/current/sources/android/native_app_glue/Android.mk
@@ -0,0 +1,16 @@
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE:= android_native_app_glue
+LOCAL_LICENSE_KINDS:= SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS:= notice
+LOCAL_NOTICE_FILE:= $(LOCAL_PATH)/NOTICE
+LOCAL_SRC_FILES:= android_native_app_glue.c
+LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
+LOCAL_EXPORT_LDLIBS := -llog -landroid
+# The linker will strip this as "unused" since this is a static library, but we
+# need to keep it around since it's the interface for JNI.
+LOCAL_EXPORT_LDFLAGS := -u ANativeActivity_onCreate
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/current/sources/android/support/Android.mk b/current/sources/android/support/Android.mk
new file mode 100644
index 000000000..7cefed18e
--- /dev/null
+++ b/current/sources/android/support/Android.mk
@@ -0,0 +1,138 @@
+LOCAL_PATH := $(call my-dir)
+
+# libandroid_support is only needed on LP32.
+ifeq ($(filter $(NDK_KNOWN_DEVICE_ABI64S),$(TARGET_ARCH_ABI)),)
+
+ifneq ($(LIBCXX_FORCE_REBUILD),true) # Using prebuilt
+
+LIBCXX_LIBS := ../../cxx-stl/llvm-libc++/libs/$(TARGET_ARCH_ABI)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android_support
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-BSD
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE
+LOCAL_SRC_FILES := $(LIBCXX_LIBS)/lib$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION)
+include $(PREBUILT_STATIC_LIBRARY)
+
+else # Building
+
+android_support_cflags := \
+ -D_GNU_SOURCE \
+ -Drestrict=__restrict__ \
+ -ffunction-sections \
+ -fdata-sections \
+ -fvisibility=hidden \
+
+android_support_c_includes := \
+ $(BIONIC_PATH)/libc \
+ $(BIONIC_PATH)/libc/upstream-openbsd/android/include \
+ $(BIONIC_PATH)/libm \
+ $(BIONIC_PATH)/libm/upstream-freebsd/android/include \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src \
+
+android_support_cflags += \
+ -include freebsd-compat.h \
+ -include openbsd-compat.h \
+ -include $(LOCAL_PATH)/src/support_preinclude.h \
+ -D__BIONIC_BUILD_FOR_ANDROID_SUPPORT \
+ -Werror \
+
+android_support_sources := \
+ $(BIONIC_PATH)/libc/bionic/c32rtomb.cpp \
+ $(BIONIC_PATH)/libc/bionic/locale.cpp \
+ $(BIONIC_PATH)/libc/bionic/mbrtoc32.cpp \
+ $(BIONIC_PATH)/libc/bionic/wchar.cpp \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcscat.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcschr.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcslen.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsncmp.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsncpy.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcspbrk.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsrchr.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsspn.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsstr.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcstok.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemchr.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemcmp.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemcpy.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemmove.c \
+ $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemset.c \
+ $(BIONIC_PATH)/libc/upstream-openbsd/lib/libc/locale/mbtowc.c \
+ $(BIONIC_PATH)/libc/upstream-openbsd/lib/libc/stdlib/imaxabs.c \
+ $(BIONIC_PATH)/libc/upstream-openbsd/lib/libc/stdlib/imaxdiv.c \
+ $(BIONIC_PATH)/libm/digittoint.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_acos.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_acosh.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_asin.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_atan2.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_atanh.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_cosh.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_exp.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_hypot.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log10.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log2.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log2f.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_logf.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_remainder.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_sinh.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_sqrt.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_cos.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_exp.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_rem_pio2.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_sin.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_tan.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_asinh.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_atan.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_cbrt.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_cos.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_erf.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_exp2.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_expm1.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_frexp.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_frexpf.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_log1p.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_logb.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_nextafter.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_remquo.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_rint.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_sin.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_tan.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_tanh.c \
+ src/locale_support.cpp \
+ src/posix_memalign.cpp \
+ src/swprintf.cpp \
+ src/wcstox.cpp \
+
+ifeq (x86,$(TARGET_ARCH_ABI))
+# Replaces broken implementations in x86 libm.so
+android_support_sources += \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_scalbln.c \
+ $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_scalbn.c \
+
+# fake_long_double.c doesn't define this for x86.
+# TODO: seems like we don't pass .S files to the assembler?
+#android_support_c_includes += $(BIONIC_PATH)/libc/arch-x86/include
+#android_support_sources += $(BIONIC_PATH)/libm/x86/lrint.S
+endif
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android_support
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-BSD
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE
+LOCAL_SRC_FILES := $(android_support_sources)
+LOCAL_C_INCLUDES := $(android_support_c_includes)
+LOCAL_CFLAGS := $(android_support_cflags)
+LOCAL_ARM_NEON := false
+
+LOCAL_CPPFLAGS := \
+ -fvisibility-inlines-hidden \
+ -std=gnu++11 \
+
+include $(BUILD_STATIC_LIBRARY)
+
+endif # Prebuilt/building
+
+endif # LP32
diff --git a/current/sources/android/support/include/inttypes.h b/current/sources/android/support/include/inttypes.h
index 518243418..834ab9170 100644
--- a/current/sources/android/support/include/inttypes.h
+++ b/current/sources/android/support/include/inttypes.h
@@ -32,6 +32,11 @@
__BEGIN_DECLS
+#if __ANDROID_API__ < __ANDROID_API_K__
+intmax_t imaxabs(intmax_t) __attribute_const__;
+imaxdiv_t imaxdiv(intmax_t, intmax_t) __attribute_const__;
+#endif
+
#if __ANDROID_API__ < __ANDROID_API_L__
intmax_t wcstoimax(const wchar_t* __restrict, wchar_t** __restrict, int);
uintmax_t wcstoumax(const wchar_t* __restrict, wchar_t** __restrict, int);
diff --git a/current/sources/android/support/include/math.h b/current/sources/android/support/include/math.h
new file mode 100644
index 000000000..8c29c6b47
--- /dev/null
+++ b/current/sources/android/support/include/math.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include_next <math.h>
+
+__BEGIN_DECLS
+
+#if __ANDROID_API__ < __ANDROID_API_J_MR2__
+double log2(double);
+float log2f(float);
+long double log2l(long double);
+long double logbl(long double);
+float tgammaf(float);
+#endif
+
+#if __ANDROID_API__ < __ANDROID_API_L__
+long double acoshl(long double);
+long double acosl(long double);
+long double asinhl(long double);
+long double asinl(long double);
+long double atan2l(long double, long double);
+long double atanhl(long double);
+long double atanl(long double);
+long double cbrtl(long double);
+long double coshl(long double);
+long double cosl(long double);
+long double erfcl(long double);
+long double erfl(long double);
+long double exp2l(long double);
+long double expl(long double);
+long double expm1l(long double);
+long double fmodl(long double, long double);
+long double hypotl(long double, long double);
+long double lgammal(long double);
+long double log10l(long double);
+long double log1pl(long double);
+long double logl(long double);
+long double modfl(long double, long double*);
+long double nearbyintl(long double);
+long double powl(long double, long double);
+long double remainderl(long double, long double);
+long double remquol(long double, long double, int*);
+long double rintl(long double);
+long double sinhl(long double);
+long double sinl(long double);
+long double sqrtl(long double);
+long double tanhl(long double);
+long double tanl(long double);
+long double tgammal(long double);
+long int lrintl(long double);
+long long int llrintl(long double);
+#endif
+
+__END_DECLS
diff --git a/current/sources/android/support/include/stdlib.h b/current/sources/android/support/include/stdlib.h
index 43c47f303..e52e8ce58 100644
--- a/current/sources/android/support/include/stdlib.h
+++ b/current/sources/android/support/include/stdlib.h
@@ -32,6 +32,10 @@
__BEGIN_DECLS
+#if __ANDROID_API__ < __ANDROID_API_J_MR1__
+int posix_memalign(void** memptr, size_t alignment, size_t size);
+#endif
+
#if __ANDROID_API__ < __ANDROID_API_L__
long double strtold_l(const char*, char**, locale_t);
long long strtoll_l(const char*, char**, int, locale_t);
diff --git a/current/sources/android/support/src/posix_memalign.cpp b/current/sources/android/support/src/posix_memalign.cpp
new file mode 100644
index 000000000..cf7abbbf5
--- /dev/null
+++ b/current/sources/android/support/src/posix_memalign.cpp
@@ -0,0 +1,20 @@
+#include <errno.h>
+#include <malloc.h>
+#include <stdlib.h>
+
+int posix_memalign(void** memptr, size_t alignment, size_t size) {
+ if ((alignment & (alignment - 1)) != 0 || alignment == 0) {
+ return EINVAL;
+ }
+
+ if (alignment % sizeof(void*) != 0) {
+ return EINVAL;
+ }
+
+ *memptr = memalign(alignment, size);
+ if (*memptr == NULL) {
+ return errno;
+ }
+
+ return 0;
+}
diff --git a/current/sources/android/support/src/support_preinclude.h b/current/sources/android/support/src/support_preinclude.h
new file mode 100644
index 000000000..bf090b0d2
--- /dev/null
+++ b/current/sources/android/support/src/support_preinclude.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#pragma once
+
+// Declare cimag and creal for use by __ldexp_cexp. libandroid_runtime doesn't
+// really need __ldexp_cexp, but it does need __ldexp_exp, and both functions
+// are defined in the same C file. complex.h doesn't declare cimag/creal when
+// building libandroid_support, because the functions are only available
+// starting with M, and libandroid_support is compiled for the oldest supported
+// NDK API.
+//
+// The two functions are trivial (and have __builtin_{cimag,creal}
+// equivalents). Clang inlines calls to these functions even with -O0.
+double cimag(double _Complex z);
+double creal(double _Complex z);
diff --git a/current/sources/cxx-stl/llvm-libc++/Android.mk b/current/sources/cxx-stl/llvm-libc++/Android.mk
new file mode 100644
index 000000000..9c19a9ac9
--- /dev/null
+++ b/current/sources/cxx-stl/llvm-libc++/Android.mk
@@ -0,0 +1,207 @@
+# This file is dual licensed under the MIT and the University of Illinois Open
+# Source Licenses. See LICENSE.TXT for details.
+
+LOCAL_PATH := $(call my-dir)
+
+# Normally, we distribute the NDK with prebuilt binaries of libc++
+# in $LOCAL_PATH/libs/<abi>/. However,
+#
+
+LIBCXX_FORCE_REBUILD := $(strip $(LIBCXX_FORCE_REBUILD))
+ifndef LIBCXX_FORCE_REBUILD
+ ifeq (,$(strip $(wildcard $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libc++_static$(TARGET_LIB_EXTENSION))))
+ $(call __ndk_info,WARNING: Rebuilding libc++ libraries from sources!)
+ $(call __ndk_info,You might want to use $$NDK/build/tools/build-cxx-stl.sh --stl=libc++)
+ $(call __ndk_info,in order to build prebuilt versions to speed up your builds!)
+ LIBCXX_FORCE_REBUILD := true
+ endif
+endif
+
+libcxx_includes := $(LOCAL_PATH)/include
+libcxx_export_includes := $(libcxx_includes)
+libcxx_sources := \
+ algorithm.cpp \
+ any.cpp \
+ atomic.cpp \
+ barrier.cpp \
+ bind.cpp \
+ charconv.cpp \
+ chrono.cpp \
+ condition_variable.cpp \
+ condition_variable_destructor.cpp \
+ debug.cpp \
+ exception.cpp \
+ filesystem/directory_iterator.cpp \
+ filesystem/int128_builtins.cpp \
+ filesystem/operations.cpp \
+ functional.cpp \
+ future.cpp \
+ hash.cpp \
+ ios.cpp \
+ iostream.cpp \
+ locale.cpp \
+ memory.cpp \
+ mutex.cpp \
+ mutex_destructor.cpp \
+ new.cpp \
+ optional.cpp \
+ random.cpp \
+ regex.cpp \
+ shared_mutex.cpp \
+ stdexcept.cpp \
+ string.cpp \
+ strstream.cpp \
+ system_error.cpp \
+ thread.cpp \
+ typeinfo.cpp \
+ utility.cpp \
+ valarray.cpp \
+ variant.cpp \
+ vector.cpp \
+
+libcxx_sources := $(libcxx_sources:%=src/%)
+
+libcxx_export_cxxflags :=
+
+ifeq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))
+# Add -fno-strict-aliasing because __list_imp::_end_ breaks TBAA rules by declaring
+# simply as __list_node_base then casted to __list_node derived from that. See
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61571 for details
+libcxx_export_cxxflags += -fno-strict-aliasing
+endif
+
+libcxx_cxxflags := \
+ -std=c++1z \
+ -DLIBCXX_BUILDING_LIBCXXABI \
+ -D_LIBCPP_BUILDING_LIBRARY \
+ -D__STDC_FORMAT_MACROS \
+ $(libcxx_export_cxxflags) \
+
+libcxx_ldflags :=
+libcxx_export_ldflags :=
+
+ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
+ libcxx_cxxflags += -mbranch-protection=standard
+endif
+
+ifneq ($(LIBCXX_FORCE_REBUILD),true)
+
+$(call ndk_log,Using prebuilt libc++ libraries)
+
+libcxxabi_c_includes := $(LOCAL_PATH)/../llvm-libc++abi/include
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := c++_static
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../../../../NOTICE
+LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION)
+LOCAL_EXPORT_C_INCLUDES := $(libcxx_export_includes)
+LOCAL_STATIC_LIBRARIES := libc++abi
+LOCAL_EXPORT_CPPFLAGS := $(libcxx_export_cxxflags)
+LOCAL_EXPORT_LDFLAGS := $(libcxx_export_ldflags)
+LOCAL_EXPORT_STATIC_LIBRARIES := libc++abi
+
+ifeq ($(NDK_PLATFORM_NEEDS_ANDROID_SUPPORT),true)
+ # This doesn't affect the prebuilt itself since this is a prebuilt library,
+ # but the build system needs to know about the dependency so we can sort the
+ # exported includes properly.
+ LOCAL_STATIC_LIBRARIES += libandroid_support
+ LOCAL_EXPORT_STATIC_LIBRARIES += libandroid_support
+endif
+
+LOCAL_EXPORT_STATIC_LIBRARIES += libunwind
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := c++_shared
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../../../../NOTICE
+LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE)$(TARGET_SONAME_EXTENSION)
+LOCAL_EXPORT_C_INCLUDES := \
+ $(libcxx_export_includes) \
+ $(libcxxabi_c_includes) \
+
+LOCAL_EXPORT_CPPFLAGS := $(libcxx_export_cxxflags)
+LOCAL_EXPORT_LDFLAGS := $(libcxx_export_ldflags)
+
+ifeq ($(NDK_PLATFORM_NEEDS_ANDROID_SUPPORT),true)
+ # This doesn't affect the prebuilt itself since this is a prebuilt library,
+ # but the build system needs to know about the dependency so we can sort the
+ # exported includes properly.
+ LOCAL_STATIC_LIBRARIES := libandroid_support
+ LOCAL_EXPORT_STATIC_LIBRARIES := libandroid_support
+endif
+
+LOCAL_EXPORT_STATIC_LIBRARIES += libunwind
+include $(PREBUILT_SHARED_LIBRARY)
+
+$(call import-module, cxx-stl/llvm-libc++abi)
+
+else
+# LIBCXX_FORCE_REBUILD == true
+
+$(call ndk_log,Rebuilding libc++ libraries from sources)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := c++_static
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../../../../NOTICE
+LOCAL_SRC_FILES := $(libcxx_sources)
+LOCAL_C_INCLUDES := $(libcxx_includes)
+LOCAL_CPPFLAGS := $(libcxx_cxxflags) -ffunction-sections -fdata-sections
+LOCAL_CPP_FEATURES := rtti exceptions
+LOCAL_EXPORT_C_INCLUDES := $(libcxx_export_includes)
+LOCAL_EXPORT_CPPFLAGS := $(libcxx_export_cxxflags)
+LOCAL_EXPORT_LDFLAGS := $(libcxx_export_ldflags)
+LOCAL_STATIC_LIBRARIES := libc++abi
+LOCAL_ARM_NEON := false
+
+ifeq ($(NDK_PLATFORM_NEEDS_ANDROID_SUPPORT),true)
+ LOCAL_STATIC_LIBRARIES += android_support
+endif
+
+LOCAL_STATIC_LIBRARIES += libunwind
+LOCAL_EXPORT_STATIC_LIBRARIES += libunwind
+include $(BUILD_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := c++_shared
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../../../../NOTICE
+LOCAL_STRIP_MODE := none
+LOCAL_SRC_FILES := $(libcxx_sources)
+LOCAL_C_INCLUDES := $(libcxx_includes)
+LOCAL_CPPFLAGS := $(libcxx_cxxflags) -fno-function-sections -fno-data-sections
+LOCAL_CPP_FEATURES := rtti exceptions
+LOCAL_WHOLE_STATIC_LIBRARIES := libc++abi
+LOCAL_EXPORT_C_INCLUDES := $(libcxx_export_includes)
+LOCAL_EXPORT_CPPFLAGS := $(libcxx_export_cxxflags)
+LOCAL_EXPORT_LDFLAGS := $(libcxx_export_ldflags)
+ifeq ($(NDK_PLATFORM_NEEDS_ANDROID_SUPPORT),true)
+ LOCAL_STATIC_LIBRARIES := android_support
+endif
+LOCAL_LDFLAGS := $(libcxx_ldflags)
+# Use --as-needed to strip the DT_NEEDED on libstdc++.so (bionic's) that the
+# driver always links for C++ but we don't use.
+# See https://github.com/android-ndk/ndk/issues/105
+LOCAL_LDFLAGS += -Wl,--as-needed
+LOCAL_ARM_NEON := false
+LOCAL_STATIC_LIBRARIES += libunwind
+LOCAL_EXPORT_STATIC_LIBRARIES += libunwind
+
+# But only need -latomic for armeabi.
+ifeq ($(TARGET_ARCH_ABI),armeabi)
+ LOCAL_LDLIBS += -latomic
+endif
+include $(BUILD_SHARED_LIBRARY)
+
+$(call import-add-path, $(LOCAL_PATH)/../../..)
+$(call import-module, toolchain/llvm-project/libcxxabi)
+
+endif # LIBCXX_FORCE_REBUILD == true
+
+$(call import-module, android/support)
diff --git a/current/sources/cxx-stl/llvm-libc++/include/complex b/current/sources/cxx-stl/llvm-libc++/include/complex
index 36c66db50..92295be97 100644
--- a/current/sources/cxx-stl/llvm-libc++/include/complex
+++ b/current/sources/cxx-stl/llvm-libc++/include/complex
@@ -244,7 +244,6 @@ template<class T, class charT, class traits>
#include <stdexcept>
#include <cmath>
#include <iosfwd>
-#include <sstream>
#include <version>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -1442,12 +1441,7 @@ template<class _Tp, class _CharT, class _Traits>
basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __x)
{
- basic_ostringstream<_CharT, _Traits> __s;
- __s.flags(__os.flags());
- __s.imbue(__os.getloc());
- __s.precision(__os.precision());
- __s << '(' << __x.real() << ',' << __x.imag() << ')';
- return __os << __s.str();
+ return __os << '(' << __x.real() << ',' << __x.imag() << ')';
}
#if _LIBCPP_STD_VER > 11
diff --git a/current/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h b/current/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h
index b49baea05..dd1c088f4 100644
--- a/current/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h
+++ b/current/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h
@@ -25,15 +25,21 @@ extern "C" {
#if defined(__ANDROID__)
-#include <android/api-level.h>
#if __ANDROID_API__ < 21
#include <support/xlocale/__posix_l_fallback.h>
#endif
+// HACK: Not in upstream NDK or libc++.
+// Upstream now supports using ToT libc++ with old NDKs, but as such it is now
+// *only* compatible with the NDK. That will need to be fixed both for the
+// platorm and for the NDK-in-platform use case since neither has
+// android/ndk-version.h.
+
// If we do not have this header, we are in a platform build rather than an NDK
// build, which will always be at least as new as the ToT NDK, in which case we
// don't need any of the inlines below since libc provides them.
#if __has_include(<android/ndk-version.h>)
+#include <android/api-level.h>
#include <android/ndk-version.h>
// In NDK versions later than 16, locale-aware functions are provided by
// legacy_stdlib_inlines.h
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so b/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so
index 7c89b544b..564577c3c 100755
--- a/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so
+++ b/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_static.a b/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_static.a
index 87d83f629..7984b03f2 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_static.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_static.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++abi.a b/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++abi.a
index 1aabbec7b..c4b888fca 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++abi.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++abi.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libunwind.a b/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libunwind.a
index acbf9b227..ea80bd52f 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libunwind.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libunwind.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libandroid_support.a b/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libandroid_support.a
index a1081b223..9b19f69c1 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libandroid_support.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libandroid_support.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so b/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so
index 10603aa77..4ea68ae71 100755
--- a/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so
+++ b/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_static.a b/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_static.a
index 73caf4d72..75c26c52f 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_static.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_static.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++abi.a b/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++abi.a
index 393da49fb..1b65ee568 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++abi.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++abi.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libunwind.a b/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libunwind.a
index 154f5b271..c5baa54bf 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libunwind.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libunwind.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/x86/libandroid_support.a b/current/sources/cxx-stl/llvm-libc++/libs/x86/libandroid_support.a
index 0da92895f..5e44e56e8 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/x86/libandroid_support.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/x86/libandroid_support.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so b/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so
index 831e77881..1dba17529 100755
--- a/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so
+++ b/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++_static.a b/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++_static.a
index 670635276..d23c1f823 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++_static.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++_static.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++abi.a b/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++abi.a
index 726aac546..11d3a14b1 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++abi.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/x86/libc++abi.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/x86/libunwind.a b/current/sources/cxx-stl/llvm-libc++/libs/x86/libunwind.a
index 5cb304b52..e7cbc692e 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/x86/libunwind.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/x86/libunwind.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_shared.so b/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_shared.so
index 6d94e6a7d..02d8bfae5 100755
--- a/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_shared.so
+++ b/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_shared.so
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_static.a b/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_static.a
index 7a895284d..b002a5f78 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_static.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_static.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++abi.a b/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++abi.a
index 74941a373..f57c1d0fd 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++abi.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++abi.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libunwind.a b/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libunwind.a
index 9163bd48c..fc8617b81 100644
--- a/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libunwind.a
+++ b/current/sources/cxx-stl/llvm-libc++/libs/x86_64/libunwind.a
Binary files differ
diff --git a/current/sources/cxx-stl/llvm-libc++abi/Android.mk b/current/sources/cxx-stl/llvm-libc++abi/Android.mk
new file mode 100644
index 000000000..d53ef3185
--- /dev/null
+++ b/current/sources/cxx-stl/llvm-libc++abi/Android.mk
@@ -0,0 +1,112 @@
+#
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+libcxxabi_src_files := \
+ src/abort_message.cpp \
+ src/cxa_aux_runtime.cpp \
+ src/cxa_default_handlers.cpp \
+ src/cxa_demangle.cpp \
+ src/cxa_exception.cpp \
+ src/cxa_exception_storage.cpp \
+ src/cxa_guard.cpp \
+ src/cxa_handlers.cpp \
+ src/cxa_personality.cpp \
+ src/cxa_thread_atexit.cpp \
+ src/cxa_unexpected.cpp \
+ src/cxa_vector.cpp \
+ src/cxa_virtual.cpp \
+ src/fallback_malloc.cpp \
+ src/private_typeinfo.cpp \
+ src/stdlib_exception.cpp \
+ src/stdlib_new_delete.cpp \
+ src/stdlib_stdexcept.cpp \
+ src/stdlib_typeinfo.cpp \
+
+libcxxabi_includes := \
+ $(LOCAL_PATH)/include \
+ $(LOCAL_PATH)/../libcxx/include \
+
+libcxxabi_cflags := -D__STDC_FORMAT_MACROS
+libcxxabi_cppflags := -std=c++11 -Wno-unknown-attributes -DHAS_THREAD_LOCAL
+libcxxabi_cppflags += -DLIBCXXABI_USE_LLVM_UNWINDER=1
+
+ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
+ libcxxabi_cppflags += -mbranch-protection=standard
+endif
+
+ifneq ($(LIBCXX_FORCE_REBUILD),true) # Using prebuilt
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := libc++abi
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD SPDX-license-identifier-MIT SPDX-license-identifier-NCSA
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/LICENSE.TXT $(LOCAL_PATH)/NOTICE
+LOCAL_SRC_FILES := ../llvm-libc++/libs/$(TARGET_ARCH_ABI)/$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION)
+LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
+
+# Unlike the platform build, ndk-build will actually perform dependency checking
+# on static libraries and topologically sort them to determine link order.
+# Though there is no link step, without this we may link libunwind before
+# libc++abi, which won't succeed.
+LOCAL_STATIC_LIBRARIES += libunwind
+LOCAL_EXPORT_STATIC_LIBRARIES := libunwind
+include $(PREBUILT_STATIC_LIBRARY)
+
+else # Building
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := libc++abi
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD SPDX-license-identifier-MIT SPDX-license-identifier-NCSA
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/LICENSE.TXT $(LOCAL_PATH)/NOTICE
+LOCAL_SRC_FILES := $(libcxxabi_src_files)
+LOCAL_C_INCLUDES := $(libcxxabi_includes)
+LOCAL_CPPFLAGS := $(libcxxabi_cppflags)
+LOCAL_CPP_FEATURES := rtti exceptions
+LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
+LOCAL_ARM_NEON := false
+
+ifeq ($(NDK_PLATFORM_NEEDS_ANDROID_SUPPORT),true)
+ # This doesn't affect the prebuilt itself since this is a prebuilt library,
+ # but the build system needs to know about the dependency so we can sort the
+ # exported includes properly.
+ LOCAL_STATIC_LIBRARIES += libandroid_support
+endif
+
+# Unlike the platform build, ndk-build will actually perform dependency checking
+# on static libraries and topologically sort them to determine link order.
+# Though there is no link step, without this we may link libunwind before
+# libc++abi, which won't succeed.
+LOCAL_STATIC_LIBRARIES += libunwind
+LOCAL_EXPORT_STATIC_LIBRARIES := libunwind
+include $(BUILD_STATIC_LIBRARY)
+
+endif # Prebuilt/building
+
+# Define a prebuilt module for libunwind.a so that ndk-build adds it to the
+# linker command-line before any shared libraries, ensuring that the unwinder
+# is linked statically even if a shared library dependency exports an unwinder.
+include $(CLEAR_VARS)
+LOCAL_MODULE := libunwind
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD SPDX-license-identifier-MIT SPDX-license-identifier-NCSA
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_NOTICE_FILE := $(LOCAL_PATH)/LICENSE.TXT $(LOCAL_PATH)/NOTICE
+LOCAL_SRC_FILES := $(NDK_TOOLCHAIN_LIB_DIR)/$(TARGET_TOOLCHAIN_ARCH_LIB_DIR)/libunwind.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+$(call import-module, android/support)
diff --git a/current/sources/cxx-stl/llvm-libc++abi/src/cxa_exception.cpp b/current/sources/cxx-stl/llvm-libc++abi/src/cxa_exception.cpp
index 09813e851..ebb05ce54 100644
--- a/current/sources/cxx-stl/llvm-libc++abi/src/cxa_exception.cpp
+++ b/current/sources/cxx-stl/llvm-libc++abi/src/cxa_exception.cpp
@@ -341,11 +341,8 @@ unwinding with _Unwind_Resume.
According to ARM EHABI 8.4.1, __cxa_end_cleanup() should not clobber any
register, thus we have to write this function in assembly so that we can save
{r1, r2, r3}. We don't have to save r0 because it is the return value and the
-first argument to _Unwind_Resume(). The function also saves/restores r4 to
-keep the stack aligned and to provide a temp register. _Unwind_Resume never
-returns and we need to keep the original lr so just branch to it. When
-targeting bare metal, the function also clobbers ip/r12 to hold the address of
-_Unwind_Resume, which may be too far away for an ordinary branch.
+first argument to _Unwind_Resume(). In addition, we are saving r4 in order to
+align the stack to 16 bytes, even though it is a callee-save register.
*/
__attribute__((used)) static _Unwind_Exception *
__cxa_end_cleanup_impl()
@@ -375,29 +372,19 @@ __cxa_end_cleanup_impl()
return &exception_header->unwindHeader;
}
-asm(" .pushsection .text.__cxa_end_cleanup,\"ax\",%progbits\n"
+asm (
+ " .pushsection .text.__cxa_end_cleanup,\"ax\",%progbits\n"
" .globl __cxa_end_cleanup\n"
" .type __cxa_end_cleanup,%function\n"
"__cxa_end_cleanup:\n"
-#if defined(__ARM_FEATURE_BTI_DEFAULT)
- " bti\n"
-#endif
" push {r1, r2, r3, r4}\n"
- " mov r4, lr\n"
" bl __cxa_end_cleanup_impl\n"
- " mov lr, r4\n"
-#if defined(LIBCXXABI_BAREMETAL)
- " ldr r4, =_Unwind_Resume\n"
- " mov ip, r4\n"
-#endif
" pop {r1, r2, r3, r4}\n"
-#if defined(LIBCXXABI_BAREMETAL)
- " bx ip\n"
-#else
- " b _Unwind_Resume\n"
-#endif
- " .popsection");
-#endif // defined(_LIBCXXABI_ARM_EHABI)
+ " bl _Unwind_Resume\n"
+ " bl abort\n"
+ " .popsection"
+);
+#endif // defined(_LIBCXXABI_ARM_EHABI)
/*
This routine can catch foreign or native exceptions. If native, the exception
diff --git a/pylintrc b/pylintrc
index 9e03c7dc8..0ce266927 100644
--- a/pylintrc
+++ b/pylintrc
@@ -1,22 +1,11 @@
-[MASTER]
-jobs = 0
-
[MESSAGES CONTROL]
-disable=missing-docstring
+disable=missing-docstring,fixme,locally-disabled
-ignore=ndk-gdb.py
[BASIC]
+# Good variable names which should always be accepted, separated by a comma
good-names=i,j,k,ex,Run,_
-[VARIABLES]
-dummy-variables-rgx=_
-
-[SIMILARITIES]
-ignore-imports=yes
[FORMAT]
-max-line-length=88
-ignore-long-lines=(?x)(
- ^\s*(\#\ )?<?https?://\S+>?$|
- ^\s*\#\ \S+$)
+max-line-length=79
diff --git a/update.py b/update.py
index 398a68b27..c8c821c3e 100755
--- a/update.py
+++ b/update.py
@@ -15,16 +15,16 @@
# limitations under the License.
#
import argparse
+import glob
import logging
import os
-from pathlib import Path
import shutil
import subprocess
from tempfile import TemporaryDirectory
import textwrap
-THIS_DIR = Path(__file__).resolve().parent
+THIS_DIR = os.path.realpath(os.path.dirname(__file__))
def logger():
@@ -32,212 +32,153 @@ def logger():
def check_call(cmd):
- logger().debug("Running `%s`", " ".join(cmd))
+ logger().debug('Running `%s`', ' '.join(cmd))
subprocess.check_call(cmd)
def remove(path):
- logger().debug("remove `%s`", path)
+ logger().debug('remove `%s`', path)
os.remove(path)
-def fetch_artifact(branch: str, build: str, pattern: str) -> None:
- """Fetches an artifact from the build server.
-
- Use OAuth2 authentication and the gLinux android-fetch-artifact package,
- which work with both on-corp and off-corp workstations."""
- fetch_artifact_path = shutil.which("fetch_artifact")
- if fetch_artifact_path is None:
- raise RuntimeError(
- "error: cannot find fetch_artifact in PATH. Install it using:\n"
- " sudo glinux-add-repo android\n"
- " sudo apt update\n"
- " sudo apt install android-fetch-artifact\n"
- )
- cmd = [
- fetch_artifact_path,
- "--use_oauth2",
- "--branch",
- branch,
- "--target=linux",
- "--bid",
- build,
- pattern,
- ]
+def fetch_artifact(branch, build, pattern):
+ fetch_artifact_path = '/google/data/ro/projects/android/fetch_artifact'
+ cmd = [fetch_artifact_path, '--branch', branch, '--target=linux',
+ '--bid', build, pattern]
check_call(cmd)
def api_str(api_level):
- return f"android-{api_level}"
+ return 'android-{}'.format(api_level)
def start_branch(build):
- branch_name = "update-" + (build or "latest")
- logger().info("Creating branch %s", branch_name)
- check_call(["repo", "start", branch_name, "."])
+ branch_name = 'update-' + (build or 'latest')
+ logger().info('Creating branch %s', branch_name)
+ check_call(['repo', 'start', branch_name, '.'])
-def remove_old_release(install_dir: Path) -> None:
- if (install_dir / ".git").exists():
+def remove_old_release(install_dir):
+ if os.path.exists(os.path.join(install_dir, '.git')):
logger().info('Removing old install directory "%s"', install_dir)
- check_call(["git", "rm", "-rf", install_dir])
+ check_call(['git', 'rm', '-rf', install_dir])
# Need to check again because git won't remove directories if they have
# non-git files in them.
- if install_dir.exists():
+ if os.path.exists(install_dir):
shutil.rmtree(install_dir)
-LIBUNWIND_GLOB = "toolchains/llvm/prebuilt/*/lib64/clang/*/lib/linux/*/libunwind.a"
-LIBCXX_SHARED_GLOB = (
- "toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/*/libc++_shared.so"
+LIBUNWIND_GLOB = (
+ 'toolchains/llvm/prebuilt/*/lib64/clang/*/lib/linux/*/libunwind.a'
)
-LIBCXX_STATIC_GLOB = (
- "toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/*/libc++_static.a"
-)
-LIBCXXABI_GLOB = "toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/*/libc++abi.a"
-def unzip_single_directory(artifact: Path, destination: Path) -> None:
+def unzip_single_directory(artifact, destination):
# Use cwd so that we can use rename without having to worry about crossing
# file systems.
with TemporaryDirectory(dir=os.getcwd()) as temp_dir:
cmd = [
- "unzip",
- str(artifact),
- "-d",
+ 'unzip',
+ artifact,
+ '-d',
temp_dir,
- "*/sources/android/cpufeatures/*",
- "*/sources/android/native_app_glue/*",
- "*/sources/android/support/*",
- "*/sources/cxx-stl/*",
- "*/source.properties",
- os.path.join("*", LIBUNWIND_GLOB),
- os.path.join("*", LIBCXX_SHARED_GLOB),
- os.path.join("*", LIBCXX_STATIC_GLOB),
- os.path.join("*", LIBCXXABI_GLOB),
+ '*/sources/android/cpufeatures/*',
+ '*/sources/android/native_app_glue/*',
+ '*/sources/android/support/*',
+ '*/sources/cxx-stl/*',
+ '*/source.properties',
+ os.path.join('*', LIBUNWIND_GLOB),
]
check_call(cmd)
dirs = os.listdir(temp_dir)
assert len(dirs) == 1
- ndk_dir = Path(temp_dir) / dirs[0]
- for child in ndk_dir.iterdir():
- child.rename(destination / child.name)
-
-
-def relocate_libcxx(install_dir: Path) -> None:
- """Copies the libc++ libraries from the toolchain to sources.
-
- New versions of the NDK have removed the libraries in the sources directory because
- they are duplicates and they aren't needed in typical builds. Soong still expects to
- find them in that directory though. We could fix Soong, but since this whole
- directory should be dead soon we'll just fix-up the install for now.
- """
- dest_base = install_dir / "sources/cxx-stl/llvm-libc++/libs"
- for glob in {LIBCXX_SHARED_GLOB, LIBCXX_STATIC_GLOB, LIBCXXABI_GLOB}:
- file_name = Path(glob).name
- for file_path in install_dir.glob(glob):
- triple = file_path.parent.name
- abi = {
- "arm-linux-androideabi": "armeabi-v7a",
- "aarch64-linux-android": "arm64-v8a",
- "i686-linux-android": "x86",
- "x86_64-linux-android": "x86_64",
- }[triple]
- dest_dir = dest_base / abi
- dest_dir.mkdir(parents=True, exist_ok=True)
- dest = dest_dir / file_name
- logger().info("Relocating %s to %s", file_path, dest)
- file_path.rename(dest)
-
-
-def relocate_libunwind(install_dir: Path) -> None:
- dest_base = install_dir / "sources/cxx-stl/llvm-libc++/libs"
- for libunwind in install_dir.glob(LIBUNWIND_GLOB):
- arch = libunwind.parent.name
- abi = {
- "arm": "armeabi-v7a",
- "aarch64": "arm64-v8a",
- "i386": "x86",
- "x86_64": "x86_64",
- }[arch]
- dest_dir = dest_base / abi
- dest = dest_dir / "libunwind.a"
- logger().info("Relocating %s to %s", libunwind, dest)
- libunwind.rename(dest)
+ ndk_dir = os.path.join(temp_dir, dirs[0])
+ for child in os.listdir(ndk_dir):
+ os.rename(os.path.join(ndk_dir, child),
+ os.path.join(destination, child))
-def delete_android_mks(install_dir: Path) -> None:
- for android_mk in install_dir.glob("**/Android.mk"):
- android_mk.unlink()
+def relocate_libunwind(install_dir):
+ unwinds = glob.glob(os.path.join(install_dir, LIBUNWIND_GLOB))
+ dest_base = os.path.join(install_dir, 'sources/cxx-stl/llvm-libc++/libs')
+ for libunwind in unwinds:
+ arch = os.path.basename(os.path.dirname(libunwind))
+ abi = {
+ 'arm': 'armeabi-v7a',
+ 'aarch64': 'arm64-v8a',
+ 'i386': 'x86',
+ 'x86_64': 'x86_64',
+ }[arch]
+ dest_dir = os.path.join(dest_base, abi)
+ dest = os.path.join(dest_dir, 'libunwind.a')
+ logger().info('Relocating %s to %s', libunwind, dest)
+ os.rename(libunwind, dest)
-def install_new_release(branch: str, build: str, install_dir: Path) -> None:
- install_dir.mkdir()
+def install_new_release(branch, build, install_dir):
+ os.makedirs(install_dir)
- artifact_pattern = "android-ndk-*.zip"
- logger().info(
- "Fetching %s from %s (artifacts matching %s)", build, branch, artifact_pattern
- )
+ artifact_pattern = 'android-ndk-*.zip'
+ logger().info('Fetching %s from %s (artifacts matching %s)', build, branch,
+ artifact_pattern)
fetch_artifact(branch, build, artifact_pattern)
- artifacts = list(Path().glob("android-ndk-*.zip"))
+ artifacts = glob.glob('android-ndk-*.zip')
try:
assert len(artifacts) == 1
artifact = artifacts[0]
- logger().info("Extracting release")
+ logger().info('Extracting release')
unzip_single_directory(artifact, install_dir)
- relocate_libcxx(install_dir)
relocate_libunwind(install_dir)
- delete_android_mks(install_dir)
finally:
for artifact in artifacts:
- artifact.unlink()
+ os.unlink(artifact)
-def commit(branch: str, build: str, install_dir: Path) -> None:
- logger().info("Making commit")
- check_call(["git", "add", str(install_dir)])
- message = textwrap.dedent(
- f"""\
+def commit(branch, build, install_dir):
+ logger().info('Making commit')
+ check_call(['git', 'add', install_dir])
+ message = textwrap.dedent("""\
Update NDK prebuilts to build {build}.
Taken from branch {branch}.
Bug: None
Test: treehugger
- """
- )
- check_call(["git", "commit", "-m", message])
+ """).format(branch=branch, build=build)
+ check_call(['git', 'commit', '-m', message])
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument(
- "-b", "--branch", default="master-ndk", help="Branch to pull build from."
- )
- parser.add_argument("--build", required=True, help="Build number to pull.")
+ '-b', '--branch', default='master-ndk',
+ help='Branch to pull build from.')
+ parser.add_argument(
+ 'major_release', help='Major release being installed, e.g. "r11".')
+ parser.add_argument('--build', required=True, help='Build number to pull.')
parser.add_argument(
- "--use-current-branch",
- action="store_true",
- help="Perform the update in the current branch. Do not repo start.",
- )
+ '--use-current-branch', action='store_true',
+ help='Perform the update in the current branch. Do not repo start.')
parser.add_argument(
- "-v", "--verbose", action="count", default=0, help="Increase output verbosity."
- )
+ '-v', '--verbose', action='count', default=0,
+ help='Increase output verbosity.')
return parser.parse_args()
-def main() -> None:
+def main():
os.chdir(THIS_DIR)
args = get_args()
verbose_map = (logging.WARNING, logging.INFO, logging.DEBUG)
- verbosity = min(args.verbose, 2)
+ verbosity = args.verbose
+ if verbosity > 2:
+ verbosity = 2
logging.basicConfig(level=verbose_map[verbosity])
- install_dir = THIS_DIR / "current"
+ install_dir = os.path.realpath(args.major_release)
if not args.use_current_branch:
start_branch(args.build)
@@ -246,5 +187,5 @@ def main() -> None:
commit(args.branch, args.build, install_dir)
-if __name__ == "__main__":
+if __name__ == '__main__':
main()