mirror of
https://github.com/XRPLF/rippled.git
synced 2026-04-29 15:37:57 +00:00
This change adds support for sanitizer build options in CI builds workflow. Currently `asan+ubsan` is enabled, while `tsan+ubsan` is left disabled as more changes are required.
60 lines
2.7 KiB
Plaintext
60 lines
2.7 KiB
Plaintext
include(default)
|
|
{% set compiler, version, compiler_exe = detect_api.detect_default_compiler() %}
|
|
{% set sanitizers = os.getenv("SANITIZERS") %}
|
|
|
|
[conf]
|
|
{% if sanitizers %}
|
|
{% if compiler == "gcc" %}
|
|
{% if "address" in sanitizers or "thread" in sanitizers or "undefinedbehavior" in sanitizers %}
|
|
{% set sanitizer_list = [] %}
|
|
{% set model_code = "" %}
|
|
{% set extra_cxxflags = ["-fno-omit-frame-pointer", "-O1", "-Wno-stringop-overflow"] %}
|
|
|
|
{% if "address" in sanitizers %}
|
|
{% set _ = sanitizer_list.append("address") %}
|
|
{% set model_code = "-mcmodel=large" %}
|
|
{% elif "thread" in sanitizers %}
|
|
{% set _ = sanitizer_list.append("thread") %}
|
|
{% set model_code = "-mcmodel=medium" %}
|
|
{% set _ = extra_cxxflags.append("-Wno-tsan") %}
|
|
{% endif %}
|
|
|
|
{% if "undefinedbehavior" in sanitizers %}
|
|
{% set _ = sanitizer_list.append("undefined") %}
|
|
{% set _ = sanitizer_list.append("float-divide-by-zero") %}
|
|
{% endif %}
|
|
|
|
{% set sanitizer_flags = "-fsanitize=" ~ ",".join(sanitizer_list) ~ " " ~ model_code %}
|
|
|
|
tools.build:cxxflags+=['{{sanitizer_flags}} {{" ".join(extra_cxxflags)}}']
|
|
tools.build:sharedlinkflags+=['{{sanitizer_flags}}']
|
|
tools.build:exelinkflags+=['{{sanitizer_flags}}']
|
|
{% endif %}
|
|
{% elif compiler == "apple-clang" or compiler == "clang" %}
|
|
{% if "address" in sanitizers or "thread" in sanitizers or "undefinedbehavior" in sanitizers %}
|
|
{% set sanitizer_list = [] %}
|
|
{% set extra_cxxflags = ["-fno-omit-frame-pointer", "-O1"] %}
|
|
|
|
{% if "address" in sanitizers %}
|
|
{% set _ = sanitizer_list.append("address") %}
|
|
{% elif "thread" in sanitizers %}
|
|
{% set _ = sanitizer_list.append("thread") %}
|
|
{% endif %}
|
|
|
|
{% if "undefinedbehavior" in sanitizers %}
|
|
{% set _ = sanitizer_list.append("undefined") %}
|
|
{% set _ = sanitizer_list.append("float-divide-by-zero") %}
|
|
{% set _ = sanitizer_list.append("unsigned-integer-overflow") %}
|
|
{% endif %}
|
|
|
|
{% set sanitizer_flags = "-fsanitize=" ~ ",".join(sanitizer_list) %}
|
|
|
|
tools.build:cxxflags+=['{{sanitizer_flags}} {{" ".join(extra_cxxflags)}}']
|
|
tools.build:sharedlinkflags+=['{{sanitizer_flags}}']
|
|
tools.build:exelinkflags+=['{{sanitizer_flags}}']
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
tools.info.package_id:confs+=["tools.build:cxxflags", "tools.build:exelinkflags", "tools.build:sharedlinkflags"]
|