Пример #1
0
 def update(self, fname):
     if os.path.exists(fname) and not GetOption("silent") and not env.GetOption("help"):
         print "Restoring previous command-line options from '%s'" % fname
     vars = Variables(fname, self.opts)
     vars.AddVariables(*self.variables)
     vars.Update(env)
     vars.Save(fname, env)
Пример #2
0
def generate(env):
	params = Variables(env['PARAMETER_SOURCE'], ARGUMENTS)
	params.Add(EnumVariable('crosscompile', 'Enable cross compile', 'no', ['no', 'android', 'mingw', 'gcc']))
	params.Update(env)
	
	configGroup = None
	try:
		configReport = env.configReport
		configGroup = 'Cross-Compile'
		configReport.add('Enable cross compile', crosscompile, configGroup)
	except:
		pass
	
	env.SetDefault(CROSSCOMPILE_CFLAGS = '')
	env.SetDefault(CROSSCOMPILE_CPPFLAGS = '')
	env.SetDefault(CROSSCOMPILE_CXXFLAGS = '')
	env.SetDefault(CROSSCOMPILE_LINKFLAGS = '')
	env.SetDefault(CROSSCOMPILE_LIBS = '')
	env.SetDefault(CROSSCOMPILE_PROGRAM_LIBS = '')
	
	if env['crosscompile'] == 'android':
		android.generate(env, configGroup)
	elif env['crosscompile'] == 'mingw':
		mingw.generate(env, configGroup)
	elif env['crosscompile'] == 'gcc':
		gcc.generate(env, configGroup)
 def update(self, fname='options.cache'):
     if os.path.exists(fname) and not GetOption("silent") and\
             not GetOption("help"):
         print """Note: Restoring previous command-line options from '%s'.
   Please delete this file when trying to start from scratch.""" % fname
     vars = Variables(fname, self.opts)
     vars.AddVariables(*self.variables)
     vars.Update(self.env)
     vars.Save(fname, self.env)
Пример #4
0
    def Update(self, env, args=None):
        self.unknown = {}
        _Base.Update(self, env, args)

        # Remember all known variables as being updated (even those with
        # default value of None and no specified value that have not been
        # changed).  A variable updated in a cloned environment is not
        # automatically considered udpated in the parent environment, but
        # a value updated in the parent environment before being cloned will
        # be considered updated in the cloned environment. 
        env['_UPDATED_VARIABLES_'] = [option.key for option in self.options]
Пример #5
0
def generate(env, configGroup):
    # add parameters to configurate toolchain
    params = Variables(env['PARAMETER_SOURCE'], ARGUMENTS)
    params.Add(('gcc_compiler', 'GCC cross compiler prefix', ''))
    params.Add(('gcc_cppflags', 'GCC cross compiler cpp flags', ''))
    params.Add(('gcc_linkflags', 'GCC cross compiler link flags', ''))
    params.Add(
        PathVariable('gcc_sysroot', 'GCC cross compiler system root', '',
                     PathVariable.Accept))
    params.Update(env)

    try:
        configReport = env.configReport
        configReport.add('GCC cross compiler prefix', 'gcc_compiler',
                         configGroup)
        configReport.add('GCC cross compiler cpp flags', 'gcc_cppflags',
                         configGroup)
        configReport.add('GCC cross compiler link flags', 'gcc_linkflags',
                         configGroup)
        configReport.add('GCC cross compiler system root', 'gcc_sysroot',
                         configGroup)
    except:
        pass

    # get configuration parameters
    compiler = env.subst(env['gcc_compiler'])
    sysroot = env.subst(env['gcc_sysroot'])
    cppflags = env['gcc_cppflags']

    env['CC'] = compiler + 'gcc'
    env['CXX'] = compiler + 'g++'
    env['LD'] = compiler + 'ld'
    env['STRIP'] = compiler + 'strip'
    env['OBJCOPY'] = compiler + 'objcopy'
    env['AS'] = compiler + 'as'
    env['AR'] = compiler + 'ar'
    env['RANLIB'] = compiler + 'ranlib'

    env.Append(CROSSCOMPILE_CPPFLAGS=cppflags)
    env.Append(CROSSCOMPILE_LINKFLAGS=linkflags)
    env.Append(CROSSCOMPILE_CPPFLAGS=['--sysroot={}'.format(sysroot)])
    env.Append(CROSSCOMPILE_LINKFLAGS=['--sysroot={}'.format(sysroot)])

    # apply cross compile flags to build environment
    env.Append(CFLAGS=env['CROSSCOMPILE_CFLAGS'])
    env.Append(CPPFLAGS=env['CROSSCOMPILE_CPPFLAGS'])
    env.Append(CXXFLAGS=env['CROSSCOMPILE_CXXFLAGS'])
    env.Append(LINKFLAGS=env['CROSSCOMPILE_LINKFLAGS'])
