From 4c8bedd1db791914068cb19e17a98c5e6ef70582 Mon Sep 17 00:00:00 2001 From: Daeho Ro <40587651+daeho-ro@users.noreply.github.com> Date: Fri, 25 Sep 2026 22:10:28 +0900 Subject: [PATCH] fix(cmake): allow linking a shared flatccrt When flatcc is provided via NANOARROW_FLATCC_ROOT_DIR or NANOARROW_FLATCC_LIB_DIR, prefer a static flatccrt as before but fall back to a shared one when no static library is available. Closes #922. --- CMakeLists.txt | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 848b933e8..919da6b46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -218,25 +218,42 @@ if(NANOARROW_IPC) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) elseif(NOT NANOARROW_FLATCC_ROOT_DIR) - add_library(flatccrt STATIC IMPORTED) + # Prefer a static flatccrt but fall back to a shared one + find_library(NANOARROW_FLATCC_LIBRARY + NAMES "${CMAKE_STATIC_LIBRARY_PREFIX}flatccrt${CMAKE_STATIC_LIBRARY_SUFFIX}" + flatccrt + PATHS "${NANOARROW_FLATCC_LIB_DIR}" + NO_DEFAULT_PATH REQUIRED) + add_library(flatccrt UNKNOWN IMPORTED) set_target_properties(flatccrt - PROPERTIES IMPORTED_LOCATION - "${NANOARROW_FLATCC_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}flatccrt${CMAKE_STATIC_LIBRARY_SUFFIX}" + PROPERTIES IMPORTED_LOCATION "${NANOARROW_FLATCC_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${NANOARROW_FLATCC_INCLUDE_DIR}") elseif(NOT NANOARROW_FLATCC_INCLUDE_DIR) set(NANOARROW_FLATCC_INCLUDE_DIR "${NANOARROW_FLATCC_ROOT_DIR}/include") - add_library(flatccrt STATIC IMPORTED) + # Prefer a static flatccrt but fall back to a shared one + find_library(NANOARROW_FLATCC_LIBRARY + NAMES "${CMAKE_STATIC_LIBRARY_PREFIX}flatccrt${CMAKE_STATIC_LIBRARY_SUFFIX}" + flatccrt + PATHS "${NANOARROW_FLATCC_ROOT_DIR}/lib" + NO_DEFAULT_PATH REQUIRED) + find_library(NANOARROW_FLATCC_LIBRARY_DEBUG + NAMES "${CMAKE_STATIC_LIBRARY_PREFIX}flatccrt_d${CMAKE_STATIC_LIBRARY_SUFFIX}" + flatccrt_d + PATHS "${NANOARROW_FLATCC_ROOT_DIR}/debug/lib" + NO_DEFAULT_PATH) + add_library(flatccrt UNKNOWN IMPORTED) set_target_properties(flatccrt - PROPERTIES IMPORTED_LOCATION - "${NANOARROW_FLATCC_ROOT_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}flatccrt${CMAKE_STATIC_LIBRARY_SUFFIX}" - IMPORTED_LOCATION_DEBUG - "${NANOARROW_FLATCC_ROOT_DIR}/debug/lib/${CMAKE_STATIC_LIBRARY_PREFIX}flatccrt_d${CMAKE_STATIC_LIBRARY_SUFFIX}" + PROPERTIES IMPORTED_LOCATION "${NANOARROW_FLATCC_LIBRARY}" IMPORTED_LOCATION_RELEASE - "${NANOARROW_FLATCC_ROOT_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}flatccrt${CMAKE_STATIC_LIBRARY_SUFFIX}" + "${NANOARROW_FLATCC_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${NANOARROW_FLATCC_INCLUDE_DIR}") + if(NANOARROW_FLATCC_LIBRARY_DEBUG) + set_target_properties(flatccrt PROPERTIES IMPORTED_LOCATION_DEBUG + "${NANOARROW_FLATCC_LIBRARY_DEBUG}") + endif() endif() if(NANOARROW_IPC_WITH_ZSTD)