Skip to content

Commit f185578

Browse files
authored
Merge pull request ceph#59513 from cbodley/wip-isal-ext
cmake: use ExternalProjects to build isa-l and isa-l_crypto libraries Reviewed-by: Jamie Pryde <[email protected]> Reviewed-by: Radoslaw Zarzynski <[email protected]> Reviewed-by: Mark Kogan <[email protected]>
2 parents 7dc3b34 + 926ef93 commit f185578

File tree

4 files changed

+88
-129
lines changed

4 files changed

+88
-129
lines changed

cmake/modules/BuildISAL.cmake

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# use an ExternalProject to build isa-l using its makefile
2+
function(build_isal)
3+
set(isal_BINARY_DIR ${CMAKE_BINARY_DIR}/src/isa-l)
4+
set(isal_INSTALL_DIR ${isal_BINARY_DIR}/install)
5+
set(isal_INCLUDE_DIR "${isal_INSTALL_DIR}/include")
6+
set(isal_LIBRARY "${isal_INSTALL_DIR}/lib/libisal.a")
7+
8+
# this include directory won't exist until the install step, but the
9+
# imported targets need it early for INTERFACE_INCLUDE_DIRECTORIES
10+
file(MAKE_DIRECTORY "${isal_INCLUDE_DIR}")
11+
12+
set(configure_cmd env CC=${CMAKE_C_COMPILER} ./configure --prefix=${isal_INSTALL_DIR})
13+
# build a static library with -fPIC that we can link into crypto/compressor plugins
14+
list(APPEND configure_cmd --with-pic --enable-static --disable-shared)
15+
16+
# clear the DESTDIR environment variable from debian/rules,
17+
# because it messes with the internal install paths of arrow's bundled deps
18+
set(NO_DESTDIR_COMMAND ${CMAKE_COMMAND} -E env --unset=DESTDIR)
19+
20+
include(ExternalProject)
21+
ExternalProject_Add(isal_ext
22+
SOURCE_DIR "${PROJECT_SOURCE_DIR}/src/isa-l"
23+
CONFIGURE_COMMAND ./autogen.sh COMMAND ${configure_cmd}
24+
BUILD_COMMAND ${NO_DESTDIR_COMMAND} make -j3
25+
BUILD_IN_SOURCE 1
26+
BUILD_BYPRODUCTS ${isal_LIBRARY}
27+
INSTALL_COMMAND ${NO_DESTDIR_COMMAND} make install
28+
UPDATE_COMMAND ""
29+
LOG_CONFIGURE ON
30+
LOG_BUILD ON
31+
LOG_INSTALL ON
32+
LOG_MERGED_STDOUTERR ON
33+
LOG_OUTPUT_ON_FAILURE ON)
34+
35+
# add imported library target ISAL::Crypto
36+
add_library(ISAL::ISAL STATIC IMPORTED GLOBAL)
37+
add_dependencies(ISAL::ISAL isal_ext)
38+
set_target_properties(ISAL::ISAL PROPERTIES
39+
INTERFACE_INCLUDE_DIRECTORIES ${isal_INCLUDE_DIR}
40+
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
41+
IMPORTED_LOCATION ${isal_LIBRARY})
42+
endfunction()
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# use an ExternalProject to build isa-l_crypto using its makefile
2+
function(build_isal_crypto)
3+
set(ISAL_CRYPTO_SOURCE_DIR ${CMAKE_SOURCE_DIR}/src/crypto/isa-l/isa-l_crypto)
4+
set(ISAL_CRYPTO_INCLUDE_DIR "${ISAL_CRYPTO_SOURCE_DIR}/include")
5+
set(ISAL_CRYPTO_LIBRARY "${ISAL_CRYPTO_SOURCE_DIR}/bin/isa-l_crypto.a")
6+
7+
include(FindMake)
8+
find_make("MAKE_EXECUTABLE" "make_cmd")
9+
10+
include(ExternalProject)
11+
ExternalProject_Add(isal_crypto_ext
12+
SOURCE_DIR ${ISAL_CRYPTO_SOURCE_DIR}
13+
CONFIGURE_COMMAND ""
14+
BUILD_COMMAND ${make_cmd} -f <SOURCE_DIR>/Makefile.unx
15+
BUILD_IN_SOURCE 1
16+
BUILD_BYPRODUCTS ${ISAL_CRYPTO_LIBRARY}
17+
INSTALL_COMMAND ""
18+
UPDATE_COMMAND ""
19+
LOG_CONFIGURE ON
20+
LOG_BUILD ON
21+
LOG_MERGED_STDOUTERR ON
22+
LOG_OUTPUT_ON_FAILURE ON)
23+
24+
# add imported library target ISAL::Crypto
25+
add_library(ISAL::Crypto STATIC IMPORTED GLOBAL)
26+
add_dependencies(ISAL::Crypto isal_crypto_ext)
27+
set_target_properties(ISAL::Crypto PROPERTIES
28+
INTERFACE_INCLUDE_DIRECTORIES ${ISAL_CRYPTO_INCLUDE_DIR}
29+
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
30+
IMPORTED_LOCATION ${ISAL_CRYPTO_LIBRARY})
31+
endfunction()