Пример #6
0
 def Update(self, env):
     print("required options are: ", self.required)
     SVariables.Update(self, env)
     for requirement in self.required:
         if not env.has_key(requirement):
             print('violation: ', requirement)
Пример #7
0
def generate(env, configGroup):
    # add parameters to configurate toolchain
    params = Variables(env['PARAMETER_SOURCE'], ARGUMENTS)
    params.Add(
        PathVariable(
            'android_ndkroot',
            'Path to Android NDK toolchain (NDK_ROOT env-param by default)',
            os.path.expanduser(os.environ['NDK_ROOT']),
            PathVariable.PathAccept))
    params.Add(
        EnumVariable('android_arch', 'Android architecture to build for',
                     'armv7a', ['armv7', 'armv7a', 'armv8', 'x86', 'x86_64']))
    params.Add(('android_apilevel', 'Android API level', '18'))
    params.Add(('android_gccversion', 'Android NDK GCC version', '4.9'))
    params.Update(env)

    try:
        configReport = env.configReport
        configReport.add('Path to Android NDK toolchain', 'android_ndkroot',
                         configGroup)
        configReport.add('Android architecture to build for', 'android_arch',
                         configGroup)
        configReport.add('Android API level', 'android_apilevel', configGroup)
        configReport.add('Android NDK GCC version', 'android_gccversion',
                         configGroup)
    except:
        pass

    # get configuration parameters
    ndkroot = env.subst(env['android_ndkroot'])
    arch = env['android_arch']
    apilevel = env['android_apilevel']
    gccVersion = env['android_gccversion']

    # set construction variables
    stlsupport = 'gnu-libstdc++'

    if env['android_arch'] == 'armv7':
        abi = 'androideabi'
        fullarch = 'armeabi-v7'
        hardfp = False

    elif env['android_arch'] == 'armv7a':
        abi = 'androideabi'
        fullarch = 'armeabi-v7a'
        hardfp = True

    elif env['android_arch'] == 'armv8':
        abi = 'androideabi'
        fullarch = 'armeabi-v8'
        hardfp = True

    elif env['android_arch'] == 'x86':
        abi = 'android'
        fullarch = 'x86'
        hardfp = False

    elif env['android_arch'] == 'x86_64':
        abi = 'android'
        fullarch = 'x86_64'
        hardfp = False

    else:
        raise Exception('Invalid architecture {}'.format(env['android_arch']))

    compilerPrefix = '{}-{}-{}{}-'.format(arch,
                                          platform.system().lower(), abi,
                                          apilevel)
    compilerPrefix2 = '{}-{}-{}-'.format(arch, platform.system().lower(), abi)

    pathToolchain = os.path.join(
        ndkroot, 'toolchains', 'llvm', 'prebuilt',
        '-'.join([platform.system().lower(),
                  platform.machine()]))
    env['ANDROID_TOOLCHAIN'] = pathToolchain

    pathBin = os.path.join(pathToolchain, 'bin')
    env['ANDROID_BIN'] = pathBin

    compiler = os.path.join(pathBin, compilerPrefix)
    compiler2 = os.path.join(pathBin, compilerPrefix2)
    env['ANDROID_COMPILER'] = compiler

    env['ANDROID_FULLARCH'] = fullarch
    env['ANDROID_HARDFP'] = hardfp

    env['CC'] = compiler + 'clang'
    env['CXX'] = compiler + 'clang++'
    env['LD'] = compiler2 + 'ld'
    env['STRIP'] = compiler2 + 'strip'
    env['OBJCOPY'] = compiler2 + 'objcopy'
    env['AS'] = compiler2 + 'as'
    env['AR'] = compiler2 + 'ar'
    env['RANLIB'] = compiler2 + 'ranlib'
    env['NASM'] = compiler2 + 'yasm'

    # libraries to link against required for libraries and binaries to load on android.
    # additional libraries can be required. android is in general quite picky about
    # these libraries and the loading order
    env.Append(CROSSCOMPILE_IBS=['m', 'z', 'log', 'c', 'android'])

    # libs.append( 'gnustl_static' ) # stl support using static gnustl
    env.Append(CROSSCOMPILE_CPPFLAGS=[
        '-O3'
    ])  # default is -O2 so try to squeeze out a bit more speed if possible

    # hardware floating point support
    if hardfp:
        env.Append(CROSSCOMPILE_CPPFLAGS=['-D_NDK_MATH_NO_SOFTFP=1'])

    # apply cross compile flags to build environment
    env.Append(LIBS=env['CROSSCOMPILE_LIBS'])
    env.Append(CFLAGS=env['CROSSCOMPILE_CFLAGS'])
    env.Append(CPPFLAGS=env['CROSSCOMPILE_CPPFLAGS'])
    env.Append(CXXFLAGS=env['CROSSCOMPILE_CXXFLAGS'])
    env.Append(LINKFLAGS=env['CROSSCOMPILE_LINKFLAGS'])
