openpilot/opendbc_repo/opendbc/safety/tests/libsafety/SConscript
2025-11-11 22:44:56 +08:00

71 lines
1.7 KiB
Python

import platform
CC = 'gcc'
system = platform.system()
mac_ver = platform.mac_ver()
# gcc installed by homebrew has version suffix (e.g. gcc-12) in order to be
# distinguishable from system one - which acts as a symlink to clang
# clang works on macOS 15 and greater but has issues on earlier macOS versions.
# see: https://github.com/commaai/openpilot/issues/35093
if system == 'Darwin' and mac_ver[0] and mac_ver[0] < '15':
CC += '-13'
# standard env
env = Environment(
CC=CC,
CFLAGS=[
'-Wall',
"-Wextra",
'-Werror',
'-nostdlib',
'-fno-builtin',
'-std=gnu11',
'-Wfatal-errors',
'-Wno-pointer-to-int-cast',
'-g',
'-O0',
'-fno-omit-frame-pointer',
'-fprofile-arcs',
'-ftest-coverage',
'-DALLOW_DEBUG',
'-DCANFD',
],
LINKFLAGS=[
'-fprofile-arcs',
'-ftest-coverage',
],
CPPPATH=["#", "../../board/"],
tools=["default", "compilation_db"],
)
if system == "Darwin":
env.PrependENVPath('PATH', '/opt/homebrew/bin')
if GetOption('ubsan'):
env.Prepend(LINKFLAGS=[
"-fsanitize=undefined",
"-fno-sanitize-recover=undefined",
])
# mutation env
menv = env.Clone()
menv['CC'] = 'clang-17'
flags = [
'-fprofile-instr-generate',
'-fcoverage-mapping',
'-fpass-plugin=/usr/lib/mull-ir-frontend-17',
'-g',
'-grecord-command-line',
]
menv['CFLAGS'] += flags
menv['LINKFLAGS'] += flags
for build_env, suffix in ((env, ""), (menv, "_mutation")):
# TODO: add macOS support
if (build_env == menv) and (system == "Darwin"):
continue
safety = env.SharedObject(f"safety{suffix}.os", "safety.c")
libsafety = env.SharedLibrary(f"libsafety{suffix}.so", [safety])
# GCC note file is generated by compiler, allow scons to clean it up
env.SideEffect("safety.gcno", safety)