Skip to content

Commit aa476c7

Browse files
author
Wei Dai
authored
Merge pull request #312 from fboemer/fboemer/hexl
Initial Intel HEXL integration
2 parents 8ee5c6c + 4b2e222 commit aa476c7

22 files changed

+373
-35
lines changed

CMakeLists.txt

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ message(STATUS "Microsoft SEAL debug mode: ${SEAL_DEBUG}")
6262
# Use C++17, use C++14 otherwise.
6363
set(SEAL_USE_CXX17_OPTION_STR "Use C++17")
6464
option(SEAL_USE_CXX17 ${SEAL_USE_CXX17_OPTION_STR} ON)
65+
message(STATUS "SEAL_USE_CXX17: ${SEAL_USE_CXX17}")
66+
6567
# Enable features from C++17 if available, disable features if set to OFF.
6668
include(EnableCXX17)
6769

@@ -123,6 +125,7 @@ include(CleanArtifacts)
123125
# Download and build missing dependencies, throw error if disabled.
124126
set(SEAL_BUILD_DEPS_OPTION_STR "Automatically download and build unmet dependencies")
125127
option(SEAL_BUILD_DEPS ${SEAL_BUILD_DEPS_OPTION_STR} ON)
128+
message(STATUS "SEAL_BUILD_DEPS: ${SEAL_BUILD_DEPS}")
126129

127130
if(SEAL_BUILD_DEPS)
128131
include(FetchContent)
@@ -135,6 +138,8 @@ endif()
135138
# [option] SEAL_USE_MSGSL (default: ON)
136139
set(SEAL_USE_MSGSL_OPTION_STR "Use Microsoft GSL")
137140
option(SEAL_USE_MSGSL ${SEAL_USE_MSGSL_OPTION_STR} ON)
141+
message(STATUS "SEAL_USE_MSGSL: ${SEAL_USE_MSGSL}")
142+
138143
if(SEAL_USE_MSGSL)
139144
if(SEAL_BUILD_DEPS)
140145
message(STATUS "Microsoft GSL: download ...")
@@ -152,6 +157,8 @@ endif()
152157
# [option] SEAL_USE_ZLIB (default: ON)
153158
set(SEAL_USE_ZLIB_OPTION_STR "Use ZLIB for compressed serialization")
154159
option(SEAL_USE_ZLIB ${SEAL_USE_ZLIB_OPTION_STR} ON)
160+
message(STATUS "SEAL_USE_ZLIB: ${SEAL_USE_ZLIB}")
161+
155162
if(SEAL_USE_ZLIB)
156163
if(SEAL_BUILD_DEPS)
157164
message(STATUS "ZLIB: download ...")
@@ -171,6 +178,8 @@ endif()
171178
# [option] SEAL_USE_ZSTD (default: ON)
172179
set(SEAL_USE_ZSTD_OPTION_STR "Use Zstandard for compressed serialization")
173180
option(SEAL_USE_ZSTD ${SEAL_USE_ZSTD_OPTION_STR} ON)
181+
message(STATUS "SEAL_USE_ZSTD: ${SEAL_USE_ZSTD}")
182+
174183
if(SEAL_USE_ZSTD)
175184
if(SEAL_BUILD_DEPS)
176185
message(STATUS "Zstandard: download ...")
@@ -200,6 +209,23 @@ if(SEAL_USE_ZSTD)
200209
endif()
201210
endif()
202211

