Skip to content

Commit cb8a9ef

Browse files
author
Daniel Lemire
committed
This removes git as a dependency
1 parent e01f143 commit cb8a9ef

5 files changed

Lines changed: 87 additions & 81 deletions

File tree

benchmark/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ target_compile_definitions(parse_nonumberparsing PRIVATE SIMDJSON_SKIPNUMBERPARS
1414
add_executable(parse_nostringparsing parse.cpp)
1515
target_compile_definitions(parse_nostringparsing PRIVATE SIMDJSON_SKIPSTRINGPARSING)
1616

17-
if (SIMDJSON_GOOGLE_BENCHMARKS)
17+
if (TARGET benchmark::benchmark)
1818
link_libraries(benchmark::benchmark)
1919
add_executable(bench_parse_call bench_parse_call.cpp)
2020
add_executable(bench_dom_api bench_dom_api.cpp)
2121
endif()
2222

23-
if (SIMDJSON_COMPETITION)
23+
if (TARGET competition-all)
2424
add_executable(distinctuseridcompetition distinctuseridcompetition.cpp)
2525
target_link_libraries(distinctuseridcompetition competition-core)
2626
add_executable(minifiercompetition minifiercompetition.cpp)

benchmark/checkperf.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
# Clone the repository if it's not there
99
find_package(Git QUIET)
10-
if (Git_FOUND)
10+
if (Git_FOUND AND (GIT_VERSION_STRING VERSION_GREATER "2.1.4")) # We use "-C" which requires a recent git
1111
# sync_git_repository(myrepo ...) creates two targets:
1212
# myrepo - if the repo does not exist, creates and syncs it against the origin branch
1313
# update_myrepo - will update the repo against the origin branch (and create if needed)
@@ -92,4 +92,4 @@ if (Git_FOUND)
9292
set_property(TEST checkperf APPEND PROPERTY DEPENDS parse perfdiff ${SIMDJSON_USER_CMAKECACHE})
9393
set_property(TEST checkperf PROPERTY RUN_SERIAL TRUE)
9494

95-
endif (Git_FOUND)
95+
endif ()

dependencies/CMakeLists.txt

Lines changed: 76 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,79 @@
11
# Initializes a git submodule if it hasn't been initialized before
2-
# Does NOT attempt to update or otherwise modify git submodules that are already initialized.
3-
function(initialize_submodule DIRECTORY)
4-
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY}/.git)
5-
find_package(Git QUIET REQUIRED)
6-
message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY}/.git does not exist. Initializing ${DIRECTORY} submodule ...")
7-
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init ${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY}
8-
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
9-
RESULT_VARIABLE GIT_EXIT_CODE)
10-
if(NOT GIT_EXIT_CODE EQUAL "0")
11-
message(FATAL_ERROR "${GIT_EXECUTABLE} submodule update --init dependencies/${DIRECTORY} failed with exit code ${GIT_EXIT_CODE}, please checkout submodules")
2+
3+
4+
find_package(Git QUIET) # We want the library to build even if git is missing
5+
if (Git_FOUND)
6+
# Does NOT attempt to update or otherwise modify git submodules that are already initialized.
7+
function(initialize_submodule DIRECTORY)
8+
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY}/.git)
9+
message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY}/.git does not exist. Initializing ${DIRECTORY} submodule ...")
10+
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init ${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY}
11+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
12+
RESULT_VARIABLE GIT_EXIT_CODE)
13+
if(NOT GIT_EXIT_CODE EQUAL "0")
14+
message(FATAL_ERROR "${GIT_EXECUTABLE} submodule update --init dependencies/${DIRECTORY} failed with exit code ${GIT_EXIT_CODE}, please checkout submodules")
15+
endif()
1216
endif()
17+
endfunction(initialize_submodule)
18+
19+
if (SIMDJSON_GOOGLE_BENCHMARKS)
20+
option(BENCHMARK_ENABLE_TESTING OFF)
21+
set(BENCHMARK_ENABLE_TESTING OFF)
22+
option(BENCHMARK_ENABLE_INSTALL OFF)
23+
set(BENCHMARK_ENABLE_INSTALL OFF)
24+
initialize_submodule(benchmark)
25+
add_subdirectory(benchmark)
26+
endif()
27+
28+
if (SIMDJSON_COMPETITION)
29+
initialize_submodule(cJSON)
30+
add_library(competition-cJSON INTERFACE)
31+
target_include_directories(competition-cJSON INTERFACE cJSON)
32+
33+
initialize_submodule(fastjson)
34+
add_library(competition-fastjson INTERFACE)
35+
target_include_directories(competition-fastjson INTERFACE fastjson/src fastjson/include)
36+
37+
initialize_submodule(gason)
38+
add_library(competition-gason INTERFACE)
39+
target_include_directories(competition-gason INTERFACE gason/src)
40+
41+
initialize_submodule(jsmn)
42+
add_library(competition-jsmn INTERFACE)
43+
target_include_directories(competition-jsmn INTERFACE jsmn)
44+
45+
initialize_submodule(json)
46+
add_library(competition-json INTERFACE)
47+
target_include_directories(competition-json INTERFACE json/single_include)
48+
49+
initialize_submodule(json11)
50+
add_library(competition-json11 INTERFACE)
51+
target_include_directories(competition-json11 INTERFACE json11)
52+
53+
add_library(competition-jsoncppdist INTERFACE)
54+
target_include_directories(competition-jsoncppdist INTERFACE jsoncppdist)
55+
56+
initialize_submodule(rapidjson)
57+
add_library(competition-rapidjson INTERFACE)
58+
target_include_directories(competition-rapidjson INTERFACE rapidjson/include)
59+
60+
initialize_submodule(sajson)
61+
add_library(competition-sajson INTERFACE)
62+
target_include_directories(competition-sajson INTERFACE sajson/include)
63+
64+
initialize_submodule(ujson4c)
65+
add_library(competition-ujson4c ujson4c/src/ujdecode.c)
66+
target_include_directories(competition-ujson4c PUBLIC ujson4c/3rdparty ujson4c/src)
67+
68+
add_library(competition-core INTERFACE)
69+
target_link_libraries(competition-core INTERFACE competition-json competition-rapidjson competition-sajson competition-cJSON competition-jsmn)
70+
71+
add_library(competition-all INTERFACE)
72+
target_link_libraries(competition-all INTERFACE competition-core competition-jsoncppdist competition-json11 competition-fastjson competition-gason competition-ujson4c)
1373
endif()
14-
endfunction(initialize_submodule)
15-
16-
if (SIMDJSON_GOOGLE_BENCHMARKS)
17-
option(BENCHMARK_ENABLE_TESTING OFF)
18-
set(BENCHMARK_ENABLE_TESTING OFF)
19-
option(BENCHMARK_ENABLE_INSTALL OFF)
20-
set(BENCHMARK_ENABLE_INSTALL OFF)
21-
initialize_submodule(benchmark)
22-
add_subdirectory(benchmark)
23-
endif()
24-
25-
if (SIMDJSON_COMPETITION)
26-
initialize_submodule(cJSON)
27-
add_library(competition-cJSON INTERFACE)
28-
target_include_directories(competition-cJSON INTERFACE cJSON)
29-
30-
initialize_submodule(fastjson)
31-
add_library(competition-fastjson INTERFACE)
32-
target_include_directories(competition-fastjson INTERFACE fastjson/src fastjson/include)
33-
34-
initialize_submodule(gason)
35-
add_library(competition-gason INTERFACE)
36-
target_include_directories(competition-gason INTERFACE gason/src)
37-
38-
initialize_submodule(jsmn)
39-
add_library(competition-jsmn INTERFACE)
40-
target_include_directories(competition-jsmn INTERFACE jsmn)
41-
42-
initialize_submodule(json)
43-
add_library(competition-json INTERFACE)
44-
target_include_directories(competition-json INTERFACE json/single_include)
45-
46-
initialize_submodule(json11)
47-
add_library(competition-json11 INTERFACE)
48-
target_include_directories(competition-json11 INTERFACE json11)
49-
50-
add_library(competition-jsoncppdist INTERFACE)
51-
target_include_directories(competition-jsoncppdist INTERFACE jsoncppdist)
52-
53-
initialize_submodule(rapidjson)
54-
add_library(competition-rapidjson INTERFACE)
55-
target_include_directories(competition-rapidjson INTERFACE rapidjson/include)
56-
57-
initialize_submodule(sajson)
58-
add_library(competition-sajson INTERFACE)
59-
target_include_directories(competition-sajson INTERFACE sajson/include)
60-
61-
initialize_submodule(ujson4c)
62-
add_library(competition-ujson4c ujson4c/src/ujdecode.c)
63-
target_include_directories(competition-ujson4c PUBLIC ujson4c/3rdparty ujson4c/src)
64-
65-
add_library(competition-core INTERFACE)
66-
target_link_libraries(competition-core INTERFACE competition-json competition-rapidjson competition-sajson competition-cJSON competition-jsmn)
67-
68-
add_library(competition-all INTERFACE)
69-
target_link_libraries(competition-all INTERFACE competition-core competition-jsoncppdist competition-json11 competition-fastjson competition-gason competition-ujson4c)
70-
endif()
71-
72-
initialize_submodule(cxxopts)
73-
add_library(cxxopts INTERFACE)
74-
target_include_directories(cxxopts INTERFACE cxxopts/include)
74+
75+
initialize_submodule(cxxopts)
76+
add_library(cxxopts INTERFACE)
77+
target_include_directories(cxxopts INTERFACE cxxopts/include)
78+
79+
endif()

tests/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ find_program(BASH bash)
6464

6565

6666
# Script tests
67-
if (BASH AND (NOT MSVC)) # The scripts are not robust enough to run under Windows even if bash is available
67+
if (BASH AND (NOT MSVC) AND (TARGET json2json)) # The scripts are not robust enough to run under Windows even if bash is available
6868
#
6969
# json2json test
7070
#

tools/CMakeLists.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
link_libraries(simdjson simdjson-internal-flags simdjson-windows-headers cxxopts)
2-
3-
add_executable(json2json json2json.cpp)
4-
add_executable(jsonstats jsonstats.cpp)
5-
add_executable(minify minify.cpp)
1+
if(TARGET cxxopts) # we only build the tools if cxxopts is available
2+
link_libraries(simdjson simdjson-internal-flags simdjson-windows-headers cxxopts)
3+
add_executable(json2json json2json.cpp)
4+
add_executable(jsonstats jsonstats.cpp)
5+
add_executable(minify minify.cpp)
6+
endif()

0 commit comments

Comments
 (0)