src/crypto/isa-l/CMakeLists.txt

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,17 @@
1-
set(isal_dir ${CMAKE_SOURCE_DIR}/src/crypto/isa-l/isa-l_crypto)
2-
set(CMAKE_ASM_FLAGS "-i ${isal_dir}/aes/ -i ${isal_dir}/include/ ${CMAKE_ASM_FLAGS}")
1+
# build isa-l_crypto from its makefile and expose as target ISAL::Crypto
2+
include(BuildISALCrypto)
3+
build_isal_crypto()
34

45
set(isal_crypto_plugin_srcs
56
isal_crypto_accel.cc
6-
isal_crypto_plugin.cc
7-
${isal_dir}/aes/cbc_pre.c
8-
${isal_dir}/aes/cbc_multibinary.asm
9-
${isal_dir}/aes/keyexp_128.asm
10-
${isal_dir}/aes/keyexp_192.asm
11-
${isal_dir}/aes/keyexp_256.asm
12-
${isal_dir}/aes/keyexp_multibinary.asm
13-
${isal_dir}/aes/cbc_dec_128_x4_sse.asm
14-
${isal_dir}/aes/cbc_dec_128_x8_avx.asm
15-
${isal_dir}/aes/cbc_dec_192_x4_sse.asm
16-
${isal_dir}/aes/cbc_dec_192_x8_avx.asm
17-
${isal_dir}/aes/cbc_dec_256_x4_sse.asm
18-
${isal_dir}/aes/cbc_dec_256_x8_avx.asm
19-
${isal_dir}/aes/cbc_enc_128_x4_sb.asm
20-
${isal_dir}/aes/cbc_enc_128_x8_sb.asm
21-
${isal_dir}/aes/cbc_enc_192_x4_sb.asm
22-
${isal_dir}/aes/cbc_enc_192_x8_sb.asm
23-
${isal_dir}/aes/cbc_enc_256_x4_sb.asm
24-
${isal_dir}/aes/cbc_enc_256_x8_sb.asm)
7+
isal_crypto_plugin.cc)
258

269
if(HAVE_NASM_X64)
2710
add_dependencies(crypto_plugins ceph_crypto_isal)
2811
endif(HAVE_NASM_X64)
2912

3013
add_library(ceph_crypto_isal SHARED ${isal_crypto_plugin_srcs})
31-
target_include_directories(ceph_crypto_isal PRIVATE ${isal_dir}/include)
32-
33-
target_link_libraries(ceph_crypto_isal PRIVATE Boost::context)
14+
target_link_libraries(ceph_crypto_isal PRIVATE ISAL::Crypto Boost::context)
3415

