import platform CC = 'gcc' system = platform.system() if system == 'Darwin': # 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 CC += '-13' env = Environment( CC=CC, CFLAGS=[ '-nostdlib', '-fno-builtin', '-std=gnu11', '-Wfatal-errors', '-Wno-pointer-to-int-cast', ], CPPPATH=[".", "../../board/", "../../../opendbc/safety/"], ) if system == "Darwin": env.PrependENVPath('PATH', '/opt/homebrew/bin') if GetOption('mutation'): env['CC'] = 'clang-17' flags = [ '-fprofile-instr-generate', '-fcoverage-mapping', '-fpass-plugin=/usr/lib/mull-ir-frontend-17', '-g', '-grecord-command-line', ] env['CFLAGS'] += flags env['LINKFLAGS'] += flags if GetOption('ubsan'): flags = [ "-fsanitize=undefined", "-fno-sanitize-recover=undefined", ] env['CFLAGS'] += flags env['LINKFLAGS'] += flags panda = env.SharedObject("panda.os", "panda.c") libpanda = env.SharedLibrary("libpanda.so", [panda]) if GetOption('coverage'): env.Append( CFLAGS=["-fprofile-arcs", "-ftest-coverage", "-fprofile-abs-path",], LIBS=["gcov"], ) # GCC note file is generated by compiler, ensure we build it, and allow scons to clean it up AlwaysBuild(panda) env.SideEffect("panda.gcno", panda)