1cmake_minimum_required (VERSION 3.5) 2project (utf8_range C CXX) 3 4# option() honor variables 5if (POLICY CMP0077) 6 cmake_policy(SET CMP0077 NEW) 7endif (POLICY CMP0077) 8 9option (utf8_range_ENABLE_TESTS "Build test suite" ON) 10option (utf8_range_ENABLE_INSTALL "Configure installation" ON) 11 12## 13# Create the lightweight C library 14add_library (utf8_range STATIC 15 naive.c 16 range2-neon.c 17 range2-sse.c 18) 19 20## 21# A heavier-weight C++ wrapper that supports Abseil. 22add_library (utf8_validity STATIC utf8_validity.cc) 23 24# Load Abseil dependency. 25if (NOT TARGET absl::strings) 26 if (NOT ABSL_ROOT_DIR) 27 find_package(absl REQUIRED CONFIG) 28 else () 29 set(ABSL_ENABLE_INSTALL ${utf8_range_ENABLE_INSTALL}) 30 set(ABSL_PROPAGATE_CXX_STD ON) 31 add_subdirectory(${ABSL_ROOT_DIR} third_party/abseil-cpp) 32 endif () 33endif () 34target_link_libraries(utf8_validity PUBLIC absl::strings) 35 36# Configure tests. 37if (utf8_range_ENABLE_TESTS) 38 enable_testing() 39 40 find_package(GTest REQUIRED) 41 42 add_executable(tests utf8_validity_test.cc) 43 target_link_libraries(tests utf8_validity GTest::gmock_main) 44 45 add_test(NAME utf8_validity_test COMMAND tests) 46 47 add_custom_target(check 48 COMMAND tests 49 DEPENDS tests 50 ) 51endif () 52 53# Configure installation. 54if (utf8_range_ENABLE_INSTALL) 55 include(CMakePackageConfigHelpers) 56 include(GNUInstallDirs) 57 58 install(EXPORT ${PROJECT_NAME}-targets 59 DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" 60 NAMESPACE utf8_range:: 61 ) 62 install(TARGETS utf8_validity utf8_range EXPORT ${PROJECT_NAME}-targets 63 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 64 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 65 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 66 ) 67 68 configure_package_config_file( 69 cmake/${PROJECT_NAME}-config.cmake.in 70 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" 71 INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" 72 ) 73 install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" 74 DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" 75 ) 76 77 # Install public headers explicitly. 78 install(FILES utf8_range.h utf8_validity.h 79 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} 80 ) 81endif () 82