Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build: Add options to select sanitizers in configure.py #2437

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

devDDen
Copy link

@devDDen devDDen commented Sep 16, 2024

We are going to add ThreadSanitizer that can't be used together with AddressSanitizer. We want to choose which sanitizers to use.

There are options to use sanitizers:

Use ASAN and UBSAN for Debug and Sanitize build types:

./configure.py

Use specified sanitizers for Debug and Sanitize build types:

./configure.py --sanitizer address --sanitizer undefined

Do not use sanitizers for any build type:

./configure.py --no-sanitizers

Specified sanitizers are passed to Seastar_SANITIZERS list. If it is empty and Seastar_SANITIZE option is enabled for this build, the content of Seastar_DEFAULT_SANITIZERS will be used.

We are going to add ThreadSanitizer that can't be used together with
AddressSanitizer. We want to choose which sanitizers to use.

There are options to use sanitizers:

Use ASAN and UBSAN for Debug and Sanitize build types:
./configure.py

Use specified sanitizers for Debug and Sanitize build types:
./configure.py --sanitizer address --sanitizer undefined

Do not use sanitizers for any build type:
./configure.py --no-sanitizers

Enabling santizers is consistently with Seastar_SANITIZE option.

Specified sanitizers are passed to Seastar_SANITIZERS list. If it
is empty and Seastar_SANITIZE option is enabled for this build,
the content of Seastar_DEFAULT_SANITIZERS will be used.
@devDDen
Copy link
Author

devDDen commented Sep 16, 2024

@tchaikov please review

DEFAULT_BUILD_TYPES "Debug" "Sanitize"
CONDITION sanitizers_enabled)

if (sanitizers_enabled)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this does not work when we build seastar with a multi-config generator. in that case, the value of sanitizers_enabled would be a generator expression, which always evaluates to TRUE. and its value is supposed to be used like:

target_link_libraries (seastar
    PUBLIC
      $<${condition}:Sanitizers::address>)


if (sanitizers_enabled)
if ((NOT Seastar_SANITIZERS) OR (Seastar_SANITIZERS STREQUAL ""))
set (Seastar_SANITIZERS ${Seastar_DEFAULT_SANITIZERS})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i'd suggest making Seastar_SANITIZERS a CMake option explicitly, like:

set (Seastar_SANITIZERS
  "address;undefined_behavior"
  CACHE
  STRING
  "Sanitizers enabled when building Seastar")

and if we build with multi-config generator, this option applies to Debug and Sanitize modes, otherwise, this option applies the the current build.

what do you think?

@@ -171,15 +173,23 @@ def identify_best_standard(cpp_standards, compiler):

MODE_TO_CMAKE_BUILD_TYPE = {'release': 'RelWithDebInfo', 'debug': 'Debug', 'dev': 'Dev', 'sanitize': 'Sanitize' }

SANITIZER_TO_CMAKE = {'address': 'address', 'undefined': 'undefined_behavior'}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not just use undefined_behavior? what's the merit of introducing another layer?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants