@@ -31,11 +31,12 @@ endif()
3131
3232option (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
3636if (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 ()
5152endif ()
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} )
6477include_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.
8188set (MAIN_PROJECT OFF )
89+
8290if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR )
8391 set (MAIN_PROJECT ON )
8492endif ()
8593
8694if (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/..)
224180else ()
225- # Export Headerfiles
181+ # Export Headerfiles
226182 set (ZEROERR_INCLUDE_DIR ${header_dirs} PARENT_SCOPE )
227183 message (STATUS "ZEROERR_INCLUDE_DIR: ${header_dirs} " )
228184endif ()
0 commit comments