Skip to content

Commit 926ef93

Browse files
committed
cmake/ec: use ExternalProject to build isal library
Signed-off-by: Casey Bodley <[email protected]>
1 parent 3bfc1ae commit 926ef93

File tree

2 files changed

+52
-105
lines changed

2 files changed

+52
-105
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: 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)