From 0f8ab3e42a4a052dec0e4b66c252fd83e8e5ba7c Mon Sep 17 00:00:00 2001 Date: Wed, 2 Dec 2020 18:33:48 +0530 Subject: [PATCH] [android] Put in fixes for librt and armv7-a Android doesn't have a separate librt, it's just part of libc. Also, the static build wasn't working for armv7-a, because the test executables wouldn't link with the multiple definition errors listed in android/ndk#176, so use the workaround given there. diff --git a/swift-corelibs-libdispatch/CMakeLists.txt b/swift-corelibs-libdispatch/CMakeLists.txt index 75c419c13..36da01122 100644 --- a/swift-corelibs-libdispatch/CMakeLists.txt +++ b/swift-corelibs-libdispatch/CMakeLists.txt @@ -113,7 +113,9 @@ if(__BUILTIN_TRAP) set(HAVE_NORETURN_BUILTIN_TRAP 1) endif() -find_package(LibRT) +if(NOT CMAKE_SYSTEM_NAME STREQUAL Android) + find_package(LibRT) +endif() check_function_exists(_pthread_workqueue_init HAVE__PTHREAD_WORKQUEUE_INIT) check_function_exists(getprogname HAVE_GETPROGNAME) diff --git a/swift-corelibs-libdispatch/tests/CMakeLists.txt b/swift-corelibs-libdispatch/tests/CMakeLists.txt index a27603559..0176a062b 100644 --- a/swift-corelibs-libdispatch/tests/CMakeLists.txt +++ b/swift-corelibs-libdispatch/tests/CMakeLists.txt @@ -88,6 +88,14 @@ function(add_unit_test name) target_compile_options(${name} PRIVATE -fblocks) target_compile_options(${name} PRIVATE -Wall -Wno-deprecated-declarations) endif() + # Without this flag, cross-compiling static test executables for Android armv7 + # fails with the multiple definition errors seen in android/ndk#176, so I + # pulled in this workaround noted there. The tests build and run with this + # flag applied. + if(NOT BUILD_SHARED_LIBS AND CMAKE_SYSTEM_NAME STREQUAL Android AND + CMAKE_SYSTEM_PROCESSOR STREQUAL armv7-a) + target_link_options(${name} PRIVATE "LINKER:--allow-multiple-definition") + endif() target_link_libraries(${name} PRIVATE dispatch