You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by li...@apache.org on 2022/06/14 14:31:16 UTC

[arrow-adbc] branch main updated: Fix MacOS build (#15)

This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new c086d2d  Fix MacOS build (#15)
c086d2d is described below

commit c086d2d56ff75ebc225aa6a7e7e7168ea7214dfe
Author: David Li <li...@gmail.com>
AuthorDate: Tue Jun 14 10:31:13 2022 -0400

    Fix MacOS build (#15)
    
    * Fix MacOS build/CMake setup
    
    * Specify static link libs too
    
    * Fix static link libs
    
    * Don't require hardcoding driver names
    
    * Fix test setup
---
 README.md                                       |   6 +-
 adbc_driver_manager/CMakeLists.txt              |   6 +-
 adbc_driver_manager/adbc_driver_manager.cc      |  42 ++++++++-
 adbc_driver_manager/adbc_driver_manager_test.cc |   5 +-
 cmake_modules/AdbcDefines.cmake                 |  22 ++---
 cmake_modules/BuildUtils.cmake                  |  55 ++++++------
 cmake_modules/DefineOptions.cmake               | 111 ++++++++++++------------
 cmake_modules/README.md                         |   3 +
 drivers/flight_sql/CMakeLists.txt               |  34 +++++---
 drivers/sqlite/CMakeLists.txt                   |  25 +++---
 10 files changed, 178 insertions(+), 131 deletions(-)

diff --git a/README.md b/README.md
index a268a0f..89cdf1c 100644
--- a/README.md
+++ b/README.md
@@ -34,6 +34,8 @@ $ cmake ../../adbc_driver_manager
 $ make
 ```
 
-Some of Arrow's build options are supported:
+Some of Arrow's build options are supported (under a different prefix):
 
-- `ARROW_BUILD_TESTS`: build the unit tests
+- `ADBC_BUILD_SHARED`, `ADBC_BUILD_STATIC`: build the shared/static libraries
+- `ADBC_BUILD_TESTS`: build the unit tests
+- `ADBC_INSTALL_NAME_RPATH`: set `install_name` to `@rpath` on MacOS
diff --git a/adbc_driver_manager/CMakeLists.txt b/adbc_driver_manager/CMakeLists.txt
index 2a1210c..81887e7 100644
--- a/adbc_driver_manager/CMakeLists.txt
+++ b/adbc_driver_manager/CMakeLists.txt
@@ -24,15 +24,15 @@ include(BuildUtils)
 include(DefineOptions)
 
 project(adbc_driver_manager
-        VERSION "${ARROW_BASE_VERSION}"
+        VERSION "${ADBC_BASE_VERSION}"
         LANGUAGES CXX)
 include(CTest)
 add_arrow_lib(adbc_driver_manager SOURCES adbc_driver_manager.cc)
 include_directories(SYSTEM ${REPOSITORY_ROOT})
 
-if(ARROW_BUILD_TESTS)
+if(ADBC_BUILD_TESTS)
   find_package(Arrow REQUIRED)
-  if(ARROW_TEST_LINKAGE STREQUAL "shared")
+  if(ADBC_TEST_LINKAGE STREQUAL "shared")
     set(TEST_LINK_LIBS adbc_driver_manager_shared arrow_shared)
   else()
     set(TEST_LINK_LIBS adbc_driver_manager_static arrow_static)
diff --git a/adbc_driver_manager/adbc_driver_manager.cc b/adbc_driver_manager/adbc_driver_manager.cc
index 2575e2d..7872bdf 100644
--- a/adbc_driver_manager/adbc_driver_manager.cc
+++ b/adbc_driver_manager/adbc_driver_manager.cc
@@ -318,11 +318,47 @@ AdbcStatusCode AdbcLoadDriver(const char* driver_name, const char* entrypoint,
     return ADBC_STATUS_INTERNAL;                                               \
   }
 
+  // TODO: handle Windows
+#if defined(__APPLE__)
+  static const std::string kPlatformLibraryPrefix = "lib";
+  static const std::string kPlatformLibrarySuffix = ".dylib";
+#else
+  static const std::string kPlatformLibraryPrefix = "lib";
+  static const std::string kPlatformLibrarySuffix = ".so";
+#endif
+
+  std::string error_message;
+
   void* handle = dlopen(driver_name, RTLD_NOW | RTLD_LOCAL);
   if (!handle) {
-    std::string message = "dlopen() failed: ";
-    message += dlerror();
-    SetError(error, message);
+    error_message = "dlopen() failed: ";
+    error_message += dlerror();
+
+    // If applicable, append the shared library prefix/extension and
+    // try again (this way you don't have to hardcode driver names by
+    // platform in the application)
+    const std::string driver_str = driver_name;
+
+    std::string full_driver_name;
+    if (driver_str.size() < kPlatformLibraryPrefix.size() ||
+        driver_str.compare(0, kPlatformLibraryPrefix.size(), kPlatformLibraryPrefix) !=
+            0) {
+      full_driver_name += kPlatformLibraryPrefix;
+    }
+    full_driver_name += driver_name;
+    if (driver_str.size() < kPlatformLibrarySuffix.size() ||
+        driver_str.compare(full_driver_name.size() - kPlatformLibrarySuffix.size(),
+                           kPlatformLibrarySuffix.size(), kPlatformLibrarySuffix) != 0) {
+      full_driver_name += kPlatformLibrarySuffix;
+    }
+    handle = dlopen(full_driver_name.c_str(), RTLD_NOW | RTLD_LOCAL);
+    if (!handle) {
+      error_message += "\ndlopen() failed: ";
+      error_message += dlerror();
+    }
+  }
+  if (!handle) {
+    SetError(error, error_message);
     return ADBC_STATUS_UNKNOWN;
   }
 
diff --git a/adbc_driver_manager/adbc_driver_manager_test.cc b/adbc_driver_manager/adbc_driver_manager_test.cc
index e2ef8a7..f365101 100644
--- a/adbc_driver_manager/adbc_driver_manager_test.cc
+++ b/adbc_driver_manager/adbc_driver_manager_test.cc
@@ -38,15 +38,14 @@ class DriverManager : public ::testing::Test {
   void SetUp() override {
     size_t initialized = 0;
     ADBC_ASSERT_OK_WITH_ERROR(
-        error, AdbcLoadDriver("libadbc_driver_sqlite.so", "AdbcSqliteDriverInit",
+        error, AdbcLoadDriver("adbc_driver_sqlite", "AdbcSqliteDriverInit",
                               ADBC_VERSION_0_0_1, &driver, &initialized, &error));
     ASSERT_EQ(initialized, ADBC_VERSION_0_0_1);
 
     ADBC_ASSERT_OK_WITH_ERROR(error, AdbcDatabaseNew(&database, &error));
     ASSERT_NE(database.private_data, nullptr);
     ADBC_ASSERT_OK_WITH_ERROR(
-        error,
-        AdbcDatabaseSetOption(&database, "driver", "libadbc_driver_sqlite.so", &error));
+        error, AdbcDatabaseSetOption(&database, "driver", "adbc_driver_sqlite", &error));
     ADBC_ASSERT_OK_WITH_ERROR(
         error,
         AdbcDatabaseSetOption(&database, "entrypoint", "AdbcSqliteDriverInit", &error));
diff --git a/cmake_modules/AdbcDefines.cmake b/cmake_modules/AdbcDefines.cmake
index 1b4a580..4196e37 100644
--- a/cmake_modules/AdbcDefines.cmake
+++ b/cmake_modules/AdbcDefines.cmake
@@ -20,23 +20,23 @@
 enable_language(C)
 include(DefineOptions)
 
-set(ARROW_VERSION "9.0.0-SNAPSHOT")
-set(ARROW_BASE_VERSION "9.0.0")
-set(ARROW_VERSION_MAJOR "9")
-set(ARROW_VERSION_MINOR "0")
-set(ARROW_VERSION_PATCH "0")
+set(ADBC_VERSION "9.0.0-SNAPSHOT")
+set(ADBC_BASE_VERSION "9.0.0")
+set(ADBC_VERSION_MAJOR "9")
+set(ADBC_VERSION_MINOR "0")
+set(ADBC_VERSION_PATCH "0")
 
-math(EXPR ARROW_SO_VERSION "${ARROW_VERSION_MAJOR} * 100 + ${ARROW_VERSION_MINOR}")
-set(ARROW_FULL_SO_VERSION "${ARROW_SO_VERSION}.${ARROW_VERSION_PATCH}.0")
+math(EXPR ADBC_SO_VERSION "${ADBC_VERSION_MAJOR} * 100 + ${ADBC_VERSION_MINOR}")
+set(ADBC_FULL_SO_VERSION "${ADBC_SO_VERSION}.${ADBC_VERSION_PATCH}.0")
 
-if(ARROW_DEPENDENCY_SOURCE STREQUAL "CONDA")
+if(ADBC_DEPENDENCY_SOURCE STREQUAL "CONDA")
   message(STATUS "Adding \$CONDA_PREFIX to CMAKE_PREFIX_PATH")
   list(APPEND CMAKE_PREFIX_PATH "$ENV{CONDA_PREFIX}")
 endif()
 
-if(ARROW_BUILD_TESTS)
-  add_custom_target(all-tests)
+add_custom_target(all-tests)
+if(ADBC_BUILD_TESTS)
   find_package(GTest)
-  set(ARROW_TEST_LINK_LIBS GTest::gtest_main GTest::gtest GTest::gmock)
+  set(ADBC_TEST_LINK_LIBS GTest::gtest_main GTest::gtest GTest::gmock)
   set(BUILD_SUPPORT_DIR "${REPOSITORY_ROOT}/ci/build_support")
 endif()
diff --git a/cmake_modules/BuildUtils.cmake b/cmake_modules/BuildUtils.cmake
index c153f3a..700d4c1 100644
--- a/cmake_modules/BuildUtils.cmake
+++ b/cmake_modules/BuildUtils.cmake
@@ -18,7 +18,7 @@
 # Common path suffixes to be searched by find_library or find_path.
 # Windows artifacts may be found under "<root>/Library", so
 # search there as well.
-set(ARROW_LIBRARY_PATH_SUFFIXES
+set(ADBC_LIBRARY_PATH_SUFFIXES
     "${CMAKE_LIBRARY_ARCHITECTURE}"
     "lib/${CMAKE_LIBRARY_ARCHITECTURE}"
     "lib64"
@@ -28,7 +28,7 @@ set(ARROW_LIBRARY_PATH_SUFFIXES
     "Library"
     "Library/lib"
     "Library/bin")
-set(ARROW_INCLUDE_PATH_SUFFIXES "include" "Library" "Library/include")
+set(ADBC_INCLUDE_PATH_SUFFIXES "include" "Library" "Library/include")
 
 function(add_thirdparty_lib LIB_NAME LIB_TYPE LIB)
   set(options)
@@ -66,7 +66,7 @@ function(add_thirdparty_lib LIB_NAME LIB_TYPE LIB)
 endfunction()
 
 function(REUSE_PRECOMPILED_HEADER_LIB TARGET_NAME LIB_NAME)
-  if(ARROW_USE_PRECOMPILED_HEADERS)
+  if(ADBC_USE_PRECOMPILED_HEADERS)
     target_precompile_headers(${TARGET_NAME} REUSE_FROM ${LIB_NAME})
   endif()
 endfunction()
@@ -185,16 +185,16 @@ function(ADD_ARROW_LIB LIB_NAME)
     set(${ARG_OUTPUTS})
   endif()
 
-  # Allow overriding ARROW_BUILD_SHARED and ARROW_BUILD_STATIC
+  # Allow overriding ADBC_BUILD_SHARED and ADBC_BUILD_STATIC
   if(DEFINED ARG_BUILD_SHARED)
     set(BUILD_SHARED ${ARG_BUILD_SHARED})
   else()
-    set(BUILD_SHARED ${ARROW_BUILD_SHARED})
+    set(BUILD_SHARED ${ADBC_BUILD_SHARED})
   endif()
   if(DEFINED ARG_BUILD_STATIC)
     set(BUILD_STATIC ${ARG_BUILD_STATIC})
   else()
-    set(BUILD_STATIC ${ARROW_BUILD_STATIC})
+    set(BUILD_STATIC ${ADBC_BUILD_STATIC})
   endif()
   if(ARG_OUTPUT_PATH)
     set(OUTPUT_PATH ${ARG_OUTPUT_PATH})
@@ -229,7 +229,7 @@ function(ADD_ARROW_LIB LIB_NAME)
     if(ARG_PRECOMPILED_HEADER_LIB)
       reuse_precompiled_header_lib(${LIB_NAME}_objlib ${ARG_PRECOMPILED_HEADER_LIB})
     endif()
-    if(ARG_PRECOMPILED_HEADERS AND ARROW_USE_PRECOMPILED_HEADERS)
+    if(ARG_PRECOMPILED_HEADERS AND ADBC_USE_PRECOMPILED_HEADERS)
       target_precompile_headers(${LIB_NAME}_objlib PRIVATE ${ARG_PRECOMPILED_HEADERS})
     endif()
     set(LIB_DEPS $<TARGET_OBJECTS:${LIB_NAME}_objlib>)
@@ -304,8 +304,8 @@ function(ADD_ARROW_LIB LIB_NAME)
                                      PDB_OUTPUT_DIRECTORY "${OUTPUT_PATH}"
                                      LINK_FLAGS "${ARG_SHARED_LINK_FLAGS}"
                                      OUTPUT_NAME ${LIB_NAME}
-                                     VERSION "${ARROW_FULL_SO_VERSION}"
-                                     SOVERSION "${ARROW_SO_VERSION}")
+                                     VERSION "${ADBC_FULL_SO_VERSION}"
+                                     SOVERSION "${ADBC_SO_VERSION}")
 
     target_link_libraries(${LIB_NAME}_shared
                           LINK_PUBLIC
@@ -324,7 +324,7 @@ function(ADD_ARROW_LIB LIB_NAME)
       endforeach()
     endif()
 
-    if(ARROW_RPATH_ORIGIN)
+    if(ADBC_RPATH_ORIGIN)
       if(APPLE)
         set(_lib_install_rpath "@loader_path")
       else()
@@ -335,7 +335,7 @@ function(ADD_ARROW_LIB LIB_NAME)
     endif()
 
     if(APPLE)
-      if(ARROW_INSTALL_NAME_RPATH)
+      if(ADBC_INSTALL_NAME_RPATH)
         set(_lib_install_name "@rpath")
       else()
         set(_lib_install_name "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
@@ -383,8 +383,8 @@ function(ADD_ARROW_LIB LIB_NAME)
     endif()
 
     if(WIN32)
-      target_compile_definitions(${LIB_NAME}_static PUBLIC ARROW_STATIC)
-      target_compile_definitions(${LIB_NAME}_static PUBLIC ARROW_FLIGHT_STATIC)
+      target_compile_definitions(${LIB_NAME}_static PUBLIC ADBC_STATIC)
+      target_compile_definitions(${LIB_NAME}_static PUBLIC ADBC_FLIGHT_STATIC)
     endif()
 
     set_target_properties(${LIB_NAME}_static
@@ -425,13 +425,13 @@ function(ADD_ARROW_LIB LIB_NAME)
     set(TARGETS_CMAKE "${ARG_CMAKE_PACKAGE_NAME}Targets.cmake")
     install(EXPORT ${LIB_NAME}_targets
             FILE "${TARGETS_CMAKE}"
-            DESTINATION "${ARROW_CMAKE_INSTALL_DIR}")
+            DESTINATION "${ADBC_CMAKE_INSTALL_DIR}")
 
     set(CONFIG_CMAKE "${ARG_CMAKE_PACKAGE_NAME}Config.cmake")
     set(BUILT_CONFIG_CMAKE "${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_CMAKE}")
     configure_package_config_file("${CONFIG_CMAKE}.in" "${BUILT_CONFIG_CMAKE}"
-                                  INSTALL_DESTINATION "${ARROW_CMAKE_INSTALL_DIR}")
-    install(FILES "${BUILT_CONFIG_CMAKE}" DESTINATION "${ARROW_CMAKE_INSTALL_DIR}")
+                                  INSTALL_DESTINATION "${ADBC_CMAKE_INSTALL_DIR}")
+    install(FILES "${BUILT_CONFIG_CMAKE}" DESTINATION "${ADBC_CMAKE_INSTALL_DIR}")
 
     set(CONFIG_VERSION_CMAKE "${ARG_CMAKE_PACKAGE_NAME}ConfigVersion.cmake")
     set(BUILT_CONFIG_VERSION_CMAKE "${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_VERSION_CMAKE}")
@@ -439,8 +439,7 @@ function(ADD_ARROW_LIB LIB_NAME)
       "${BUILT_CONFIG_VERSION_CMAKE}"
       VERSION ${${PROJECT_NAME}_VERSION}
       COMPATIBILITY AnyNewerVersion)
-    install(FILES "${BUILT_CONFIG_VERSION_CMAKE}"
-            DESTINATION "${ARROW_CMAKE_INSTALL_DIR}")
+    install(FILES "${BUILT_CONFIG_VERSION_CMAKE}" DESTINATION "${ADBC_CMAKE_INSTALL_DIR}")
   endif()
 
   if(ARG_PKG_CONFIG_NAME)
@@ -525,7 +524,7 @@ function(ADD_BENCHMARK REL_BENCHMARK_NAME)
       # Customize link libraries
       target_link_libraries(${BENCHMARK_NAME} PRIVATE ${ARG_STATIC_LINK_LIBS})
     else()
-      target_link_libraries(${BENCHMARK_NAME} PRIVATE ${ARROW_BENCHMARK_LINK_LIBS})
+      target_link_libraries(${BENCHMARK_NAME} PRIVATE ${ADBC_BENCHMARK_LINK_LIBS})
     endif()
     add_dependencies(benchmark ${BENCHMARK_NAME})
     set(NO_COLOR "--color_print=false")
@@ -568,8 +567,8 @@ function(ADD_BENCHMARK REL_BENCHMARK_NAME)
     set(ARG_LABELS benchmark)
   endif()
 
-  if(ARROW_BUILD_DETAILED_BENCHMARKS)
-    target_compile_definitions(${BENCHMARK_NAME} PRIVATE ARROW_BUILD_DETAILED_BENCHMARKS)
+  if(ADBC_BUILD_DETAILED_BENCHMARKS)
+    target_compile_definitions(${BENCHMARK_NAME} PRIVATE ADBC_BUILD_DETAILED_BENCHMARKS)
   endif()
 
   add_test(${BENCHMARK_NAME}
@@ -601,7 +600,7 @@ endfunction()
 #
 # Arguments after the test name will be passed to set_tests_properties().
 #
-# \arg ENABLED if passed, add this unit test even if ARROW_BUILD_TESTS is off
+# \arg ENABLED if passed, add this unit test even if ADBC_BUILD_TESTS is off
 # \arg PREFIX a string to append to the name of the test executable. For
 # example, if you have src/arrow/foo/bar-test.cc, then PREFIX "foo" will create
 # test executable foo-bar-test
@@ -671,14 +670,14 @@ function(ADD_TEST_CASE REL_TEST_NAME)
     # Customize link libraries
     target_link_libraries(${TEST_NAME} PRIVATE ${ARG_STATIC_LINK_LIBS})
   else()
-    target_link_libraries(${TEST_NAME} PRIVATE ${ARROW_TEST_LINK_LIBS})
+    target_link_libraries(${TEST_NAME} PRIVATE ${ADBC_TEST_LINK_LIBS})
   endif()
 
   if(ARG_PRECOMPILED_HEADER_LIB)
     reuse_precompiled_header_lib(${TEST_NAME} ${ARG_PRECOMPILED_HEADER_LIB})
   endif()
 
-  if(ARG_PRECOMPILED_HEADERS AND ARROW_USE_PRECOMPILED_HEADERS)
+  if(ARG_PRECOMPILED_HEADERS AND ADBC_USE_PRECOMPILED_HEADERS)
     target_precompile_headers(${TEST_NAME} PRIVATE ${ARG_PRECOMPILED_HEADERS})
   endif()
 
@@ -694,7 +693,7 @@ function(ADD_TEST_CASE REL_TEST_NAME)
     add_dependencies(${TEST_NAME} ${ARG_EXTRA_DEPENDENCIES})
   endif()
 
-  if(ARROW_TEST_MEMCHECK AND NOT ARG_NO_VALGRIND)
+  if(ADBC_TEST_MEMCHECK AND NOT ARG_NO_VALGRIND)
     add_test(${TEST_NAME}
              bash
              -c
@@ -801,7 +800,7 @@ function(ADD_ARROW_EXAMPLE REL_EXAMPLE_NAME)
     # This example has a corresponding .cc file, set it up as an executable.
     set(EXAMPLE_PATH "${EXECUTABLE_OUTPUT_PATH}/${EXAMPLE_NAME}")
     add_executable(${EXAMPLE_NAME} "${REL_EXAMPLE_NAME}.cc" ${ARG_EXTRA_SOURCES})
-    target_link_libraries(${EXAMPLE_NAME} ${ARROW_EXAMPLE_LINK_LIBS})
+    target_link_libraries(${EXAMPLE_NAME} ${ADBC_EXAMPLE_LINK_LIBS})
     add_dependencies(runexample ${EXAMPLE_NAME})
     set(NO_COLOR "--color_print=false")
 
@@ -906,8 +905,8 @@ function(ARROW_ADD_PKG_CONFIG MODULE)
 endfunction()
 
 function(ARROW_INSTALL_CMAKE_FIND_MODULE MODULE)
-  install(FILES "${ARROW_SOURCE_DIR}/cmake_modules/Find${MODULE}.cmake"
-          DESTINATION "${ARROW_CMAKE_INSTALL_DIR}")
+  install(FILES "${ADBC_SOURCE_DIR}/cmake_modules/Find${MODULE}.cmake"
+          DESTINATION "${ADBC_CMAKE_INSTALL_DIR}")
 endfunction()
 
 # Implementations of lisp "car" and "cdr" functions
diff --git a/cmake_modules/DefineOptions.cmake b/cmake_modules/DefineOptions.cmake
index 394f76d..cd2c019 100644
--- a/cmake_modules/DefineOptions.cmake
+++ b/cmake_modules/DefineOptions.cmake
@@ -16,8 +16,8 @@
 # under the License.
 
 macro(set_option_category name)
-  set(ARROW_OPTION_CATEGORY ${name})
-  list(APPEND "ARROW_OPTION_CATEGORIES" ${name})
+  set(ADBC_OPTION_CATEGORY ${name})
+  list(APPEND "ADBC_OPTION_CATEGORIES" ${name})
 endmacro()
 
 function(check_description_length name description)
@@ -55,7 +55,7 @@ macro(define_option name description default)
 
   option(${name} "${multiline_description}" ${default})
 
-  list(APPEND "ARROW_${ARROW_OPTION_CATEGORY}_OPTION_NAMES" ${name})
+  list(APPEND "ADBC_${ADBC_OPTION_CATEGORY}_OPTION_NAMES" ${name})
   set("${name}_OPTION_DESCRIPTION" ${description})
   set("${name}_OPTION_DEFAULT" ${default})
   set("${name}_OPTION_TYPE" "bool")
@@ -69,7 +69,7 @@ macro(define_option_string name description default)
       ${default}
       CACHE STRING "${multiline_description}")
 
-  list(APPEND "ARROW_${ARROW_OPTION_CATEGORY}_OPTION_NAMES" ${name})
+  list(APPEND "ADBC_${ADBC_OPTION_CATEGORY}_OPTION_NAMES" ${name})
   set("${name}_OPTION_DESCRIPTION" ${description})
   set("${name}_OPTION_DEFAULT" "\"${default}\"")
   set("${name}_OPTION_TYPE" "string")
@@ -86,88 +86,86 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
   #----------------------------------------------------------------------
   set_option_category("Compile and link")
 
-  define_option_string(ARROW_CXXFLAGS "Compiler flags to append when compiling Arrow" "")
+  define_option_string(ADBC_CXXFLAGS "Compiler flags to append when compiling Arrow" "")
 
-  define_option(ARROW_BUILD_STATIC "Build static libraries" ON)
+  define_option(ADBC_BUILD_STATIC "Build static libraries" ON)
 
-  define_option(ARROW_BUILD_SHARED "Build shared libraries" ON)
+  define_option(ADBC_BUILD_SHARED "Build shared libraries" ON)
 
-  define_option_string(ARROW_PACKAGE_KIND
+  define_option_string(ADBC_PACKAGE_KIND
                        "Arbitrary string that identifies the kind of package;\
 (for informational purposes)" "")
 
-  define_option_string(ARROW_GIT_ID "The Arrow git commit id (if any)" "")
+  define_option_string(ADBC_GIT_ID "The Arrow git commit id (if any)" "")
 
-  define_option_string(ARROW_GIT_DESCRIPTION "The Arrow git commit description (if any)"
+  define_option_string(ADBC_GIT_DESCRIPTION "The Arrow git commit description (if any)"
                        "")
 
-  define_option(ARROW_NO_DEPRECATED_API "Exclude deprecated APIs from build" OFF)
+  define_option(ADBC_NO_DEPRECATED_API "Exclude deprecated APIs from build" OFF)
 
-  define_option(ARROW_USE_CCACHE "Use ccache when compiling (if available)" ON)
+  define_option(ADBC_USE_CCACHE "Use ccache when compiling (if available)" ON)
 
-  define_option(ARROW_USE_PRECOMPILED_HEADERS "Use precompiled headers when compiling"
-                OFF)
+  define_option(ADBC_USE_PRECOMPILED_HEADERS "Use precompiled headers when compiling" OFF)
 
   # Arm64 architectures and extensions can lead to exploding combinations.
   # So set it directly through cmake command line.
   #
   # If you change this, you need to change the definition in
   # python/CMakeLists.txt too.
-  define_option_string(ARROW_ARMV8_ARCH
+  define_option_string(ADBC_ARMV8_ARCH
                        "Arm64 arch and extensions"
                        "armv8-a" # Default
                        "armv8-a"
                        "armv8-a+crc+crypto")
 
-  define_option(ARROW_ALTIVEC "Build with Altivec if compiler has support" ON)
+  define_option(ADBC_ALTIVEC "Build with Altivec if compiler has support" ON)
 
-  define_option(ARROW_RPATH_ORIGIN "Build Arrow libraries with RATH set to \$ORIGIN" OFF)
+  define_option(ADBC_RPATH_ORIGIN "Build Arrow libraries with RATH set to \$ORIGIN" OFF)
 
-  define_option(ARROW_INSTALL_NAME_RPATH
+  define_option(ADBC_INSTALL_NAME_RPATH
                 "Build Arrow libraries with install_name set to @rpath" ON)
 
-  define_option(ARROW_GGDB_DEBUG "Pass -ggdb flag to debug builds" ON)
+  define_option(ADBC_GGDB_DEBUG "Pass -ggdb flag to debug builds" ON)
 
   #----------------------------------------------------------------------
   set_option_category("Test and benchmark")
 
-  define_option(ARROW_BUILD_EXAMPLES "Build the Arrow examples" OFF)
+  define_option(ADBC_BUILD_EXAMPLES "Build the Arrow examples" OFF)
 
-  define_option(ARROW_BUILD_TESTS "Build the Arrow googletest unit tests" OFF)
+  define_option(ADBC_BUILD_TESTS "Build the Arrow googletest unit tests" OFF)
 
-  define_option(ARROW_BUILD_INTEGRATION "Build the Arrow integration test executables"
-                OFF)
+  define_option(ADBC_BUILD_INTEGRATION "Build the Arrow integration test executables" OFF)
 
-  define_option(ARROW_BUILD_BENCHMARKS "Build the Arrow micro benchmarks" OFF)
+  define_option(ADBC_BUILD_BENCHMARKS "Build the Arrow micro benchmarks" OFF)
 
-  if(ARROW_BUILD_SHARED)
-    set(ARROW_TEST_LINKAGE_DEFAULT "shared")
+  if(ADBC_BUILD_SHARED)
+    set(ADBC_TEST_LINKAGE_DEFAULT "shared")
   else()
-    set(ARROW_TEST_LINKAGE_DEFAULT "static")
+    set(ADBC_TEST_LINKAGE_DEFAULT "static")
   endif()
 
-  define_option_string(ARROW_TEST_LINKAGE
+  define_option_string(ADBC_TEST_LINKAGE
                        "Linkage of Arrow libraries with unit tests executables."
-                       "${ARROW_TEST_LINKAGE_DEFAULT}"
+                       "${ADBC_TEST_LINKAGE_DEFAULT}"
                        "shared"
                        "static")
 
   #----------------------------------------------------------------------
   set_option_category("Lint")
 
-  define_option(ARROW_GENERATE_COVERAGE "Build with C++ code coverage enabled" OFF)
+  define_option(ADBC_GENERATE_COVERAGE "Build with C++ code coverage enabled" OFF)
 
   #----------------------------------------------------------------------
   set_option_category("Checks")
 
-  define_option(ARROW_TEST_MEMCHECK "Run the test suite using valgrind --tool=memcheck"
+  define_option(ADBC_TEST_MEMCHECK "Run the test suite using valgrind --tool=memcheck"
                 OFF)
 
-  define_option(ARROW_USE_ASAN "Enable Address Sanitizer checks" OFF)
+  define_option(ADBC_USE_ASAN "Enable Address Sanitizer checks" OFF)
 
-  define_option(ARROW_USE_TSAN "Enable Thread Sanitizer checks" OFF)
+  define_option(ADBC_USE_TSAN "Enable Thread Sanitizer checks" OFF)
 
-  define_option(ARROW_USE_UBSAN "Enable Undefined Behavior sanitizer checks" OFF)
+  define_option(ADBC_USE_UBSAN "Enable Undefined Behavior sanitizer checks" OFF)
 
   #----------------------------------------------------------------------
   set_option_category("Thirdparty toolchain")
@@ -185,22 +183,22 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
   #   $NAME_ROOT arguments to CMake, or set environment variables for the same
   #   with CMake 3.11 and higher.  If your system packages are in a non-default
   #   location, or if you are using a non-standard toolchain, you can also pass
-  #   ARROW_PACKAGE_PREFIX to set the *_ROOT variables to look in that
+  #   ADBC_PACKAGE_PREFIX to set the *_ROOT variables to look in that
   #   directory
   # * CONDA: Same as SYSTEM but set all *_ROOT variables to
   #   ENV{CONDA_PREFIX}. If this is run within an active conda environment,
   #   then ENV{CONDA_PREFIX} will be used for dependencies unless
-  #   ARROW_DEPENDENCY_SOURCE is set explicitly to one of the other options
+  #   ADBC_DEPENDENCY_SOURCE is set explicitly to one of the other options
   # * VCPKG: Searches for dependencies installed by vcpkg.
   # * BREW: Use SYSTEM but search for select packages with brew.
   if(NOT "$ENV{CONDA_PREFIX}" STREQUAL "")
-    set(ARROW_DEPENDENCY_SOURCE_DEFAULT "CONDA")
+    set(ADBC_DEPENDENCY_SOURCE_DEFAULT "CONDA")
   else()
-    set(ARROW_DEPENDENCY_SOURCE_DEFAULT "AUTO")
+    set(ADBC_DEPENDENCY_SOURCE_DEFAULT "AUTO")
   endif()
-  define_option_string(ARROW_DEPENDENCY_SOURCE
+  define_option_string(ADBC_DEPENDENCY_SOURCE
                        "Method to use for acquiring arrow's build dependencies"
-                       "${ARROW_DEPENDENCY_SOURCE_DEFAULT}"
+                       "${ADBC_DEPENDENCY_SOURCE_DEFAULT}"
                        "AUTO"
                        "BUNDLED"
                        "SYSTEM"
@@ -216,19 +214,18 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
                   "Pass verbose linking options when linking libraries and executables"
                   OFF)
 
-    define_option(ARROW_USE_STATIC_CRT "Build Arrow with statically linked CRT" OFF)
+    define_option(ADBC_USE_STATIC_CRT "Build Arrow with statically linked CRT" OFF)
   endif()
 
   #----------------------------------------------------------------------
   set_option_category("Advanced developer")
 
-  option(ARROW_BUILD_CONFIG_SUMMARY_JSON "Summarize build configuration in a JSON file"
-         ON)
+  option(ADBC_BUILD_CONFIG_SUMMARY_JSON "Summarize build configuration in a JSON file" ON)
 endif()
 
 macro(validate_config)
-  foreach(category ${ARROW_OPTION_CATEGORIES})
-    set(option_names ${ARROW_${category}_OPTION_NAMES})
+  foreach(category ${ADBC_OPTION_CATEGORIES})
+    set(option_names ${ADBC_${category}_OPTION_NAMES})
 
     foreach(name ${option_names})
       set(possible_values ${${name}_OPTION_POSSIBLE_VALUES})
@@ -246,7 +243,7 @@ endmacro()
 
 macro(config_summary_message)
   message(STATUS "---------------------------------------------------------------------")
-  message(STATUS "Arrow version:                                 ${ARROW_VERSION}")
+  message(STATUS "Arrow version:                                 ${ADBC_VERSION}")
   message(STATUS)
   message(STATUS "Build configuration summary:")
 
@@ -259,13 +256,13 @@ macro(config_summary_message)
     )
   endif()
 
-  foreach(category ${ARROW_OPTION_CATEGORIES})
+  foreach(category ${ADBC_OPTION_CATEGORIES})
 
     message(STATUS)
     message(STATUS "${category} options:")
     message(STATUS)
 
-    set(option_names ${ARROW_${category}_OPTION_NAMES})
+    set(option_names ${ADBC_${category}_OPTION_NAMES})
 
     foreach(name ${option_names})
       set(value "${${name}}")
@@ -296,8 +293,8 @@ macro(config_summary_json)
   message(STATUS "  Outputting build configuration summary to ${summary}")
   file(WRITE ${summary} "{\n")
 
-  foreach(category ${ARROW_OPTION_CATEGORIES})
-    foreach(name ${ARROW_${category}_OPTION_NAMES})
+  foreach(category ${ADBC_OPTION_CATEGORIES})
+    foreach(name ${ADBC_${category}_OPTION_NAMES})
       file(APPEND ${summary} "\"${name}\": \"${${name}}\",\n")
     endforeach()
   endforeach()
@@ -310,16 +307,16 @@ macro(config_summary_json)
                            "\"${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json\",\n")
   endif()
   file(APPEND ${summary} "\"install_prefix\": \"${CMAKE_INSTALL_PREFIX}\",\n")
-  file(APPEND ${summary} "\"arrow_version\": \"${ARROW_VERSION}\"\n")
+  file(APPEND ${summary} "\"arrow_version\": \"${ADBC_VERSION}\"\n")
   file(APPEND ${summary} "}\n")
 endmacro()
 
 macro(config_summary_cmake_setters path)
   file(WRITE ${path} "# Options used to build arrow:")
 
-  foreach(category ${ARROW_OPTION_CATEGORIES})
+  foreach(category ${ADBC_OPTION_CATEGORIES})
     file(APPEND ${path} "\n\n## ${category} options:")
-    foreach(name ${ARROW_${category}_OPTION_NAMES})
+    foreach(name ${ADBC_${category}_OPTION_NAMES})
       set(description ${${name}_OPTION_DESCRIPTION})
       foreach(description_line ${description})
         file(APPEND ${path} "\n### ${description_line}")
@@ -333,16 +330,16 @@ endmacro()
 #----------------------------------------------------------------------
 # Compute default values for omitted variables
 
-if(NOT ARROW_GIT_ID)
+if(NOT ADBC_GIT_ID)
   execute_process(COMMAND "git" "log" "-n1" "--format=%H"
                   WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
-                  OUTPUT_VARIABLE ARROW_GIT_ID
+                  OUTPUT_VARIABLE ADBC_GIT_ID
                   OUTPUT_STRIP_TRAILING_WHITESPACE)
 endif()
-if(NOT ARROW_GIT_DESCRIPTION)
+if(NOT ADBC_GIT_DESCRIPTION)
   execute_process(COMMAND "git" "describe" "--tags" "--dirty"
                   WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
                   ERROR_QUIET
-                  OUTPUT_VARIABLE ARROW_GIT_DESCRIPTION
+                  OUTPUT_VARIABLE ADBC_GIT_DESCRIPTION
                   OUTPUT_STRIP_TRAILING_WHITESPACE)
 endif()
diff --git a/cmake_modules/README.md b/cmake_modules/README.md
index 9e726c4..45d7726 100644
--- a/cmake_modules/README.md
+++ b/cmake_modules/README.md
@@ -3,4 +3,7 @@
 Common CMake utilities taken from Apache Arrow. These should be kept
 in sync with Arrow upstream without modification. Exceptions:
 
+- All flags were renamed to avoid colliding with Arrow flags (since
+  ArrowOptions.cmake will also define these options when
+  `find_package(Arrow)`).
 - DefineOptions.cmake has different flags.
diff --git a/drivers/flight_sql/CMakeLists.txt b/drivers/flight_sql/CMakeLists.txt
index 9cc03ba..0841a9e 100644
--- a/drivers/flight_sql/CMakeLists.txt
+++ b/drivers/flight_sql/CMakeLists.txt
@@ -22,7 +22,7 @@ include(AdbcDefines)
 include(BuildUtils)
 
 project(adbc_driver_flight_sql
-        VERSION "${ARROW_BASE_VERSION}"
+        VERSION "${ADBC_BASE_VERSION}"
         LANGUAGES CXX)
 
 find_package(Arrow REQUIRED)
@@ -37,22 +37,28 @@ add_arrow_lib(adbc_driver_flight_sql
               SHARED_LINK_LIBS
               arrow_flight_sql_shared
               arrow_flight_shared
-              arrow_shared)
+              arrow_shared
+              STATIC_LINK_LIBS
+              arrow_flight_sql_static
+              arrow_flight_static
+              arrow_static)
 include_directories(SYSTEM ${REPOSITORY_ROOT})
 
-if(ARROW_TEST_LINKAGE STREQUAL "shared")
-  set(TEST_LINK_LIBS adbc_driver_flight_sql_shared)
-else()
-  set(TEST_LINK_LIBS adbc_driver_flight_sql_static)
-endif()
+if(ADBC_BUILD_TESTS)
+  if(ADBC_TEST_LINKAGE STREQUAL "shared")
+    set(TEST_LINK_LIBS adbc_driver_flight_sql_shared)
+  else()
+    set(TEST_LINK_LIBS adbc_driver_flight_sql_static)
+  endif()
 
-add_test_case(driver_flight_sql_test
-              PREFIX
-              adbc
-              SOURCES
-              flight_sql_test.cc
-              EXTRA_LINK_LIBS
-              ${TEST_LINK_LIBS})
+  add_test_case(driver_flight_sql_test
+                PREFIX
+                adbc
+                SOURCES
+                flight_sql_test.cc
+                EXTRA_LINK_LIBS
+                ${TEST_LINK_LIBS})
+endif()
 
 validate_config()
 config_summary_message()
diff --git a/drivers/sqlite/CMakeLists.txt b/drivers/sqlite/CMakeLists.txt
index f7335e7..11b1b72 100644
--- a/drivers/sqlite/CMakeLists.txt
+++ b/drivers/sqlite/CMakeLists.txt
@@ -22,7 +22,7 @@ include(AdbcDefines)
 include(BuildUtils)
 
 project(adbc_driver_sqlite
-        VERSION "${ARROW_BASE_VERSION}"
+        VERSION "${ADBC_BASE_VERSION}"
         LANGUAGES CXX)
 include(CTest)
 
@@ -34,23 +34,28 @@ add_arrow_lib(adbc_driver_sqlite
               sqlite.cc
               SHARED_LINK_LIBS
               SQLite::SQLite3
-              arrow_shared)
+              arrow_shared
+              STATIC_LINK_LIBS
+              SQLite::SQLite3
+              arrow_static)
 include_directories(SYSTEM ${REPOSITORY_ROOT})
 include_directories(SYSTEM ${SQLite3_INCLUDE_DIRS})
 
-if(ARROW_TEST_LINKAGE STREQUAL "shared")
+if(ADBC_TEST_LINKAGE STREQUAL "shared")
   set(TEST_LINK_LIBS adbc_driver_sqlite_shared)
 else()
   set(TEST_LINK_LIBS adbc_driver_sqlite_static)
 endif()
 
-add_test_case(driver_sqlite_test
-              PREFIX
-              adbc
-              SOURCES
-              sqlite_test.cc
-              EXTRA_LINK_LIBS
-              ${TEST_LINK_LIBS})
+if(ADBC_BUILD_TESTS)
+  add_test_case(driver_sqlite_test
+                PREFIX
+                adbc
+                SOURCES
+                sqlite_test.cc
+                EXTRA_LINK_LIBS
+                ${TEST_LINK_LIBS})
+endif()
 
 validate_config()
 config_summary_message()