# Copyright AllSeen Alliance. All rights reserved.
#
#    Permission to use, copy, modify, and/or distribute this software for any
#    purpose with or without fee is hereby granted, provided that the above
#    copyright notice and this permission notice appear in all copies.
#
#    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
#    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
#    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
#    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
#    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
#    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
#    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# 

Import('env')

vars = Variables()
vars.Add(BoolVariable('TSAN', 'Enable Thread Sanitizer runtime checks', 'no'))
vars.Update(env)

# Linux specific flags

# Force 64-bit builds
env.Append(CXXFLAGS=['-m64', '-fPIC'])
env.Append(CFLAGS=['-m64', '-fPIC'])
env.Append(LINKFLAGS=['-m64'])

# Thread sanitizer control
if env['TSAN']:
   env.Append(CFLAGS = ['-fno-omit-frame-pointer', '-fsanitize=thread', '-fPIE'])
   env.Append(CXXFLAGS = ['-fno-omit-frame-pointer', '-fsanitize=thread', '-fPIE'])
   env.Append(LINKFLAGS = ['-fsanitize=thread', '-pie'])
   if env['CXX'] != 'clang':
      env.AppendUnique(LIBS = ['tsan'])
