All Projects → arsenm → Sanitizers Cmake

arsenm / Sanitizers Cmake

Licence: other
CMake modules to help use sanitizers

Labels

Projects that are alternatives of or similar to Sanitizers Cmake

Wiiuse
WiiUse "feature complete" cross-platform Wii Remote access library
Stars: ✭ 196 (-15.52%)
Mutual labels:  cmake
Cmake Scripts
A selection of useful scripts for use in CMake projects, include code coverage, sanitizers, and dependency graph generation.
Stars: ✭ 202 (-12.93%)
Mutual labels:  cmake
Ios Cmake
A blank iOS app build system written in CMake. Includes building a dynamically linked C++ framework and bundling it into the app.
Stars: ✭ 220 (-5.17%)
Mutual labels:  cmake
Methanekit
🎲 Modern 3D graphics made simple with cross-platform C++17 meta-API on top of DirectX 12 & Metal (Vulkan is coming)
Stars: ✭ 197 (-15.09%)
Mutual labels:  cmake
Vcmi
Open-source engine for Heroes of Might and Magic III
Stars: ✭ 2,514 (+983.62%)
Mutual labels:  cmake
Engine
A basic cross-platform 3D game engine
Stars: ✭ 208 (-10.34%)
Mutual labels:  cmake
Diagon
Interactive ASCII art diagram generators. 🌟
Stars: ✭ 189 (-18.53%)
Mutual labels:  cmake
Gtest Demo
Unit test demo using Google Test.
Stars: ✭ 227 (-2.16%)
Mutual labels:  cmake
Papyros
General issue tracking and wikis for Papyros
Stars: ✭ 205 (-11.64%)
Mutual labels:  cmake
Repository
Repository of LuaDist modules available for installation using the luadist-git command line tool
Stars: ✭ 218 (-6.03%)
Mutual labels:  cmake
Astera
A C99 Cross Platform 2D Game Library
Stars: ✭ 193 (-16.81%)
Mutual labels:  cmake
Fixed point
C++ Binary Fixed-Point Arithmetic
Stars: ✭ 199 (-14.22%)
Mutual labels:  cmake
Compiler
Pawn compiler for SA-MP with bug fixes and new features - runs on Windows, Linux, macOS
Stars: ✭ 209 (-9.91%)
Mutual labels:  cmake
Cpp Boilerplate
A small c++ template with modern CMake
Stars: ✭ 197 (-15.09%)
Mutual labels:  cmake
Lirios
🏠 General issue tracking and wiki for Liri
Stars: ✭ 228 (-1.72%)
Mutual labels:  cmake
Pothossdr
Pothos SDR windows development environment
Stars: ✭ 193 (-16.81%)
Mutual labels:  cmake
Directx Vs Templates
Direct3D Visual Studio Templates
Stars: ✭ 205 (-11.64%)
Mutual labels:  cmake
How To Export Cpp Library
An OS-agnostic C++ library template in plain CMake.
Stars: ✭ 228 (-1.72%)
Mutual labels:  cmake
Frut
Building JUCE projects using CMake made easy
Stars: ✭ 228 (-1.72%)
Mutual labels:  cmake
Skui
Skia-based C++ UI framework
Stars: ✭ 218 (-6.03%)
Mutual labels:  cmake

sanitizers-cmake

MIT

CMake module to enable sanitizers for binary targets.

Include into your project

To use FindSanitizers.cmake, simply add this repository as git submodule into your own repository

mkdir externals
git submodule add git://github.com/arsenm/sanitizers-cmake.git externals/sanitizers-cmake

and adding externals/sanitizers-cmake/cmake to your CMAKE_MODULE_PATH

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/externals/sanitizers-cmake/cmake" ${CMAKE_MODULE_PATH})

If you don't use git or dislike submodules you can copy the files in cmake directory into your repository. Be careful and keep updates in mind!

Now you can simply run find_package in your CMake files:

find_package(Sanitizers)

Usage

You can enable the sanitizers with SANITIZE_ADDRESS, SANITIZE_MEMORY, SANITIZE_THREAD or SANITIZE_UNDEFINED options in your CMake configuration. You can do this by passing e.g. -DSANITIZE_ADDRESS=On on your command line or with your graphical interface.

If sanitizers are supported by your compiler, the specified targets will be build with sanitizer support. If your compiler has no sanitizing capabilities (I asume intel compiler doesn't) you'll get a warning but CMake will continue processing and sanitizing will simply just be ignored.

Compiler issues

Different compilers may be using different implementations for sanitizers. If you'll try to sanitize targets with C and Fortran code but don't use gcc & gfortran but clang & gfortran, this will cause linking problems. To avoid this, such problems will be detected and sanitizing will be disabled for these targets.

Even C only targets may cause problems in certain situations. Some problems have been seen with AddressSanitizer for preloading or dynamic linking. In such cases you may try the SANITIZE_LINK_STATIC to link sanitizers for gcc static.

Build targets with sanitizer support

To enable sanitizer support you simply have to add add_sanitizers(<TARGET>) after defining your target. To provide a sanitizer blacklist file you can use the sanitizer_add_blacklist_file(<FILE>) function:

find_package(Sanitizers)

sanitizer_add_blacklist_file("blacklist.txt")

add_executable(some_exe foo.c bar.c)
add_sanitizers(some_exe)

add_library(some_lib foo.c bar.c)
add_sanitizers(some_lib)

Run your application

The sanitizers check your program, while it's running. In some situations (e.g. LD_PRELOAD your target) it might be required to preload the used AddressSanitizer library first. In this case you may use the asan-wrapper script defined in ASan_WRAPPER variable to execute your application with ${ASan_WRAPPER} myexe arg1 ....

Contribute

Anyone is welcome to contribute. Simply fork this repository, make your changes in an own branch and create a pull-request for your change. Please do only one change per pull-request.

You found a bug? Please fill out an issue and include any data to reproduce the bug.

Contributors

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].