Skip to content

Commit 3b1b1bf

Browse files
authored
Merge pull request simdjson#684 from simdjson/jkeiser/cmake
Simplify cmake, add more of our tests into it
2 parents 2bc12f9 + 218c867 commit 3b1b1bf

17 files changed

Lines changed: 196 additions & 258 deletions

.appveyor.yml

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,33 @@ version: '{build}'
22
branches:
33
only:
44
- master
5-
image:
6-
- Visual Studio 2017
75
clone_folder: c:\projects\simdjson
8-
9-
platform:
10-
- x64
11-
6+
platform: x64
7+
image:
8+
- Visual Studio 2019
9+
- Visual Studio 2017
10+
configuration: Release
1211
environment:
1312
matrix:
14-
- SIMDJSON_BUILD_STATIC: "OFF"
15-
THREADS: "ON"
16-
- SIMDJSON_BUILD_STATIC: "OFF"
17-
THREADS: "OFF"
18-
- SIMDJSON_BUILD_STATIC: "ON"
19-
THREADS: "ON"
20-
# - SIMDJSON_BUILD_STATIC: "ON"
21-
# THREADS: "OFF"
22-
13+
- SIMDJSON_BUILD_STATIC: ON
14+
SIMDJSON_ENABLE_THREADS: OFF
15+
- SIMDJSON_BUILD_STATIC: OFF
16+
SIMDJSON_ENABLE_THREADS: ON
17+
2318
build_script:
19+
- set
2420
- mkdir build
2521
- cd build
26-
- ps: cmake -DSIMDJSON_BUILD_STATIC="$env:SIMDJSON_BUILD_STATIC" -DSIMDJSON_ENABLE_THREADS="$env:THREADS" -DCMAKE_BUILD_TYPE=Release -DCMAKE_GENERATOR_PLATFORM=x64 -DSIMDJSON_GOOGLE_BENCHMARKS=OFF ..
27-
- cmake --build .
28-
- ctest --verbose --output-on-failure
22+
- cmake -DSIMDJSON_BUILD_STATIC=%SIMDJSON_BUILD_STATIC% -DSIMDJSON_ENABLE_THREADS=%SIMDJSON_ENABLE_THREADS% -DCMAKE_BUILD_TYPE=%Configuration% -DCMAKE_GENERATOR_PLATFORM=x64 -DSIMDJSON_GOOGLE_BENCHMARKS=OFF ..
23+
- cmake --build . --config %Configuration%
2924

25+
test_script:
26+
- ctest --verbose --output-on-failure -C %Configuration%
27+
28+
matrix:
29+
fast_finish: true
30+
exclude:
31+
# Don't build all variants on 2019, just running it to make sure readme_tests succeed
32+
- image: Visual Studio 2019
33+
SIMDJSON_BUILD_STATIC: ON
34+
SIMDJSON_ENABLE_THREADS: OFF

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ commands:
5959
- run: make all
6060
- run: make test
6161

62-
cmake_test: # this version builds, install, test and then verifyi from the installation
62+
cmake_test: # this version builds, install, test and then verify from the installation
6363
steps:
6464
- run: apt-get update -qq
6565
- run: apt-get install -y cmake

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,17 @@ objs
121121
/singleheader/demo
122122
/tests/basictests
123123
/tests/errortests
124+
/tests/integer_tests
124125
/tests/jsoncheck
126+
/tests/numberparsingcheck
125127
/tests/pointercheck
126-
/tests/integer_tests
127128
/tests/parse_many_test
128129
/tests/readme_examples
129130
/tests/readme_examples11
130131
/tests/readme_examples_noexceptions
131132
/tests/readme_examples_noexceptions11
132133
/tests/staticchecks
134+
/tests/stringparsingcheck
133135
/tools/json2json
134136
/tools/jsonstats
135137
/tools/minify

CMakeLists.txt

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
22

3+
message(STATUS "cmake version ${CMAKE_VERSION}")
34
if (NOT CMAKE_BUILD_TYPE)
45
message(STATUS "No build type selected, default to Release")
56
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
@@ -24,7 +25,6 @@ set(CMAKE_MACOSX_RPATH OFF)
2425
set(CMAKE_THREAD_PREFER_PTHREAD ON)
2526
set(THREADS_PREFER_PTHREAD_FLAG ON)
2627

