Source code for openalea.sconsx.tools.compiler

# -*-python-*-
#--------------------------------------------------------------------------------
#
#       OpenAlea.SConsX: SCons extension package for building platform
#                        independant packages.
#
#       Copyright 2006-2009 INRIA - CIRAD - INRA  
#
#       File author(s): Christophe Pradal <christophe.prada@cirad.fr>
#
#       Distributed under the Cecill-C License.
#       See accompanying file LICENSE.txt or copy at
#           http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html
# 
#       OpenAlea WebSite : http://openalea.gforge.inria.fr
#
#--------------------------------------------------------------------------------
""" Build directory configure environment. """

__license__ = "Cecill-C"
__revision__ = "$Id$"


from SCons.Variables import PathVariable 
from SCons.Variables import BoolVariable 
from SCons.Variables import EnumVariable 
from SCons.Variables import Variables
from SCons.Util import Split, WhereIs

import os, sys
from openalea.sconsx.config import *

MsvcVersion = {
    1929 : '16.10', 
    1928 : '16.8', 
    1927 : '16.7', 
    1926 : '16.6', 
    1925 : '16.5', 
    1924 : '16.4', 
    1923 : '16.3', 
    1922 : '16.2', 
    1921 : '16.1', 
    1920 : '16.0', 
    1916 : '15.9', 
    1915 : '15.8', 
    1914 : '15.7', 
    1913 : '15.6', 
    1912 : '15.5', 
    1911 : '15.3', 
    1910 : '15.0', 
    1900 : '14.0', 
    1800 : '12.0', 
    1700 : '11.0', 
    1600 : '10.0', 
    1500 : '9.0', 
    1400 : '8.0', 
    1310 : '7.1', 
    1300 : '7.0', 
    1200 : '6.0'
     
}

[docs] def get_default_msvc(): import platform version = platform.python_compiler().split()[1][2:] return MsvcVersion.get(int(version), '17.0')
[docs] class Compiler: def __init__(self, config): self.name = 'compiler' self.config = config self._default = {}
[docs] def default(self): self._default['debug'] = False self._default['warnings'] = False self._default['static'] = False if isinstance(platform, Posix): compilers = ['gcc'] libs_suffix = '' elif isinstance(platform, Win32): if CONDA_ENV : compilers = ['msvc','mingw'] else: compilers = ['mingw', 'msvc'] libs_suffix = '-vc90' else: raise Exception("Add a compiler support for your os !!!") self._default['compilers'] = compilers self._default['libs_suffix'] = libs_suffix
[docs] def option( self, opts): self.default() opts.Add(BoolVariable('debug', 'compilation in a debug mode', self._default['debug'])) opts.Add(BoolVariable('warnings', 'compilation with -Wall and similar', self._default['warnings'])) opts.Add(BoolVariable('static', '', self._default['static'])) compilers = self._default['compilers'] default_compiler = compilers[0] opts.Add(EnumVariable('compiler', 'compiler tool used for the build', default_compiler, compilers)) opts.Add('compiler_libs_suffix', 'Library suffix name like -vc80 or -mgw', self._default['libs_suffix']) opts.Add('rpath', 'A list of paths to search for shared libraries') opts.Add('EXTRA_CCFLAGS', 'Specific user flags for c compiler', '') opts.Add('EXTRA_CXXFLAGS', 'Specific user flags for c++ compiler', '') opts.Add('EXTRA_CPPDEFINES', 'Specific c++ defines', '') opts.Add('EXTRA_LINKFLAGS', 'Specific user flags for c++ linker', '') opts.Add('EXTRA_CPPPATH', 'Specific user include path', '') opts.Add('EXTRA_LIBPATH', 'Specific user library path', '') opts.Add('EXTRA_LIBS', 'Specific user libraries', '') if isinstance(platform, Win32): opts.Add(EnumVariable('TARGET_ARCH', 'Target Architecture','amd64' if is_64bit_environment() else 'x86', allowed_values=('x86','amd64','i386','emt64','x86_64','ia64'))) opts.Add(EnumVariable('MSVC_VERSION', 'Version ','' if not is_conda() else get_default_msvc(), allowed_values=sorted(MsvcVersion.values())+['17.0','']))
[docs] def update(self, env): """ Update the environment with specific flags """ # Set the compiler compiler_name = env['compiler'] self.config.add_tool(compiler_name) if isinstance(platform, Cygwin): env.AppendUnique(CPPDEFINES = 'SYSTEM_IS__CYGWIN') elif isinstance(platform, Win32): env.AppendUnique(CPPDEFINES = 'WIN32') libs_suffix = env['compiler_libs_suffix'] if compiler_name == 'mingw' and '-vc' in libs_suffix: env['compiler_libs_suffix'] = '-mgw' env.Append(RPATH=Split('$rpath')) env.Append(CCFLAGS=Split(env['EXTRA_CCFLAGS'])) env.Append(CXXFLAGS=Split(env['EXTRA_CXXFLAGS'])) env.Append(CPPDEFINES=Split(env['EXTRA_CPPDEFINES'])) env.Append(LINKFLAGS=Split(env['EXTRA_LINKFLAGS'])) env.Append(CPPPATH=Split(env['EXTRA_CPPPATH'])) env.Append(LIBPATH=Split(env['EXTRA_LIBPATH'])) env.Append(LIBS=Split(env['EXTRA_LIBS']))
[docs] def configure(self, config): pass
[docs] def create(config): " Create compiler tool " compiler = Compiler(config) return compiler