Skip to content

Commit 2da1f67

Browse files
authored
Merge pull request #23 from sunxfancy/dev
v0.2 version
2 parents d1bf0a9 + 4db8dc7 commit 2da1f67

39 files changed

Lines changed: 4478 additions & 1486 deletions

.githooks/pre-commit

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@
33
SCRIPTPATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
44
cd $SCRIPTPATH/../
55

6-
wsl -- bash -c "make && make test && make doc-build && cp build-linux/zeroerr.hpp ./zeroerr.hpp"
6+
set -e
7+
8+
CMD_TO_RUN="make && make test && make doc-build && cp build/linux/zeroerr.hpp ./zeroerr.hpp"
9+
if [ -f "/etc/wsl.conf" ]; then
10+
bash -c "$CMD_TO_RUN"
11+
else
12+
wsl -- bash -c "$CMD_TO_RUN"
13+
fi
714

815
git add zeroerr.hpp

.vscode/c_cpp_properties.json

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
{
44
"name": "Win32",
55
"includePath": [
6-
"${workspaceFolder}/**"
6+
"${workspaceFolder}/**",
7+
"${workspaceFolder}/include"
78
],
89
"defines": [
910
"_DEBUG",
@@ -16,6 +17,22 @@
1617
"cppStandard": "c++17",
1718
"intelliSenseMode": "windows-msvc-x64",
1819
"configurationProvider": "ms-vscode.cmake-tools"
20+
},
21+
{
22+
"name": "Linux",
23+
"includePath": [
24+
"${workspaceFolder}/**"
25+
],
26+
"defines": [
27+
"_DEBUG",
28+
"UNICODE",
29+
"_UNICODE"
30+
],
31+
"compilerPath": "/usr/bin/clang",
32+
"cStandard": "c17",
33+
"cppStandard": "c++17",
34+
"intelliSenseMode": "clang-x64",
35+
"configurationProvider": "ms-vscode.cmake-tools"
1936
}
2037
],
2138
"version": 4

.vscode/launch.json

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,34 @@
77
{
88
"type": "lldb",
99
"request": "launch",
10-
"name": "Debug",
11-
"program": "${workspaceFolder}/build-windows/Debug/unittest.exe",
10+
"name": "Windows",
11+
"program": "${workspaceFolder}/build/windows/test/Debug/unittest.exe",
1212
"args": [],
1313
"cwd": "${workspaceFolder}"
14+
},
15+
{
16+
"type": "lldb",
17+
"request": "launch",
18+
"name": "Linux",
19+
"program": "${workspaceFolder}/build/linux/test/unittest",
20+
"args": [],
21+
"cwd": "${workspaceFolder}"
22+
},
23+
{
24+
"type": "lldb",
25+
"request": "launch",
26+
"name": "Linux-fuzz",
27+
"program": "${workspaceFolder}/build/linux/test/unittest",
28+
"args": ["--testcase=fuzz_serialize.*"],
29+
"cwd": "${workspaceFolder}"
30+
},
31+
{
32+
"type": "lldb",
33+
"request": "launch",
34+
"name": "Linux-fuzztest",
35+
"program": "${workspaceFolder}/build/linux/test/unittest",
36+
"args": ["-f", "--testcase=fuzz_test.*"],
37+
"cwd": "${workspaceFolder}"
1438
}
1539
]
1640
}

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,5 +99,5 @@
9999
"valarray": "cpp",
100100
"regex": "cpp"
101101
},
102-
"cmake.buildDirectory": "${workspaceFolder}/build-windows"
102+
"cmake.buildDirectory": "${workspaceFolder}/build/windows"
103103
}

CMakeLists.txt

Lines changed: 55 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@ endif()
3131

3232
option(DISABLE_CUDA_BUILD "Disable CUDA build(ON, OFF)" ON)
3333

34-
option(USE_MOLD "Use mold for linking" OFF)
34+
option(USE_MOLD "Use mold for linking" ON)
3535

3636
if(USE_MOLD)
3737
find_program(HAS_MOLD "mold")
3838
message(STATUS "Find Mold: ${HAS_MOLD}")
39+
3940
if(HAS_MOLD)
4041
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
4142
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=mold")
@@ -50,179 +51,134 @@ if(USE_MOLD)
5051
endif()
5152
endif()
5253

53-
option(BUILD_EXAMPLES "Build examples(ON, OFF)" OFF)
54-
option(BUILD_DOC "Build documentation" OFF)
55-
54+
option(ENABLE_FUZZING "Enable fuzzing(ON, OFF)" OFF)
5655

56+
if(ENABLE_FUZZING)
57+
message(STATUS "Enable fuzzing")
58+
if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
59+
message(FATAL_ERROR "Fuzzing is only supported by Clang")
60+
endif()
61+
endif()
5762

