kou commented on code in PR #36835:
URL: https://github.com/apache/arrow/pull/36835#discussion_r1292898596
##########
ci/scripts/python_wheel_manylinux_build.sh:
##########
@@ -87,6 +88,8 @@ pushd /tmp/arrow-build
cmake \
-DARROW_ACERO=${ARROW_ACERO} \
+ -DARROW_AZURE=${ARROW_AZURE} \
+ -DAZURE_SDK_SOURCE=BUNDLED \
Review Comment:
Do we need this?
Can we use vcpkg for Azure SDK for C++ when we build wheels?
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
Review Comment:
```suggestion
macro(build_azure_sdk)
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
Review Comment:
```suggestion
```
##########
ci/scripts/python_wheel_manylinux_build.sh:
##########
@@ -53,6 +53,7 @@ echo "=== (${PYTHON_VERSION}) Building Arrow C++ libraries
==="
: ${ARROW_FLIGHT:=ON}
: ${ARROW_GANDIVA:=OFF}
: ${ARROW_GCS:=ON}
+: ${ARROW_AZURE:=ON}
Review Comment:
Could you keep this list in alphabetical order?
Could you use `OFF` as the default value for now because we don't have
pyarrow bindings yet?
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
+
+ add_library(Azure::azure-storage-common STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-common
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-common
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
LibXml2::LibXml2 Azure::azure-core)
+ add_dependencies(Azure::azure-storage-common azuresdk_ep)
+
+ add_library(Azure::azure-storage-blobs STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-blobs
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core
Azure::azure-storage-common)
+ add_dependencies(Azure::azure-storage-blobs azuresdk_ep)
+
+ add_library(Azure::azure-storage-files-datalake STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-files-datalake
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
Review Comment:
```suggestion
PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY})
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
+
+ add_library(Azure::azure-storage-common STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-common
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-common
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
LibXml2::LibXml2 Azure::azure-core)
+ add_dependencies(Azure::azure-storage-common azuresdk_ep)
+
+ add_library(Azure::azure-storage-blobs STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-blobs
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
Review Comment:
```suggestion
PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_BLOBS_STATIC_LIBRARY})
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
+
+ add_library(Azure::azure-storage-common STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-common
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-common
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
LibXml2::LibXml2 Azure::azure-core)
+ add_dependencies(Azure::azure-storage-common azuresdk_ep)
+
+ add_library(Azure::azure-storage-blobs STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-blobs
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core
Azure::azure-storage-common)
+ add_dependencies(Azure::azure-storage-blobs azuresdk_ep)
+
+ add_library(Azure::azure-storage-files-datalake STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-files-datalake
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-files-datalake
+ PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core
Azure::azure-identity Azure::azure-storage-common Azure::azure-storage-blobs)
+ add_dependencies(Azure::azure-storage-files-datalake azuresdk_ep)
+
+ set(AZURE_SDK_VENDORED TRUE)
+ set(AZURESDK_LIBRARIES)
+ list(APPEND
+ AZURESDK_LIBRARIES
+ Azure::azure-core
+ Azure::azure-identity
+ Azure::azure-storage-blobs
+ Azure::azure-storage-common
Review Comment:
```suggestion
```
##########
ci/vcpkg/vcpkg.json:
##########
@@ -20,6 +20,7 @@
"flatbuffers",
"gflags",
"glog",
+ "libxml2",
Review Comment:
Can we create `azure` feature and move this to the feature?
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -159,6 +160,8 @@ macro(build_dependency DEPENDENCY_NAME)
build_absl()
elseif("${DEPENDENCY_NAME}" STREQUAL "AWSSDK")
build_awssdk()
+ elseif("${DEPENDENCY_NAME}" STREQUAL "AZURE_SDK")
+ build_azuresdk()
Review Comment:
```suggestion
build_azure_sdk()
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -548,6 +555,14 @@ else()
"${THIRDPARTY_MIRROR_URL}/aws-sdk-cpp-${ARROW_AWSSDK_BUILD_VERSION}.tar.gz")
endif()
+if(DEFINED ENV{ARROW_AZURESDK_URL})
+ set(ARROW_AZURESDK_URL "$ENV{ARROW_AZURESDK_URL}")
+else()
+ set_urls(ARROW_AZURESDK_URL
+
"https://github.com/Azure/azure-sdk-for-cpp/archive/${ARROW_AZURE_SDK_BUILD_VERSION}.tar.gz"
+ )
+endif()
Review Comment:
```suggestion
if(DEFINED ENV{ARROW_AZURE_SDK_URL})
set(ARROW_AZURE_SDK_URL "$ENV{ARROW_AZURE_SDK_URL}")
else()
set_urls(ARROW_AZURE_SDK_URL
"https://github.com/Azure/azure-sdk-for-cpp/archive/${ARROW_AZURE_SDK_BUILD_VERSION}.tar.gz"
)
endif()
```
##########
cpp/thirdparty/versions.txt:
##########
@@ -53,6 +53,8 @@ ARROW_AWS_LC_BUILD_VERSION=v1.3.0
ARROW_AWS_LC_BUILD_SHA256_CHECKSUM=ae96a3567161552744fc0cae8b4d68ed88b1ec0f3d3c98700070115356da5a37
ARROW_AWSSDK_BUILD_VERSION=1.10.55
ARROW_AWSSDK_BUILD_SHA256_CHECKSUM=2d552fb1a84bef4a9b65e34aa7031851ed2aef5319e02cc6e4cb735c48aa30de
+ARROW_AZURE_SDK_BUILD_VERSION=azure-identity_1.5.1
Review Comment:
Could you add the information as a comment for the line for further changes?
BTW, why did you chooze `azure-identity_*`? It seems that
azure-storage-files-datalake is the important package for us.
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
Review Comment:
Could you use the following instead?
```diff
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 4422e17e8..2d6a4eb9f 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -1367,6 +1367,7 @@ endif()
set(ARROW_OPENSSL_REQUIRED_VERSION "1.0.2")
set(ARROW_USE_OPENSSL OFF)
if(PARQUET_REQUIRE_ENCRYPTION
+ OR ARROW_AZURE
OR ARROW_FLIGHT
OR ARROW_GANDIVA
OR ARROW_GCS
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
Review Comment:
```suggestion
message(STATUS "Building Azure SDK for C++ from source")
```
##########
ci/docker/ubuntu-20.04-cpp.dockerfile:
##########
@@ -172,6 +175,7 @@ ENV absl_SOURCE=BUNDLED \
ARROW_WITH_ZSTD=ON \
ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-${llvm}/bin/llvm-symbolizer \
AWSSDK_SOURCE=BUNDLED \
+ AZURE_SDK_SOURCE=BUNDLED \
Review Comment:
Could you use `Azure_SOURCE` instead of `AZURE_SDK_SOURCE` because Azure SDK
for C++ uses `Azure` for its CMake package's prefix?
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
Review Comment:
```suggestion
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
Review Comment:
Does this option exist?
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
Review Comment:
Could you use `AZURE_SDK` and `azure-sdk` for prefix instead of `AZURESDK`
and `azuresdk`?
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
Review Comment:
We don't need this because we always use `lib`. See also:
`EP_COMMON_CMAKE_ARGS`.
```suggestion
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
Review Comment:
`Azure::azure-core` provides it:
```suggestion
PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY})
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
Review Comment:
Can we use `VERSION_LESS` here?
```suggestion
if(OPENSSL_VERSION VERSION_LESS 2)
list(APPEND
AZURESDK_COMMON_CMAKE_ARGS
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
endif()
```
BTW, do we really need this?
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
+
+ add_library(Azure::azure-storage-common STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-common
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
Review Comment:
```suggestion
PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY})
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
Review Comment:
This is needless because `Azure::azure-core` depends on `azuresdk_ep`.
```suggestion
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
Review Comment:
`Azure::azure-core` already depends on `OpenSSL::Crypto`.
```suggestion
PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core)
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
+
+ add_library(Azure::azure-storage-common STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-common
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-common
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
LibXml2::LibXml2 Azure::azure-core)
Review Comment:
```suggestion
PROPERTY INTERFACE_LINK_LIBRARIES LibXml2::LibXml2
Azure::azure-core)
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
+
+ add_library(Azure::azure-storage-common STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-common
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-common
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
LibXml2::LibXml2 Azure::azure-core)
+ add_dependencies(Azure::azure-storage-common azuresdk_ep)
Review Comment:
```suggestion
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
+
+ add_library(Azure::azure-storage-common STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-common
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-common
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
LibXml2::LibXml2 Azure::azure-core)
+ add_dependencies(Azure::azure-storage-common azuresdk_ep)
+
+ add_library(Azure::azure-storage-blobs STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-blobs
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core
Azure::azure-storage-common)
Review Comment:
```suggestion
set_property(TARGET Azure::azure-identity
PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-storage-common)
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
+
+ add_library(Azure::azure-storage-common STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-common
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-common
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
LibXml2::LibXml2 Azure::azure-core)
+ add_dependencies(Azure::azure-storage-common azuresdk_ep)
+
+ add_library(Azure::azure-storage-blobs STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-blobs
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core
Azure::azure-storage-common)
+ add_dependencies(Azure::azure-storage-blobs azuresdk_ep)
+
+ add_library(Azure::azure-storage-files-datalake STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-files-datalake
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-files-datalake
+ PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core
Azure::azure-identity Azure::azure-storage-common Azure::azure-storage-blobs)
+ add_dependencies(Azure::azure-storage-files-datalake azuresdk_ep)
Review Comment:
```suggestion
```
##########
cpp/src/arrow/filesystem/azurefs_test.cc:
##########
@@ -105,15 +111,41 @@ AzuriteEnv* GetAzuriteEnv() {
return ::arrow::internal::checked_cast<AzuriteEnv*>(azurite_env);
}
-// Placeholder tests for file structure
+// Placeholder tests
// TODO: GH-18014 Remove once a proper test is added
-TEST(AzureFileSystem, InitialiseAzurite) {
+TEST(AzureFileSystem, UploadThenDownload) {
+ const std::string containerName = "sample-container";
+ const std::string blobName = "sample-blob.txt";
+ const std::string blobContent = "Hello Azure!";
+
const std::string& account_name = GetAzuriteEnv()->account_name();
const std::string& account_key = GetAzuriteEnv()->account_key();
- EXPECT_EQ(account_name, "devstoreaccount1");
- EXPECT_EQ(account_key,
- "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/"
- "K1SZFPTOtr/KBHBeksoGMGw==");
+
+ auto credential =
std::make_shared<Azure::Storage::StorageSharedKeyCredential>(
+ account_name, account_key);
+
+ auto serviceClient = Azure::Storage::Blobs::BlobServiceClient(
+ "http://127.0.0.1:10000/devstoreaccount1", credential);
Review Comment:
Can we use `account_name` instead of `devstoreaccount1`?
##########
cpp/vcpkg.json:
##########
@@ -37,6 +37,7 @@
},
"grpc",
"gtest",
+ "libxml2",
Review Comment:
Can we use `azure-storage-files-datalake-cpp` instead of `libxml2`?
##########
cpp/src/arrow/filesystem/azurefs_test.cc:
##########
@@ -105,15 +111,41 @@ AzuriteEnv* GetAzuriteEnv() {
return ::arrow::internal::checked_cast<AzuriteEnv*>(azurite_env);
}
-// Placeholder tests for file structure
+// Placeholder tests
// TODO: GH-18014 Remove once a proper test is added
-TEST(AzureFileSystem, InitialiseAzurite) {
+TEST(AzureFileSystem, UploadThenDownload) {
+ const std::string containerName = "sample-container";
+ const std::string blobName = "sample-blob.txt";
+ const std::string blobContent = "Hello Azure!";
+
const std::string& account_name = GetAzuriteEnv()->account_name();
const std::string& account_key = GetAzuriteEnv()->account_key();
- EXPECT_EQ(account_name, "devstoreaccount1");
- EXPECT_EQ(account_key,
- "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/"
- "K1SZFPTOtr/KBHBeksoGMGw==");
+
+ auto credential =
std::make_shared<Azure::Storage::StorageSharedKeyCredential>(
+ account_name, account_key);
+
+ auto serviceClient = Azure::Storage::Blobs::BlobServiceClient(
+ "http://127.0.0.1:10000/devstoreaccount1", credential);
+ auto containerClient = serviceClient.GetBlobContainerClient(containerName);
+ containerClient.CreateIfNotExists();
+ auto blobClient = containerClient.GetBlockBlobClient(blobName);
+
+ std::vector<uint8_t> buffer(blobContent.begin(), blobContent.end());
+ blobClient.UploadFrom(buffer.data(), buffer.size());
+
+ std::vector<uint8_t> buffer2(blobContent.size());
+ blobClient.DownloadTo(buffer2.data(), buffer2.size());
+
+ EXPECT_EQ(std::string(buffer2.begin(), buffer2.end()), blobContent);
+}
+
+TEST(AzureFileSystem, InitialiseCredentials) {
Review Comment:
```suggestion
TEST(AzureFileSystem, InitializeCredentials) {
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
+
+ add_library(Azure::azure-storage-common STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-common
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-common
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
LibXml2::LibXml2 Azure::azure-core)
+ add_dependencies(Azure::azure-storage-common azuresdk_ep)
+
+ add_library(Azure::azure-storage-blobs STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-blobs
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core
Azure::azure-storage-common)
+ add_dependencies(Azure::azure-storage-blobs azuresdk_ep)
+
+ add_library(Azure::azure-storage-files-datalake STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-files-datalake
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-files-datalake
+ PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core
Azure::azure-identity Azure::azure-storage-common Azure::azure-storage-blobs)
Review Comment:
```suggestion
PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-identity
Azure::azure-storage-blobs)
```
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5057,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK and dependencies
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
+
+ add_library(Azure::azure-storage-common STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-common
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-common
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
LibXml2::LibXml2 Azure::azure-core)
+ add_dependencies(Azure::azure-storage-common azuresdk_ep)
+
+ add_library(Azure::azure-storage-blobs STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-blobs
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core
Azure::azure-storage-common)
+ add_dependencies(Azure::azure-storage-blobs azuresdk_ep)
+
+ add_library(Azure::azure-storage-files-datalake STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-files-datalake
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-files-datalake
+ PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core
Azure::azure-identity Azure::azure-storage-common Azure::azure-storage-blobs)
+ add_dependencies(Azure::azure-storage-files-datalake azuresdk_ep)
+
+ set(AZURE_SDK_VENDORED TRUE)
+ set(AZURESDK_LIBRARIES)
+ list(APPEND
+ AZURESDK_LIBRARIES
+ Azure::azure-core
+ Azure::azure-identity
+ Azure::azure-storage-blobs
+ Azure::azure-storage-common
+ Azure::azure-storage-files-datalake)
+ list(APPEND
+ ARROW_BUNDLED_STATIC_LIBS
+ Azure::azure-core
+ Azure::azure-identity
+ Azure::azure-storage-blobs
+ Azure::azure-storage-common
+ Azure::azure-storage-files-datalake)
+
+ set(AZURESDK_LINK_LIBRARIES ${AZURESDK_LIBRARIES})
+endmacro()
+
+if(ARROW_WITH_AZURE_SDK)
+ if(AZURE_SDK_SOURCE STREQUAL "SYSTEM")
+ resolve_dependency(Azure::azure-core)
+ resolve_dependency(Azure::azure-identity)
+ resolve_dependency(Azure::azure-storage-blobs)
+ resolve_dependency(Azure::azure-storage-common)
+ resolve_dependency(Azure::azure-storage-files-datalake)
Review Comment:
Hmm. This approach doesn't work with `AZURE_SDK_SOURCE=AUTO`.
How about adding `cpp/cmake_modules/FindAzure.cmake` and use
`resolve_dependency(Azure)` and using `find_package(Azure::*)`s in
`FindAzure.cmake`?
##########
cpp/cmake_modules/ThirdpartyToolchain.cmake:
##########
@@ -5039,6 +5054,154 @@ if(ARROW_S3)
endif()
endif()
+# ----------------------------------------------------------------------
+# Azure SDK for C++
+
+macro(build_azuresdk)
+ message(STATUS "Building Azure C++ SDK from source")
+
+ find_curl()
+ find_package(LibXml2 REQUIRED)
+ add_custom_target(azure_sdk_dependencies)
+
+ if(NOT OpenSSL_FOUND)
+ resolve_dependency(OpenSSL HAVE_ALT REQUIRED_VERSION
+ ${ARROW_OPENSSL_REQUIRED_VERSION})
+ endif()
+
+ set(AZURESDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-install")
+ set(AZURESDK_INCLUDE_DIR "${AZURESDK_PREFIX}/include")
+ set(AZURESDK_LIB_DIR "lib")
+
+ set(AZURESDK_COMMON_CMAKE_ARGS
+ ${EP_COMMON_CMAKE_ARGS}
+ "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
+ "-DCMAKE_PREFIX_PATH=${AZURESDK_PREFIX}"
+ -DBUILD_SHARED_LIBS=OFF
+ -DCMAKE_INSTALL_LIBDIR=${AZURESDK_LIB_DIR}
+ -DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
+ -DENABLE_TESTING=OFF
+ -DENABLE_UNITY_BUILD=ON
+ -DWARNINGS_AS_ERRORS=OFF)
+
+ STRING(REPLACE "." ";" OPENSSL_VERSION_ELEMENTS_LIST ${OPENSSL_VERSION})
+ list(GET OPENSSL_VERSION_ELEMENTS_LIST 0 OPENSSL_VERSION_MAJOR)
+ if(OPENSSL_VERSION_MAJOR EQUAL 1)
+ list(APPEND
+ AZURESDK_COMMON_CMAKE_ARGS
+
-DVCPKG_OVERLAY_PORTS=${CMAKE_CURRENT_BINARY_DIR}/azuresdk_ep-prefix/src/azuresdk_ep/vcpkg-custom-ports)
+ elseif(OPENSSL_VERSION_MAJOR EQUAL 3)
+ else()
+ message(FATAL_ERROR "Unknown OpenSSL version: ${OPENSSL_VERSION}")
+ endif()
+
+ file(MAKE_DIRECTORY ${AZURESDK_INCLUDE_DIR})
+ set(AZURE_CORE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_IDENTITY_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-identity${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_BLOBS_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-blobs${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_COMMON_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-common${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ set(AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY
+
"${AZURESDK_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}azure-storage-files-datalake${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ )
+ externalproject_add(azuresdk_ep
+ ${EP_COMMON_OPTIONS}
+ INSTALL_DIR ${AZURESDK_PREFIX}
+ URL ${ARROW_AZURESDK_URL}
+ URL_HASH
"SHA256=${ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM}"
+ CMAKE_ARGS ${AZURESDK_COMMON_CMAKE_ARGS}
+ BUILD_BYPRODUCTS ${AZURE_CORE_STATIC_LIBRARY}
+ ${AZURE_IDENTITY_STATIC_LIBRARY}
+ ${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ ${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+
${AZURE_STORAGE_FILES_DATALAKE_STATIC_LIBRARY}
+ DEPENDS azure_sdk_dependencies)
+ add_library(Azure::azure-core STATIC IMPORTED)
+ set_target_properties(Azure::azure-core
+ PROPERTIES IMPORTED_LOCATION
${AZURE_CORE_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-core
+ PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl OpenSSL::Crypto
OpenSSL::SSL)
+ add_dependencies(Azure::azure-core azuresdk_ep)
+
+ add_library(Azure::azure-identity STATIC IMPORTED)
+ set_target_properties(Azure::azure-identity
+ PROPERTIES IMPORTED_LOCATION
${AZURE_IDENTITY_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
Azure::azure-core)
+ add_dependencies(Azure::azure-identity azuresdk_ep)
+
+ add_library(Azure::azure-storage-common STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-common
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_COMMON_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-storage-common
+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto
LibXml2::LibXml2 Azure::azure-core)
+ add_dependencies(Azure::azure-storage-common azuresdk_ep)
+
+ add_library(Azure::azure-storage-blobs STATIC IMPORTED)
+ set_target_properties(Azure::azure-storage-blobs
+ PROPERTIES IMPORTED_LOCATION
${AZURE_STORAGE_BLOBS_STATIC_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES
+ ${AZURESDK_INCLUDE_DIR})
+ set_property(TARGET Azure::azure-identity
+ PROPERTY INTERFACE_LINK_LIBRARIES Azure::azure-core
Azure::azure-storage-common)
+ add_dependencies(Azure::azure-storage-blobs azuresdk_ep)
Review Comment:
```suggestion
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]