2019-05-10 09:17:13 +08:00
|
|
|
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
|
2020-04-08 03:40:25 +08:00
|
|
|
include(GNUInstallDirs)
|
2020-01-20 23:18:58 +08:00
|
|
|
|
2020-04-07 02:58:26 +08:00
|
|
|
message(STATUS "cmake version ${CMAKE_VERSION}")
|
2020-01-20 23:18:58 +08:00
|
|
|
if (NOT CMAKE_BUILD_TYPE)
|
2020-02-15 07:20:17 +08:00
|
|
|
message(STATUS "No build type selected, default to Release")
|
|
|
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
|
2019-05-10 09:17:13 +08:00
|
|
|
endif()
|
|
|
|
|
2020-04-01 05:47:25 +08:00
|
|
|
project(simdjson
|
|
|
|
DESCRIPTION "Parsing gigabytes of JSON per second"
|
2020-04-07 08:18:37 +08:00
|
|
|
LANGUAGES CXX C
|
2020-01-20 23:18:58 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
# LTO seems to create all sorts of fun problems. Let us
|
|
|
|
# disable temporarily.
|
|
|
|
#include(CheckIPOSupported)
|
|
|
|
#check_ipo_supported(RESULT ltoresult)
|
|
|
|
#if(ltoresult)
|
2020-02-15 07:20:17 +08:00
|
|
|
# set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
2020-01-20 23:18:58 +08:00
|
|
|
#endif()
|
|
|
|
|
2018-12-31 10:00:19 +08:00
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
2018-12-29 02:04:38 +08:00
|
|
|
set(CMAKE_MACOSX_RPATH OFF)
|
2019-11-22 00:22:06 +08:00
|
|
|
set(CMAKE_THREAD_PREFER_PTHREAD ON)
|
|
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
|
|
|
2019-03-05 04:40:52 +08:00
|
|
|
set(PROJECT_VERSION_MAJOR 0)
|
2020-04-01 05:47:25 +08:00
|
|
|
set(PROJECT_VERSION_MINOR 3)
|
2020-04-03 07:24:43 +08:00
|
|
|
set(PROJECT_VERSION_PATCH 1)
|
|
|
|
set(SIMDJSON_LIB_VERSION "0.3.1" CACHE STRING "simdjson library version")
|
2020-04-01 21:53:45 +08:00
|
|
|
set(SIMDJSON_LIB_SOVERSION "1" CACHE STRING "simdjson library soversion")
|
2018-12-29 02:04:38 +08:00
|
|
|
|
2020-04-09 09:13:01 +08:00
|
|
|
if(MSVC)
|
2020-02-15 07:20:17 +08:00
|
|
|
option(SIMDJSON_BUILD_STATIC "Build a static library" ON) # turning it on disables the production of a dynamic library
|
2020-04-09 09:13:01 +08:00
|
|
|
option(SIMDJSON_COMPETITION "Compile competitive benchmarks" OFF)
|
|
|
|
else()
|
|
|
|
option(SIMDJSON_BUILD_STATIC "Build a static library" OFF) # turning it on disables the production of a dynamic library
|
|
|
|
option(SIMDJSON_COMPETITION "Compile competitive benchmarks" ON)
|
2018-12-31 10:00:19 +08:00
|
|
|
endif()
|
2020-03-14 01:38:23 +08:00
|
|
|
option(SIMDJSON_GOOGLE_BENCHMARKS "compile the Google Benchmark benchmarks" OFF)
|
2018-12-29 02:04:38 +08:00
|
|
|
|
|
|
|
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake")
|
|
|
|
|
2020-04-06 07:43:37 +08:00
|
|
|
#
|
|
|
|
# Create the top level simdjson library (must be done at this level to use both src/ and include/
|
|
|
|
# directories)
|
|
|
|
#
|
2020-04-07 02:58:26 +08:00
|
|
|
add_subdirectory(windows)
|
2020-04-06 07:43:37 +08:00
|
|
|
add_subdirectory(include)
|
|
|
|
add_subdirectory(src)
|
|
|
|
|
|
|
|
#
|
|
|
|
# Compile tools / tests / benchmarks
|
|
|
|
#
|
2020-04-08 03:40:25 +08:00
|
|
|
enable_testing()
|
|
|
|
|
2020-04-07 08:18:37 +08:00
|
|
|
add_library(test-data INTERFACE)
|
|
|
|
target_compile_definitions(test-data INTERFACE SIMDJSON_TEST_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/jsonchecker/")
|
|
|
|
target_compile_definitions(test-data INTERFACE SIMDJSON_BENCHMARK_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/jsonexamples/")
|
2020-04-06 23:24:54 +08:00
|
|
|
|
2020-04-07 07:04:37 +08:00
|
|
|
add_subdirectory(dependencies)
|
2018-12-29 02:04:38 +08:00
|
|
|
add_subdirectory(tools)
|
|
|
|
add_subdirectory(tests)
|
2020-04-07 08:35:11 +08:00
|
|
|
add_subdirectory(scripts)
|
2018-12-29 02:04:38 +08:00
|
|
|
add_subdirectory(benchmark)
|
2019-02-26 03:33:01 +08:00
|
|
|
|
2019-10-29 02:46:57 +08:00
|
|
|
# for fuzzing, read the comments in the fuzz/CMakeLists.txt file
|
2019-11-08 23:32:43 +08:00
|
|
|
option(ENABLE_FUZZING "enable building the fuzzers" ON)
|
2019-10-29 02:46:57 +08:00
|
|
|
if(ENABLE_FUZZING)
|
2020-02-15 07:20:17 +08:00
|
|
|
add_subdirectory(fuzz)
|
2019-10-29 02:46:57 +08:00
|
|
|
endif()
|
|
|
|
|
2020-04-08 03:40:25 +08:00
|
|
|
if(${CMAKE_C_COMPILER_ID} MATCHES "Intel") # icc / icpc
|
|
|
|
# prevent shared libraries from depending on Intel provided libraries
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-intel")
|
|
|
|
endif()
|
|
|
|
|
2019-02-26 03:33:01 +08:00
|
|
|
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)
|
2019-10-29 02:46:57 +08:00
|
|
|
|
|
|
|
|