@@ -62,6 +62,8 @@ message(STATUS "Microsoft SEAL debug mode: ${SEAL_DEBUG}")
6262# Use C++17, use C++14 otherwise.
6363set (SEAL_USE_CXX17_OPTION_STR "Use C++17" )
6464option (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.
6668include (EnableCXX17)
6769
@@ -123,6 +125,7 @@ include(CleanArtifacts)
123125# Download and build missing dependencies, throw error if disabled.
124126set (SEAL_BUILD_DEPS_OPTION_STR "Automatically download and build unmet dependencies" )
125127option (SEAL_BUILD_DEPS ${SEAL_BUILD_DEPS_OPTION_STR} ON )
128+ message (STATUS "SEAL_BUILD_DEPS: ${SEAL_BUILD_DEPS} " )
126129
127130if (SEAL_BUILD_DEPS)
128131 include (FetchContent)
@@ -135,6 +138,8 @@ endif()
135138# [option] SEAL_USE_MSGSL (default: ON)
136139set (SEAL_USE_MSGSL_OPTION_STR "Use Microsoft GSL" )
137140option (SEAL_USE_MSGSL ${SEAL_USE_MSGSL_OPTION_STR} ON )
141+ message (STATUS "SEAL_USE_MSGSL: ${SEAL_USE_MSGSL} " )
142+
138143if (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)
153158set (SEAL_USE_ZLIB_OPTION_STR "Use ZLIB for compressed serialization" )
154159option (SEAL_USE_ZLIB ${SEAL_USE_ZLIB_OPTION_STR} ON )
160+ message (STATUS "SEAL_USE_ZLIB: ${SEAL_USE_ZLIB} " )
161+
155162if (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)
172179set (SEAL_USE_ZSTD_OPTION_STR "Use Zstandard for compressed serialization" )
173180option (SEAL_USE_ZSTD ${SEAL_USE_ZSTD_OPTION_STR} ON )
181+ message (STATUS "SEAL_USE_ZSTD: ${SEAL_USE_ZSTD} " )
182+
174183if (SEAL_USE_ZSTD)
175184 if (SEAL_BUILD_DEPS)
176185 message (STATUS "Zstandard: download ..." )
@@ -200,6 +209,23 @@ if(SEAL_USE_ZSTD)
200209 endif ()
201210endif ()
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.
209235set (BUILD_SHARED_LIBS_STR "Build shared library" )
210236option (BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_STR} OFF )
237+ message (STATUS "BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS} " )
211238if (WIN32 AND BUILD_SHARED_LIBS )
212239 message (FATAL_ERROR "On Windows only static build is supported; set `BUILD_SHARED_LIBS=OFF`" )
213240endif ()
214241
215242# [option] SEAL_THROW_ON_TRANSPARENT_CIPHERTEXT (default: ON)
216243set (SEAL_THROW_ON_TRANSPARENT_CIPHERTEXT_STR "Throw an exception when Evaluator outputs a transparent ciphertext" )
217244option (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} " )
218246mark_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.
222250set (SEAL_USE_GAUSSIAN_NOISE_STR "Use a rounded Gaussian distribution for noise sampling instead of a Centered Binomial Distribution" )
223251option (SEAL_USE_GAUSSIAN_NOISE ${SEAL_USE_GAUSSIAN_NOISE_STR} OFF )
252+ message (STATUS "SEAL_USE_GAUSSIAN_NOISE: ${SEAL_USE_GAUSSIAN_NOISE} " )
224253mark_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.
228257set (SEAL_DEFAULT_PRNG_STR "Choose the default PRNG" )
229258set (SEAL_DEFAULT_PRNG "Blake2xb" CACHE STRING ${SEAL_DEFAULT_PRNG_STR} FORCE)
259+ message (STATUS "SEAL_DEFAULT_PRNG: ${SEAL_DEFAULT_PRNG} " )
230260set_property (CACHE SEAL_DEFAULT_PRNG PROPERTY
231261 STRINGS "Blake2xb" "Shake256" )
232262mark_as_advanced (FORCE SEAL_DEFAULT_PRNG)
@@ -239,6 +269,7 @@ include(CheckCXXIntrinsicsHeader)
239269if (NOT SEAL_INTRIN_HEADER_FOUND)
240270 set (SEAL_USE_INTRIN OFF CACHE BOOL ${SEAL_USE_INTRIN_OPTION_STR} FORCE)
241271endif ()
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)
299330if (NOT SEAL_MEMSET_S_FOUND)
300331 set (SEAL_USE_MEMSET_S OFF CACHE BOOL ${SEAL_USE_MEMSET_S_OPTION_STR} FORCE)
301332endif ()
333+ message (STATUS "SEAL_USE_MEMSET_S: ${SEAL_USE_MEMSET_S} " )
302334
303335set (SEAL_USE_EXPLICIT_BZERO_OPTION_STR "Use explicit_bzero" )
304336option (SEAL_USE_EXPLICIT_BZERO ${SEAL_USE_EXPLICIT_BZERO_OPTION_STR} ON )
305337mark_as_advanced (FORCE SEAL_USE_EXPLICIT_BZERO)
306338if (NOT SEAL_EXPLICIT_BZERO_FOUND)
307339 set (SEAL_USE_EXPLICIT_BZERO OFF CACHE BOOL ${SEAL_USE_EXPLICIT_BZERO_OPTION_STR} FORCE)
308340endif ()
341+ message (STATUS "SEAL_USE_EXPLICIT_BZERO: ${SEAL_USE_EXPLICIT_BZERO} " )
309342
310343set (SEAL_USE_EXPLICIT_MEMSET_OPTION_STR "Use explicit_memset" )
311344option (SEAL_USE_EXPLICIT_MEMSET ${SEAL_USE_EXPLICIT_MEMSET_OPTION_STR} ON )
312345mark_as_advanced (FORCE SEAL_USE_EXPLICIT_MEMSET)
313346if (NOT SEAL_EXPLICIT_MEMSET_FOUND)
314347 set (SEAL_USE_EXPLICIT_MEMSET OFF CACHE BOOL ${SEAL_USE_EXPLICIT_MEMSET_OPTION_STR} FORCE)
315348endif ()
349+ message (STATUS "SEAL_USE_EXPLICIT_MEMSET: ${SEAL_USE_EXPLICIT_MEMSET} " )
316350
317351# Add source files to library and header files to install
318352set (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 ()
402456endif ()
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)
417471set (SEAL_BUILD_SEAL_C_OPTION_STR "Build C export library for Microsoft SEAL" )
418472option (SEAL_BUILD_SEAL_C ${SEAL_BUILD_SEAL_C_OPTION_STR} OFF )
473+ message (STATUS "SEAL_BUILD_SEAL_C: ${SEAL_BUILD_SEAL_C} " )
419474
420475set (SEAL_BUILD_STATIC_SEAL_C_OPTION_STR "Build static C library for Microsoft SEAL" )
421476cmake_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} )
513571endif ()
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
571636set (SEAL_BUILD_EXAMPLES_OPTION_STR "Build C++ examples for Microsoft SEAL" )
572637option (SEAL_BUILD_EXAMPLES ${SEAL_BUILD_EXAMPLES_OPTION_STR} OFF )
638+ message (STATUS "SEAL_BUILD_EXAMPLES: ${SEAL_BUILD_EXAMPLES} " )
573639
574640if (SEAL_BUILD_EXAMPLES)
575641 add_subdirectory (native/examples)
@@ -582,6 +648,7 @@ endif()
582648# [option] SEAL_BUILD_TESTS
583649set (SEAL_BUILD_TESTS_OPTION_STR "Build C++ tests for Microsoft SEAL" )
584650option (SEAL_BUILD_TESTS ${SEAL_BUILD_TESTS_OPTION_STR} OFF )
651+ message (STATUS "SEAL_BUILD_TESTS: ${SEAL_BUILD_TESTS} " )
585652
586653if (SEAL_BUILD_TESTS)
587654 add_subdirectory (native/tests)
@@ -594,6 +661,7 @@ endif()
594661# [option] SEAL_BUILD_BENCH
595662set (SEAL_BUILD_BENCH_OPTION_STR "Build C++ benchmarks for Microsoft SEAL" )
596663option (SEAL_BUILD_BENCH ${SEAL_BUILD_BENCH_OPTION_STR} OFF )
664+ message (STATUS "SEAL_BUILD_BENCH: ${SEAL_BUILD_BENCH} " )
597665
598666if (SEAL_BUILD_BENCH)
599667 add_subdirectory (native/bench)
0 commit comments