mirror of
https://github.com/ceph/ceph
synced 2026-08-02 07:03:18 +00:00
cmake/ec: use ExternalProject to build isal library
Signed-off-by: Casey Bodley <cbodley@redhat.com>
This commit is contained in:
parent
3bfc1ae3d7
commit
926ef939e7
42
cmake/modules/BuildISAL.cmake
Normal file
42
cmake/modules/BuildISAL.cmake
Normal file
@ -0,0 +1,42 @@
|
||||
# use an ExternalProject to build isa-l using its makefile
|
||||
function(build_isal)
|
||||
set(isal_BINARY_DIR ${CMAKE_BINARY_DIR}/src/isa-l)
|
||||
set(isal_INSTALL_DIR ${isal_BINARY_DIR}/install)
|
||||
set(isal_INCLUDE_DIR "${isal_INSTALL_DIR}/include")
|
||||
set(isal_LIBRARY "${isal_INSTALL_DIR}/lib/libisal.a")
|
||||
|
||||
# this include directory won't exist until the install step, but the
|
||||
# imported targets need it early for INTERFACE_INCLUDE_DIRECTORIES
|
||||
file(MAKE_DIRECTORY "${isal_INCLUDE_DIR}")
|
||||
|
||||
set(configure_cmd env CC=${CMAKE_C_COMPILER} ./configure --prefix=${isal_INSTALL_DIR})
|
||||
# build a static library with -fPIC that we can link into crypto/compressor plugins
|
||||
list(APPEND configure_cmd --with-pic --enable-static --disable-shared)
|
||||
|
||||
# clear the DESTDIR environment variable from debian/rules,
|
||||
# because it messes with the internal install paths of arrow's bundled deps
|
||||
set(NO_DESTDIR_COMMAND ${CMAKE_COMMAND} -E env --unset=DESTDIR)
|
||||
|
||||
include(ExternalProject)
|
||||
ExternalProject_Add(isal_ext
|
||||
SOURCE_DIR "${PROJECT_SOURCE_DIR}/src/isa-l"
|
||||
CONFIGURE_COMMAND ./autogen.sh COMMAND ${configure_cmd}
|
||||
BUILD_COMMAND ${NO_DESTDIR_COMMAND} make -j3
|
||||
BUILD_IN_SOURCE 1
|
||||
BUILD_BYPRODUCTS ${isal_LIBRARY}
|
||||
INSTALL_COMMAND ${NO_DESTDIR_COMMAND} make install
|
||||
UPDATE_COMMAND ""
|
||||
LOG_CONFIGURE ON
|
||||
LOG_BUILD ON
|
||||
LOG_INSTALL ON
|
||||
LOG_MERGED_STDOUTERR ON
|
||||
LOG_OUTPUT_ON_FAILURE ON)
|
||||
|
||||
# add imported library target ISAL::Crypto
|
||||
add_library(ISAL::ISAL STATIC IMPORTED GLOBAL)
|
||||
add_dependencies(ISAL::ISAL isal_ext)
|
||||
set_target_properties(ISAL::ISAL PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES ${isal_INCLUDE_DIR}
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
IMPORTED_LOCATION ${isal_LIBRARY})
|
||||
endfunction()
|
||||
@ -1,113 +1,18 @@
|
||||
# ISA
|
||||
set(isal_src_dir ${CMAKE_SOURCE_DIR}/src/isa-l)
|
||||
include_directories(${isal_src_dir}/include)
|
||||
# build isa-l from its makefile and expose as target ISAL::ISAL
|
||||
include(BuildISAL)
|
||||
build_isal()
|
||||
|
||||
if(HAVE_NASM_X64_AVX2)
|
||||
set(CMAKE_ASM_FLAGS "-i ${isal_src_dir}/include/ ${CMAKE_ASM_FLAGS}")
|
||||
set(isa_srcs
|
||||
${isal_src_dir}/erasure_code/ec_base.c
|
||||
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_vect_dot_prod_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_2vect_mad_avx2.asm
|
||||
${isal_src_dir}/erasure_code/gf_3vect_mad_avx2.asm
|
||||
${isal_src_dir}/erasure_code/gf_4vect_mad_avx2.asm
|
||||
${isal_src_dir}/erasure_code/gf_5vect_mad_avx2.asm
|
||||
${isal_src_dir}/erasure_code/gf_6vect_mad_avx2.asm
|
||||
${isal_src_dir}/erasure_code/gf_vect_mad_avx2.asm
|
||||
${isal_src_dir}/erasure_code/ec_highlevel_func.c
|
||||
${isal_src_dir}/erasure_code/gf_2vect_mad_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_3vect_mad_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_4vect_mad_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_5vect_mad_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_6vect_mad_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_vect_mad_avx.asm
|
||||
${isal_src_dir}/erasure_code/ec_multibinary.asm
|
||||
${isal_src_dir}/erasure_code/gf_2vect_mad_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_3vect_mad_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_4vect_mad_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_5vect_mad_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_6vect_mad_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_vect_mad_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx2.asm
|
||||
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx2.asm
|
||||
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx2.asm
|
||||
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx2.asm
|
||||
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx2.asm
|
||||
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx2.asm
|
||||
${isal_src_dir}/erasure_code/gf_vect_mul_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx.asm
|
||||
${isal_src_dir}/erasure_code/gf_vect_mul_sse.asm
|
||||
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx512.asm
|
||||
${isal_src_dir}/erasure_code/gf_2vect_mad_avx512.asm
|
||||
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx512.asm
|
||||
${isal_src_dir}/erasure_code/gf_3vect_mad_avx512.asm
|
||||
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx512.asm
|
||||
${isal_src_dir}/erasure_code/gf_4vect_mad_avx512.asm
|
||||
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx512.asm
|
||||
${isal_src_dir}/erasure_code/gf_vect_mad_avx512.asm
|
||||
${isal_src_dir}/raid/raid_base.c
|
||||
${isal_src_dir}/raid/raid_multibinary.asm
|
||||
${isal_src_dir}/raid/xor_check_sse.asm
|
||||
${isal_src_dir}/raid/xor_gen_sse.asm
|
||||
${isal_src_dir}/raid/xor_gen_avx.asm
|
||||
${isal_src_dir}/raid/xor_gen_avx512.asm
|
||||
${isal_src_dir}/raid/pq_check_sse.asm
|
||||
${isal_src_dir}/raid/pq_gen_sse.asm
|
||||
${isal_src_dir}/raid/pq_gen_avx.asm
|
||||
${isal_src_dir}/raid/pq_gen_avx2.asm
|
||||
ErasureCodeIsa.cc
|
||||
ErasureCodeIsaTableCache.cc
|
||||
ErasureCodePluginIsa.cc
|
||||
)
|
||||
elseif(HAVE_ARMV8_SIMD)
|
||||
set(isa_srcs
|
||||
${isal_src_dir}/erasure_code/ec_base.c
|
||||
${isal_src_dir}/erasure_code/aarch64/ec_aarch64_highlevel_func.c
|
||||
${isal_src_dir}/erasure_code/aarch64/ec_aarch64_dispatcher.c
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_2vect_dot_prod_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_2vect_mad_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_3vect_dot_prod_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_3vect_mad_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_4vect_dot_prod_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_4vect_mad_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_5vect_dot_prod_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_5vect_mad_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_6vect_mad_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_vect_dot_prod_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_vect_mad_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/gf_vect_mul_neon.S
|
||||
${isal_src_dir}/erasure_code/aarch64/ec_multibinary_arm.S
|
||||
${isal_src_dir}/raid/raid_base.c
|
||||
${isal_src_dir}/raid/aarch64/raid_aarch64_dispatcher.c
|
||||
${isal_src_dir}/raid/aarch64/raid_multibinary_arm.S
|
||||
${isal_src_dir}/raid/aarch64/xor_check_neon.S
|
||||
${isal_src_dir}/raid/aarch64/xor_gen_neon.S
|
||||
${isal_src_dir}/raid/aarch64/pq_check_neon.S
|
||||
${isal_src_dir}/raid/aarch64/pq_gen_neon.S
|
||||
ErasureCodeIsa.cc
|
||||
ErasureCodeIsaTableCache.cc
|
||||
ErasureCodePluginIsa.cc
|
||||
)
|
||||
set_source_files_properties(
|
||||
${isal_src_dir}/erasure_code/aarch64/ec_multibinary_arm.S
|
||||
${isal_src_dir}/raid/aarch64/raid_multibinary_arm.S
|
||||
PROPERTIES COMPILE_FLAGS "-D__ASSEMBLY__"
|
||||
)
|
||||
endif()
|
||||
# ISA
|
||||
set(isa_srcs
|
||||
ErasureCodeIsa.cc
|
||||
ErasureCodeIsaTableCache.cc
|
||||
ErasureCodePluginIsa.cc
|
||||
)
|
||||
|
||||
add_library(ec_isa SHARED
|
||||
${isa_srcs}
|
||||
$<TARGET_OBJECTS:erasure_code_objs>)
|
||||
target_link_libraries(ec_isa ${EXTRALIBS})
|
||||
target_link_libraries(ec_isa ISAL::ISAL ${EXTRALIBS})
|
||||
set_target_properties(ec_isa PROPERTIES
|
||||
INSTALL_RPATH "")
|
||||
install(TARGETS ec_isa DESTINATION ${erasure_plugin_dir})
|
||||
|
||||
Loading…
Reference in New Issue
Block a user