2022-11-16 21:01:10 +00:00
|
|
|
if(ARCH_AMD64 OR ARCH_AARCH64 OR ARCH_PPC64LE OR ARCH_S390X)
|
2022-01-17 20:32:13 +00:00
|
|
|
option (ENABLE_BASE64 "Enable base64" ${ENABLE_LIBRARIES})
|
|
|
|
elseif(ENABLE_BASE64)
|
|
|
|
message (${RECONFIGURE_MESSAGE_LEVEL} "base64 library is only supported on x86_64 and aarch64")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if (NOT ENABLE_BASE64)
|
|
|
|
message(STATUS "Not using base64")
|
|
|
|
return()
|
|
|
|
endif()
|
|
|
|
|
2021-04-24 19:47:52 +00:00
|
|
|
SET(LIBRARY_DIR "${ClickHouse_SOURCE_DIR}/contrib/base64")
|
2018-10-10 01:04:07 +00:00
|
|
|
|
2022-01-20 14:07:34 +00:00
|
|
|
add_library(_base64_scalar OBJECT "${LIBRARY_DIR}/turbob64c.c" "${LIBRARY_DIR}/turbob64d.c")
|
|
|
|
add_library(_base64_ssse3 OBJECT "${LIBRARY_DIR}/turbob64sse.c") # This file also contains code for ARM NEON
|
2019-12-31 03:14:57 +00:00
|
|
|
|
|
|
|
if (ARCH_AMD64)
|
2022-01-20 14:07:34 +00:00
|
|
|
add_library(_base64_avx OBJECT "${LIBRARY_DIR}/turbob64sse.c") # This is not a mistake. One file is compiled twice.
|
|
|
|
add_library(_base64_avx2 OBJECT "${LIBRARY_DIR}/turbob64avx2.c")
|
2019-12-31 03:14:57 +00:00
|
|
|
endif ()
|
2018-11-02 19:06:05 +00:00
|
|
|
|
2022-01-20 14:07:34 +00:00
|
|
|
target_compile_options(_base64_scalar PRIVATE -falign-loops)
|
2018-10-11 16:22:50 +00:00
|
|
|
|
2019-12-31 03:14:57 +00:00
|
|
|
if (ARCH_AMD64)
|
2022-01-20 14:07:34 +00:00
|
|
|
target_compile_options(_base64_ssse3 PRIVATE -mno-avx -mno-avx2 -mssse3 -falign-loops)
|
|
|
|
target_compile_options(_base64_avx PRIVATE -falign-loops -mavx)
|
|
|
|
target_compile_options(_base64_avx2 PRIVATE -falign-loops -mavx2)
|
2020-01-01 22:55:59 +00:00
|
|
|
else ()
|
2022-09-30 14:04:47 +00:00
|
|
|
if (ARCH_PPC64LE)
|
|
|
|
target_compile_options(_base64_ssse3 PRIVATE -D__SSSE3__ -falign-loops)
|
|
|
|
else()
|
|
|
|
target_compile_options(_base64_ssse3 PRIVATE -falign-loops)
|
|
|
|
endif()
|
2019-12-31 03:14:57 +00:00
|
|
|
endif ()
|
|
|
|
|
|
|
|
if (ARCH_AMD64)
|
2022-01-20 14:07:34 +00:00
|
|
|
add_library(_base64
|
|
|
|
$<TARGET_OBJECTS:_base64_scalar>
|
|
|
|
$<TARGET_OBJECTS:_base64_ssse3>
|
|
|
|
$<TARGET_OBJECTS:_base64_avx>
|
|
|
|
$<TARGET_OBJECTS:_base64_avx2>)
|
2019-12-31 03:14:57 +00:00
|
|
|
else ()
|
2022-01-20 14:07:34 +00:00
|
|
|
add_library(_base64
|
|
|
|
$<TARGET_OBJECTS:_base64_scalar>
|
|
|
|
$<TARGET_OBJECTS:_base64_ssse3>)
|
2019-12-31 03:14:57 +00:00
|
|
|
endif ()
|
2019-02-05 14:05:48 +00:00
|
|
|
|
2022-01-20 14:07:34 +00:00
|
|
|
target_include_directories(_base64 SYSTEM PUBLIC ${LIBRARY_DIR})
|
2020-04-27 17:48:01 +00:00
|
|
|
|
|
|
|
if (XCODE OR XCODE_VERSION)
|
|
|
|
# https://gitlab.kitware.com/cmake/cmake/issues/17457
|
|
|
|
# Some native build systems may not like targets that have only object files, so consider adding at least one real source file
|
|
|
|
# This applies to Xcode.
|
|
|
|
if (NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/dummy.c")
|
|
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dummy.c" "")
|
|
|
|
endif ()
|
2022-01-20 14:07:34 +00:00
|
|
|
target_sources(_base64 PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/dummy.c")
|
2020-04-27 17:48:01 +00:00
|
|
|
endif ()
|
2022-01-17 20:32:13 +00:00
|
|
|
|
2022-01-20 14:07:34 +00:00
|
|
|
add_library(ch_contrib::base64 ALIAS _base64)
|