| From a3fd6ca79da40572e27b010d90b339a8a67832a1 Mon Sep 17 00:00:00 2001 |
| From: Yi Kong <yikong@google.com> |
| Date: Wed, 1 May 2019 11:16:58 -0700 |
| Subject: Add stubs and headers for nl_types APIs. |
| |
| We don't have message catalog APIs on Android until O. For releases |
| prior to that, we build in stub APIs (as weak symbols so we use libc's |
| on new API levels). We add these here instead of in libandroid_support |
| because the driver (correctly) links libomp well after |
| libandroid_support, which means libandroid_support won't be searched |
| for resolving symbols in openmp. |
| |
| Since NDK r16 removed nl_types.h, also bundle a stub header. |
| |
| aosp/571945 |
| |
| Test: Build LLVM with NDK r16 |
| Bug: https://github.com/android-ndk/ndk/issues/9 |
| Change-Id: I0a07a969388b958be49bd50325bd7c5254140127 |
| --- |
| openmp/runtime/src/CMakeLists.txt | 6 +++ |
| openmp/runtime/src/android/nl_types.h | 45 ++++++++++++++++++ |
| openmp/runtime/src/android/nltypes_stubs.cpp | 48 ++++++++++++++++++++ |
| 3 files changed, 99 insertions(+) |
| create mode 100644 openmp/runtime/src/android/nl_types.h |
| create mode 100644 openmp/runtime/src/android/nltypes_stubs.cpp |
| |
| diff --git a/openmp/runtime/src/CMakeLists.txt b/openmp/runtime/src/CMakeLists.txt |
| index a5654d6d5ec..6dab6651a0d 100644 |
| --- a/openmp/runtime/src/CMakeLists.txt |
| +++ b/openmp/runtime/src/CMakeLists.txt |
| @@ -49,6 +49,9 @@ include_directories( |
| if(${LIBOMP_USE_HWLOC}) |
| include_directories(${LIBOMP_HWLOC_INSTALL_DIR}/include) |
| endif() |
| +if(ANDROID) |
| + include_directories(${LIBOMP_SRC_DIR}/android) |
| +endif() |
| |
| # Getting correct source files to build library |
| set(LIBOMP_CXXFILES) |
| @@ -92,6 +95,9 @@ else() |
| libomp_append(LIBOMP_CXXFILES kmp_gsupport.cpp) |
| libomp_append(LIBOMP_ASMFILES z_Linux_asm.S) # Unix assembly file |
| endif() |
| + if(ANDROID) |
| + libomp_append(LIBOMP_CXXFILES android/nltypes_stubs.cpp) |
| + endif() |
| libomp_append(LIBOMP_CXXFILES thirdparty/ittnotify/ittnotify_static.cpp LIBOMP_USE_ITT_NOTIFY) |
| libomp_append(LIBOMP_CXXFILES kmp_debugger.cpp LIBOMP_USE_DEBUGGER) |
| libomp_append(LIBOMP_CXXFILES kmp_stats.cpp LIBOMP_STATS) |
| diff --git a/openmp/runtime/src/android/nl_types.h b/openmp/runtime/src/android/nl_types.h |
| new file mode 100644 |
| index 00000000000..cc27e9374e7 |
| --- /dev/null |
| +++ b/openmp/runtime/src/android/nl_types.h |
| @@ -0,0 +1,45 @@ |
| +/* |
| + * Copyright (C) 2019 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. |
| + */ |
| +#ifndef ANDROID_NLTYPES_H |
| +#define ANDROID_NLTYPES_H |
| + |
| +#include_next <nl_types.h> |
| + |
| +#ifdef __cplusplus |
| +extern "C" { |
| +#endif |
| + |
| +nl_catd catopen(const char*, int); |
| +char* catgets(nl_catd, int, int, const char*); |
| +int catclose(nl_catd); |
| + |
| +#ifdef __cplusplus |
| +} // extern "C" |
| +#endif |
| + |
| +#endif /* ANDROID_NLTYPES_H */ |
| diff --git a/openmp/runtime/src/android/nltypes_stubs.cpp b/openmp/runtime/src/android/nltypes_stubs.cpp |
| new file mode 100644 |
| index 00000000000..2882910172f |
| --- /dev/null |
| +++ b/openmp/runtime/src/android/nltypes_stubs.cpp |
| @@ -0,0 +1,48 @@ |
| +/* |
| + * Copyright (C) 2019 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. |
| + */ |
| + |
| +#include <nl_types.h> |
| + |
| +#include <errno.h> |
| + |
| +__attribute__((weak,visibility("hidden"))) |
| +nl_catd catopen(const char*, int) { |
| + return reinterpret_cast<nl_catd>(-1); |
| +} |
| + |
| +__attribute__((weak,visibility("hidden"))) |
| +char* catgets(nl_catd, int, int, const char* message) { |
| + return const_cast<char*>(message); |
| +} |
| + |
| +__attribute__((weak,visibility("hidden"))) |
| +int catclose(nl_catd) { |
| + // Since we didn't hand out a valid nl_catd, you can't be returning one to us. |
| + errno = EBADF; |
| + return -1; |
| +} |
| -- |
| 2.25.0.341.g760bfbb309-goog |
| |