From 777121217ecf52fa2e73bb64a3ae0dbaf5950cc8 Mon Sep 17 00:00:00 2001 From: Benbuck Nason Date: Wed, 3 Jul 2024 19:07:57 -0700 Subject: [PATCH] CMakeLists.txt: Fix Android pthread linkage (#3591) https://developer.android.com/ndk/guides/stable_apis#core_cc > Note that on Android, unlike Linux, there are no separate libpthread or librt libraries. That functionality is included directly in libc, which does not need to be explicitly linked against. Set `THREADS_PREFER_PTHREAD_FLAG` ON and find package `Threads`, then link `${CMAKE_THREAD_LIBS_INIT}` instead of `-lpthread`. ps. https://cmake.org/cmake/help/latest/module/FindThreads.html --- CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 761ac574..bedf0af6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,12 +142,15 @@ endif () include (${SHARED_DIR}/utils/uncommon/shared_uncommon.cmake) +set (THREADS_PREFER_PTHREAD_FLAG ON) +find_package(Threads REQUIRED) + # STATIC LIBRARY if (WAMR_BUILD_STATIC) add_library(iwasm_static STATIC ${WAMR_RUNTIME_LIB_SOURCE}) set_target_properties (iwasm_static PROPERTIES OUTPUT_NAME vmlib) target_include_directories(iwasm_static INTERFACE ${WAMR_ROOT_DIR}/core/iwasm/include) - target_link_libraries (iwasm_static INTERFACE ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl -lpthread) + target_link_libraries (iwasm_static INTERFACE ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl ${CMAKE_THREAD_LIBS_INIT}) if (WAMR_BUILD_WASM_CACHE EQUAL 1) target_link_libraries(iwasm_static INTERFACE boringssl_crypto) endif () @@ -160,7 +163,7 @@ if (WAMR_BUILD_SHARED) add_library (iwasm_shared SHARED ${WAMR_RUNTIME_LIB_SOURCE}) set_target_properties (iwasm_shared PROPERTIES OUTPUT_NAME iwasm) target_include_directories(iwasm_shared INTERFACE ${WAMR_ROOT_DIR}/core/iwasm/include) - target_link_libraries (iwasm_shared INTERFACE ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl -lpthread) + target_link_libraries (iwasm_shared INTERFACE ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl ${CMAKE_THREAD_LIBS_INIT}) if (WAMR_BUILD_WASM_CACHE EQUAL 1) target_link_libraries(iwasm_shared INTERFACE boringssl_crypto) endif ()