58-
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>" )
59-
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>" )
63+
option(BUILD_EXAMPLES "Build examples(ON, OFF)" OFF)
64+
option(BUILD_DOC "Build documentation" OFF)
65+
option(BUILD_TEST "Build unittest" OFF)
6066

67+
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
68+
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
69+
add_compile_options("$<$<CXX_COMPILER_ID:Clang>:-fstandalone-debug>")
6170
# add_compile_options("$<$<CXX_COMPILER_ID:GNU>:-ftime-report>")
6271

63-
set(header_dirs ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/extension ${CMAKE_CURRENT_SOURCE_DIR}/third_party ${CMAKE_CURRENT_BINARY_DIR})
72+
set(header_dirs
73+
${CMAKE_CURRENT_SOURCE_DIR}/include
74+
${CMAKE_CURRENT_SOURCE_DIR}/extension
75+
${CMAKE_CURRENT_SOURCE_DIR}/third_party
76+
${CMAKE_CURRENT_BINARY_DIR})
6477
include_directories(${header_dirs})
6578

66-
file(GLOB_RECURSE include_files ${CMAKE_CURRENT_SOURCE_DIR}/include/**/*.h)
67-
file(GLOB_RECURSE source_files ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
79+
add_subdirectory(include)
80+
add_subdirectory(src)
6881

69-
add_library(zeroerr STATIC ${source_files})
70-
71-
target_compile_options(zeroerr PRIVATE
72-
$<$<CXX_COMPILER_ID:MSVC>:/W4>
73-
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic>
74-
)
7582
# if(ENABLE_SAN)
7683
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize=null -fno-sanitize=alignment")
7784
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-recover=address -fsanitize=address")
7885
# endif()
7986

8087
# Determine if this project is built as a subproject (using add_subdirectory) or if it is the main project.
8188
set(MAIN_PROJECT OFF)
89+
8290
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
8391
set(MAIN_PROJECT ON)
8492
endif()
8593

8694
if(MAIN_PROJECT)
8795
# Build examples when this project is built by itself
88-
if (BUILD_EXAMPLES)
96+
if(BUILD_EXAMPLES)
8997
add_subdirectory(examples)
9098
endif()
9199

92-
## LLVM Support
93-
94-
find_package(LLVM CONFIG)
95-
if(LLVM_FOUND)
96-
if(CMAKE_CXX_STANDARD GREATER_EQUAL 14)
97-
message(STATUS " Found LLVM ${LLVM_PACKAGE_VERSION} ")
98-
message(STATUS " Using LLVMConfig.cmake in: ${LLVM_DIR} ")
99-
include_directories(${LLVM_INCLUDE_DIRS})
100-
link_directories(${LLVM_LIBRARY_DIRS})
101-
102-
add_definitions(-DHAVE_LLVM)
103-
104-
# Find the libraries that correspond to the LLVM components
105-
# that we wish to use
106-
llvm_map_components_to_libnames(llvm_libs support)
107-
108-
set(llvm_libs ${llvm_libs} LLVM)
109-
110-
# Link against LLVM libraries
111-
message(STATUS " Linking against LLVM libraries: ${llvm_libs} ")
112-
endif()
113-
else()
114-
set(llvm_libs "")
100+
if(BUILD_TEST)
101+
add_subdirectory(test)
115102
endif()
116103

117-
## CUDA Support
118-
119-
include(CheckLanguage)
120-
check_language(CUDA)
121-
if(CMAKE_CUDA_COMPILER AND NOT DISABLE_CUDA_BUILD)
122-
enable_language(CUDA)
123-
message(STATUS " CUDA ${CMAKE_CUDA_COMPILER_ID} ${CMAKE_CUDA_COMPILER_VERSION} enabled ")
124-
125-
set(CMAKE_CUDA_STANDARD 17)
126-
127-
set(CMAKE_CUDA_ARCHITECTURES 80)
128-
129-
file(GLOB_RECURSE cuda_files ${CMAKE_CURRENT_SOURCE_DIR}/test/*.cu)
130-
else()
131-
set(cuda_files "")
132-
endif()
133-
134-
## Test Cases
135-
136-
file(GLOB_RECURSE test_files ${CMAKE_CURRENT_SOURCE_DIR}/test/*.cpp)
137-
list(REMOVE_ITEM test_files ${CMAKE_CURRENT_SOURCE_DIR}/test/single_file_test.cpp)
138-
139-
add_executable(unittest ${test_files} ${cuda_files})
140-
target_link_libraries(unittest zeroerr ${llvm_libs})
141-
target_compile_options(unittest PRIVATE
142-
$<$<CXX_COMPILER_ID:MSVC>:/W4>
143-
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic>
144-
)
145-
146-
add_executable(single_file_test ${CMAKE_CURRENT_SOURCE_DIR}/test/single_file_test.cpp)
147-
add_dependencies(single_file_test assemble_single_header)
148-
149-
enable_testing()
150-
add_test(NAME RunUnitTest COMMAND unittest)
151-
152-
## Single Header
104+
# Single Header
153105
add_custom_command(
154106
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zeroerr.hpp
155107
DEPENDS
156-
${include_files}
157-
${source_files}
158-
${CMAKE_CURRENT_SOURCE_DIR}/scripts/gen-single-file.cmake
108+
${include_files}
109+
${source_files}
110+
${CMAKE_CURRENT_SOURCE_DIR}/scripts/gen-single-file.cmake
159111
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/scripts/gen-single-file.cmake
160112
COMMENT "assembling the single header")
161113

162114
add_custom_target(assemble_single_header ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/zeroerr.hpp)
163115

164-
## Documentation
165-
116+
# Documentation
166117
find_package(Doxygen)
167-
if (DOXYGEN_FOUND)
118+
119+
if(DOXYGEN_FOUND)
168120
# request to configure the file
169121
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
170122
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.en.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile.en @ONLY)
171123
message("Doxygen build started")
172124

173125
# note the option ALL which allows to build the docs together with the application
174-
add_custom_target( doc_doxygen
126+
add_custom_target(doc_doxygen
175127
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/doc_doxygen/zh
176128
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
177129
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
178130
COMMENT "Generating API documentation with Doxygen"
179-
VERBATIM )
180-
181-
add_custom_target( doc_doxygen_en
131+
VERBATIM)
132+
133+
add_custom_target(doc_doxygen_en
182134
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/doc_doxygen/en
183135
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile.en
184136
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
185137
COMMENT "Generating API documentation with Doxygen"
186-
VERBATIM )
138+
VERBATIM)
187139

188-
add_custom_target( doxybook2
140+
add_custom_target(doxybook2
189141
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/docs/zh
190142
COMMAND ${CMAKE_SOURCE_DIR}/docs/.doxybook/doxybook2
191143
--config ${CMAKE_SOURCE_DIR}/docs/.doxybook/config.json
192144
--input ${CMAKE_CURRENT_BINARY_DIR}/doc_doxygen/zh
193145
--output ${CMAKE_CURRENT_BINARY_DIR}/docs/zh
194146
DEPENDS doc_doxygen
195-
)
147+
)
196148

197-
add_custom_target( doxybook2-en
149+
add_custom_target(doxybook2-en
198150
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/docs/en
199151
COMMAND ${CMAKE_SOURCE_DIR}/docs/.doxybook/doxybook2
200152
--config ${CMAKE_SOURCE_DIR}/docs/.doxybook/config.en.json
201153
--input ${CMAKE_CURRENT_BINARY_DIR}/doc_doxygen/en
202154
--output ${CMAKE_CURRENT_BINARY_DIR}/docs/en
203155
DEPENDS doc_doxygen_en
204-
)
205-
206-
add_custom_target( doxy DEPENDS doxybook2 doxybook2-en
156+
)
157+
158+
if(BUILD_DOC)
159+
set(config_build_doc ALL)
160+
else()
161+
set(config_build_doc "")
162+
endif()
163+
164+
add_custom_target(doxy ${config_build_doc} DEPENDS doxybook2 doxybook2-en
207165
COMMAND cp -r ${CMAKE_SOURCE_DIR}/docs/.vuepress ${CMAKE_CURRENT_BINARY_DIR}/docs
208166
COMMAND cp -r ${CMAKE_SOURCE_DIR}/docs/fig ${CMAKE_CURRENT_BINARY_DIR}/docs/zh
209167
COMMAND cp -r ${CMAKE_SOURCE_DIR}/docs/fig ${CMAKE_CURRENT_BINARY_DIR}/docs/en
210168
COMMAND cp ${CMAKE_SOURCE_DIR}/docs/en/index.md ${CMAKE_CURRENT_BINARY_DIR}/docs/en/index.md
211169
COMMAND cp ${CMAKE_SOURCE_DIR}/docs/zh/index.md ${CMAKE_CURRENT_BINARY_DIR}/docs/zh/index.md
212-
)
213-
170+
)
214171

215-
else (DOXYGEN_FOUND)
172+
else(DOXYGEN_FOUND)
216173
message("Doxygen need to be installed to generate the doxygen documentation")
217-
endif (DOXYGEN_FOUND)
218-
174+
endif(DOXYGEN_FOUND)
219175

220-
## Install
176+
# # Install
221177
install(TARGETS zeroerr DESTINATION lib)
222178
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/zeroerr.hpp DESTINATION include)
223179
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include DESTINATION include/..)
224180
else()
225-
# Export Headerfiles
181+
# Export Headerfiles
226182
set(ZEROERR_INCLUDE_DIR ${header_dirs} PARENT_SCOPE)
227183
message(STATUS "ZEROERR_INCLUDE_DIR: ${header_dirs}")
228184
endif()

0 commit comments

Comments
 (0)