from eiffel_loop.eiffel import project

from eiffel_loop.eiffel.ecf import EIFFEL_CONFIG_FILE
from eiffel_loop.eiffel.ecf import FREEZE_BUILD

from SCons.Environment import Base
from SCons.Variables import Variables
from glob import glob

var = Variables()
var.Add('cpu', '', 'x64')
var.Add('project', '', glob('*.ecf')[0])

os.environ['ISE_LIBRARY'] = os.environ['ISE_EIFFEL']

env = Base()

var.Update(env)

env.Append(ENV=os.environ)
env.Append(ISE_PLATFORM=os.environ['ISE_PLATFORM'])

project_py = project.read_project_py()
project_py.set_build_environment(env.get('cpu'))

ecf_path = env.get('project')
config = EIFFEL_CONFIG_FILE(ecf_path)

build = FREEZE_BUILD(config, project_py)
build.install_resources(build.resources_destination())
Пример #9
0
                           'HOME' : os.environ[ 'HOME' ] },
                  toolpath = [askaptoolpath],
                  tools = ['default', 'askap_package', 'doxybuilder',
                           'functestbuilder', 'icebuilder', 'cloptions' ]
                  )

# Importing TERM allows programs (such as clang) to produce colour output
# if the terminal supports it
if 'TERM' in os.environ:
    env['ENV']['TERM'] = os.environ['TERM']

opts = Variables('sconsopts.cfg', ARGUMENTS)
opts.Add(BoolVariable("nompi", "Disable MPI", False))
opts.Add(BoolVariable("openmp", "Use OpenMP", False))
opts.Add(BoolVariable("update", "svn update?", False))
opts.Update(env)

# Standard compiler flags
env.AppendUnique(CCFLAGS=['-Wall'])
env.AppendUnique(CCFLAGS=['-O2'])
env.AppendUnique(CCFLAGS=['-g'])
env.AppendUnique(CCFLAGS=['-DASKAP_DEBUG'])

# If the system has environment modules support we need to import
# the whole environment
if has_environment_modules():
    env["ENV"] = os.environ

# Support setting of "RBUILD_NOMPI" in the environment, because forgetting
# to pass nompi=1 on the command line is a common error
if os.environ.has_key('RBUILD_NOMPI') and os.environ['RBUILD_NOMPI'] == '1':