import os import platform import subprocess import sysconfig import numpy as np arch = subprocess.check_output(["uname", "-m"], encoding='utf8').rstrip() if platform.system() == "Darwin": arch = "Darwin" common = '' cpppath = [ f"#/", '#msgq/', '/usr/lib/include', '/opt/homebrew/include', sysconfig.get_paths()['include'], ] libpath = [ '/opt/homebrew/lib', ] AddOption('--minimal', action='store_false', dest='extras', default=True, help='the minimum build. no tests, tools, etc.') AddOption('--asan', action='store_true', help='turn on ASAN') AddOption('--ubsan', action='store_true', help='turn on UBSan') ccflags = [] ldflags = [] if GetOption('ubsan'): flags = [ "-fsanitize=undefined", "-fno-sanitize-recover=undefined", ] ccflags += flags ldflags += flags elif GetOption('asan'): ccflags += ["-fsanitize=address", "-fno-omit-frame-pointer"] ldflags += ["-fsanitize=address"] env = Environment( ENV=os.environ, CC='clang', CXX='clang++', CCFLAGS=[ "-g", "-fPIC", "-O2", "-Wunused", "-Werror", "-Wshadow", "-Wno-vla-cxx-extension", ] + ccflags, LDFLAGS=ldflags, LINKFLAGS=ldflags, CFLAGS="-std=gnu11", CXXFLAGS="-std=c++1z", CPPPATH=cpppath, LIBPATH=libpath, CYTHONCFILESUFFIX=".cpp", tools=["default", "cython"] ) Export('env', 'arch', 'common') envCython = env.Clone(LIBS=[]) envCython["CPPPATH"] += [np.get_include()] envCython["CCFLAGS"] += ["-Wno-#warnings", "-Wno-shadow", "-Wno-deprecated-declarations"] envCython["CCFLAGS"].remove('-Werror') if arch == "Darwin": envCython["LINKFLAGS"] = ["-bundle", "-undefined", "dynamic_lookup"] else: envCython["LINKFLAGS"] = ["-pthread", "-shared"] Export('envCython') SConscript(['SConscript'])