cmake_minimum_required(VERSION 3.15) project(reflex CXX) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") set(CMAKE_CXX_STANDARD 11) # The following setups the simd_* variables include(SIMDTestAndSetup) # # Defining source variables # set(lib_sources lib/convert.cpp lib/debug.cpp lib/error.cpp lib/input.cpp lib/matcher.cpp lib/matcher_avx2.cpp lib/matcher_avx512bw.cpp lib/pattern.cpp lib/posix.cpp lib/simd.cpp lib/simd_avx2.cpp lib/simd_avx512bw.cpp lib/unicode.cpp lib/utf8.cpp unicode/block_scripts.cpp unicode/language_scripts.cpp unicode/letter_scripts.cpp unicode/letter_case.cpp unicode/composer.cpp ) set(bin_sources src/reflex.cpp ) list(TRANSFORM lib_sources PREPEND ${PROJECT_SOURCE_DIR}/) list(TRANSFORM bin_sources PREPEND ${PROJECT_SOURCE_DIR}/) # # Defining targets section # add_library(ReflexLib SHARED "") target_sources(ReflexLib PRIVATE ${lib_sources}) target_include_directories(ReflexLib PUBLIC $ $ ) target_compile_definitions(ReflexLib PRIVATE ${simd_definitions}) target_compile_options(ReflexLib PRIVATE ${simd_flags}) add_library(ReflexLibStatic STATIC "") target_sources(ReflexLibStatic PRIVATE ${lib_sources}) target_include_directories(ReflexLibStatic PUBLIC $ $ ) target_compile_definitions(ReflexLibStatic PRIVATE ${simd_definitions}) target_compile_options(ReflexLibStatic PRIVATE ${simd_flags}) add_executable(Reflex "") target_sources(Reflex PRIVATE ${bin_sources}) target_link_libraries(Reflex PRIVATE ReflexLibStatic) target_compile_definitions(Reflex PRIVATE ${simd_definitions}) target_compile_options(Reflex PRIVATE ${simd_flags}) # Don't user target name as filename instead use lowercase name for backwards compatibility set_target_properties(ReflexLibStatic PROPERTIES OUTPUT_NAME reflex_static_lib) set_target_properties(ReflexLib PROPERTIES OUTPUT_NAME reflex_shared_lib) set_target_properties(Reflex PROPERTIES OUTPUT_NAME reflex) # # Exporting targets section # include(GNUInstallDirs) install(TARGETS Reflex ReflexLib ReflexLibStatic EXPORT ReflexTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/reflex DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h" ) install(EXPORT ReflexTargets NAMESPACE Reflex:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/reflex ) # # Packaging section (find_package support) # include(CMakePackageConfigHelpers) configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/ReflexConfig.cmake" INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/reflex ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ReflexConfig.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/reflex )