vectorscan/CMakeLists.txt
Mitchell Wasson 9c139c3a6d Correct set_source_files_properties usage
The use of `CMAKE_BINARY_DIR` and `CMAKE_CURRENT_BINARY_DIR` when
specifying files to set_source_files_properties caused problems
when this project is used from another CMake project.

More specifically, these variables aren't set to the expected path,
and the properties are attempted to be set for non-existant files.

This was benign before vectorscan 5.4.8 as the only properties
set were warning suppression flags.

Starting with 5.4.9, `-funsigned-char` was applied to Ragel outputs
using this method. The result is projects depending on Vectorscan
through Cmake do not have this compile flag properly applied.
2023-10-31 09:35:50 -06:00

1215 lines
39 KiB
CMake

cmake_minimum_required (VERSION 3.18.4)
project (vectorscan C CXX)
set (HS_MAJOR_VERSION 5)
set (HS_MINOR_VERSION 4)
set (HS_PATCH_VERSION 10)
set (HS_VERSION ${HS_MAJOR_VERSION}.${HS_MINOR_VERSION}.${HS_PATCH_VERSION})
string (TIMESTAMP BUILD_DATE "%Y-%m-%d")
message(STATUS "Build date: ${BUILD_DATE}")
# Dependencies check
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
include(CheckCXXSymbolExists)
INCLUDE (CheckFunctionExists)
INCLUDE (CheckIncludeFiles)
INCLUDE (CheckIncludeFileCXX)
INCLUDE (CheckLibraryExists)
INCLUDE (CheckSymbolExists)
include (CMakeDependentOption)
include (GNUInstallDirs)
include (${CMAKE_MODULE_PATH}/platform.cmake)
include (${CMAKE_MODULE_PATH}/boost.cmake)
include (${CMAKE_MODULE_PATH}/ragel.cmake)
find_package(PkgConfig QUIET)
find_program(RAGEL ragel)
if(${RAGEL} STREQUAL "RAGEL-NOTFOUND")
message(FATAL_ERROR "Ragel state machine compiler not found")
endif()
# Build type check
if (NOT CMAKE_BUILD_TYPE)
message(STATUS "Default build type 'Release with debug info'")
set(CMAKE_BUILD_TYPE RELWITHDEBINFO CACHE STRING "" FORCE )
else()
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)
message(STATUS "Build type ${CMAKE_BUILD_TYPE}")
endif()
if(CMAKE_BUILD_TYPE MATCHES NONE|RELEASE|RELWITHDEBINFO|MINSIZEREL)
message(STATUS "using release build")
set(RELEASE_BUILD TRUE)
else()
set(RELEASE_BUILD FALSE)
endif()
set(BINDIR "${PROJECT_BINARY_DIR}/bin")
set(LIBDIR "${PROJECT_BINARY_DIR}/lib")
set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
# First for the generic no-config case
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${BINDIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${LIBDIR}")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${LIBDIR}")
# Second, for multi-config builds (e.g. msvc)
foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
string (TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${BINDIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${LIBDIR}")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${LIBDIR}")
endforeach (OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)
set(CMAKE_INCLUDE_CURRENT_DIR 1)
include_directories(${PROJECT_SOURCE_DIR}/src)
include_directories(${PROJECT_BINARY_DIR})
include_directories(SYSTEM include)
# Compiler detection
include (${CMAKE_MODULE_PATH}/compiler.cmake)
# CMake options
if (BUILD_STATIC_AND_SHARED)
message(FATAL_ERROR "This option is no longer supported, please set at least one of BUILD_STATIC_LIBS and BUILD_SHARED_LIBS")
endif()
option(BUILD_SHARED_LIBS "Build shared libs" OFF)
option(BUILD_STATIC_LIBS "Build static libs" OFF)
if (BUILD_SHARED_LIBS)
message(STATUS "Building shared libraries")
endif()
if (BUILD_STATIC_LIBS)
message(STATUS "Building static libraries")
endif()
if (NOT BUILD_SHARED_LIBS)
# build static libs
set(BUILD_STATIC_LIBS ON)
endif ()
CMAKE_DEPENDENT_OPTION(DUMP_SUPPORT "Dump code support; normally on, except in release builds" ON "NOT RELEASE_BUILD" OFF)
CMAKE_DEPENDENT_OPTION(DISABLE_ASSERTS "Disable assert(); Asserts are enabled in debug builds, disabled in release builds" OFF "NOT RELEASE_BUILD" ON)
option(DEBUG_OUTPUT "Enable debug output (warning: very verbose)" OFF)
if(DEBUG_OUTPUT)
add_definitions(-DDEBUG)
set(RELEASE_BUILD FALSE)
endif(DEBUG_OUTPUT)
#for config
if (RELEASE_BUILD)
set(HS_OPTIMIZE ON)
add_definitions(-DNDEBUG)
endif()
# Detect OS and if Fat Runtime is available
include (${CMAKE_MODULE_PATH}/osdetection.cmake)
if (ARCH_IA32 OR ARCH_X86_64)
include (${CMAKE_MODULE_PATH}/cflags-x86.cmake)
set(ARCH_FLAG march)
elseif (ARCH_ARM32 OR ARCH_AARCH64)
include (${CMAKE_MODULE_PATH}/cflags-arm.cmake)
set(ARCH_FLAG march)
elseif (ARCH_PPC64EL)
include (${CMAKE_MODULE_PATH}/cflags-ppc64le.cmake)
set(ARCH_FLAG mcpu)
endif ()
# Detect Native arch flags if requested
include (${CMAKE_MODULE_PATH}/archdetect.cmake)
# Configure Compiler flags (Generic)
include (${CMAKE_MODULE_PATH}/sanitize.cmake)
if (NOT FAT_RUNTIME)
if (GNUCC_TUNE)
set(ARCH_C_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} -${TUNE_FLAG}=${GNUCC_TUNE}")
set(ARCH_CXX_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} -${TUNE_FLAG}=${GNUCC_TUNE}")
else()
set(ARCH_C_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} -mtune=${TUNE_FLAG} ${ARCH_C_FLAGS}")
set(ARCH_CXX_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} -mtune=${TUNE_FLAG} ${ARCH_CXX_FLAGS}")
endif()
endif()
# remove CMake's idea of optimisation
foreach (CONFIG ${CMAKE_BUILD_TYPE} ${CMAKE_CONFIGURATION_TYPES})
string(REGEX REPLACE "-O[^ ]*" "" CMAKE_C_FLAGS_${CONFIG} "${CMAKE_C_FLAGS_${CONFIG}}")
string(REGEX REPLACE "-O[^ ]*" "" CMAKE_CXX_FLAGS_${CONFIG} "${CMAKE_CXX_FLAGS_${CONFIG}}")
endforeach ()
message(STATUS "ARCH_C_FLAGS : ${ARCH_C_FLAGS}")
message(STATUS "ARCH_CXX_FLAGS : ${ARCH_CXX_FLAGS}")
if(RELEASE_BUILD)
if (NOT CMAKE_BUILD_TYPE MATCHES MINSIZEREL)
set(OPT_C_FLAG "-O3")
set(OPT_CXX_FLAG "-O3")
else ()
set(OPT_C_FLAG "-Os")
set(OPT_CXX_FLAG "-Os")
endif ()
else()
set(OPT_C_FLAG "-O0")
set(OPT_CXX_FLAG "-O0")
endif(RELEASE_BUILD)
include (${CMAKE_MODULE_PATH}/cflags-generic.cmake)
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ARCH_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_CXX_FLAGS}")
# PCRE check, we have a fixed requirement for PCRE to use Chimera
# and hscollider
set(PCRE_REQUIRED_MAJOR_VERSION 8)
set(PCRE_REQUIRED_MINOR_VERSION 41)
set(PCRE_REQUIRED_VERSION ${PCRE_REQUIRED_MAJOR_VERSION}.${PCRE_REQUIRED_MINOR_VERSION})
include (${CMAKE_MODULE_PATH}/pcre.cmake)
if (NOT CORRECT_PCRE_VERSION)
message(STATUS "PCRE ${PCRE_REQUIRED_VERSION} or above not found")
endif()
# we need static libs for Chimera - too much deep magic for shared libs
if (CORRECT_PCRE_VERSION AND PCRE_BUILD_SOURCE AND BUILD_STATIC_LIBS)
set(BUILD_CHIMERA TRUE)
endif()
set(RAGEL_C_FLAGS "-Wno-unused -funsigned-char")
set_source_files_properties(
src/parser/Parser.cpp
PROPERTIES
COMPILE_FLAGS "${RAGEL_C_FLAGS}")
ragelmaker(src/parser/Parser.rl)
set_source_files_properties(
src/parser/control_verbs.cpp
PROPERTIES
COMPILE_FLAGS "${RAGEL_C_FLAGS}")
ragelmaker(src/parser/control_verbs.rl)
# do substitutions
configure_file(${CMAKE_MODULE_PATH}/config.h.in ${PROJECT_BINARY_DIR}/config.h)
configure_file(src/hs_version.h.in ${PROJECT_BINARY_DIR}/hs_version.h)
configure_file(libhs.pc.in libhs.pc @ONLY) # only replace @ quoted vars
install(FILES ${CMAKE_BINARY_DIR}/libhs.pc
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
# only set these after all tests are done
if (NOT FAT_RUNTIME)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${HS_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXX_FLAGS} ${HS_CXX_FLAGS}")
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXX_FLAGS}")
endif()
SET(hs_HEADERS
src/hs.h
src/hs_common.h
src/hs_compile.h
src/hs_runtime.h
)
install(FILES ${hs_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/hs")
set (hs_exec_common_SRCS
src/alloc.c
src/scratch.c
src/util/arch/common/cpuid_flags.h
src/util/multibit.c
)
if (ARCH_IA32 OR ARCH_X86_64)
set (hs_exec_common_SRCS
${hs_exec_common_SRCS}
src/util/arch/x86/cpuid_flags.c
)
elseif (ARCH_ARM32 OR ARCH_AARCH64)
set (hs_exec_common_SRCS
${hs_exec_common_SRCS}
src/util/arch/arm/cpuid_flags.c
)
elseif (ARCH_PPC64EL)
set (hs_exec_common_SRCS
${hs_exec_common_SRCS}
src/util/arch/ppc64el/cpuid_flags.c)
endif ()
set (hs_exec_SRCS
${hs_HEADERS}
src/hs_version.h.in
src/ue2common.h
src/allocator.h
src/crc32.c
src/crc32.h
src/report.h
src/runtime.c
src/stream_compress.c
src/stream_compress.h
src/stream_compress_impl.h
src/fdr/fdr.c
src/fdr/fdr.h
src/fdr/fdr_internal.h
src/fdr/fdr_confirm.h
src/fdr/fdr_confirm_runtime.h
src/fdr/flood_runtime.h
src/fdr/fdr_loadval.h
src/fdr/teddy.c
src/fdr/teddy.h
src/fdr/teddy_internal.h
src/fdr/teddy_runtime_common.h
src/hwlm/hwlm.c
src/hwlm/hwlm.h
src/hwlm/hwlm_internal.h
src/hwlm/noodle_engine.cpp
src/hwlm/noodle_engine.h
src/hwlm/noodle_internal.h
src/nfa/accel.c
src/nfa/accel.h
src/nfa/castle.c
src/nfa/castle.h
src/nfa/castle_internal.h
src/nfa/gough.c
src/nfa/gough_internal.h
src/nfa/lbr.c
src/nfa/lbr.h
src/nfa/lbr_common_impl.h
src/nfa/lbr_internal.h
src/nfa/limex_accel.c
src/nfa/limex_accel.h
src/nfa/limex_exceptional.h
src/nfa/limex_native.c
src/nfa/limex_ring.h
src/nfa/limex_64.c
src/nfa/limex_simd128.c
src/nfa/limex_simd256.c
src/nfa/limex_simd384.c
src/nfa/limex_simd512.c
src/nfa/limex.h
src/nfa/limex_common_impl.h
src/nfa/limex_context.h
src/nfa/limex_internal.h
src/nfa/limex_runtime.h
src/nfa/limex_runtime_impl.h
src/nfa/limex_shuffle.h
src/nfa/limex_state_impl.h
src/nfa/mcclellan.c
src/nfa/mcclellan.h
src/nfa/mcclellan_common_impl.h
src/nfa/mcclellan_internal.h
src/nfa/mcsheng.c
src/nfa/mcsheng_data.c
src/nfa/mcsheng.h
src/nfa/mcsheng_internal.h
src/nfa/mpv.h
src/nfa/mpv.c
src/nfa/mpv_internal.h
src/nfa/nfa_api.h
src/nfa/nfa_api_dispatch.c
src/nfa/nfa_internal.h
src/nfa/nfa_rev_api.h
src/nfa/repeat.c
src/nfa/repeat.h
src/nfa/repeat_internal.h
src/nfa/sheng.c
src/nfa/sheng.h
src/nfa/sheng_defs.h
src/nfa/sheng_impl.h
src/nfa/sheng_impl4.h
src/nfa/sheng_internal.h
src/nfa/shufti.cpp
src/nfa/shufti.h
src/nfa/tamarama.c
src/nfa/tamarama.h
src/nfa/tamarama_internal.h
src/nfa/truffle.cpp
src/nfa/truffle.h
src/nfa/vermicelli.hpp
src/nfa/vermicelli_run.h
src/som/som.h
src/som/som_operation.h
src/som/som_runtime.h
src/som/som_runtime.c
src/som/som_stream.c
src/som/som_stream.h
src/rose/block.c
src/rose/catchup.h
src/rose/catchup.c
src/rose/infix.h
src/rose/init.h
src/rose/init.c
src/rose/stream.c
src/rose/stream_long_lit.h
src/rose/stream_long_lit_hash.h
src/rose/match.h
src/rose/match.c
src/rose/miracle.h
src/rose/program_runtime.c
src/rose/program_runtime.h
src/rose/runtime.h
src/rose/rose.h
src/rose/rose_internal.h
src/rose/rose_program.h
src/rose/rose_types.h
src/rose/rose_common.h
src/rose/validate_mask.h
src/rose/validate_shufti.h
src/util/bitutils.h
src/util/copybytes.h
src/util/exhaust.h
src/util/fatbit.h
src/util/join.h
src/util/multibit.h
src/util/multibit.c
src/util/multibit_compress.h
src/util/multibit_internal.h
src/util/pack_bits.h
src/util/popcount.h
src/util/pqueue.h
src/util/scatter.h
src/util/scatter_runtime.h
src/util/simd_utils.h
src/util/state_compress.h
src/util/state_compress.c
src/util/unaligned.h
src/util/uniform_ops.h
src/database.c
src/database.h
)
if (ARCH_IA32 OR ARCH_X86_64)
set (hs_exec_SRCS
${hs_exec_SRCS}
src/nfa/vermicelli_simd.cpp
src/util/supervector/arch/x86/impl.cpp)
elseif (ARCH_ARM32 OR ARCH_AARCH64)
set (hs_exec_SRCS
${hs_exec_SRCS}
src/util/supervector/arch/arm/impl.cpp)
elseif (ARCH_PPC64EL)
set (hs_exec_SRCS
${hs_exec_SRCS}
src/nfa/vermicelli_simd.cpp
src/util/supervector/arch/ppc64el/impl.cpp)
endif()
if (ARCH_IA32 OR ARCH_X86_64)
set (hs_exec_avx2_SRCS
src/fdr/teddy_avx2.c
src/util/arch/x86/masked_move.c
src/util/arch/x86/masked_move.h
)
endif()
if (ARCH_ARM32 OR ARCH_AARCH64)
set (hs_exec_neon_SRCS
src/nfa/vermicelli_simd.cpp)
set (hs_exec_sve_SRCS
src/nfa/vermicelli_simd.cpp)
endif()
SET (hs_compile_SRCS
${hs_HEADERS}
src/crc32.h
src/database.h
src/grey.cpp
src/grey.h
src/hs.cpp
src/hs_internal.h
src/hs_version.h.in
src/scratch.h
src/state.h
src/ue2common.h
src/compiler/asserts.cpp
src/compiler/asserts.h
src/compiler/compiler.cpp
src/compiler/compiler.h
src/compiler/error.cpp
src/compiler/error.h
src/compiler/expression_info.h
src/fdr/engine_description.cpp
src/fdr/engine_description.h
src/fdr/fdr_compile.cpp
src/fdr/fdr_compile.h
src/fdr/fdr_compile_internal.h
src/fdr/fdr_compile_util.cpp
src/fdr/fdr_confirm_compile.cpp
src/fdr/fdr_confirm.h
src/fdr/fdr_engine_description.cpp
src/fdr/fdr_engine_description.h
src/fdr/fdr_internal.h
src/fdr/flood_compile.cpp
src/fdr/teddy_compile.cpp
src/fdr/teddy_compile.h
src/fdr/teddy_engine_description.cpp
src/fdr/teddy_engine_description.h
src/fdr/teddy_internal.h
src/hwlm/hwlm_build.cpp
src/hwlm/hwlm_build.h
src/hwlm/hwlm_internal.h
src/hwlm/hwlm_literal.cpp
src/hwlm/hwlm_literal.h
src/hwlm/noodle_build.cpp
src/hwlm/noodle_build.h
src/hwlm/noodle_internal.h
src/nfa/accel.h
src/nfa/accel_dfa_build_strat.cpp
src/nfa/accel_dfa_build_strat.h
src/nfa/accelcompile.cpp
src/nfa/accelcompile.h
src/nfa/callback.h
src/nfa/castlecompile.cpp
src/nfa/castlecompile.h
src/nfa/dfa_build_strat.cpp
src/nfa/dfa_build_strat.h
src/nfa/dfa_min.cpp
src/nfa/dfa_min.h
src/nfa/goughcompile.cpp
src/nfa/goughcompile.h
src/nfa/goughcompile_accel.cpp
src/nfa/goughcompile_internal.h
src/nfa/goughcompile_reg.cpp
src/nfa/mcclellan.h
src/nfa/mcclellan_internal.h
src/nfa/mcclellancompile.cpp
src/nfa/mcclellancompile.h
src/nfa/mcclellancompile_util.cpp
src/nfa/mcclellancompile_util.h
src/nfa/mcsheng_compile.cpp
src/nfa/mcsheng_compile.h
src/nfa/limex_compile.cpp
src/nfa/limex_compile.h
src/nfa/limex_accel.h
src/nfa/limex_internal.h
src/nfa/mpv_internal.h
src/nfa/mpvcompile.cpp
src/nfa/mpvcompile.h
src/nfa/nfa_api.h
src/nfa/nfa_api_queue.h
src/nfa/nfa_api_util.h
src/nfa/nfa_build_util.cpp
src/nfa/nfa_build_util.h
src/nfa/nfa_internal.h
src/nfa/nfa_kind.h
src/nfa/rdfa.cpp
src/nfa/rdfa.h
src/nfa/rdfa_graph.cpp
src/nfa/rdfa_graph.h
src/nfa/rdfa_merge.cpp
src/nfa/rdfa_merge.h
src/nfa/repeat_internal.h
src/nfa/repeatcompile.cpp
src/nfa/repeatcompile.h
src/nfa/sheng_internal.h
src/nfa/shengcompile.cpp
src/nfa/shengcompile.h
src/nfa/shufticompile.cpp
src/nfa/shufticompile.h
src/nfa/tamaramacompile.cpp
src/nfa/tamaramacompile.h
src/nfa/trufflecompile.cpp
src/nfa/trufflecompile.h
src/nfa/vermicellicompile.cpp
src/nfa/vermicellicompile.h
src/nfagraph/ng.cpp
src/nfagraph/ng.h
src/nfagraph/ng_anchored_acyclic.cpp
src/nfagraph/ng_anchored_acyclic.h
src/nfagraph/ng_anchored_dots.cpp
src/nfagraph/ng_anchored_dots.h
src/nfagraph/ng_asserts.cpp
src/nfagraph/ng_asserts.h
src/nfagraph/ng_builder.cpp
src/nfagraph/ng_builder.h
src/nfagraph/ng_calc_components.cpp
src/nfagraph/ng_calc_components.h
src/nfagraph/ng_cyclic_redundancy.cpp
src/nfagraph/ng_cyclic_redundancy.h
src/nfagraph/ng_depth.cpp
src/nfagraph/ng_depth.h
src/nfagraph/ng_dominators.cpp
src/nfagraph/ng_dominators.h
src/nfagraph/ng_edge_redundancy.cpp
src/nfagraph/ng_edge_redundancy.h
src/nfagraph/ng_equivalence.cpp
src/nfagraph/ng_equivalence.h
src/nfagraph/ng_execute.cpp
src/nfagraph/ng_execute.h
src/nfagraph/ng_expr_info.cpp
src/nfagraph/ng_expr_info.h
src/nfagraph/ng_extparam.cpp
src/nfagraph/ng_extparam.h
src/nfagraph/ng_fixed_width.cpp
src/nfagraph/ng_fixed_width.h
src/nfagraph/ng_fuzzy.cpp
src/nfagraph/ng_fuzzy.h
src/nfagraph/ng_haig.cpp
src/nfagraph/ng_haig.h
src/nfagraph/ng_holder.cpp
src/nfagraph/ng_holder.h
src/nfagraph/ng_is_equal.cpp
src/nfagraph/ng_is_equal.h
src/nfagraph/ng_lbr.cpp
src/nfagraph/ng_lbr.h
src/nfagraph/ng_literal_analysis.cpp
src/nfagraph/ng_literal_analysis.h
src/nfagraph/ng_literal_component.cpp
src/nfagraph/ng_literal_component.h
src/nfagraph/ng_literal_decorated.cpp
src/nfagraph/ng_literal_decorated.h
src/nfagraph/ng_mcclellan.cpp
src/nfagraph/ng_mcclellan.h
src/nfagraph/ng_mcclellan_internal.h
src/nfagraph/ng_limex.cpp
src/nfagraph/ng_limex.h
src/nfagraph/ng_limex_accel.cpp
src/nfagraph/ng_limex_accel.h
src/nfagraph/ng_misc_opt.cpp
src/nfagraph/ng_misc_opt.h
src/nfagraph/ng_netflow.cpp
src/nfagraph/ng_netflow.h
src/nfagraph/ng_prefilter.cpp
src/nfagraph/ng_prefilter.h
src/nfagraph/ng_prune.cpp
src/nfagraph/ng_prune.h
src/nfagraph/ng_puff.cpp
src/nfagraph/ng_puff.h
src/nfagraph/ng_redundancy.cpp
src/nfagraph/ng_redundancy.h
src/nfagraph/ng_region.cpp
src/nfagraph/ng_region.h
src/nfagraph/ng_region_redundancy.cpp
src/nfagraph/ng_region_redundancy.h
src/nfagraph/ng_repeat.cpp
src/nfagraph/ng_repeat.h
src/nfagraph/ng_reports.cpp
src/nfagraph/ng_reports.h
src/nfagraph/ng_restructuring.cpp
src/nfagraph/ng_restructuring.h
src/nfagraph/ng_revacc.cpp
src/nfagraph/ng_revacc.h
src/nfagraph/ng_sep.cpp
src/nfagraph/ng_sep.h
src/nfagraph/ng_small_literal_set.cpp
src/nfagraph/ng_small_literal_set.h
src/nfagraph/ng_som.cpp
src/nfagraph/ng_som.h
src/nfagraph/ng_som_add_redundancy.cpp
src/nfagraph/ng_som_add_redundancy.h
src/nfagraph/ng_som_util.cpp
src/nfagraph/ng_som_util.h
src/nfagraph/ng_split.cpp
src/nfagraph/ng_split.h
src/nfagraph/ng_squash.cpp
src/nfagraph/ng_squash.h
src/nfagraph/ng_stop.cpp
src/nfagraph/ng_stop.h
src/nfagraph/ng_uncalc_components.cpp
src/nfagraph/ng_uncalc_components.h
src/nfagraph/ng_utf8.cpp
src/nfagraph/ng_utf8.h
src/nfagraph/ng_util.cpp
src/nfagraph/ng_util.h
src/nfagraph/ng_vacuous.cpp
src/nfagraph/ng_vacuous.h
src/nfagraph/ng_violet.cpp
src/nfagraph/ng_violet.h
src/nfagraph/ng_width.cpp
src/nfagraph/ng_width.h
src/parser/AsciiComponentClass.cpp
src/parser/AsciiComponentClass.h
src/parser/Component.cpp
src/parser/Component.h
src/parser/ComponentAlternation.cpp
src/parser/ComponentAlternation.h
src/parser/ComponentAssertion.cpp
src/parser/ComponentAssertion.h
src/parser/ComponentAtomicGroup.cpp
src/parser/ComponentAtomicGroup.h
src/parser/ComponentBackReference.cpp
src/parser/ComponentBackReference.h
src/parser/ComponentBoundary.cpp
src/parser/ComponentBoundary.h
src/parser/ComponentByte.cpp
src/parser/ComponentByte.h
src/parser/ComponentClass.cpp
src/parser/ComponentClass.h
src/parser/ComponentCondReference.cpp
src/parser/ComponentCondReference.h
src/parser/ComponentEUS.cpp
src/parser/ComponentEUS.h
src/parser/ComponentEmpty.cpp
src/parser/ComponentEmpty.h
src/parser/ComponentRepeat.cpp
src/parser/ComponentRepeat.h
src/parser/ComponentSequence.cpp
src/parser/ComponentSequence.h
src/parser/ComponentVisitor.cpp
src/parser/ComponentVisitor.h
src/parser/ComponentWordBoundary.cpp
src/parser/ComponentWordBoundary.h
src/parser/ConstComponentVisitor.cpp
src/parser/ConstComponentVisitor.h
src/parser/Parser.cpp
src/parser/Parser.h
src/parser/Utf8ComponentClass.cpp
src/parser/Utf8ComponentClass.h
src/parser/buildstate.cpp
src/parser/buildstate.h
src/parser/check_refs.cpp
src/parser/check_refs.h
src/parser/control_verbs.cpp
src/parser/control_verbs.h
src/parser/logical_combination.cpp
src/parser/logical_combination.h
src/parser/parse_error.cpp
src/parser/parse_error.h
src/parser/parser_util.cpp
src/parser/position.h
src/parser/position_info.h
src/parser/prefilter.cpp
src/parser/prefilter.h
src/parser/shortcut_literal.cpp
src/parser/shortcut_literal.h
src/parser/ucp_table.cpp
src/parser/ucp_table.h
src/parser/unsupported.cpp
src/parser/unsupported.h
src/parser/utf8_validate.h
src/parser/utf8_validate.cpp
src/smallwrite/smallwrite_build.cpp
src/smallwrite/smallwrite_build.h
src/smallwrite/smallwrite_internal.h
src/som/slot_manager.cpp
src/som/slot_manager.h
src/som/slot_manager_internal.h
src/som/som.h
src/som/som_operation.h
src/rose/rose_build.h
src/rose/rose_build_add.cpp
src/rose/rose_build_add_internal.h
src/rose/rose_build_add_mask.cpp
src/rose/rose_build_anchored.cpp
src/rose/rose_build_anchored.h
src/rose/rose_build_bytecode.cpp
src/rose/rose_build_castle.h
src/rose/rose_build_castle.cpp
src/rose/rose_build_compile.cpp
src/rose/rose_build_convert.cpp
src/rose/rose_build_convert.h
src/rose/rose_build_dedupe.cpp
src/rose/rose_build_engine_blob.cpp
src/rose/rose_build_engine_blob.h
src/rose/rose_build_exclusive.cpp
src/rose/rose_build_exclusive.h
src/rose/rose_build_groups.cpp
src/rose/rose_build_groups.h
src/rose/rose_build_impl.h
src/rose/rose_build_infix.cpp
src/rose/rose_build_infix.h
src/rose/rose_build_instructions.cpp
src/rose/rose_build_instructions.h
src/rose/rose_build_lit_accel.cpp
src/rose/rose_build_lit_accel.h
src/rose/rose_build_long_lit.cpp
src/rose/rose_build_long_lit.h
src/rose/rose_build_lookaround.cpp
src/rose/rose_build_lookaround.h
src/rose/rose_build_matchers.cpp
src/rose/rose_build_matchers.h
src/rose/rose_build_merge.cpp
src/rose/rose_build_merge.h
src/rose/rose_build_misc.cpp
src/rose/rose_build_misc.h
src/rose/rose_build_program.cpp
src/rose/rose_build_program.h
src/rose/rose_build_resources.h
src/rose/rose_build_role_aliasing.cpp
src/rose/rose_build_scatter.cpp
src/rose/rose_build_scatter.h
src/rose/rose_build_util.h
src/rose/rose_build_width.cpp
src/rose/rose_build_width.h
src/rose/rose_graph.h
src/rose/rose_in_graph.h
src/rose/rose_in_util.cpp
src/rose/rose_in_util.h
src/util/accel_scheme.h
src/util/alloc.cpp
src/util/alloc.h
src/util/bitfield.h
src/util/boundary_reports.h
src/util/charreach.cpp
src/util/charreach.h
src/util/charreach_util.h
src/util/clique.cpp
src/util/clique.h
src/util/compare.h
src/util/compile_context.cpp
src/util/compile_context.h
src/util/compile_error.cpp
src/util/compile_error.h
src/util/container.h
src/util/depth.cpp
src/util/depth.h
src/util/determinise.h
src/util/dump_mask.cpp
src/util/dump_mask.h
src/util/fatbit_build.cpp
src/util/fatbit_build.h
src/util/flat_containers.h
src/util/graph.h
src/util/graph_range.h
src/util/graph_small_color_map.h
src/util/graph_undirected.h
src/util/hash.h
src/util/hash_dynamic_bitset.h
src/util/insertion_ordered.h
src/util/math.h
src/util/multibit_build.cpp
src/util/multibit_build.h
src/util/noncopyable.h
src/util/operators.h
src/util/order_check.h
src/util/partial_store.h
src/util/partitioned_set.h
src/util/popcount.h
src/util/queue_index_factory.h
src/util/report.h
src/util/report_manager.cpp
src/util/report_manager.h
src/util/simd_utils.h
src/util/small_vector.h
src/util/target_info.cpp
src/util/target_info.h
src/util/ue2_graph.h
src/util/ue2string.cpp
src/util/ue2string.h
src/util/unaligned.h
src/util/unicode_def.h
src/util/unicode_set.h
src/util/uniform_ops.h
src/util/unordered.h
src/util/verify_types.h
)
set(hs_dump_SRCS
src/scratch_dump.cpp
src/scratch_dump.h
src/fdr/fdr_dump.cpp
src/hwlm/hwlm_dump.cpp
src/hwlm/hwlm_dump.h
src/nfa/accel_dump.cpp
src/nfa/accel_dump.h
src/nfa/castle_dump.cpp
src/nfa/castle_dump.h
src/nfagraph/ng_dump.cpp
src/nfagraph/ng_dump.h
src/nfa/goughcompile_dump.cpp
src/nfa/goughcompile_dump.h
src/nfa/goughdump.cpp
src/nfa/goughdump.h
src/nfa/lbr_dump.cpp
src/nfa/limex_dump.cpp
src/nfa/mcclellandump.cpp
src/nfa/mcclellandump.h
src/nfa/mcsheng_dump.cpp
src/nfa/mcsheng_dump.h
src/nfa/mpv_dump.cpp
src/nfa/nfa_dump_api.h
src/nfa/nfa_dump_dispatch.cpp
src/nfa/nfa_dump_internal.cpp
src/nfa/nfa_dump_internal.h
src/nfa/shengdump.cpp
src/nfa/shengdump.h
src/nfa/tamarama_dump.cpp
src/nfa/tamarama_dump.h
src/parser/dump.cpp
src/parser/dump.h
src/parser/position_dump.h
src/smallwrite/smallwrite_dump.cpp
src/smallwrite/smallwrite_dump.h
src/som/slot_manager_dump.cpp
src/som/slot_manager_dump.h
src/rose/rose_build_dump.cpp
src/rose/rose_build_dump.h
src/rose/rose_in_dump.cpp
src/rose/rose_in_dump.h
src/util/dump_charclass.cpp
src/util/dump_charclass.h
src/util/dump_util.cpp
src/util/dump_util.h
)
if (DUMP_SUPPORT)
set(hs_compile_SRCS ${hs_compile_SRCS} ${hs_dump_SRCS})
endif()
# we group things by sublibraries, specifying shared and static and then
# choose which ones to build
set (LIB_VERSION ${HS_VERSION})
set (LIB_SOVERSION ${HS_MAJOR_VERSION})
if (NOT FAT_RUNTIME)
set(hs_exec_SRCS ${hs_exec_SRCS} ${hs_exec_common_SRCS})
if (ARCH_IA32 OR ARCH_X86_64)
if (BUILD_AVX2)
set(hs_exec_SRCS ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
endif()
elseif (ARCH_AARCH64)
if (BUILD_SVE2)
set(hs_exec_SRCS ${hs_exec_SRCS} ${hs_exec_sve2_SRCS})
elseif (BUILD_SVE)
set(hs_exec_SRCS ${hs_exec_SRCS} ${hs_exec_sve_SRCS})
else()
set(hs_exec_SRCS ${hs_exec_SRCS} ${hs_exec_neon_SRCS})
endif()
endif()
if (BUILD_STATIC_LIBS)
add_library(hs_exec OBJECT ${hs_exec_SRCS})
add_library(hs_runtime STATIC src/hs_version.c src/hs_valid_platform.c $<TARGET_OBJECTS:hs_exec>)
set_target_properties(hs_runtime PROPERTIES LINKER_LANGUAGE C)
add_library(hs_compile OBJECT ${hs_compile_SRCS})
add_library(hs STATIC
src/hs_version.c
src/hs_valid_platform.c
$<TARGET_OBJECTS:hs_exec>
$<TARGET_OBJECTS:hs_compile>)
endif (BUILD_STATIC_LIBS)
if (BUILD_SHARED_LIBS)
add_library(hs_exec_shared OBJECT ${hs_exec_SRCS})
set_target_properties(hs_exec_shared PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
add_library(hs_compile_shared OBJECT ${hs_compile_SRCS})
set_target_properties(hs_compile_shared PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
endif()
else ()
if (ARCH_IA32 OR ARCH_X86_64)
set(BUILD_WRAPPER "${PROJECT_SOURCE_DIR}/cmake/build_wrapper.sh")
if (NOT BUILD_AVX512)
set (DISPATCHER_DEFINE "-DDISABLE_AVX512_DISPATCH")
endif (NOT BUILD_AVX512)
if (NOT BUILD_AVX512VBMI)
set (DISPATCHER_DEFINE "${DISPATCHER_DEFINE} -DDISABLE_AVX512VBMI_DISPATCH")
endif (NOT BUILD_AVX512VBMI)
set_source_files_properties(src/dispatcher.c PROPERTIES
COMPILE_FLAGS "-Wno-unused-parameter -Wno-unused-function ${DISPATCHER_DEFINE}")
if (BUILD_STATIC_LIBS)
add_library(hs_exec_core2 OBJECT ${hs_exec_SRCS})
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_core2>)
set_target_properties(hs_exec_core2 PROPERTIES
COMPILE_FLAGS "-march=core2 -msse4.2"
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} core2 ${CMAKE_MODULE_PATH}/keep.syms.in"
)
add_library(hs_exec_corei7 OBJECT ${hs_exec_SRCS})
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_corei7>)
set_target_properties(hs_exec_corei7 PROPERTIES
COMPILE_FLAGS "-march=corei7 -msse4.2"
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} corei7 ${CMAKE_MODULE_PATH}/keep.syms.in"
)
if (BUILD_AVX2)
add_library(hs_exec_avx2 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_avx2>)
set_target_properties(hs_exec_avx2 PROPERTIES
COMPILE_FLAGS "-march=core-avx2 -mavx2"
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx2 ${CMAKE_MODULE_PATH}/keep.syms.in"
)
endif (BUILD_AVX2)
if (BUILD_AVX512)
add_library(hs_exec_avx512 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_avx512>)
set_target_properties(hs_exec_avx512 PROPERTIES
COMPILE_FLAGS "${SKYLAKE_FLAG}"
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512 ${CMAKE_MODULE_PATH}/keep.syms.in"
)
endif (BUILD_AVX512)
if (BUILD_AVX512VBMI)
add_library(hs_exec_avx512vbmi OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_avx512vbmi>)
set_target_properties(hs_exec_avx512vbmi PROPERTIES
COMPILE_FLAGS "${ICELAKE_FLAG}"
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512vbmi ${CMAKE_MODULE_PATH}/keep.syms.in"
)
endif (BUILD_AVX512VBMI)
add_library(hs_exec_common OBJECT
${hs_exec_common_SRCS}
src/dispatcher.c
)
# hs_version.c is added explicitly to avoid some build systems that refuse to
# create a lib without any src (I'm looking at you Xcode)
add_library(hs_runtime STATIC src/hs_version.c
$<TARGET_OBJECTS:hs_exec_common>
${RUNTIME_LIBS})
set_target_properties(hs_runtime PROPERTIES LINKER_LANGUAGE C)
add_library(hs_compile OBJECT ${hs_compile_SRCS})
# we want the static lib for testing
add_library(hs STATIC src/hs_version.c src/hs_valid_platform.c
$<TARGET_OBJECTS:hs_compile>
$<TARGET_OBJECTS:hs_exec_common>
${RUNTIME_LIBS})
endif (BUILD_STATIC_LIBS)
if (BUILD_SHARED_LIBS)
# build shared libs
add_library(hs_compile_shared OBJECT ${hs_compile_SRCS})
set_target_properties(hs_compile_shared PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
add_library(hs_exec_shared_core2 OBJECT ${hs_exec_SRCS})
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_core2>)
set_target_properties(hs_exec_shared_core2 PROPERTIES
COMPILE_FLAGS "-march=core2 -msse4.2"
POSITION_INDEPENDENT_CODE TRUE
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} core2 ${CMAKE_MODULE_PATH}/keep.syms.in"
)
add_library(hs_exec_shared_corei7 OBJECT ${hs_exec_SRCS})
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_corei7>)
set_target_properties(hs_exec_shared_corei7 PROPERTIES
COMPILE_FLAGS "-march=corei7 -msse4.2"
POSITION_INDEPENDENT_CODE TRUE
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} corei7 ${CMAKE_MODULE_PATH}/keep.syms.in"
)
if (BUILD_AVX2)
add_library(hs_exec_shared_avx2 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_avx2>)
set_target_properties(hs_exec_shared_avx2 PROPERTIES
COMPILE_FLAGS "-march=core-avx2 -mavx2"
POSITION_INDEPENDENT_CODE TRUE
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx2 ${CMAKE_MODULE_PATH}/keep.syms.in"
)
endif (BUILD_AVX2)
if (BUILD_AVX512)
add_library(hs_exec_shared_avx512 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_avx512>)
set_target_properties(hs_exec_shared_avx512 PROPERTIES
COMPILE_FLAGS "${SKYLAKE_FLAG}"
POSITION_INDEPENDENT_CODE TRUE
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512 ${CMAKE_MODULE_PATH}/keep.syms.in"
)
endif (BUILD_AVX512)
if (BUILD_AVX512VBMI)
add_library(hs_exec_shared_avx512vbmi OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_avx512vbmi>)
set_target_properties(hs_exec_shared_avx512vbmi PROPERTIES
COMPILE_FLAGS "${ICELAKE_FLAG}"
POSITION_INDEPENDENT_CODE TRUE
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512vbmi ${CMAKE_MODULE_PATH}/keep.syms.in"
)
endif (BUILD_AVX512VBMI)
add_library(hs_exec_common_shared OBJECT
${hs_exec_common_SRCS}
src/dispatcher.c
)
set_target_properties(hs_exec_common_shared PROPERTIES
OUTPUT_NAME hs_exec_common
POSITION_INDEPENDENT_CODE TRUE)
endif() # SHARED
endif (ARCH_IA32 OR ARCH_X86_64)
if (ARCH_AARCH64)
set(BUILD_WRAPPER "${PROJECT_SOURCE_DIR}/cmake/build_wrapper.sh")
if (BUILD_STATIC_LIBS)
add_library(hs_exec_neon OBJECT ${hs_exec_SRCS} ${hs_exec_neon_SRCS})
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_neon>)
set_target_properties(hs_exec_neon PROPERTIES
COMPILE_FLAGS "-march=${ARMV8_ARCH}"
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} neon ${CMAKE_MODULE_PATH}/keep.syms.in"
)
add_library(hs_exec_sve OBJECT ${hs_exec_SRCS} ${hs_exec_sve_SRCS})
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_sve>)
set_target_properties(hs_exec_sve PROPERTIES
COMPILE_FLAGS "-march=${SVE_ARCH}"
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve ${CMAKE_MODULE_PATH}/keep.syms.in"
)
add_library(hs_exec_sve2 OBJECT ${hs_exec_SRCS} ${hs_exec_sve2_SRCS})
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_sve2>)
set_target_properties(hs_exec_sve2 PROPERTIES
COMPILE_FLAGS "-march=${SVE2_BITPERM_ARCH}"
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve2 ${CMAKE_MODULE_PATH}/keep.syms.in"
)
add_library(hs_exec_common OBJECT
${hs_exec_common_SRCS}
src/dispatcher.c
)
# hs_version.c is added explicitly to avoid some build systems that refuse to
# create a lib without any src (I'm looking at you Xcode)
add_library(hs_runtime STATIC src/hs_version.c
$<TARGET_OBJECTS:hs_exec_common>
${RUNTIME_LIBS})
set_target_properties(hs_runtime PROPERTIES LINKER_LANGUAGE C)
add_library(hs_compile OBJECT ${hs_compile_SRCS})
# we want the static lib for testing
add_library(hs STATIC src/hs_version.c src/hs_valid_platform.c
$<TARGET_OBJECTS:hs_compile>
$<TARGET_OBJECTS:hs_exec_common>
${RUNTIME_LIBS})
endif (BUILD_STATIC_LIBS)
if (BUILD_SHARED_LIBS)
# build shared libs
add_library(hs_compile_shared OBJECT ${hs_compile_SRCS})
set_target_properties(hs_compile_shared PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
add_library(hs_exec_shared_neon OBJECT ${hs_exec_SRCS} ${hs_exec_neon_SRCS})
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_neon>)
set_target_properties(hs_exec_shared_neon PROPERTIES
COMPILE_FLAGS "-march=${ARMV8_ARCH}"
POSITION_INDEPENDENT_CODE TRUE
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} neon ${CMAKE_MODULE_PATH}/keep.syms.in"
)
add_library(hs_exec_shared_sve OBJECT ${hs_exec_SRCS} ${hs_exec_sve_SRCS})
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_sve>)
set_target_properties(hs_exec_shared_sve PROPERTIES
COMPILE_FLAGS "-march=${SVE_ARCH}"
POSITION_INDEPENDENT_CODE TRUE
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve ${CMAKE_MODULE_PATH}/keep.syms.in"
)
add_library(hs_exec_shared_sve2 OBJECT ${hs_exec_SRCS} ${hs_exec_sve2_SRCS})
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_sve2>)
set_target_properties(hs_exec_shared_sve2 PROPERTIES
COMPILE_FLAGS "-march=${SVE2_BITPERM_ARCH}"
POSITION_INDEPENDENT_CODE TRUE
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve2 ${CMAKE_MODULE_PATH}/keep.syms.in"
)
add_library(hs_exec_common_shared OBJECT
${hs_exec_common_SRCS}
src/dispatcher.c
)
set_target_properties(hs_exec_common_shared PROPERTIES
OUTPUT_NAME hs_exec_common
POSITION_INDEPENDENT_CODE TRUE)
endif() # SHARED
endif (ARCH_AARCH64)
endif (NOT FAT_RUNTIME)
if (NOT BUILD_SHARED_LIBS)
install(TARGETS hs_runtime DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
if (BUILD_SHARED_LIBS)
if (NOT FAT_RUNTIME)
add_library(hs_runtime_shared SHARED src/hs_version.c
src/hs_valid_platform.c $<TARGET_OBJECTS:hs_exec_shared>
hs_runtime.def)
else()
add_library(hs_runtime_shared SHARED src/hs_version.c
src/hs_valid_platform.c
$<TARGET_OBJECTS:hs_exec_common_shared>
${RUNTIME_SHLIBS}
hs_runtime.def)
endif()
set_target_properties(hs_runtime_shared PROPERTIES
VERSION ${LIB_VERSION}
SOVERSION ${LIB_SOVERSION}
OUTPUT_NAME hs_runtime
MACOSX_RPATH ON
LINKER_LANGUAGE C)
install(TARGETS hs_runtime_shared
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
if (BUILD_STATIC_LIBS)
add_dependencies(hs ragel_Parser)
endif ()
if (NOT BUILD_SHARED_LIBS)
install(TARGETS hs DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
if (BUILD_SHARED_LIBS)
set(hs_shared_SRCS
src/hs_version.c
src/hs_valid_platform.c
$<TARGET_OBJECTS:hs_compile_shared>)
if (NOT FAT_RUNTIME)
set(hs_shared_SRCS
${hs_shared_SRCS}
$<TARGET_OBJECTS:hs_exec_shared>)
else ()
set(hs_shared_SRCS
${hs_shared_SRCS}
$<TARGET_OBJECTS:hs_exec_common_shared>
${RUNTIME_SHLIBS})
endif ()
add_library(hs_shared SHARED ${hs_shared_SRCS} hs.def)
add_dependencies(hs_shared ragel_Parser)
set_target_properties(hs_shared PROPERTIES
OUTPUT_NAME hs
VERSION ${LIB_VERSION}
SOVERSION ${LIB_SOVERSION}
MACOSX_RPATH ON)
install(TARGETS hs_shared
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
# used by tools and other targets
if (NOT BUILD_STATIC_LIBS)
# use shared lib without having to change all the targets
add_library(hs ALIAS hs_shared)
endif ()
add_subdirectory(util)
add_subdirectory(unit)
if (EXISTS ${CMAKE_SOURCE_DIR}/tools/CMakeLists.txt)
add_subdirectory(tools)
endif()
if (EXISTS ${CMAKE_SOURCE_DIR}/chimera/CMakeLists.txt AND BUILD_CHIMERA)
add_subdirectory(chimera)
endif()
option(BUILD_EXAMPLES "Build Hyperscan example code (default TRUE)" TRUE)
if(BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
option(BUILD_BENCHMARKS "Build benchmarks (default TRUE)" TRUE)
if(BUILD_BENCHMARKS)
add_subdirectory(benchmarks)
endif()
add_subdirectory(doc/dev-reference)