blob: 3f145987169c52e1f3305fc42425f4841cad0fcb [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
function(use_bundled_libazure SOURCE_DIR BINARY_DIR)
set(PATCH_FILE1 "${SOURCE_DIR}/thirdparty/azure-sdk-cpp/remove-amqp.patch")
set(PATCH_FILE2 "${SOURCE_DIR}/thirdparty/azure-sdk-cpp/gcc13.patch")
set(PC ${Bash_EXECUTABLE} -c "set -x && \
(\"${Patch_EXECUTABLE}\" -p1 -N -i \"${PATCH_FILE}\")")
set(PC ${Bash_EXECUTABLE} -c "set -x &&\
(\"${Patch_EXECUTABLE}\" -p1 -N -i \"${PATCH_FILE1}\") &&\
(\"${Patch_EXECUTABLE}\" -p1 -N -i \"${PATCH_FILE2}\") ")
# Define byproducts
set(INSTALL_DIR "${BINARY_DIR}/thirdparty/azure-sdk-cpp-install")
if (WIN32)
set(LIBDIR "lib")
else()
include(GNUInstallDirs)
string(REPLACE "/" ";" LIBDIR_LIST ${CMAKE_INSTALL_LIBDIR})
list(GET LIBDIR_LIST 0 LIBDIR)
endif()
if (WIN32)
set(SUFFIX "lib")
set(PREFIX "")
set(AZURE_CORE_LIB "${INSTALL_DIR}/${LIBDIR}/${PREFIX}azure-core.${SUFFIX}")
set(AZURE_STORAGE_COMMON_LIB "${INSTALL_DIR}/${LIBDIR}/${PREFIX}azure-storage-common.${SUFFIX}")
set(AZURE_STORAGE_BLOBS_LIB "${INSTALL_DIR}/${LIBDIR}/${PREFIX}azure-storage-blobs.${SUFFIX}")
set(AZURE_IDENTITY_LIB "${INSTALL_DIR}/${LIBDIR}/${PREFIX}azure-identity.${SUFFIX}")
set(AZURE_STORAGE_FILES_DATALAKE_LIB "${INSTALL_DIR}/${LIBDIR}/${PREFIX}azure-storage-files-datalake.${SUFFIX}")
else()
set(SUFFIX "a")
set(PREFIX "lib")
set(AZURE_CORE_LIB "${INSTALL_DIR}/${LIBDIR}/${PREFIX}azure-core.${SUFFIX}")
set(AZURE_STORAGE_COMMON_LIB "${INSTALL_DIR}/${LIBDIR}/${PREFIX}azure-storage-common.${SUFFIX}")
set(AZURE_STORAGE_BLOBS_LIB "${INSTALL_DIR}/${LIBDIR}/${PREFIX}azure-storage-blobs.${SUFFIX}")
set(AZURE_IDENTITY_LIB "${INSTALL_DIR}/${LIBDIR}/${PREFIX}azure-identity.${SUFFIX}")
set(AZURE_STORAGE_FILES_DATALAKE_LIB "${INSTALL_DIR}/${LIBDIR}/${PREFIX}azure-storage-files-datalake.${SUFFIX}")
endif()
set(AZURESDK_LIBRARIES_LIST
"${AZURE_CORE_LIB}"
"${AZURE_STORAGE_COMMON_LIB}"
"${AZURE_STORAGE_BLOBS_LIB}"
"${AZURE_IDENTITY_LIB}"
"${AZURE_STORAGE_FILES_DATALAKE_LIB}")
set(AZURE_SDK_CMAKE_ARGS ${PASSTHROUGH_CMAKE_ARGS}
-DWARNINGS_AS_ERRORS=OFF
-DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}
-DDISABLE_AZURE_CORE_OPENTELEMETRY=ON
-DBUILD_TRANSPORT_CURL=ON)
append_third_party_passthrough_args(AZURE_SDK_CMAKE_ARGS "${AZURE_SDK_CMAKE_ARGS}")
# Build project
ExternalProject_Add(
asdkext # short for azure-sdk-cpp-external due to windows MAX_PATH limitations
URL https://github.com/Azure/azure-sdk-for-cpp/archive/refs/tags/azure-storage-files-datalake_12.7.0.tar.gz
URL_HASH "SHA256=42b9c1df0c15d9e0a3f547eeba8c45708aa86819986da66234e267f4ad728112"
SOURCE_DIR "${BINARY_DIR}/thirdparty/azure-sdk-cpp-src"
INSTALL_DIR "${BINARY_DIR}/thirdparty/azure-sdk-cpp-install"
BUILD_BYPRODUCTS "${AZURESDK_LIBRARIES_LIST}"
EXCLUDE_FROM_ALL TRUE
CMAKE_ARGS ${AZURE_SDK_CMAKE_ARGS}
LIST_SEPARATOR % # This is needed for passing semicolon-separated lists
PATCH_COMMAND ${PC}
)
# Set dependencies
add_dependencies(asdkext CURL::libcurl LibXml2::LibXml2 OpenSSL::Crypto OpenSSL::SSL)
# Set variables
set(LIBAZURE_FOUND "YES" CACHE STRING "" FORCE)
set(LIBAZURE_INCLUDE_DIRS "${INSTALL_DIR}/include" CACHE STRING "" FORCE)
set(LIBAZURE_LIBRARIES ${AZURESDK_LIBRARIES_LIST} CACHE STRING "" FORCE)
# Create imported targets
FOREACH(LIBAZURE_INCLUDE_DIR ${LIBAZURE_INCLUDE_DIRS})
file(MAKE_DIRECTORY ${LIBAZURE_INCLUDE_DIR})
ENDFOREACH(LIBAZURE_INCLUDE_DIR)
add_library(AZURE::azure-core STATIC IMPORTED)
set_target_properties(AZURE::azure-core PROPERTIES IMPORTED_LOCATION "${AZURE_CORE_LIB}")
add_dependencies(AZURE::azure-core asdkext)
target_include_directories(AZURE::azure-core INTERFACE ${LIBAZURE_INCLUDE_DIRS})
target_link_libraries(AZURE::azure-core INTERFACE CURL::libcurl OpenSSL::Crypto OpenSSL::SSL)
if (WIN32)
target_link_libraries(AZURE::azure-core INTERFACE winhttp.lib WebServices.lib)
endif()
add_library(AZURE::azure-identity STATIC IMPORTED)
set_target_properties(AZURE::azure-identity PROPERTIES IMPORTED_LOCATION "${AZURE_IDENTITY_LIB}")
add_dependencies(AZURE::azure-identity asdkext)
target_include_directories(AZURE::azure-identity INTERFACE ${LIBAZURE_INCLUDE_DIRS})
add_library(AZURE::azure-storage-common STATIC IMPORTED)
set_target_properties(AZURE::azure-storage-common PROPERTIES IMPORTED_LOCATION "${AZURE_STORAGE_COMMON_LIB}")
add_dependencies(AZURE::azure-storage-common asdkext)
target_include_directories(AZURE::azure-storage-common INTERFACE ${LIBAZURE_INCLUDE_DIRS})
target_link_libraries(AZURE::azure-storage-common INTERFACE LibXml2::LibXml2)
add_library(AZURE::azure-storage-blobs STATIC IMPORTED)
set_target_properties(AZURE::azure-storage-blobs PROPERTIES IMPORTED_LOCATION "${AZURE_STORAGE_BLOBS_LIB}")
add_dependencies(AZURE::azure-storage-blobs asdkext)
target_include_directories(AZURE::azure-storage-blobs INTERFACE ${LIBAZURE_INCLUDE_DIRS})
add_library(AZURE::azure-storage-files-datalake STATIC IMPORTED)
set_target_properties(AZURE::azure-storage-files-datalake PROPERTIES IMPORTED_LOCATION "${AZURE_STORAGE_FILES_DATALAKE_LIB}")
add_dependencies(AZURE::azure-storage-files-datalake asdkext)
target_include_directories(AZURE::azure-storage-files-datalake INTERFACE ${LIBAZURE_INCLUDE_DIRS})
endfunction(use_bundled_libazure)