212+
# [option] SEAL_USE_INTEL_HEXL (default: OFF)
213+
set(SEAL_USE_INTEL_HEXL_OPTION_STR "Use Intel HEXL library")
214+
option(SEAL_USE_INTEL_HEXL ${SEAL_USE_INTEL_HEXL_OPTION_STR} OFF)
215+
message(STATUS "SEAL_USE_INTEL_HEXL: ${SEAL_USE_INTEL_HEXL}")
216+
217+
if(SEAL_USE_INTEL_HEXL)
218+
if(SEAL_BUILD_DEPS)
219+
message(STATUS "Intel HEXL: download ...")
220+
seal_fetch_thirdparty_content(ExternalIntelHEXL)
221+
else()
222+
find_package(HEXL 1.0.1)
223+
if (NOT TARGET HEXL::hexl)
224+
FATAL_ERROR("Intel HEXL: not found")
225+
endif()
226+
endif()
227+
endif()
228+
203229
####################
204230
# SEAL C++ library #
205231
####################
@@ -208,25 +234,29 @@ endif()
208234
# Build a shared library if set to ON. Build a static library regardlessly.
209235
set(BUILD_SHARED_LIBS_STR "Build shared library")
210236
option(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_STR} OFF)
237+
message(STATUS "BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}")
211238
if(WIN32 AND BUILD_SHARED_LIBS)
212239
message(FATAL_ERROR "On Windows only static build is supported; set `BUILD_SHARED_LIBS=OFF`")
213240
endif()
214241

215242
# [option] SEAL_THROW_ON_TRANSPARENT_CIPHERTEXT (default: ON)
216243
set(SEAL_THROW_ON_TRANSPARENT_CIPHERTEXT_STR "Throw an exception when Evaluator outputs a transparent ciphertext")
217244
option(SEAL_THROW_ON_TRANSPARENT_CIPHERTEXT ${SEAL_THROW_ON_TRANSPARENT_CIPHERTEXT_STR} ON)
245+
message(STATUS "SEAL_THROW_ON_TRANSPARENT_CIPHERTEXT: ${SEAL_THROW_ON_TRANSPARENT_CIPHERTEXT}")
218246
mark_as_advanced(FORCE SEAL_THROW_ON_TRANSPARENT_CIPHERTEXT)
219247

220248
# [option] SEAL_USE_GAUSSIAN_NOISE (default: OFF)
221249
# Use Gaussian distribution for noise sampling if set to ON, use centered binomial otherwise.
222250
set(SEAL_USE_GAUSSIAN_NOISE_STR "Use a rounded Gaussian distribution for noise sampling instead of a Centered Binomial Distribution")
223251
option(SEAL_USE_GAUSSIAN_NOISE ${SEAL_USE_GAUSSIAN_NOISE_STR} OFF)
252+
message(STATUS "SEAL_USE_GAUSSIAN_NOISE: ${SEAL_USE_GAUSSIAN_NOISE}")
224253
mark_as_advanced(FORCE SEAL_USE_GAUSSIAN_NOISE)
225254

226255
# [option] SEAL_DEFAULT_PRNG (default: Blake2xb)
227256
# Choose either Blake2xb or Shake256 to be the default PRNG.
228257
set(SEAL_DEFAULT_PRNG_STR "Choose the default PRNG")
229258
set(SEAL_DEFAULT_PRNG "Blake2xb" CACHE STRING ${SEAL_DEFAULT_PRNG_STR} FORCE)
259+
message(STATUS "SEAL_DEFAULT_PRNG: ${SEAL_DEFAULT_PRNG}")
230260
set_property(CACHE SEAL_DEFAULT_PRNG PROPERTY
231261
STRINGS "Blake2xb" "Shake256")
232262
mark_as_advanced(FORCE SEAL_DEFAULT_PRNG)
@@ -239,6 +269,7 @@ include(CheckCXXIntrinsicsHeader)
239269
if(NOT SEAL_INTRIN_HEADER_FOUND)
240270
set(SEAL_USE_INTRIN OFF CACHE BOOL ${SEAL_USE_INTRIN_OPTION_STR} FORCE)
241271
endif()
272+
message(STATUS "SEAL_USE_INTRIN: ${SEAL_USE_INTRIN}")
242273

