diff --git a/README.md b/README.md index a268a0f6f2..89cdf1cead 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 2a1210c8df..81887e7e6c 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 2575e2d2df..7872bdf737 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 e2ef8a7592..f365101354 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 1b4a5801a0..4196e37a32 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 c153f3ab88..700d4c17b9 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 "/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 $) @@ -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 394f76d2eb..cd2c019b19 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 9e726c47fa..45d7726707 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 9cc03baad1..0841a9e661 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 f7335e72af..11b1b72a38 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()