3516
set_target_properties(ceph_crypto_isal PROPERTIES
3617
VERSION 1.0.0
Lines changed: 10 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,18 @@
1-
# ISA
2-
set(isal_src_dir ${CMAKE_SOURCE_DIR}/src/isa-l)
3-
include_directories(${isal_src_dir}/include)
1+
# build isa-l from its makefile and expose as target ISAL::ISAL
2+
include(BuildISAL)
3+
build_isal()
44

5-
if(HAVE_NASM_X64_AVX2)
6-
set(CMAKE_ASM_FLAGS "-i ${isal_src_dir}/include/ ${CMAKE_ASM_FLAGS}")
7-
set(isa_srcs
8-
${isal_src_dir}/erasure_code/ec_base.c
9-
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_sse.asm
10-
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_sse.asm
11-
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_sse.asm
12-
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_sse.asm
13-
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_sse.asm
14-
${isal_src_dir}/erasure_code/gf_vect_dot_prod_sse.asm
15-
${isal_src_dir}/erasure_code/gf_2vect_mad_avx2.asm
16-
${isal_src_dir}/erasure_code/gf_3vect_mad_avx2.asm
17-
${isal_src_dir}/erasure_code/gf_4vect_mad_avx2.asm
18-
${isal_src_dir}/erasure_code/gf_5vect_mad_avx2.asm
19-
${isal_src_dir}/erasure_code/gf_6vect_mad_avx2.asm
20-
${isal_src_dir}/erasure_code/gf_vect_mad_avx2.asm
21-
${isal_src_dir}/erasure_code/ec_highlevel_func.c
22-
${isal_src_dir}/erasure_code/gf_2vect_mad_avx.asm
23-
${isal_src_dir}/erasure_code/gf_3vect_mad_avx.asm
24-
${isal_src_dir}/erasure_code/gf_4vect_mad_avx.asm
25-
${isal_src_dir}/erasure_code/gf_5vect_mad_avx.asm
26-
${isal_src_dir}/erasure_code/gf_6vect_mad_avx.asm
27-
${isal_src_dir}/erasure_code/gf_vect_mad_avx.asm
28-
${isal_src_dir}/erasure_code/ec_multibinary.asm
29-
${isal_src_dir}/erasure_code/gf_2vect_mad_sse.asm
30-
${isal_src_dir}/erasure_code/gf_3vect_mad_sse.asm
31-
${isal_src_dir}/erasure_code/gf_4vect_mad_sse.asm
32-
${isal_src_dir}/erasure_code/gf_5vect_mad_sse.asm
33-
${isal_src_dir}/erasure_code/gf_6vect_mad_sse.asm
34-
${isal_src_dir}/erasure_code/gf_vect_mad_sse.asm
35-
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx2.asm
36-
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx2.asm
37-
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx2.asm
38-
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx2.asm
39-
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx2.asm
40-
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx2.asm
41-
${isal_src_dir}/erasure_code/gf_vect_mul_avx.asm
42-
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx.asm
43-
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx.asm
44-
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx.asm
45-
${isal_src_dir}/erasure_code/gf_5vect_dot_prod_avx.asm
46-
${isal_src_dir}/erasure_code/gf_6vect_dot_prod_avx.asm
47-
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx.asm
48-
${isal_src_dir}/erasure_code/gf_vect_mul_sse.asm
49-
${isal_src_dir}/erasure_code/gf_2vect_dot_prod_avx512.asm
50-
${isal_src_dir}/erasure_code/gf_2vect_mad_avx512.asm
51-
${isal_src_dir}/erasure_code/gf_3vect_dot_prod_avx512.asm
52-
${isal_src_dir}/erasure_code/gf_3vect_mad_avx512.asm
53-
${isal_src_dir}/erasure_code/gf_4vect_dot_prod_avx512.asm
54-
${isal_src_dir}/erasure_code/gf_4vect_mad_avx512.asm
55-
${isal_src_dir}/erasure_code/gf_vect_dot_prod_avx512.asm
56-
${isal_src_dir}/erasure_code/gf_vect_mad_avx512.asm
57-
${isal_src_dir}/raid/raid_base.c
58-
${isal_src_dir}/raid/raid_multibinary.asm
59-
${isal_src_dir}/raid/xor_check_sse.asm
60-
${isal_src_dir}/raid/xor_gen_sse.asm
61-
${isal_src_dir}/raid/xor_gen_avx.asm
62-
${isal_src_dir}/raid/xor_gen_avx512.asm
63-
${isal_src_dir}/raid/pq_check_sse.asm
64-
${isal_src_dir}/raid/pq_gen_sse.asm
65-
${isal_src_dir}/raid/pq_gen_avx.asm
66-
${isal_src_dir}/raid/pq_gen_avx2.asm
67-
ErasureCodeIsa.cc
68-
ErasureCodeIsaTableCache.cc
69-
ErasureCodePluginIsa.cc
70-
)
71-
elseif(HAVE_ARMV8_SIMD)
72-
set(isa_srcs
73-
${isal_src_dir}/erasure_code/ec_base.c
74-
${isal_src_dir}/erasure_code/aarch64/ec_aarch64_highlevel_func.c
75-
${isal_src_dir}/erasure_code/aarch64/ec_aarch64_dispatcher.c
76-
${isal_src_dir}/erasure_code/aarch64/gf_2vect_dot_prod_neon.S
77-
${isal_src_dir}/erasure_code/aarch64/gf_2vect_mad_neon.S
78-
${isal_src_dir}/erasure_code/aarch64/gf_3vect_dot_prod_neon.S
79-
${isal_src_dir}/erasure_code/aarch64/gf_3vect_mad_neon.S
80-
${isal_src_dir}/erasure_code/aarch64/gf_4vect_dot_prod_neon.S
81-
${isal_src_dir}/erasure_code/aarch64/gf_4vect_mad_neon.S
82-
${isal_src_dir}/erasure_code/aarch64/gf_5vect_dot_prod_neon.S
83-
${isal_src_dir}/erasure_code/aarch64/gf_5vect_mad_neon.S
84-
${isal_src_dir}/erasure_code/aarch64/gf_6vect_mad_neon.S
85-
${isal_src_dir}/erasure_code/aarch64/gf_vect_dot_prod_neon.S
86-
${isal_src_dir}/erasure_code/aarch64/gf_vect_mad_neon.S
87-
${isal_src_dir}/erasure_code/aarch64/gf_vect_mul_neon.S
88-
${isal_src_dir}/erasure_code/aarch64/ec_multibinary_arm.S
89-
${isal_src_dir}/raid/raid_base.c
90-
${isal_src_dir}/raid/aarch64/raid_aarch64_dispatcher.c
91-
${isal_src_dir}/raid/aarch64/raid_multibinary_arm.S
92-
${isal_src_dir}/raid/aarch64/xor_check_neon.S
93-
${isal_src_dir}/raid/aarch64/xor_gen_neon.S
94-
${isal_src_dir}/raid/aarch64/pq_check_neon.S
95-
${isal_src_dir}/raid/aarch64/pq_gen_neon.S
96-
ErasureCodeIsa.cc
97-
ErasureCodeIsaTableCache.cc
98-
ErasureCodePluginIsa.cc
99-
)
100-
set_source_files_properties(
101-
${isal_src_dir}/erasure_code/aarch64/ec_multibinary_arm.S
102-
${isal_src_dir}/raid/aarch64/raid_multibinary_arm.S
103-
PROPERTIES COMPILE_FLAGS "-D__ASSEMBLY__"
104-
)
105-
endif()
5+
# ISA
6+
set(isa_srcs
7+
ErasureCodeIsa.cc
8+
ErasureCodeIsaTableCache.cc
9+
ErasureCodePluginIsa.cc
10+
)
10611

10712
add_library(ec_isa SHARED
10813
${isa_srcs}
10914
$<TARGET_OBJECTS:erasure_code_objs>)
110-
target_link_libraries(ec_isa ${EXTRALIBS})
15+
target_link_libraries(ec_isa ISAL::ISAL ${EXTRALIBS})
11116
set_target_properties(ec_isa PROPERTIES
11217
INSTALL_RPATH "")
11318
install(TARGETS ec_isa DESTINATION ${erasure_plugin_dir})

0 commit comments

Comments
 (0)