@@ -362,9 +362,7 @@ if(ARROW_JSON)
362362 set (ARROW_WITH_RAPIDJSON ON )
363363endif ()
364364
365- if (ARROW_ORC
366- OR ARROW_FLIGHT
367- OR ARROW_GANDIVA)
365+ if (ARROW_ORC OR ARROW_FLIGHT)
368366 set (ARROW_WITH_PROTOBUF ON )
369367endif ()
370368
@@ -529,6 +527,14 @@ else()
529527 )
530528endif ()
531529
530+ if (DEFINED ENV{ARROW_AWS_LC_URL})
531+ set (AWS_LC_SOURCE_URL "$ENV{ARROW_AWS_LC_URL} " )
532+ else ()
533+ set_urls (AWS_LC_SOURCE_URL
534+ "https://github.com/awslabs/aws-lc/archive/${ARROW_AWS_LC_BUILD_VERSION} .tar.gz"
535+ )
536+ endif ()
537+
532538if (DEFINED ENV{ARROW_AWSSDK_URL})
533539 set (AWSSDK_SOURCE_URL "$ENV{ARROW_AWSSDK_URL} " )
534540else ()
@@ -1238,8 +1244,9 @@ macro(find_curl)
12381244 add_library (CURL::libcurl UNKNOWN IMPORTED )
12391245 set_target_properties (CURL::libcurl
12401246 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
1241- "${CURL_INCLUDE_DIRS} " IMPORTED_LOCATION
1242- "${CURL_LIBRARIES} " )
1247+ "${CURL_INCLUDE_DIRS} "
1248+ IMPORTED_LOCATION "${CURL_LIBRARIES} "
1249+ INTERFACE_LINK_LIBRARIES OpenSSL::SSL )
12431250 endif ()
12441251 endif ()
12451252endmacro ()
@@ -1640,7 +1647,7 @@ if(ARROW_WITH_THRIFT)
16401647endif ()
16411648
16421649# ----------------------------------------------------------------------
1643- # Protocol Buffers (required for ORC, Flight, Gandiva and Substrait libraries)
1650+ # Protocol Buffers (required for ORC, Flight and Substrait libraries)
16441651
16451652macro (build_protobuf )
16461653 message (STATUS "Building Protocol Buffers from source" )
@@ -4730,20 +4737,19 @@ macro(build_awssdk)
47304737 set (AWSSDK_BUILD_TYPE release)
47314738 endif ()
47324739
4740+ # provide hint for AWS SDK to link with the already located openssl
4741+ get_filename_component (OPENSSL_ROOT_HINT "${OPENSSL_INCLUDE_DIR} " DIRECTORY )
47334742 set (AWSSDK_COMMON_CMAKE_ARGS
47344743 ${EP_COMMON_CMAKE_ARGS}
47354744 -DCMAKE_BUILD_TYPE=${AWSSDK_BUILD_TYPE}
47364745 -DENABLE_TESTING=OFF
47374746 -DENABLE_UNITY_BUILD=ON
4747+ -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_HINT}
47384748 "-DCMAKE_INSTALL_PREFIX=${AWSSDK_PREFIX} "
47394749 "-DCMAKE_PREFIX_PATH=${AWSSDK_PREFIX} " )
47404750
4741- # provide hint for AWS SDK to link with the already located openssl
4742- get_filename_component (OPENSSL_ROOT_HINT "${OPENSSL_INCLUDE_DIR} " DIRECTORY )
4743-
47444751 set (AWSSDK_CMAKE_ARGS
47454752 ${AWSSDK_COMMON_CMAKE_ARGS}
4746- -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_HINT}
47474753 -DBUILD_DEPS=OFF
47484754 -DBUILD_ONLY=config\\$<SEMICOLON >s3\\$<SEMICOLON >transfer\\$<SEMICOLON >identity-management\\$<SEMICOLON >sts
47494755 -DMINIMIZE_SIZE=ON )
@@ -4782,9 +4788,18 @@ macro(build_awssdk)
47824788 aws-c-event-stream
47834789 aws-c-io
47844790 aws-c-cal
4785- s2n-tls
47864791 aws-checksums
47874792 aws-c-common)
4793+
4794+ # aws-lc needs to be installed on a separate folder to hide from unintended use
4795+ set (AWS_LC_PREFIX "${CMAKE_CURRENT_BINARY_DIR} /aws_lc_ep-install" )
4796+ set (AWS_LC_INCLUDE_DIR "${AWS_LC_PREFIX} /include" )
4797+
4798+ if (UNIX AND NOT APPLE ) # aws-lc and s2n-tls only needed on linux
4799+ file (MAKE_DIRECTORY ${AWS_LC_INCLUDE_DIR} )
4800+ list (APPEND _AWSSDK_LIBS s2n-tls aws-lc)
4801+ endif ()
4802+
47884803 set (AWSSDK_LIBRARIES)
47894804 foreach (_AWSSDK_LIB ${_AWSSDK_LIBS} )
47904805 # aws-c-common -> AWS-C-COMMON
@@ -4798,9 +4813,15 @@ macro(build_awssdk)
47984813 set (_AWSSDK_STATIC_LIBRARY
47994814 "${AWSSDK_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} s2n${CMAKE_STATIC_LIBRARY_SUFFIX} "
48004815 )
4816+ elseif (${_AWSSDK_LIB} STREQUAL "aws-lc" ) # We only need libcrypto from aws-lc
4817+ set (_AWSSDK_STATIC_LIBRARY
4818+ "${AWS_LC_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} crypto${CMAKE_STATIC_LIBRARY_SUFFIX} "
4819+ )
48014820 endif ()
48024821 if (${_AWSSDK_LIB} MATCHES "^aws-cpp-sdk-" )
48034822 set (_AWSSDK_TARGET_NAME ${_AWSSDK_LIB} )
4823+ elseif (${_AWSSDK_LIB} STREQUAL "aws-lc" )
4824+ set (_AWSSDK_TARGET_NAME AWS::crypto)
48044825 else ()
48054826 set (_AWSSDK_TARGET_NAME AWS::${_AWSSDK_LIB} )
48064827 endif ()
@@ -4809,8 +4830,18 @@ macro(build_awssdk)
48094830 PROPERTIES IMPORTED_LOCATION ${_AWSSDK_STATIC_LIBRARY}
48104831 INTERFACE_INCLUDE_DIRECTORIES
48114832 "${AWSSDK_INCLUDE_DIR} " )
4833+ if (${_AWSSDK_LIB} STREQUAL "aws-lc" )
4834+ set_target_properties (${_AWSSDK_TARGET_NAME}
4835+ PROPERTIES IMPORTED_LOCATION ${_AWSSDK_STATIC_LIBRARY}
4836+ INTERFACE_INCLUDE_DIRECTORIES
4837+ "${AWS_LC_INCLUDE_DIR} " )
4838+ endif ()
48124839 set ("${_AWSSDK_LIB_NAME_PREFIX} _STATIC_LIBRARY" ${_AWSSDK_STATIC_LIBRARY} )
4813- list (APPEND AWSSDK_LIBRARIES ${_AWSSDK_TARGET_NAME} )
4840+
4841+ if (NOT ${_AWSSDK_LIB} STREQUAL "aws-lc" )
4842+ # aws-lc only linked against s2n but not arrow
4843+ list (APPEND AWSSDK_LIBRARIES ${_AWSSDK_TARGET_NAME} )
4844+ endif ()
48144845 endforeach ()
48154846
48164847 externalproject_add (aws_c_common_ep
@@ -4830,36 +4861,37 @@ macro(build_awssdk)
48304861 DEPENDS aws_c_common_ep)
48314862 add_dependencies (AWS::aws-checksums aws_checksums_ep )
48324863
4833- set (S2N_TLS_CMAKE_ARGS ${AWSSDK_COMMON_CMAKE_ARGS} )
4834- if (APPLE AND NOT OPENSSL_ROOT_DIR)
4835- find_program (BREW brew )
4836- if (BREW)
4837- execute_process (COMMAND ${BREW} --prefix "openssl@1.1"
4838- OUTPUT_VARIABLE OPENSSL11_BREW_PREFIX
4839- OUTPUT_STRIP_TRAILING_WHITESPACE )
4840- if (OPENSSL11_BREW_PREFIX)
4841- set (OPENSSL_ROOT_DIR ${OPENSSL11_BREW_PREFIX} )
4842- else ()
4843- execute_process (COMMAND ${BREW} --prefix "openssl"
4844- OUTPUT_VARIABLE OPENSSL_BREW_PREFIX
4845- OUTPUT_STRIP_TRAILING_WHITESPACE )
4846- if (OPENSSL_BREW_PREFIX)
4847- set (OPENSSL_ROOT_DIR ${OPENSSL_BREW_PREFIX} )
4848- endif ()
4849- endif ()
4850- endif ()
4851- endif ()
4852- if (OPENSSL_ROOT_DIR)
4853- # For Findcrypto.cmake in s2n-tls.
4854- list (APPEND S2N_TLS_CMAKE_ARGS -DCMAKE_PREFIX_PATH=${OPENSSL_ROOT_DIR} )
4864+ if ("s2n-tls" IN_LIST _AWSSDK_LIBS)
4865+ set (AWS_LC_C_FLAGS ${EP_C_FLAGS} )
4866+ string (APPEND AWS_LC_C_FLAGS " -Wno-error=overlength-strings -Wno-error=pedantic" )
4867+
4868+ set (AWS_LC_CMAKE_ARGS ${AWSSDK_COMMON_CMAKE_ARGS} )
4869+ list (APPEND AWS_LC_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${AWS_LC_PREFIX}
4870+ -DCMAKE_C_FLAGS=${AWS_LC_C_FLAGS} )
4871+
4872+ externalproject_add (aws_lc_ep
4873+ ${EP_COMMON_OPTIONS}
4874+ URL ${AWS_LC_SOURCE_URL}
4875+ URL_HASH "SHA256=${ARROW_AWS_LC_BUILD_SHA256_CHECKSUM} "
4876+ CMAKE_ARGS ${AWS_LC_CMAKE_ARGS}
4877+ BUILD_BYPRODUCTS ${AWS_LC_STATIC_LIBRARY} )
4878+ add_dependencies (AWS::crypto aws_lc_ep )
4879+
4880+ set (S2N_TLS_CMAKE_ARGS ${AWSSDK_COMMON_CMAKE_ARGS} )
4881+ list (APPEND
4882+ S2N_TLS_CMAKE_ARGS
4883+ -DS2N_INTERN_LIBCRYPTO=ON # internalize libcrypto to avoid name conflict with openssl
4884+ -DCMAKE_PREFIX_PATH=${AWS_LC_PREFIX} ) # path to find crypto provided by aws-lc
4885+
4886+ externalproject_add (s2n_tls_ep
4887+ ${EP_COMMON_OPTIONS}
4888+ URL ${S2N_TLS_SOURCE_URL}
4889+ URL_HASH "SHA256=${ARROW_S2N_TLS_BUILD_SHA256_CHECKSUM} "
4890+ CMAKE_ARGS ${S2N_TLS_CMAKE_ARGS}
4891+ BUILD_BYPRODUCTS ${S2N_TLS_STATIC_LIBRARY}
4892+ DEPENDS aws_lc_ep)
4893+ add_dependencies (AWS::s2n-tls s2n_tls_ep )
48554894 endif ()
4856- externalproject_add (s2n_tls_ep
4857- ${EP_COMMON_OPTIONS}
4858- URL ${S2N_TLS_SOURCE_URL}
4859- URL_HASH "SHA256=${ARROW_S2N_TLS_BUILD_SHA256_CHECKSUM} "
4860- CMAKE_ARGS ${S2N_TLS_CMAKE_ARGS}
4861- BUILD_BYPRODUCTS ${S2N_TLS_STATIC_LIBRARY} )
4862- add_dependencies (AWS::s2n-tls s2n_tls_ep )
48634895
48644896 externalproject_add (aws_c_cal_ep
48654897 ${EP_COMMON_OPTIONS}
@@ -4870,13 +4902,17 @@ macro(build_awssdk)
48704902 DEPENDS aws_c_common_ep)
48714903 add_dependencies (AWS::aws-c-cal aws_c_cal_ep )
48724904
4905+ set (AWS_C_IO_DEPENDS aws_c_common_ep aws_c_cal_ep)
4906+ if (TARGET s2n_tls_ep)
4907+ list (APPEND AWS_C_IO_DEPENDS s2n_tls_ep)
4908+ endif ()
48734909 externalproject_add (aws_c_io_ep
48744910 ${EP_COMMON_OPTIONS}
48754911 URL ${AWS_C_IO_SOURCE_URL}
48764912 URL_HASH "SHA256=${ARROW_AWS_C_IO_BUILD_SHA256_CHECKSUM} "
48774913 CMAKE_ARGS ${AWSSDK_COMMON_CMAKE_ARGS}
48784914 BUILD_BYPRODUCTS ${AWS_C_IO_STATIC_LIBRARY}
4879- DEPENDS aws_c_common_ep s2n_tls_ep aws_c_cal_ep )
4915+ DEPENDS ${AWS_C_IO_DEPENDS} )
48804916 add_dependencies (AWS::aws-c-io aws_c_io_ep )
48814917
48824918 externalproject_add (aws_c_event_stream_ep
@@ -4985,9 +5021,14 @@ macro(build_awssdk)
49855021 set_property (TARGET aws-cpp-sdk-core
49865022 APPEND
49875023 PROPERTY INTERFACE_LINK_LIBRARIES CURL::libcurl )
4988- set_property (TARGET CURL::libcurl
5024+ set_property (TARGET AWS::aws-c-cal
49895025 APPEND
4990- PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::SSL )
5026+ PROPERTY INTERFACE_LINK_LIBRARIES OpenSSL::Crypto OpenSSL::SSL )
5027+ if (APPLE )
5028+ set_property (TARGET AWS::aws-c-cal
5029+ APPEND
5030+ PROPERTY INTERFACE_LINK_LIBRARIES "-framework Security" )
5031+ endif ()
49915032 if (ZLIB_VENDORED)
49925033 set_property (TARGET aws-cpp-sdk-core
49935034 APPEND
@@ -5003,6 +5044,13 @@ macro(build_awssdk)
50035044 "wininet.lib"
50045045 "userenv.lib"
50055046 "version.lib" )
5047+ set_property (TARGET AWS::aws-c-cal
5048+ APPEND
5049+ PROPERTY INTERFACE_LINK_LIBRARIES
5050+ "bcrypt.lib"
5051+ "ncrypt.lib"
5052+ "Secur32.lib"
5053+ "Shlwapi.lib" )
50065054 endif ()
50075055
50085056 # AWSSDK is static-only build
0 commit comments