27-
set(SIMDJSON_LIB_NAME simdjson)
2828
set(PROJECT_VERSION_MAJOR 0)
2929
set(PROJECT_VERSION_MINOR 3)
3030
set(PROJECT_VERSION_PATCH 1)
@@ -43,25 +43,28 @@ endif()
4343
option(SIMDJSON_SANITIZE "Sanitize addresses" OFF)
4444
option(SIMDJSON_GOOGLE_BENCHMARKS "compile the Google Benchmark benchmarks" OFF)
4545
option(SIMDJSON_ENABLE_THREADS "enable threaded operation" ON)
46-
option(SIMDJSON_EXCEPTIONS "Enable simdjson's exception-throwing interface" ON)
46+
option(SIMDJSON_NO_EXCEPTIONS "Disable simdjson's exception-throwing interface" OFF)
4747

4848
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake")
4949

50-
find_package(CTargets)
5150
find_package(Options)
5251

53-
# We used to have install(DIRECTORY include/${SIMDJSON_LIB_NAME} DESTINATION include)
54-
# alone.
55-
# However, this fails because we also need the root level simdjson.h file.
56-
install(DIRECTORY include/${SIMDJSON_LIB_NAME} DESTINATION include)
57-
install(FILES include/${SIMDJSON_LIB_NAME}.h DESTINATION include)
58-
set (TEST_DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/jsonchecker/")
59-
set (BENCHMARK_DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/jsonexamples/")
60-
add_definitions(-DSIMDJSON_TEST_DATA_DIR="${TEST_DATA_DIR}")
61-
add_definitions(-DSIMDJSON_BENCHMARK_DATA_DIR="${TEST_DATA_DIR}")
62-
enable_testing()
63-
include(include/CMakeLists.txt)
52+
#
53+
# Create the top level simdjson library (must be done at this level to use both src/ and include/
54+
# directories)
55+
#
56+
add_subdirectory(windows)
57+
add_subdirectory(include)
6458
add_subdirectory(src)
59+
60+
#
61+
# Compile tools / tests / benchmarks
62+
#
63+
add_definitions(-DSIMDJSON_TEST_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/jsonchecker/")
64+
add_definitions(-DSIMDJSON_BENCHMARK_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/jsonexamples/")
65+
66+
enable_testing()
67+
6568
add_subdirectory(tools)
6669
add_subdirectory(tests)
6770
add_subdirectory(benchmark)

benchmark/CMakeLists.txt

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,14 @@
1-
target_include_directories(${SIMDJSON_LIB_NAME}
2-
INTERFACE
3-
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/benchmark>
4-
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/benchmark/linux>
5-
)
6-
7-
add_cpp_benchmark(parse)
8-
add_cpp_benchmark(statisticalmodel)
9-
add_cpp_benchmark(parse_stream)
10-
add_cpp_benchmark(get_corpus_benchmark)
1+
include_directories( . linux )
2+
link_libraries(simdjson)
3+
add_executable(parse parse.cpp)
4+
add_executable(statisticalmodel statisticalmodel.cpp)
5+
add_executable(parse_stream parse_stream.cpp)
6+
add_executable(get_corpus_benchmark get_corpus_benchmark.cpp)
117
add_executable(perfdiff perfdiff.cpp)
128

139
# Google Benchmarks
1410
if (SIMDJSON_GOOGLE_BENCHMARKS)
15-
add_cpp_benchmark(bench_parse_call)
16-
target_link_libraries(bench_parse_call benchmark::benchmark)
17-
18-
add_cpp_benchmark(bench_dom_api)
19-
target_link_libraries(bench_dom_api benchmark::benchmark)
20-
target_compile_definitions(bench_dom_api PRIVATE JSON_TEST_PATH="${PROJECT_SOURCE_DIR}/jsonexamples/twitter.json")
11+
link_libraries(benchmark::benchmark)
12+
add_executable(bench_parse_call bench_parse_call.cpp)
13+
add_executable(bench_dom_api bench_dom_api.cpp)
2114
endif()

benchmark/bench_dom_api.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,16 @@ using namespace simdjson;
66
using namespace benchmark;
77
using namespace std;
88

9-
#ifndef JSON_TEST_PATH
10-
#define JSON_TEST_PATH "jsonexamples/twitter.json"
11-
#endif
12-
139
const padded_string EMPTY_ARRAY("[]", 2);
1410

11+
const char *TWITTER_JSON = SIMDJSON_BENCHMARK_DATA_DIR "";
12+
1513
#if SIMDJSON_EXCEPTIONS
1614

1715
static void twitter_count(State& state) {
1816
// Prints the number of results in twitter.json
1917
dom::parser parser;
20-
dom::element doc = parser.load(JSON_TEST_PATH);
18+
dom::element doc = parser.load(TWITTER_JSON);
2119
for (auto _ : state) {
2220
uint64_t result_count = doc["search_metadata"]["count"];
2321
if (result_count != 100) { return; }
@@ -29,7 +27,7 @@ SIMDJSON_PUSH_DISABLE_WARNINGS
2927
SIMDJSON_DISABLE_DEPRECATED_WARNING
3028
static void iterator_twitter_count(State& state) {
3129
// Prints the number of results in twitter.json
32-
padded_string json = padded_string::load(JSON_TEST_PATH);
30+
padded_string json = padded_string::load(TWITTER_JSON);
3331
ParsedJson pj = build_parsed_json(json);
3432
for (auto _ : state) {
3533
ParsedJson::Iterator iter(pj);
@@ -48,7 +46,7 @@ SIMDJSON_POP_DISABLE_WARNINGS
4846
static void twitter_default_profile(State& state) {
4947
// Count unique users with a default profile.
5048
dom::parser parser;
51-
dom::element doc = parser.load(JSON_TEST_PATH);
49+
dom::element doc = parser.load(TWITTER_JSON);
5250
for (auto _ : state) {
5351
set<string_view> default_users;
5452
for (dom::object tweet : doc["statuses"].get<dom::array>()) {
@@ -65,7 +63,7 @@ BENCHMARK(twitter_default_profile);
6563
static void twitter_image_sizes(State& state) {
6664
// Count unique image sizes
6765
dom::parser parser;
68-
dom::element doc = parser.load(JSON_TEST_PATH);
66+
dom::element doc = parser.load(TWITTER_JSON);
6967
for (auto _ : state) {
7068
set<tuple<uint64_t, uint64_t>> image_sizes;
7169
for (dom::object tweet : doc["statuses"].get<dom::array>()) {
@@ -88,7 +86,7 @@ BENCHMARK(twitter_image_sizes);
8886
static void error_code_twitter_count(State& state) noexcept {
8987
// Prints the number of results in twitter.json
9088
dom::parser parser;
91-
dom::element doc = parser.load(JSON_TEST_PATH);
89+
dom::element doc = parser.load(TWITTER_JSON);
9290
for (auto _ : state) {
9391
auto [value, error] = doc["search_metadata"]["count"].get<uint64_t>();
9492
if (error) { return; }
@@ -100,7 +98,7 @@ BENCHMARK(error_code_twitter_count);
10098
static void error_code_twitter_default_profile(State& state) noexcept {
10199
// Count unique users with a default profile.
102100
dom::parser parser;
103-
dom::element doc = parser.load(JSON_TEST_PATH);
101+
dom::element doc = parser.load(TWITTER_JSON);
104102
for (auto _ : state) {
105103
set<string_view> default_users;
106104

@@ -127,7 +125,7 @@ SIMDJSON_PUSH_DISABLE_WARNINGS
127125
SIMDJSON_DISABLE_DEPRECATED_WARNING
128126
static void iterator_twitter_default_profile(State& state) {
129127
// Count unique users with a default profile.
130-
padded_string json = padded_string::load(JSON_TEST_PATH);
128+
padded_string json = padded_string::load(TWITTER_JSON);
131129
ParsedJson pj = build_parsed_json(json);
132130
for (auto _ : state) {
133131
set<string_view> default_users;
@@ -167,7 +165,7 @@ BENCHMARK(iterator_twitter_default_profile);
167165
static void error_code_twitter_image_sizes(State& state) noexcept {
168166
// Count unique image sizes
169167
dom::parser parser;
170-
dom::element doc = parser.load(JSON_TEST_PATH);
168+
dom::element doc = parser.load(TWITTER_JSON);
171169
for (auto _ : state) {
172170
set<tuple<uint64_t, uint64_t>> image_sizes;
173171
auto [statuses, error] = doc["statuses"].get<dom::array>();
@@ -196,7 +194,7 @@ SIMDJSON_PUSH_DISABLE_WARNINGS
196194
SIMDJSON_DISABLE_DEPRECATED_WARNING
197195
static void iterator_twitter_image_sizes(State& state) {
198196
// Count unique image sizes
199-
padded_string json = padded_string::load(JSON_TEST_PATH);
197+
padded_string json = padded_string::load(TWITTER_JSON);
200198
ParsedJson pj = build_parsed_json(json);
201199
for (auto _ : state) {
202200
set<tuple<uint64_t, uint64_t>> image_sizes;
@@ -254,7 +252,7 @@ BENCHMARK(iterator_twitter_image_sizes);
254252

255253
static void print_json(State& state) noexcept {
256254
// Prints the number of results in twitter.json
257-
padded_string json = get_corpus(JSON_TEST_PATH);
255+
padded_string json = get_corpus(TWITTER_JSON);
258256
dom::parser parser;
259257
if (int error = json_parse(json, parser); error != SUCCESS) { cerr << error_message(error) << endl; return; }
260258
for (auto _ : state) {

fuzz/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ macro(implement_fuzzer sourcefile)
4444
if (SIMDJSON_FUZZ_LINKMAIN)
4545
target_sources(${name} PRIVATE main.cpp)
4646
endif ()
47-
target_link_libraries(${name} PRIVATE ${SIMDJSON_LIB_NAME})
47+
target_link_libraries(${name} PRIVATE simdjson)
4848
if (SIMDJSON_FUZZ_LDFLAGS)
4949
target_link_libraries(${name} PRIVATE ${SIMDJSON_FUZZ_LDFLAGS})
5050
endif ()

include/CMakeLists.txt

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,2 @@
1-
set(SIMDJSON_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
2-
set(SIMDJSON_INCLUDE
3-
${SIMDJSON_INCLUDE_DIR}/simdjson.h
4-
${SIMDJSON_INCLUDE_DIR}/simdjson/common_defs.h
5-
${SIMDJSON_INCLUDE_DIR}/simdjson/compiler_check.h
6-
${SIMDJSON_INCLUDE_DIR}/simdjson/document_stream.h
7-
${SIMDJSON_INCLUDE_DIR}/simdjson/document.h
8-
${SIMDJSON_INCLUDE_DIR}/simdjson/error.h
9-
${SIMDJSON_INCLUDE_DIR}/simdjson/implementation.h
10-
${SIMDJSON_INCLUDE_DIR}/simdjson/inline/document_stream.h
11-
${SIMDJSON_INCLUDE_DIR}/simdjson/inline/document.h
12-
${SIMDJSON_INCLUDE_DIR}/simdjson/inline/error.h
13-
${SIMDJSON_INCLUDE_DIR}/simdjson/inline/padded_string.h
14-
${SIMDJSON_INCLUDE_DIR}/simdjson/inline/parsedjson_iterator.h
15-
${SIMDJSON_INCLUDE_DIR}/simdjson/internal/jsonformatutils.h
16-
${SIMDJSON_INCLUDE_DIR}/simdjson/jsonioutil.h
17-
${SIMDJSON_INCLUDE_DIR}/simdjson/jsonparser.h
18-
${SIMDJSON_INCLUDE_DIR}/simdjson/nonstd/string_view.hpp
19-
${SIMDJSON_INCLUDE_DIR}/simdjson/padded_string.h
20-
${SIMDJSON_INCLUDE_DIR}/simdjson/parsedjson.h
21-
${SIMDJSON_INCLUDE_DIR}/simdjson/parsedjson_iterator.h
22-
${SIMDJSON_INCLUDE_DIR}/simdjson/portability.h
23-
${SIMDJSON_INCLUDE_DIR}/simdjson/simdjson_version.h
24-
${SIMDJSON_INCLUDE_DIR}/simdjson/simdjson.h
25-
)
1+
install(DIRECTORY simdjson DESTINATION include FILES_MATCHING PATTERN *.h)
2+
install(FILES simdjson.h DESTINATION include)

0 commit comments

Comments
 (0)