243274
# [option] SEAL_USE_${A_SPECIFIC_INTRIN} (default: ON, advanced)
244275
# Not available if SEAL_USE_INTRIN is OFF.
@@ -299,20 +330,23 @@ mark_as_advanced(FORCE SEAL_USE_MEMSET_S)
299330
if(NOT SEAL_MEMSET_S_FOUND)
300331
set(SEAL_USE_MEMSET_S OFF CACHE BOOL ${SEAL_USE_MEMSET_S_OPTION_STR} FORCE)
301332
endif()
333+
message(STATUS "SEAL_USE_MEMSET_S: ${SEAL_USE_MEMSET_S}")
302334

303335
set(SEAL_USE_EXPLICIT_BZERO_OPTION_STR "Use explicit_bzero")
304336
option(SEAL_USE_EXPLICIT_BZERO ${SEAL_USE_EXPLICIT_BZERO_OPTION_STR} ON)
305337
mark_as_advanced(FORCE SEAL_USE_EXPLICIT_BZERO)
306338
if(NOT SEAL_EXPLICIT_BZERO_FOUND)
307339
set(SEAL_USE_EXPLICIT_BZERO OFF CACHE BOOL ${SEAL_USE_EXPLICIT_BZERO_OPTION_STR} FORCE)
308340
endif()
341+
message(STATUS "SEAL_USE_EXPLICIT_BZERO: ${SEAL_USE_EXPLICIT_BZERO}")
309342

310343
set(SEAL_USE_EXPLICIT_MEMSET_OPTION_STR "Use explicit_memset")
311344
option(SEAL_USE_EXPLICIT_MEMSET ${SEAL_USE_EXPLICIT_MEMSET_OPTION_STR} ON)
312345
mark_as_advanced(FORCE SEAL_USE_EXPLICIT_MEMSET)
313346
if(NOT SEAL_EXPLICIT_MEMSET_FOUND)
314347
set(SEAL_USE_EXPLICIT_MEMSET OFF CACHE BOOL ${SEAL_USE_EXPLICIT_MEMSET_OPTION_STR} FORCE)
315348
endif()
349+
message(STATUS "SEAL_USE_EXPLICIT_MEMSET: ${SEAL_USE_EXPLICIT_MEMSET}")
316350

317351
# Add source files to library and header files to install
318352
set(SEAL_SOURCE_FILES "")
@@ -364,6 +398,21 @@ if(NOT BUILD_SHARED_LIBS)
364398
endif()
365399
endif()
366400

401+
if(SEAL_USE_INTEL_HEXL)
402+
if(SEAL_BUILD_DEPS)
403+
add_dependencies(seal HEXL::hexl)
404+
target_include_directories(seal PUBLIC $<BUILD_INTERFACE:${hexl_SOURCE_DIR}/hexl/include>)
405+
seal_combine_archives(seal HEXL::hexl)
406+
else()
407+
target_link_libraries(seal PRIVATE HEXL::hexl)
408+
get_target_property(
409+
HEXL_INCLUDE_DIR
410+
HEXL::hexl
411+
INTERFACE_INCLUDE_DIRECTORIES)
412+
target_include_directories(seal PUBLIC ${HEXL_INCLUDE_DIR})
413+
endif()
414+
endif()
415+
367416
# Set secure compile options if SEAL_SECURE_COMPILE_OPTIONS is ON; only supported on MSVC
368417
if(SEAL_SECURE_COMPILE_OPTIONS)
369418
seal_set_secure_compile_options(seal PUBLIC)
@@ -399,6 +448,11 @@ else()
399448
target_include_directories(seal_shared PRIVATE $<BUILD_INTERFACE:${zstd_SOURCE_DIR}/lib/common>)
400449
target_link_libraries(seal_shared PRIVATE ${zstd_static})
401450
endif()
451+
452+
if(SEAL_USE_INTEL_HEXL)
453+
target_include_directories(seal_shared PRIVATE $<BUILD_INTERFACE:${hexl_SOURCE_DIR}/hexl/include>)
454+
target_link_libraries(seal_shared PRIVATE hexl)
455+
endif()
402456
endif()
403457

