diff --git a/CMakeLists.txt b/CMakeLists.txt index c4c172a..c0c2b42 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,7 @@ set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) include(cmake/DisabelInSource.cmake) include(cmake/SetupOptimizationLevel.cmake) include(cmake/SetupThreadingSupport.cmake) +include(cmake/SetupThreadSanitizer.cmake) # make our internal cmake script collection avaliable in the build process. list(APPEND CMAKE_PREFIX_PATH "${PROJECT_SOURCE_DIR}/cmake") diff --git a/README.md b/README.md index be27be5..60b4e82 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,32 @@ the recommended IDE is either a simple text editor or [CLion](https://www.jetbra We divide the project into subtargets to separate for the library itself, testing and example code. The library itself can be found in `lib/pls`, testing related code is in `test`, example and playground -apps are in `app`. \ No newline at end of file +apps are in `app`. + +### Buiding + +To build the project first create a folder for the build +(typically as a subfolder to the project) using `mkdir cmake-build-debug`. +Change to the new folder `cd cmake-build-debug` and init the cmake +project using `cmake ../ -DCMAKE_BUILD_TYPE=DEBUG`. For realease builds +do the same only with build type `RELEASE`. Other build time settings +can also be passed at this setup step. + +After this is done you can use normal `make` commands like +`make` to build everything `make ` to build a target +or `make install` to install the library globally. + +### Testing + +Testing is done using [Catch2](https://github.com/catchorg/Catch2/) +in the test subfolder. Tests are build into a target called `tests` +and can be executed simply by building this executabe and running it. + +### Data Race Detection + +As this project contains a lot concurrent code we use +[Thread Sanitizer](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual) +in our CI process and optional in other builds. To setup CMake builds +with sanitizer enabled add the cmake option `-DTHREAD_SANITIZER=ON`. +Please regularly test with thread sanitizer enabled and make sure to not +keep the repository in a state where the sanitizer reports errors. \ No newline at end of file diff --git a/cmake/SetupThreadSanitizer.cmake b/cmake/SetupThreadSanitizer.cmake new file mode 100644 index 0000000..3854a46 --- /dev/null +++ b/cmake/SetupThreadSanitizer.cmake @@ -0,0 +1,10 @@ +# Optionally compile with thread sanitizer enabled to find concurrency bugs +# https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual + +# Add optional sanitizer, off by default +option(THREAD_SANITIZER "Add thread sanitizer" OFF) +if(THREAD_SANITIZER) + add_compile_options(-fsanitize=thread -g) + add_link_options(-fsanitize=thread) +endif() +message("-- Thread Sanitizer: ${THREAD_SANITIZER}") \ No newline at end of file