cmake_minimum_required(VERSION 3.13) # CMP0025: Compiler id for Apple Clang is now AppleClang. # https://cmake.org/cmake/help/v3.17/policy/CMP0025.html cmake_policy(SET CMP0025 NEW) project(simdjson DESCRIPTION "Parsing gigabytes of JSON per second" LANGUAGES CXX C ) set(PROJECT_VERSION_MAJOR 0) set(PROJECT_VERSION_MINOR 9) set(PROJECT_VERSION_PATCH 1) set(SIMDJSON_SEMANTIC_VERSION "0.9.1" CACHE STRING "simdjson semantic version") set(SIMDJSON_LIB_VERSION "8.0.0" CACHE STRING "simdjson library version") set(SIMDJSON_LIB_SOVERSION "8" CACHE STRING "simdjson library soversion") set(SIMDJSON_GITHUB_REPOSITORY https://github.com/simdjson/simdjson) include(GNUInstallDirs) include(cmake/simdjson-flags.cmake) include(cmake/simdjson-user-cmakecache.cmake) if(SIMDJSON_JUST_LIBRARY) message( STATUS "Building just the library, omitting all tests, tools and benchmarks." ) else(SIMDJSON_JUST_LIBRARY) # Setup tests enable_testing() add_subdirectory(jsonchecker) add_subdirectory(jsonexamples) add_library(test-data INTERFACE) target_link_libraries(test-data INTERFACE jsonchecker-data jsonchecker-minefield-data jsonexamples-data) endif(SIMDJSON_JUST_LIBRARY) # Create the top level simdjson library (must be done at this level to use both src/ and include/ # directories) and tools # add_subdirectory(include) add_subdirectory(src) add_subdirectory(windows) if(NOT(SIMDJSON_JUST_LIBRARY)) add_subdirectory(dependencies) ## This needs to be before tools because of cxxopts add_subdirectory(tools) ## This needs to be before tests because of cxxopts add_subdirectory(singleheader) endif() install(FILES singleheader/simdjson.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) option(SIMDJSON_ENABLE_THREADS "Link with thread support" ON) include(CMakePackageConfigHelpers) configure_package_config_file("${PROJECT_SOURCE_DIR}/cmake/simdjson-config.cmake.in" "${PROJECT_BINARY_DIR}/simdjson-config.cmake" INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/simdjson" NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO) write_basic_package_version_file( "${PROJECT_BINARY_DIR}/simdjson-config-version.cmake" VERSION ${SIMDJSON_SEMANTIC_VERSION} COMPATIBILITY SameMinorVersion) install(FILES "${PROJECT_BINARY_DIR}/simdjson-config.cmake" "${PROJECT_BINARY_DIR}/simdjson-config-version.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/simdjson") # # Compile tools / tests / benchmarks # if(NOT(SIMDJSON_JUST_LIBRARY)) add_subdirectory(tests) add_subdirectory(examples) add_subdirectory(benchmark) add_subdirectory(fuzz) endif() # # Source files should be just ASCII # find_program(FIND find) find_program(FILE file) find_program(GREP grep) if((FIND) AND (FILE) AND (GREP)) add_test( NAME "just_ascii" COMMAND sh -c "${FIND} include src windows tools singleheader tests examples benchmark -path benchmark/checkperf-reference -prune -name '*.h' -o -name '*.cpp' -type f -exec ${FILE} '{}' \; |${GREP} -v ASCII || exit 0 && exit 1" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) endif() # # CPack # set(CPACK_PACKAGE_VENDOR "Daniel Lemire") set(CPACK_PACKAGE_CONTACT "lemire@gmail.com") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Parsing gigabytes of JSON per second") set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") set(CPACK_RPM_PACKAGE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") set(CPACK_SOURCE_GENERATOR "TGZ;ZIP") include(CPack)