404458
# Add standard alias targets for SEAL::seal and SEAL::seal_shared
@@ -416,6 +470,7 @@ endif()
416470
# [option] SEAL_BUILD_SEAL_C (default: OFF)
417471
set(SEAL_BUILD_SEAL_C_OPTION_STR "Build C export library for Microsoft SEAL")
418472
option(SEAL_BUILD_SEAL_C ${SEAL_BUILD_SEAL_C_OPTION_STR} OFF)
473+
message(STATUS "SEAL_BUILD_SEAL_C: ${SEAL_BUILD_SEAL_C}")
419474

420475
set(SEAL_BUILD_STATIC_SEAL_C_OPTION_STR "Build static C library for Microsoft SEAL")
421476
cmake_dependent_option(SEAL_BUILD_STATIC_SEAL_C ${SEAL_BUILD_STATIC_SEAL_C_OPTION_STR} OFF "SEAL_BUILD_SEAL_C" OFF)
@@ -458,6 +513,9 @@ if(SEAL_BUILD_SEAL_C)
458513
endif()
459514
seal_set_language(sealc)
460515
seal_set_include_directories(sealc)
516+
if (SEAL_USE_INTEL_HEXL)
517+
target_include_directories(sealc PRIVATE $<BUILD_INTERFACE:${hexl_SOURCE_DIR}/hexl/include>)
518+
endif()
461519

462520
target_link_libraries(sealc PUBLIC seal)
463521

@@ -512,6 +570,13 @@ if(SEAL_USE_MSGSL AND SEAL_BUILD_DEPS)
512570
DESTINATION ${SEAL_INCLUDES_INSTALL_DIR})
513571
endif()
514572

573+
# Install Intel HEXL header files if SEAL_BUILD_DEPS is ON
574+
if(SEAL_USE_INTEL_HEXL AND SEAL_BUILD_DEPS)
575+
install(
576+
DIRECTORY ${hexl_SOURCE_DIR}/hexl/include/intel-hexl
577+
DESTINATION ${SEAL_INCLUDES_INSTALL_DIR})
578+
endif()
579+
515580
##############
516581
# pkg-config #
517582
##############
@@ -570,6 +635,7 @@ endif()
570635
# [option] SEAL_BUILD_EXAMPLES
571636
set(SEAL_BUILD_EXAMPLES_OPTION_STR "Build C++ examples for Microsoft SEAL")
572637
option(SEAL_BUILD_EXAMPLES ${SEAL_BUILD_EXAMPLES_OPTION_STR} OFF)
638+
message(STATUS "SEAL_BUILD_EXAMPLES: ${SEAL_BUILD_EXAMPLES}")
573639

574640
if(SEAL_BUILD_EXAMPLES)
575641
add_subdirectory(native/examples)
@@ -582,6 +648,7 @@ endif()
582648
# [option] SEAL_BUILD_TESTS
583649
set(SEAL_BUILD_TESTS_OPTION_STR "Build C++ tests for Microsoft SEAL")
584650
option(SEAL_BUILD_TESTS ${SEAL_BUILD_TESTS_OPTION_STR} OFF)
651+
message(STATUS "SEAL_BUILD_TESTS: ${SEAL_BUILD_TESTS}")
585652

586653
if(SEAL_BUILD_TESTS)
587654
add_subdirectory(native/tests)
@@ -594,6 +661,7 @@ endif()
594661
# [option] SEAL_BUILD_BENCH
595662
set(SEAL_BUILD_BENCH_OPTION_STR "Build C++ benchmarks for Microsoft SEAL")
596663
option(SEAL_BUILD_BENCH ${SEAL_BUILD_BENCH_OPTION_STR} OFF)
664+
message(STATUS "SEAL_BUILD_BENCH: ${SEAL_BUILD_BENCH}")
597665

598666
if(SEAL_BUILD_BENCH)
599667
add_subdirectory(native/bench)

0 commit comments

Comments
 (0)