blob: 474f477814bad2175d7b6239a8c0401cbbb691d5 [file] [log] [blame] [edit]
cmake_minimum_required(VERSION 3.15)
project(simdutf
DESCRIPTION "Fast Unicode validation, transcoding and processing"
LANGUAGES CXX
VERSION 3.2.7
)
include (TestBigEndian)
TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
if(IS_BIG_ENDIAN)
message(STATUS "Big-endian system detected.")
endif()
include(GNUInstallDirs)
# The following requires CMake 3.21.
# if(PROJECT_IS_TOP_LEVEL)
# message(STATUS "Building simdutf as a top-level project.")
# include(CTest)
#else()
# message(STATUS "Building simdutf as a subproject.")
#endif(PROJECT_IS_TOP_LEVEL)
include(CTest)
include(cmake/simdutf-flags.cmake)
set(SIMDUTF_LIB_VERSION "3.2.14" CACHE STRING "simdutf library version")
set(SIMDUTF_LIB_SOVERSION "4" CACHE STRING "simdutf library soversion")
option(SIMDUTF_TESTS "Whether the tests are included as part of the CMake Build." ON)
option(SIMDUTF_BENCHMARKS "Whether the benchmarks are included as part of the CMake Build." ON)
option(SIMDUTF_TOOLS "Whether the tools are included as part of the CMake build." ON)
option(SIMDUTF_ICONV "Whether to use iconv as part of the CMake build if available." ON)
set(SIMDUTF_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
add_subdirectory(src)
add_subdirectory(singleheader)
if (SIMDUTF_TESTS)
message(STATUS "The tests are enabled.")
add_subdirectory(tests)
else(SIMDUTF_TESTS)
message(STATUS "The tests are disabled.")
endif(SIMDUTF_TESTS)
if (SIMDUTF_TOOLS)
if(CMAKE_CXX_COMPILER_ID MATCHES GNU AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
message(STATUS "The benchmark tool requires GCC 8.0 or better.")
else()
add_subdirectory(tools)
endif()
endif()
if (SIMDUTF_BENCHMARKS)
if(NOT SIMDUTF_TESTS)
message(STATUS "You have enabled the benchmarks, but not the tests. We don't allow running the benchmarks without the tests.")
elif((CMAKE_CXX_COMPILER_ID MATCHES GNU) AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0"))
message(STATUS "The benchmark tool requires GCC 8.0 or better.")
else()
message(STATUS "The benchmarks can be disabled by setting SIMDUTF_BENCHMARKS, e.g., -D SIMDUTF_BENCHMARKS=OFF.")
add_subdirectory(benchmarks)
endif()
else()
message(STATUS "The benchmarks can be enabled by setting SIMDUTF_BENCHMARKS, e.g., -D SIMDUTF_BENCHMARKS=ON.")
endif()
message(STATUS "Compiling using the C++ standard:" ${CMAKE_CXX_STANDARD})
# ---- Install rules ----
add_library(simdutf::simdutf ALIAS simdutf)
set_target_properties(
simdutf PROPERTIES
VERSION "${SIMDUTF_LIB_VERSION}"
SOVERSION "${SIMDUTF_LIB_SOVERSION}"
WINDOWS_EXPORT_ALL_SYMBOLS YES
)
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)
install(
FILES include/simdutf.h
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT simdutf_Development
)
install(
DIRECTORY include/simdutf
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT simdutf_Development
)
install(
TARGETS simdutf
EXPORT simdutfTargets
RUNTIME COMPONENT simdutf_Runtime
LIBRARY COMPONENT simdutf_Runtime
NAMELINK_COMPONENT simdutf_Development
ARCHIVE COMPONENT simdutf_Development
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
configure_file(cmake/simdutf-config.cmake.in simdutf-config.cmake @ONLY)
write_basic_package_version_file(
simdutf-config-version.cmake
COMPATIBILITY SameMinorVersion
)
set(
SIMDUTF_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/simdutf"
CACHE STRING "CMake package config location relative to the install prefix"
)
mark_as_advanced(SIMDUTF_INSTALL_CMAKEDIR)
install(
FILES
"${PROJECT_BINARY_DIR}/simdutf-config.cmake"
"${PROJECT_BINARY_DIR}/simdutf-config-version.cmake"
DESTINATION "${SIMDUTF_INSTALL_CMAKEDIR}"
COMPONENT simdutf_Development
)
install(
EXPORT simdutfTargets
NAMESPACE simdutf::
DESTINATION "${SIMDUTF_INSTALL_CMAKEDIR}"
COMPONENT example_Development
)
#
# CPack
#
if(is_top_project)
set(CPACK_PACKAGE_VENDOR "Daniel Lemire")
set(CPACK_PACKAGE_CONTACT "lemire@gmail.com")
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE-MIT")
set(CPACK_RPM_PACKAGE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE-MIT")
set(CPACK_RESOURCE_FILE_README "${PROJECT_SOURCE_DIR}/README.md")
set(CPACK_SOURCE_GENERATOR "TGZ;ZIP")
include(CPack)
endif()
# ----