# Configures the build to use the GCC toolchain in /opt/mongodbtoolchain/v4 import os import subprocess import SCons.Defaults toolchain_root = SCons.Script.Main.GetOption('toolchain-root') if not toolchain_root: toolchain_root = '/opt/mongodbtoolchain/v4' toolchain_bindir = os.path.join(toolchain_root, 'bin') # Get the default SCons path as a list default_path = SCons.Defaults.DefaultEnvironment()['ENV']['PATH'].split(os.pathsep) # Put the toolchain path first so we prefer all tools from there in subprocs ENV = { 'PATH' : os.pathsep.join([toolchain_bindir] + default_path) } # TODO BUILD-16594 # This is temporary workaround so that gcc can find the LLVM lld from the toolchain # until we can build this into the toolchain's default search paths LINKFLAGS_COMPILER_EXEC_PREFIX = f'{toolchain_bindir}' # Set any Variables for Tools from the toolchain here. Technically, we # shouldn't need the full paths since SCons will find the toolchain # ones first, but we don't want to accidentally get the system version # if, say, the toolchain is missing. Also, it is clearer that we are # getting the right toolchain in build log output when the path is # printed for each compiler invocation. CC = os.path.join(toolchain_bindir, 'gcc') CXX = os.path.join(toolchain_bindir, 'g++') DWP = os.path.join(toolchain_bindir, 'dwp') READELF = os.path.join(toolchain_bindir, 'readelf') GDB = os.path.join(toolchain_bindir, 'gdb') try: AR = subprocess.check_output([CXX, '-print-prog-name=ar']).decode('utf-8').strip() AS = subprocess.check_output([CXX, '-print-prog-name=as']).decode('utf-8').strip() OBJCOPY = subprocess.check_output([CXX, '-print-prog-name=objcopy']).decode('utf-8').strip() except subprocess.CalledProcessError as e: print('Failed while invoking toolchain binary ' + CXX + ': ' + str(e.output)) SCons.Script.Exit(-1) except OSError as e: print('Failed to invoke toolchain binary ' + CXX + ': ' + str(e)) SCons.Script.Exit(-1) DWARF_VERSION=5