Esempio n. 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)
Esempio n. 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)
Esempio n. 3
0
    def __init__(self, project, python=True):
        SConsVariables.__init__(self, args=ARGUMENTS)

        for var in [
          # Linux/GCC style compiler/linker flags.
          'CPPFLAGS', 'CXXFLAGS', 'LDFLAGS',
          # Windows/VC style path lists.
          'PATH', 'INCLUDE', 'LIB',
          ]:
            self.Add(var, "Override os.environ['%s']." % var)

        self.Add(BoolVariable(
          'DEBUG', "build %s with debugging symbols" % project,
          'no'))
        self.Add(BoolVariable(
          'SHARED', "build shared %s libraries" % project,
          'yes'))
        self.Add(BoolVariable(
          'STATIC', "build static %s libraries" % project,
          'yes'))
        self.Add(BoolVariable(
          'TESTS', "Build %s test programs" % project,
          'yes'))

        if python: # Want to build carefree-python based extensions?
            self.Add(PackageVariable(
              'PYTHON',
              "List of python(-config) binary names to build %s for"
              % project,
              'yes'))
 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)
Esempio n. 5
0
    def Options(self, *args, **kwds):
        """
        Add each tool options
        """
        opts = Variables(*args, **kwds)
        self.UpdateOptions(opts)

        return opts
Esempio n. 6
0
    def _GetConfigurationVariables(self):
        """
			Retrieve and define help variables for configuration variables.
		"""

        cmd_line_args = ARGUMENTS
        cfgVars = Variables(None, cmd_line_args)
        [
            cfgVars.Add(BoolVariable(name, helptext, default))
            for name, helptext, default in self._boolean_variables
        ]
        [
            cfgVars.Add(EnumVariable(name, helptext, default, valid))
            for name, helptext, default, valid in self._enumerable_variables
        ]
        [cfgVars.Add(option) for option in self._numerical_variables]

        return cfgVars
Esempio n. 7
0
    def AddVariables(self):
        defvars = SVariables(self.def_env_file, args=ARGUMENTS)
        defvars.AddVariables(
            BoolVariable('verbose', 'Increase verbosity', 0),
            EnumVariable('debug_mode',
                         'debug output and symbols',
                         'no',
                         allowed_values=('no', 'libs', 'tests', 'all'),
                         map={},
                         ignorecase=0),  # case sensitive
            # test abi makes tests to call out for given library call
            EnumVariable('libabi',
                         'Test ABI for library function calling',
                         'aocl',
                         allowed_values=('aocl', 'glibc', 'libm', 'acml',
                                         'amdlibm'),
                         map={},
                         ignorecase=2),  # lowercase always
            EnumVariable('developer',
                         'A developer friendly mode',
                         0,
                         allowed_values=('0', '1', '2', '3', '4'),
                         map={
                             '0': 0,
                             '1': 1,
                             '2': 2,
                             '3': 3,
                             '4': 4
                         }),
            EnumVariable('build',
                         'Build type shortcut',
                         'release',
                         allowed_values=('release', 'developer', 'debug'),
                         ignorecase=2),
            EnumVariable('compiler',
                         "Select compiler type",
                         'gcc',
                         allowed_values=('gcc', 'aocc', 'llvm', 'icc'),
                         ignorecase=2),
            PathVariable('toolchain_base', "Use this as toolchain prefix",
                         '/usr/bin'))

        self.defvars = defvars
Esempio n. 8
0
 def Add(self,
         key,
         help="",
         default=None,
         validator=None,
         converter=None,
         required=False):
     SVariables.Add(self, key, help, default, validator, converter)
     if required:
         print("adding required option ", key[0])
         self.required.append(key[0])
Esempio n. 9
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]
Esempio n. 10
0
    def updateVariables(self):
        """
			Retrieve and define help options for configuration variables.
		"""
        rootdir = Dir('#').abspath
        cfg_files = [
            rootdir + "/library/configuration/" + self._cfg_name + "/" +
            self._module_name + ".py",
        ]

        cfgVars = Variables(cfg_files, self._cmd_line_args)
        [
            cfgVars.Add(BoolVariable(name, helptext, default))
            for name, helptext, default in self._bool_vars
        ]
        [
            cfgVars.Add(EnumVariable(name, helptext, default, valid))
            for name, helptext, default, valid in self._enum_vars
        ]
        [cfgVars.Add(option) for option in self._other_vars]

        self._variables = cfgVars
def _parse_default_command_line_options():
    """Parses the command line options controlling various build settings

    @remarks
        This contains variables that work across all builds. Build-specific variables
        are discouraged, but would be irgnored by SCons' Variables class."""

    command_line_variables = Variables(None, ARGUMENTS)

    # Build configuration (also called build type in many SCons examples)
    command_line_variables.Add(
        BoolVariable(
            'DEBUG',
            'Whether to do an unoptimized debug build',
            False
        )
    )

    # Default architecture for the binaries. We follow the Debian practices,
    # which, while clueless and chaotic, are at least widely used.
    default_arch = 'amd64'
    if 'armv7' in platform.uname()[4]:
        default_arch = 'armhf'
    if 'aarch64' in platform.uname()[4]:
        default_arch = 'arm64'

    # CPU architecture to target
    command_line_variables.Add(
        EnumVariable(
            'TARGET_ARCH',
            'CPU architecture the binary will run on',
            default_arch,
            allowed_values=('armhf', 'arm64', 'x86', 'amd64', 'any')
        )
    )

    # Directory for intermediate files
    command_line_variables.Add(
        PathVariable(
            'INTERMEDIATE_DIRECTORY',
            'Directory in which intermediate build files will be stored',
            'obj',
            PathVariable.PathIsDirCreate
        )
    )

    # Directory for intermediate files
    command_line_variables.Add(
        PathVariable(
            'ARTIFACT_DIRECTORY',
            'Directory in which build artifacts (outputs) will be stored',
            'bin',
            PathVariable.PathIsDirCreate
        )
    )

    return command_line_variables
Esempio n. 12
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'])
Esempio n. 13
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'])
import os

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)
Esempio n. 15
0
askaptoolpath = os.path.join(os.environ['ASKAP_ROOT'], 'share', 'scons_tools')

# The build environment.
env = Environment(ENV =  { 'PATH' : os.environ[ 'PATH' ],
                           '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("squash", "Squash some compiler warnings",False))
opts.Add(BoolVariable("usepgi", "Use Portland Group Compiler",False))
opts.Add(BoolVariable("cpp11", "Use c++11",False))
opts.Add(BoolVariable("oldcpp11", "Use c++11 (old flag)",False))
opts.Add(BoolVariable("update", "svn update?", False))
opts.Update(env)

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

# Compiler flags related to the upgrade to C++11 support
def initOcl(*envt):
    if envt==():
        env=Environment()
    else:
        env=envt[0]

    global opts,dev,plat,multi,kernel,kopts,kernel_opts,useF,useDyn, mcModel, OPENCL_DIR, useOclWrapper, sel

    OPENCL_DIR=os.environ['OPENCL_DIR']
    
    envsh = open(OPENCL_DIR+'/OpenCLIntegration/ocl_env.sh', "r")
    envs =envsh.read()
    help = """
    Options:
     lib=0|1 [1] build an OclWrapper library
    *dyn=0|1 [0] build a dynamic Library             OclBuilder.useDyn
    *mcm=s|m|l [s] mcmodel flag for gcc/gfortran
    *plat=AMD|NVIDIA|Intel|Altera|Xilinx|MIC [NVIDIA]
    *dev=CPU|GPU|ACC|FPGA [GPU] device
     gpu=-1|0|1 [-1, means automatic selection]
     acc=-1|0|1 [-1, means automatic selection]
     O=[gcc -O flag] [3]
     F=0|1 [0] use the functional (non-OO) interface OclBuilder.useF
     V=1.1|1.2 [1.2] OpenCL C++ API version
     info=0|1                                        (DEVINFO, PLATINFO)
    *oclwrapper=0|1 [1] use the OclWrapper API       OclBuilder.useOclWrapper

    The following flags can be used to define macros in your code, they are passed on to the OpenCL kernel as well.
     kernel=<number> [1]                             KERNEL   
     sel=<number> [1] generic selection flag         SELECT
     w=<number> [1024] width, e.g. for matrix        WIDTH 
     wx,wy,wz=<number> [128,128,64] x/y/z dimensions WX,WY,WZ
     nth=<number> [1] number of threads per core     NTH
     ngroups=<number> [0] number of workgroups		 NGROUPS
     order=<number> [1] loop order			         LOOP_ORDER 
     ref=0|1|2 [1]     reference 2=ref only          REF
     v=0|1 [1]         verbose                       VERBOSE 
     warn=0|1 [1]      warnings                      WARNINGS
     mode=0|1|2   COPY|COPY+ALLOC|USE 
     dbg=0|1 [0]                                     OCLDBG
     nruns= [1]                                      NRUNS
     multi=0|1 [0]   Support multiple devices in threads, for use with Fortran/GMCF     OCL_MULTIPLE_DEVICES
    *kopts=<string> kernel options, can only be a single alphanumeric string 
                    if you need complex options, put them in the Scons script
                    For example, to add a path for kernel includes:
                    OclBuilder.kopts='-I/abs/path/to/includes'

    D=[comma-sep list of host-only macros, without values]

    The options marked with * can be set as OclBuilder.OPTION=VALUE in the SCons script
    The macros controlled by the other options are listed on the right
    The directory for the OclWrapper can be accessed via OclBuilder.OPENCL_DIR

    The following environment variables must be set (see OPENCL_DIR/OpenCLIntegration/ocl_env.sh):

    """ + envs

   # by default, use the OclWrapper.
    if not 'useOclWrapper' in globals():    
        useOclWrapper = True
 
    if commands.getoutput("uname") == "Darwin":
        OSX=1
        OSFLAG='-DOSX'
    else:
        OSX=0
        OSFLAG='-D__LINUX__'

    opts=Variables()        
    CWD= os.environ['PWD']
    args=sys.argv[1:]
    for arg in args:
        if re.match("(\w+)=(\w+)",arg):
            (k,v)=arg.split('=')
            opts.args[k]=v

    oclwrapper = getOpt('oclwrapper','OclWrapper','1')
    if oclwrapper != '1':
        useOclWrapper = False

    dev=getOpt('dev','Device','GPU')
    plat=getOpt('plat','Platform','NVIDIA')
#    print "PLAT:"+plat
    if OSX==1:
        plat='Apple'
    if plat=='AMD':      
        AMD_SDK_PATH=os.environ['AMDAPPSDKROOT']
    elif plat=='Intel':      
        INTEL_SDK_PATH=os.environ['INTELOCLSDKROOT']
    elif plat=='MIC':      
        INTEL_SDK_PATH=os.environ['INTELOCLSDKROOT']
        dev='ACC'
    elif plat=='Altera':      
        ALTERA_SDK_PATH=os.environ['ALTERAOCLSDKROOT']
        dev='ACC'
    else:   
        if plat != 'Apple':    
            NVIDIA_SDK_PATH=os.environ['NVSDKCUDA_ROOT']
            if os.environ['OPENCL_GPU']!='NVIDIA':
#                print 'No NVIDIA platform, defaulting to AMD CPU'
                if os.environ['OPENCL_CPU']=='AMD':
                    AMD_SDK_PATH=os.environ['AMDAPPSDKROOT']
                    plat='AMD'
                    dev='CPU'
                elif os.environ['OPENCL_ACC']=='Intel':
                    INTEL_SDK_PATH=os.environ['INTELOCLSDKROOT']
                    plat='MIC'
                    dev='ACC'
                elif os.environ['OPENCL_ACC']=='Altera':
                    ALTERA_SDK_PATH=os.environ['ALTERAOCLSDKROOT']
                    plat='Altera'
                    dev='FPGA'
                elif os.environ['OPENCL_ACC']=='Xilinx':
                    XILINX_SDK_PATH=os.environ['SDACCELROOT'] 
                    plat='Xilinx'
                    dev='FPGA'
                elif os.environ['OPENCL_CPU']=='Intel':
                    INTEL_SDK_PATH=os.environ['INTELOCLSDKROOT']
                    plat='Intel'
                    dev='CPU'
                else:
                    print 'No OpenCL-capable GPU found'
                    exit
#        else:
#            print 'NVIDIA'
    env['KERNEL_OPTS']=[]    
    gpu=getOpt('gpu','GPU','-1')
    acc=getOpt('acc','ACC','-1')
    devidxflag='-DDEVIDX=-1'
    if gpu!='-1':
    	devidxflag='-DDEVIDX='+gpu
        dev='GPU'    

    if acc!='-1':
    	devidxflag='-DDEVIDX='+acc
        dev='ACC'
        
    kernel=getOpt('kernel','KERNEL','1')
    sel=getOpt('sel','SELECT','1')
    nth=getOpt('nth','#threads','1')
    ngroups=getOpt('ngroups','#workgroups','0')
    loop_order=getOpt('order','loop order','1')

    multi=getOpt('multi','Support multiple devices (Fortran)','0')    
    multimacro='-DOCL_MULTIPLE_DEVICES=1'
    if multi=='0':
        multimacro=''

    if not 'kopts' in globals():
        kopts=getOpt('kopts','OpenCL kernel compilation options. Can only be a single alphanumeric string.','-cl-fast-relaxed-math')
    nruns=getOpt('nruns','Number of runs','1')
    width=getOpt('w','Width','1024')
    wx=getOpt('wx','X-width','128')
    wy=getOpt('wy','Y-width','128')
    wz=getOpt('wz','Z-width','64')
    env.Append(KERNEL_OPTS=['-DKERNEL='+kernel])
    env.Append(KERNEL_OPTS=['-DSELECT='+sel])
    env.Append(KERNEL_OPTS=['-DNTH='+nth])
    env.Append(KERNEL_OPTS=['-DWIDTH='+width])
    env.Append(KERNEL_OPTS=['-DWX='+wx])
    env.Append(KERNEL_OPTS=['-DWY='+wy])
    env.Append(KERNEL_OPTS=['-DWZ='+wz])
    env.Append(KERNEL_OPTS=['-DLOOP_ORDER='+loop_order])
    env.Append(KERNEL_OPTS=[multimacro])
    ref=getOpt('ref','Reference','1')
    refflag='-DREF'

    verbose=getOpt('v','Verbose','0')
    vflag='-DVERBOSE'
    if verbose=='0':
        vflag=''

    warnings=getOpt('warn','Warnings','1')
    wflag='-Wall'
    if warnings=='0':
        vflag=''

    version=getOpt('V','Version','1.2') # FIXME! V1.2 is broken on most platforms
    verflag=''
    if version=='1.2':
        verflag='-DOCLV2'

    dbg=getOpt('dbg','Debug','0')    
    dbgflag='-g'
    dbgmacro='-DOCLDBG=1'
    if dbg=='0':
        dbgmacro=''
        dbgflag=''



    useF=getOpt('F','Functional',0)
    if 'useF' in env:
        if env['useF']==1:
            useF='1'

    useDyn=getOpt('dyn','Dynamic Library',0)
    if 'useDyn' in env:
        if env['useDyn']==1:
            useDyn='1'
            
    mcModel=getOpt('mcm','GCC Code Model Flag','s')
            
    optim=getOpt('O','Optimisation','2')
    optflag='-O'+optim
    mode=getOpt('mode','Mode','1')
    memreadflag='-DMRMODE='+mode
    devinfo=getOpt('info','DeviceInfo','0')
    devinfoflag=''
    platinfoflag=''
    if devinfo=='1':
        devinfoflag='-DDEVINFO'
        platinfoflag='-DPLATINFO'
        
    defs=getOpt('D','Defines',None)
    defflags=[]
    if defs!=None:
        deflist=defs.split(',')
        defflags=map (lambda s: '-D'+s, deflist)   

    DEVFLAGS=['-DDEV_'+dev,devidxflag]+env['KERNEL_OPTS']+['-DNRUNS='+nruns,'-DNGROUPS='+ngroups,'-DREF='+ref,vflag,verflag, memreadflag,devinfoflag,platinfoflag,multimacro]+defflags
    if plat=='Altera':
        DEVFLAGS+=['-DFPGA']
    if dev=='CPU':
        dbg_dev=dbgmacro+' '        
    else:	
	    dbg_dev=''
    kernel_opts='\\"'+kopts+' -DEXT_DEFS '+dbg_dev+(' '.join(env['KERNEL_OPTS']))+'\\"'
    KERNEL_OPTS=['-DKERNEL_OPTS='+kernel_opts+''] 
    if commands.getoutput("uname") == "Darwin":
        DEVFLAGS+=['-DOSX']    
    if useOclWrapper:    
        oclsources=map (lambda s: OPENCL_DIR+'/OpenCLIntegration/'+s, ['Timing.cc','DeviceInfo.cc','PlatformInfo.cc','OclWrapper.cc'])
        env['OCLSOURCES']=oclsources
    if plat=='Altera':
        oclsources+=[OPENCL_DIR+'/OpenCLIntegration/libstdcxx-compatibility.cpp']
    if OSX==1 and 'ROOTSYS' in os.environ:
        print 'Setting CXX to g++-4.2 for CERN ROOT on OS X'
        env['CXX'] = ['g++-4.2'] # FIXME: because any higher g++ results in ERROR: malloc: *** error for object 0x7fff7064c500: pointer being freed was not allocated
    elif 'CXX_COMPILER' in os.environ:
        env['CXX'] = [ os.environ['CXX_COMPILER'] ]
    elif 'CXX' in os.environ:
        env['CXX'] = [ os.environ['CXX'] ]
    if True or plat!='Altera':
        env.Append(CXXFLAGS = ['-std=c++11',wflag,dbgflag,dbgmacro,optflag]+DEVFLAGS+KERNEL_OPTS) 
    else:    
        env.Append(CXXFLAGS = [wflag,dbgflag,dbgmacro,optflag]+DEVFLAGS+KERNEL_OPTS) 
    env.Append(CFLAGS = [wflag,dbgflag,optflag]+DEVFLAGS+KERNEL_OPTS)     
    env['MACROS'] = DEVFLAGS
    #env.Append(CXXFLAGS = ['-mcmodel=large']

    env.Help(help)
#if useOclWrapper:
#env.Append(CPPPATH=[OPENCL_DIR,OPENCL_DIR+'/OpenCLIntegration'])    
    env.Append(CPPPATH=[OPENCL_DIR+'/OpenCLIntegration'])    
#   else:
#       env.Append(CPPPATH=[OPENCL_DIR])    
    if OSX==1:
        env.Append(FRAMEWORKS=['OpenCL'])
#        if useDyn=='1' and useF=='1':
#            env.Append(LIBPATH=['.'])
#            env.Append(LIBS=['OclWrapper'])
    else:    
        if plat !='Altera':
            env.Append(LIBS=['OpenCL'])
        if plat=='AMD':
            env.Append(CPPPATH=[AMD_SDK_PATH+'/include/', AMD_SDK_PATH+'/include/CL','/usr/include/CL'])
            env.Append(LIBPATH=[AMD_SDK_PATH+'/lib/x86_64'])
        elif plat=='Intel':
            env.Append(CPPPATH=[INTEL_SDK_PATH+'/include/',INTEL_SDK_PATH+'/include/CL'])
            env.Append(LIBPATH=[INTEL_SDK_PATH+'/lib64'])
        elif plat=='MIC':
            env.Append(CPPPATH=[INTEL_SDK_PATH+'/include/'])
            env.Append(LIBPATH=[INTEL_SDK_PATH+'/lib64'])
        elif plat=='Altera':
            env.Append(CPPPATH=map(lambda s: ALTERA_SDK_PATH+s, ['/host/include/','/common/inc','/board/nalla_pcie/include' ]))
            env.Append(LIBPATH=[ALTERA_SDK_PATH+'/host/linux64/lib',ALTERA_SDK_PATH+'/board/nalla_pcie/linux64/lib']) #,ALTERA_SDK_PATH+'/'+os.environ['AOCL_BOARD_PACKAGE_ROOT']+'/linux64/lib'])
            env.Append(LIBS=['alteracl', 'dl', 'acl_emulator_kernel_rt', 'alterahalmmd', 'nalla_pcie_mmd', 'elf', 'rt', 'stdc++'])
            env.Append(CXXFLAGS = ['-fPIC'])
        elif plat=='Xilinx':
#DSA := xilinx:adm-pcie-7v3:1ddr:1.0
#XOCC := $(XILINX_SDACCEL)/bin/xocc
            XILINX_OPENCL = XILINX_SDK_PATH
            OPENCL_INC = XILINX_OPENCL+'/runtime/include/1_2'
            OPENCL_LIB = XILINX_OPENCL+'/runtime/lib/x86_64'
#CLFLAGS := -g --xdevice $(DSA)
#export XCL_PLATFORM=xilinx_adm-pcie-7v3_1ddr_1_0   
            env.Append(CPPPATH=map(lambda s: XILINX_SDK_PATH+s, ['/runtime/include/1_2'])) 
            env.Append(LIBPATH=[XILINX_SDK_PATH+'/runtime/lib/x86_64']) 
            #env.Append(LIBS=['xilinxcl', 'dl', 'acl_emulator_kernel_rt', 'xilinxhalmmd', 'FIXMEnalla_pcie_mmd', 'elf', 'rt', 'stdc++'])
            #env.Append(CXXFLAGS = ['-fPIC'])
        else: # means NVIDIA
            env.Append(CPPPATH=[NVIDIA_SDK_PATH+'/OpenCL/common/inc' ,NVIDIA_SDK_PATH+'/OpenCL/common/inc/CL'])

    if useF=='1':
        if 'FORTRAN_COMPILER' in os.environ:
            env['FORTRAN']=os.environ['FORTRAN_COMPILER']
            env['F95']=os.environ['FORTRAN_COMPILER']
        if 'FC' in os.environ:
            env['FORTRAN']=os.environ['FC']
            env['F95']=os.environ['FC']
        if ('GFORTRAN' in os.environ and env['FORTRAN'] == os.environ['GFORTRAN']) :
            env['FORTRANFLAGS']=env['CFLAGS']
            if OSX==1:
                env['LINKFLAGS']=['-Wl,-stack_size,0x40000000'] # Give OS X 1G stack
            env.Append(FORTRANFLAGS=['-Wno-aliasing','-Wno-unused','-Wno-unused-dummy-argument','-cpp','-m64','-ffree-form','-ffree-line-length-0','-fconvert=big-endian'])
            #env.Append(FORTRANFLAGS=['-mcmodel=large'])
#env['F95FLAGS']=['-Wno-aliasing','-Wno-unused','-Wno-unused-dummy-argument','-cpp','-m64','-mcmodel=medium','-ffree-form','-ffree-line-length-0','-fconvert=big-endian']
            env['F95FLAGS']=['-Wno-aliasing','-Wno-unused','-Wno-unused-dummy-argument','-cpp','-m64','-ffree-form','-ffree-line-length-0','-fconvert=big-endian']
            env.Append(F95FLAGS=env['CFLAGS'])
        else:
            env['CFLAGS'].pop(0)
            env['CFLAGS'].pop(0)
            env['CFLAGS'].pop(0)
            env['FORTRANFLAGS']=env['CFLAGS']
            env.Append(FORTRANFLAGS=['-m64','-fast','-Mipa=fast'])
        if useOclWrapper:
            if useDyn=='1':
                flib = env.SharedLibrary('OclWrapperF', [oclsources,OPENCL_DIR+'/OpenCLIntegration/OclWrapperF.cc'])
            else:    
                flib = env.Library('OclWrapperF', [oclsources,OPENCL_DIR+'/OpenCLIntegration/OclWrapperF.cc'])
            fflib = env.Object('oclWrapper.o',OPENCL_DIR+'/OpenCLIntegration/oclWrapper.f95')
#    else:            
    if useOclWrapper:
        if useDyn=='1':
            lib = env.Library('OclWrapper',oclsources)
        else:        
            lib = env.Library('OclWrapper',oclsources)        
        env.Append(LIBPATH=['.',OPENCL_DIR+'/OpenCLIntegration/'])
    else:        
        env.Append(LIBPATH=['.'])

    if useOclWrapper:
        if useF:
            #env.Append(LIBS=['OclWrapperF','stdc++'])
            env.Append(LIBS=['stdc++'])
            env.Install(OPENCL_DIR+'/OpenCLIntegration/lib', flib)
            env.Alias('installf',OPENCL_DIR+'/OpenCLIntegration/lib', flib)
#    else:
        env.Append(LIBS=['OclWrapper'])
        env.Install(OPENCL_DIR+'/OpenCLIntegration/lib', lib)
        env.Alias('install',OPENCL_DIR+'/OpenCLIntegration/lib', lib)
    return env
Esempio n. 17
0
from SCons.Defaults import DefaultEnvironment
from SCons.Subst import SetAllowableExceptions as AllowSubstExceptions
from SCons.Variables import Variables
from tools_config import ToolsConfig


# Logs for SCons- and script-related warnings that can usually be ignored
SconscriptLog = open("Build/.sconscript.log", "w")
_mscommonLog_path = "Build/.mscommon.log"
with open(_mscommonLog_path, "w"):
    pass    # clears the file
os.environ["SCONS_MSCOMMON_DEBUG"] = os.path.abspath(_mscommonLog_path)


# Command-line build variables
vars = Variables(None)


# Generic build environment applicable to all compilers/targets and used internally by SCons
RootEnv = DefaultEnvironment(tools=[], variables=vars, SCONSCRIPT_LOG=SconscriptLog)


# Require that only known command-line variables are used
vars_unknown = vars.UnknownVariables()
if vars_unknown:
    RootEnv.Exit("Unknown variables: %r" % vars_unknown.keys())


# Require that construction variable names exist at expansion, then add those allowed to be empty
AllowSubstExceptions()
RootEnv.Replace(CPPFLAGS=[], PPCCCOMSTR="", SHCCCOMSTR="", SHLINKCOMSTR="",
Esempio n. 18
0
def build(appname, sources):

    global opts

    help = """
    Options:
    plat=AMD|NVIDIA [NVIDIA]
    dev=CPU|GPU [GPU] device
    kernel=<number> [1]   
    w=<number> [1024]   matrix width
    ref=0|1|2 [1]     reference 2=ref only
    v=0|1 [1]         verbose
    mode=0|1|2   COPY|COPY+ALLOC|USE 
    info=0|1
    gpu=-1|0|1 [-1, means automatic selection]
    """
    if commands.getoutput("uname") == "Darwin":
        OSX = 1
        OSFLAG = '-DOSX'
    else:
        OSX = 0
        OSFLAG = '-D__LINUX__'

    OPENCL_DIR = os.environ['OPENCL_DIR']
    opts = Variables()

    args = sys.argv[1:]
    #import getopt
    #rest = getopt.getopt(args,"hABCD")
    for arg in args:
        if re.match("(\w+)=(\w+)", arg):
            (k, v) = arg.split('=')
            opts.args[k] = v

    dev = getOpt('dev', 'Device', 'GPU')
    plat = getOpt('plat', 'Platform', 'NVIDIA')
    if plat == 'AMD':
        print 'AMD platform'
        AMD_SDK_PATH = os.environ['AMDAPPSDKROOT']
    else:
        NVIDIA_SDK_PATH = os.environ['NVSDKCUDA_ROOT']
        if os.environ['OPENCL_GPU'] != 'NVIDIA':
            print 'No NVIDIA platform, defaulting to AMD CPU'
            AMD_SDK_PATH = os.environ['AMDAPPSDKROOT']
            plat = 'AMD'
            dev = 'CPU'

    gpu = getOpt('gpu', 'GPU', '-1')
    devidxflag = '-DDEVIDX=' + gpu
    if gpu != '-1':
        dev = 'GPU'

    kernel = getOpt('kernel', 'Kernel', '1')
    width = getOpt('w', 'Width', '1024')
    ref = getOpt('ref', 'Reference', '1')
    refflag = '-DREF'
    verbose = getOpt('v', 'Verbose', '0')
    vflag = '-DVERBOSE'
    if verbose == '0':
        vflag = ''
    mode = getOpt('mode', 'Mode', '1')
    memreadflag = '-DMRMODE=' + mode
    devinfo = getOpt('info', 'DeviceInfo', '0')
    devinfoflag = ''
    platinfoflag = ''
    if devinfo == '1':
        devinfoflag = '-DDEVINFO'
        platinfoflag = '-DPLATINFO'
    DEVFLAGS = [
        '-D' + dev, devidxflag, '-DKERNEL=' + kernel, '-DWIDTH=' + width,
        '-DREF=' + ref, vflag, memreadflag, devinfoflag, platinfoflag
    ]
    if commands.getoutput("uname") == "Darwin":
        DEVFLAGS += ['-DOSX']

    oclsources = [
        '../Timing.cc', '../DeviceInfo.cc', '../PlatformInfo.cc',
        '../OclWrapper.cc'
    ]

    env = Environment(CC='g++', CXXFLAGS=['-Wall', '-g', DEVFLAGS])
    env.Help(help)

    if OSX == 1:
        env['FRAMEWORKS'] = ['OpenCL']
        env['CPPPATH'] = [OPENCL_DIR]
    else:
        env['LIBS'] = ['OpenCL']
        if plat == 'AMD':
            env['CPPPATH'] = [OPENCL_DIR, AMD_SDK_PATH + '/include']
            env['LIBPATH'] = [AMD_SDK_PATH + '/lib/x86_64']
        else:
            env['CPPPATH'] = [
                OPENCL_DIR, NVIDIA_SDK_PATH + '/OpenCL/common/inc'
            ]

    env.Program(appname, oclsources + sources)
Esempio n. 19
0
def build(appname,sources):

    global opts
    
    help = """
    Options:
    lib=0|1 [1] build an OclWrapper library
    plat=AMD|NVIDIA|Intel [NVIDIA]
    dev=CPU|GPU [GPU] device
    kernel=<number> [1]   
    w=<number> [1024]   matrix width
    ref=0|1|2 [1]     reference 2=ref only
    v=0|1 [1]         verbose
    mode=0|1|2   COPY|COPY+ALLOC|USE 
    info=0|1
    gpu=-1|0|1 [-1, means automatic selection]
    dbg=0|1 [0]
    nruns= [1]
    D=[comma-sep list of macros]
    """
    
    if commands.getoutput("uname") == "Darwin":
        OSX=1
        OSFLAG='-DOSX'
    else:
        OSX=0
        OSFLAG='-D__LINUX__'

    OPENCL_DIR='.' #os.environ['OPENCL_DIR']
    opts=Variables()        

    args=sys.argv[1:]
    for arg in args:
        if re.match("(\w+)=(\w+)",arg):
            (k,v)=arg.split('=')
            opts.args[k]=v
    buildLibrary=getOpt('lib','buildLibrary','0')
    if appname=='' and buildLibrary=='0':
             buildLibrary='1'
    dev=getOpt('dev','Device','GPU')
    plat=getOpt('plat','Platform','NVIDIA')
    if plat=='AMD':      
        AMD_SDK_PATH=os.environ['AMDAPPSDKROOT']
    elif plat=='Intel':      
        INTEL_SDK_PATH=os.environ['INTELOCLSDKROOT']
    else:    
        NVIDIA_SDK_PATH=os.environ['NVSDKCUDA_ROOT']
        if os.environ['OPENCL_GPU']!='NVIDIA':
            print 'No NVIDIA platform, defaulting to AMD CPU'
            if os.environ['OPENCL_CPU']=='AMD':
                AMD_SDK_PATH=os.environ['AMDAPPSDKROOT']
                plat='AMD'
            elif os.environ['OPENCL_CPU']=='Intel':
		INTEL_SDK_PATH=os.environ['INTELOCLSDKROOT']
		plat='Intel'
	    else:
		print 'No OpenCL-capable GPU found, giving up'
		exit
            dev='CPU'
#        else:
#            print 'NVIDIA'
    
    gpu=getOpt('gpu','GPU','-1')
    devidxflag='-DDEVIDX='+gpu
    if gpu!='-1':
        dev='GPU'
        
    kernel=getOpt('kernel','Kernel','1')
    nruns=getOpt('nruns','Number of runs','1')
    width=getOpt('w','Width','1024')
    ref=getOpt('ref','Reference','1')
    refflag='-DREF'
    verbose=getOpt('v','Verbose','0')
    vflag='-DVERBOSE'
    if verbose=='0':
        vflag=''
    dbg=getOpt('dbg','Debug','0')    
    dbgflag='-g'
    if dbg=='0':
        dbgflag=''
    mode=getOpt('mode','Mode','1')
    memreadflag='-DMRMODE='+mode
    devinfo=getOpt('info','DeviceInfo','0')
    devinfoflag=''
    platinfoflag=''
    if devinfo=='1':
        devinfoflag='-DDEVINFO'
        platinfoflag='-DPLATINFO'
        
    defs=getOpt('D','Defines',None)
    defflags=[]
    if defs!=None:
        deflist=defs.split(',')
        defflags=map (lambda s: '-D'+s, deflist)   
    
    DEVFLAGS=['-D'+dev,devidxflag,'-DKERNEL='+kernel,'-DNRUNS='+nruns,'-DWIDTH='+width,'-DREF='+ref,vflag, memreadflag,devinfoflag,platinfoflag]+defflags
    if commands.getoutput("uname") == "Darwin":
        DEVFLAGS+=['-DOSX']    
        
    oclsources=map (lambda s: OPENCL_DIR+'/'+s, ['Timing.cc','DeviceInfo.cc','PlatformInfo.cc','OclWrapper.cc'])
        
    env = Environment( CC = 'g++', CXXFLAGS = ['-Wall',dbgflag,'-O3',DEVFLAGS]) 
    env.Help(help)
    
    if OSX==1:
        env['FRAMEWORKS'] = ['OpenCL']
        env.Append(CPPPATH=[OPENCL_DIR])
    else:    
        env.Append(LIBS=['OpenCL'])
        if plat=='AMD':
            env['CPPPATH']=[OPENCL_DIR,AMD_SDK_PATH+'/include','/usr/include/CL']
            env['LIBPATH']=[AMD_SDK_PATH+'/lib/x86_64']
        elif plat=='Intel':
            env['CPPPATH']=[OPENCL_DIR,INTEL_SDK_PATH+'/include/CL']
            env['LIBPATH']=[INTEL_SDK_PATH+'/lib64']
        else:
            env['CPPPATH']=[OPENCL_DIR,OPENCL_DIR+'/CL',NVIDIA_SDK_PATH+'/OpenCL/common/inc']
    if buildLibrary=='1':        
        env.Library('OclWrapper',oclsources)
    else:        
        env.Append(CPPPATH='./OpenCLIntegration/')
        env.Append(LIBPATH='./OpenCLIntegration/')
        env.Append(LIBS='OclWrapper')
        env.SConscript('OpenCLIntegration/SConstruct')
        env.Program(appname+'_'+dev+'_'+plat+'_'+kernel,sources)
Esempio n. 20
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)
def build(classname,binname,sources):

    destdir='../SBA/'
    global opts

    flags=[]
    switches=[]
    boost=0

    GEN=1
    # MACROS
    wordsz=32
    WORDSZ='WORDSZ='+str(wordsz)
    GL='GANNET_LANGUAGE'
    NEW=''
    VERBOSE='' #V='VERBOSE'
    # No SystemC by default
    SYSC=''
    SC_IDP=''
    SYSC_FIXME=''
    # Compile for VM (otherwise compiles to model HW)
    VM='VM=0'
    SEQVM='SEQVM=0'
#    OLDVM='OLDVM=1'
    USE_THREADS='USE_THREADS=0'
    DISTR='DISTR=0'
    use_pthreads = False
    THREADED_CORE='' # 'THREADED_CORE=0'
    threaded_core = False
    # Count CPU cycles
    CYCLES='' # 'CYCLES'
    TIMINGS='' # 'TIMINGS'
    STATIC_ALLOC='STATIC_ALLOC'

    # Flags
    WARN='-Wall '
    OPTSPEED    = '-O3 -fno-exceptions -fno-rtti '
    OPTSIZE = '-Os -fno-exceptions -fno-rtti '
    OPTTHREADS = '-O3 '
    OPTSYSC =  '-O3 '
    DEBUG = ''
    ARCH=''
    NO_SOCKET=''
    OPT = OPTSYSC
    CYGWIN=0
    PIC = '-fPIC '
    # These are used by the build script to generate flags/switches
    GUI=None
    OSX=0
    # Flag for cross-compilation
    XC=0
    # Use LLVM
    # LLVM=1: x86, LLVM=2: ppc
    LLVM=0
    # SystemC
    SC=0
    H=0 # Help
    MACROS = ['INTERFACE_OBJ']
    yaml_config='../../SystemConfigurations/SBA.yml'

    #use options without leading '-': scons v=0 gui=QtGui
    opts = Variables()
    opts.Add('v', 'Verbose', 0)
    opts.Add('new', 'New', 0)
    opts.Add('gui', 'Use Qt GUI', "QtGui")
    opts.Add('xc', 'Crosscompile',0)
    opts.Add('llvm', 'Use LLVM',0)
    opts.Add('sysc','Use SystemC',0)
    opts.Add('win','CygWin',0)
    opts.Add('vm', 'Virtual Machine',0)
    opts.Add('sock', 'Use POSIX socket interface',1)
    opts.Add('svm', 'Sequential Virtual Machine',0)
# options can't take . or / in the strings!!
#    opts.Add('yml','YAML configuration file','') #'../../SBA.yml')
    opts.Add('cycles', 'Count CPU cycles',0)
    opts.Add('timings', 'Time program execution',0)
    opts.Add('dyn', 'Dynamic memory',0)
    opts.Add('pthreads', 'Use POSIX Threads',0)
    opts.Add('wordsz', 'Set WORDSZ',32)
    opts.Add('ptcore', 'Use POSIX Threaded Core',0)    
    opts.Add('dbg', 'Debug',0)
    opts.Add('nogen',"Don't generate C++ sources from Ruby code",0) 
    opts.Add('opt', 'Optimise','speed') # or 'size'
    opts.Add('D','Macros (add as a string: D="MACRO1:1 MACRO2 MACRO3:whatever"\nSCons is too stupid to allow "=")','') # add additional macros as a string
    opts.Add('h', 'Help',0)

    args=sys.argv[1:]
    #import getopt
    #rest = getopt.getopt(args,"hABCD")
    for arg in args:
        if re.match("(\w+)=(\w+)",arg):
            (k,v)=arg.split('=')
            opts.args[k]=v

    #exit(opts.options)

    for param in os.environ.keys():
        if param == "VERBOSE":
            VERBOSE='VERBOSE'
        if param == "GANNET_YML_CONFIG":
            yaml_config=os.environ["GANNET_YML_CONFIG"]

    for option in opts.options:
        if option.key == 'nogen' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            GEN=0
        if option.key == 'v' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            VERBOSE='VERBOSE'
        if option.key == 'new' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            NEW='NEW=1'
        if option.key == 'gui' and opts.args.has_key(option.key) and opts.args[option.key]==option.default:
            GUI='QtGui'
        if option.key == 'xc' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            XC=1
            OPT=OPTSPEED
        if option.key == 'llvm' and opts.args.has_key(option.key): # and opts.args[option.key]!=option.default:
            if opts.args[option.key]=='1':
                LLVM=1
            elif opts.args[option.key]=='2':
                LLVM=2
            else:
                LLVM=0
            OPT=OPTSPEED
        if option.key == 'sysc' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            SC=1
            PIC=''
            SYSC='SYSC'
            SC_IDP='SC_INCLUDE_DYNAMIC_PROCESSES'
            SYSC_FIXME='SYSC_FIXME=1'
            STATIC_ALLOC=''
            destdir='../../HardwareModel/SystemC/scsrc/SBA/'
            if VERBOSE=='VERBOSE':
                VERBOSE='SC_VERBOSE'
        if option.key == 'win' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            CYGWIN=1
        if option.key == 'vm' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            VM='VM=1'
        if option.key == 'svm' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            VM='VM=1'
            SEQVM='SEQVM=1'
# doesn't work if the path has dots or slashes!
#        if option.key == 'yml' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
#            print "YAML!"
#            yaml_config=opts.args[option.key]
        if option.key == 'sock' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            NO_SOCKET='NO_SOCKET'
            sockpatt=re.compile('^\.\.\/GannetSocket')
            nsources=filter(lambda s: not(sockpatt.search(s)),sources)
            sources=nsources
        if option.key == 'wordsz' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            wordsz=opts.args[option.key]
            WORDSZ='WORDSZ='+str(wordsz)
        if option.key == 'pthreads' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            USE_THREADS='USE_THREADS=1'
            use_pthreads=True
            OPT=OPTTHREADS
        if option.key == 'ptcore' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            THREADED_CORE='THREADED_CORE=1'
            threaded_core=True
            OPT=OPTTHREADS
        if option.key == 'distr' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            DISTR='DISTR=1'
            OPT=OPTSPEED
        if option.key == 'cycles' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            CYCLES='CYCLES'
        if option.key == 'timings' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            TIMINGS='TIMINGS'
        if option.key == 'dyn' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            STATIC_ALLOC=''
        if option.key == 'dbg' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            DEBUG='-g ' #'-g -fno-exceptions -fno-rtti '
            OPT=''
        if option.key == 'opt' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            if SC!=1:
                OPT=OPTSPEED
            else:
                OPT=OPTSYSC
        if option.key == 'D' and  opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            macrostr=re.sub('\s*:\s*','=',opts.args[option.key])
            MACROS=macrostr.split(' ')
        if option.key == 'h' and opts.args.has_key(option.key):
            H=1

    if commands.getoutput("uname") == "Darwin":
        OSX=1
        switches+=['DARWIN']
        if SC==1:
            ARCH='-arch i386'

    if XC==1:
        switches.append('__ppc__')


    FLAGS=''
    SWITCHES=''
    flags+=[WARN,DEBUG,ARCH,PIC,OPT]
    switches+=[SYSC,SC_IDP,SYSC_FIXME,VERBOSE,NEW,VM,SEQVM,WORDSZ,CYCLES,TIMINGS,STATIC_ALLOC,NO_SOCKET,USE_THREADS,THREADED_CORE,DISTR]+MACROS
    for flag in flags:
        if flag !='':
            FLAGS+=flag+' '

    for switch in switches:
        if re.search('BOOST',switch):
            boost=1
        if switch != '':
            SWITCHES+='-D'+switch+' '

    if classname!='':
        csources=sources+[destdir+classname+'.cc']
        if os.path.exists('../../Garnet/SBA/'+classname+'.rb'):
            sources.append(destdir+classname+'.cc')
        if os.path.exists('test_'+classname+'.h'):
            sources.append('test_'+classname+'.cc')
    else:
        csources=sources

    if binname=='':
        bin='test_'+classname+'_runner'
    else:
        bin=binname+str(wordsz)
        sources.append(binname+'.cc')

    #------------------------------------------------------------------------------

    cxx='g++'
    if XC==1:
        cxx='powerpc-405-linux-gnu-g++'
    if LLVM==1:
        cxx='i686-pc-linux-gnu-g++'

#    if SC==1 and CYGWIN==0:
#        cxx='g++-3.3.6'

    env = Environment(variables = opts, CXX = cxx, CXXFLAGS = FLAGS+SWITCHES)
#   Help(opts.GenerateHelpText(env))
    GANNET_DIR=os.environ["GANNET_DIR"]
    print "GANNET_DIR:"+GANNET_DIR
    if H==1:
        print(opts.GenerateHelpText(env))
        exit(1)

    if XC==1:
        HOME=os.environ['HOME']
        env['ENV']['PATH']=os.environ["GANNET_XC_PATH"]+":"+env['ENV']['PATH']
        print env['ENV']['PATH']

    if LLVM==1:
        env['ENV']['PATH']=os.environ["GANNET_LLVM_PATH"]+":"+env['ENV']['PATH']
        print env['ENV']['PATH']

    if GEN==1:
        envr2n = Environment()
        r2n=['../../util/r2n.pl']
    
        targetscc=[]
        targetsh=[]
    
        for csource in csources:
            if not re.search('test_|LookupTable|Types|SystemConfiguration|gannet|Socket|Timings|cs_',csource):
                tsource=re.sub(destdir,'../../Garnet/SBA/',csource)
                source=re.sub('\.cc','.rb',tsource)
                islib=''
                if not re.search('\/Gannet\/',csource):
                    pl=csource.split('/')
                    if pl[-2]=='ServiceCoreLibraries':
                        target='ServiceCoreLibraries/'+pl[-1]
                        add=1
                        islib='-L'
                    else:
                        target=pl[-1]
                        add=1
                    target=destdir+re.sub('\.cc','',target)
                else:
                    target=csource
                    target=re.sub('\.cc','',target)
                    add=1
                    islib='-L'
                if STATIC_ALLOC!='':
                    targetcc=envr2n.Command(target+'.cc',source,"perl -I../../util ../../util/r2n.pl -Y "+yaml_config+' '+islib+" -s -CC $SOURCE > $TARGET")
                else:
                    targetcc=envr2n.Command(target+'.cc',source,"perl -I../../util ../../util/r2n.pl -Y "+yaml_config+' '+islib+" -CC $SOURCE > $TARGET")
                if add==1:
                    targetscc.append(targetcc)
                    targetsh.append(envr2n.Command(target+'.h',source,"perl -I../../util ../../util/r2n.pl -Y "+yaml_config+' '+islib+" -H $SOURCE > $TARGET"))
#        if re.search('SystemConfiguration',csource):
#            targetsh.append(envr2n.Command(target+'.h',source,'/usr/bin/ruby -I ../../ ../../create_Cxx_SystemConfiguration.rb && cp -f SystemConfiguration.h ../SBA'))

    runner = 'ErrorPrinter'

    def sconsWrapper(target,source,env):
        #converting from list of Node to list of string
        filenames=[]
        for item in source:
            filenames.append(str(item))
        createRunner(filenames,str(target[0]),runner,GUI,SC) # call createRunner from cxxtestgenlib
        return None

    if binname=='' and SC!=1:
        outputFileName = 'test_'+classname+'.cc'
        files = ['test_'+classname+'.h']
        env.Command(outputFileName,files,sconsWrapper)
#FIXME: dl only needed for dynamic loading!
    libs=['m','dl'] 
    if use_pthreads or threaded_core:
        libs+=['pthread']
#libs+=['pthread','boost_thread-mt']

    # SBA classes should not use boost shared libraries, only header files
    if binname!='' and boost==1:
        libs+=['boost_program_options']

    INCpaths=['.']
    if SC!=1:
        INCpaths=['.',GANNET_DIR+'/VirtualMachine/SBA/']
    LIBpaths=[]

    if boost==1:
        INCpaths+=[os.environ['BOOST_INC']]

    if SC==1 and not OSX and not CYGWIN:
        INCpaths+=[os.environ['SYSTEMC_INC'],os.environ['SYSTEMC_TLM']]
        LIBpaths+=[os.environ['SYSTEMC_LIB']]

    if OSX==1:
        INCpaths=['.',GANNET_DIR+'/VirtualMachine/SBA/']
        LIBpaths=['/usr/local/lib/']
        libs=['m']
        if boost==1:
            INCpaths+=[os.environ['BOOST_INC']]
            libs+=[os.environ['BOOST_LIB']] 
        
    if SC==1 and OSX==1:
        INCpaths+=[os.environ['SYSTEMC_INC'],os.environ['SYSTEMC_TLM']]
        LIBpaths+=[os.environ['SYSTEMC_LIB']]
#        INCpaths+=['/opt/systemc-2.2/include/','/opt/systemc-2.2/include/tlm'] #FIXME!
#        LIBpaths+=['/opt/systemc-2.2/lib-macosx/'] #FIXME!
#           INCpaths+=['/usr/local/systemc-2.1/include/']
#           LIBpaths+=['/usr/local/systemc-2.1/lib-macosx/']

    if SC==1 and CYGWIN==1:
        INCpaths+=[os.environ['SYSTEMC_INC'],os.environ['SYSTEMC_TLM']]
        LIBpaths+=[os.environ['SYSTEMC_LIB']]
#INCpaths+=['/cygdrive/c/Waqar/DCS/SystemC/systemc-2.1.v1/include','/cygdrive/c/Waqar/DCS/SystemC/TLM-2005-04-08/tlm'] #FIXME!
#        LIBpaths+=['/cygdrive/c/Waqar/DCS/SystemC/systemc-2.1.v1/lib-cygwin'] #FIXME!

    if SC==1:
        libs+=['systemc','dl']

    if GUI:
        INCpaths+=['/usr/lib/qt3/include/'] #FIXME!
        listL=commands.getoutput("pkg-config --libs-only-L qt-mt").split("-L")
        listL.remove('')
        LIBpaths+=listL
        listl=commands.getoutput("pkg-config --libs-only-l qt-mt").split("-l")
        listl.remove('')
        libs+=listl
    #WV: to have multiple targets, we just need to set bin : bin is short for
    #env.Program(target=bin,...)
    if SC==1:
		sclib=env.Library('gannet',sources,LIBS=libs,LIBPATH=LIBpaths,CPPPATH=INCpaths)
		env.Install('../../HardwareModel/SystemC/lib',sclib)
		env.Alias('movelib','../../HardwareModel/SystemC/lib')
		env.Depends(sclib,targetscc+targetsh+r2n)
    else:
        prog=env.Program(bin,sources,LIBS=libs,LIBPATH=LIBpaths,CPPPATH=INCpaths)
        env.Install('../../bin',prog)
        env.Alias('install','../../bin')
        if GEN==1:
            env.Depends(prog,targetscc+targetsh+r2n)
Esempio n. 22
0
def GetNumpyOptions(args):
    """Call this with args=ARGUMENTS to take into account command line args."""
    from SCons.Variables import Variables, EnumVariable, BoolVariable

    opts = Variables(None, args)

    opts.Add('scons_tool_path',
             'comma-separated list of directories to look '\
             'for tools (take precedence over internal ones)',
             '')

    # Add directories related info
    opts.Add('pkg_name',
             'name of the package (including parent package if any)', '')
    opts.Add('src_dir', 'src dir relative to top called', '.')
    opts.Add('build_prefix', 'build prefix (NOT including the package name)',
             get_scons_build_dir())
    opts.Add('distutils_libdir',
             'build dir for libraries of distutils (NOT including '\
             'the package name)',
             pjoin('build', 'lib'))
    opts.Add('distutils_clibdir',
             'build dir for pure C libraries (clib), NOT including '\
             'the package name)',
             pjoin('build', 'lib'))
    opts.Add('distutils_install_prefix',
             'install directory prefix (the one from --prefix)', None)
    opts.Add('include_bootstrap',
             "include directories for boostraping numpy (if you do not know" \
             " what that means, you don't need it)" ,
             '')
    opts.Add('pkg_path', "UNDOCUMENTED", '')
    opts.Add(
        BoolVariable('inplace',
                     "true if building in place numpy, false if not", 0))

    # Add compiler related info
    opts.Add('cc_opt', 'name of C compiler', '')
    opts.Add('cc_opt_path', 'path of the C compiler set in cc_opt', '')

    opts.Add('f77_opt', 'name of F77 compiler', '')
    opts.Add('f77_opt_path', 'path of the F77 compiler set in cc_opt', '')

    opts.Add('cxx_opt', 'name of C compiler', '')
    opts.Add('cxx_opt_path', 'path of the C compiler set in cc_opt', '')

    opts.Add(
        BoolVariable('bypass',
                     "true if bypassing compiler detection by distutils", 0))
    opts.Add(
        BoolVariable('import_env',
                     "true if importing user env into numscons env['ENV'].",
                     0))
    opts.Add(BoolVariable('debug', "True if debug mode", 0))

    # Silent mode
    opts.Add(EnumVariable('silent',
                        '0 means max verbose, 1 less verbose, and 2 '\
                        'almost nothing',
                        '0', allowed_values = ('0', '1', '2', '3')))
    opts.Add(
        BoolVariable('bootstrapping',
                     "true if bootrapping numpy, false if not", 0))

    # Logging option
    opts.Add('log_level',
             '0 means max log, Any positive integer is OK '\
             '(logging value)', numscons.core.trace.CRITICAL)

    return opts
Esempio n. 23
0
def initOcl(*envt):
    if envt == ():
        env = Environment()
    else:
        env = envt[0]

    global opts, dev, plat, kernel, kopts, kernel_opts, useF, useDyn, mcModel, OPENCL_DIR, useOclWrapper

    help = """
    Options:
     lib=0|1 [1] build an OclWrapper library
    *dyn=0|1 [0] build a dynamic Library             OclBuilder.useDyn
    *mcm=s|m|l [s] mcmodel flag for gcc/gfortran
    *plat=AMD|NVIDIA|Intel|Altera|MIC [NVIDIA]
    *dev=CPU|GPU|ACC|FPGA [GPU] device
     gpu=-1|0|1 [-1, means automatic selection]
     acc=-1|0|1 [-1, means automatic selection]
     O=[gcc -O flag] [3]
     F=0|1 [0] use the functional (non-OO) interface OclBuilder.useF
     V=1.1|1.2 [1.2] OpenCL C++ API version
     info=0|1                                        (DEVINFO, PLATINFO)
    *oclwrapper=0|1 [1] use the OclWrapper API       OclBuilder.useOclWrapper

    The following flags can be used to define macros in your code, they are passed on to the OpenCL kernel as well.
     kernel=<number> [1]                             KERNEL   
     sel=<number> [1] generic selection flag         SELECT
     w=<number> [1024] width, e.g. for matrix        WIDTH 
     wx,wy,wz=<number> [128,128,64] x/y/z dimensions WX,WY,WZ
     nth=<number> [1] number of threads per core     NTH
     ngroups=<number> [0] number of workgroups		 NGROUPS
     order=<number> [1] loop order			        LOOP_ORDER 
     ref=0|1|2 [1]     reference 2=ref only          REF
     v=0|1 [1]         verbose                       VERBOSE 
     warn=0|1 [1]      warnings                      WARNINGS
     mode=0|1|2   COPY|COPY+ALLOC|USE 
     dbg=0|1 [0]                                     OCLDBG
     nruns= [1]                                      NRUNS
    *kopts=<string> kernel options, can only be a single alphanumeric string 
                    if you need complex options, put them in the Scons script
                    For example, to add a path for kernel includes:
                    OclBuilder.kopts='-I/abs/path/to/includes'

    D=[comma-sep list of macros, without values]

    The options marked with * can be set as OclBuilder.OPTION=VALUE in the SCons script
    The macros controlled by the other options are listed on the right
    The directory for the OclWrapper can be accessed via OclBuilder.OPENCL_DIR
    """
    # by default, use the OclWrapper.
    if not 'useOclWrapper' in globals():
        useOclWrapper = True

    if commands.getoutput("uname") == "Darwin":
        OSX = 1
        OSFLAG = '-DOSX'
    else:
        OSX = 0
        OSFLAG = '-D__LINUX__'

    OPENCL_DIR = os.environ['OPENCL_DIR']
    opts = Variables()
    CWD = os.environ['PWD']
    args = sys.argv[1:]
    for arg in args:
        if re.match("(\w+)=(\w+)", arg):
            (k, v) = arg.split('=')
            opts.args[k] = v

    oclwrapper = getOpt('oclwrapper', 'OclWrapper', '1')
    if oclwrapper != '1':
        useOclWrapper = False

    dev = getOpt('dev', 'Device', 'GPU')
    plat = getOpt('plat', 'Platform', 'NVIDIA')
    #    print "PLAT:"+plat
    if OSX == 1:
        plat = 'Apple'
    if plat == 'AMD':
        AMD_SDK_PATH = os.environ['AMDAPPSDKROOT']
    elif plat == 'Intel':
        INTEL_SDK_PATH = os.environ['INTELOCLSDKROOT']
    elif plat == 'MIC':
        INTEL_SDK_PATH = os.environ['INTELOCLSDKROOT']
        dev = 'ACC'
    elif plat == 'Altera':
        ALTERA_SDK_PATH = os.environ['ALTERAOCLSDKROOT']
        dev = 'ACC'
    else:
        if plat != 'Apple':
            NVIDIA_SDK_PATH = os.environ['NVSDKCUDA_ROOT']
            if os.environ['OPENCL_GPU'] != 'NVIDIA':
                #                print 'No NVIDIA platform, defaulting to AMD CPU'
                if os.environ['OPENCL_CPU'] == 'AMD':
                    AMD_SDK_PATH = os.environ['AMDAPPSDKROOT']
                    plat = 'AMD'
                    dev = 'CPU'
                elif os.environ['OPENCL_ACC'] == 'Intel':
                    INTEL_SDK_PATH = os.environ['INTELOCLSDKROOT']
                    plat = 'MIC'
                    dev = 'ACC'
                elif os.environ['OPENCL_ACC'] == 'Altera':
                    ALTERA_SDK_PATH = os.environ['ALTERAOCLSDKROOT']
                    plat = 'Altera'
                    dev = 'FPGA'
                elif os.environ['OPENCL_CPU'] == 'Intel':
                    INTEL_SDK_PATH = os.environ['INTELOCLSDKROOT']
                    plat = 'Intel'
                    dev = 'CPU'
                else:
                    print 'No OpenCL-capable GPU found'
                    exit
#        else:
#            print 'NVIDIA'
    env['KERNEL_OPTS'] = []
    gpu = getOpt('gpu', 'GPU', '-1')
    acc = getOpt('acc', 'ACC', '-1')
    devidxflag = '-DDEVIDX=-1'
    if gpu != '-1':
        devidxflag = '-DDEVIDX=' + gpu
        dev = 'GPU'

    if acc != '-1':
        devidxflag = '-DDEVIDX=' + acc
        dev = 'ACC'

    kernel = getOpt('kernel', 'KERNEL', '1')
    sel = getOpt('sel', 'SELECT', '1')
    nth = getOpt('nth', '#threads', '1')
    ngroups = getOpt('ngroups', '#workgroups', '0')
    loop_order = getOpt('order', 'loop order', '1')
    if not 'kopts' in globals():
        kopts = getOpt(
            'kopts',
            'OpenCL kernel compilation options. Can only be a single alphanumeric string.',
            '-cl-fast-relaxed-math')
    nruns = getOpt('nruns', 'Number of runs', '1')
    width = getOpt('w', 'Width', '1024')
    wx = getOpt('wx', 'X-width', '128')
    wy = getOpt('wy', 'Y-width', '128')
    wz = getOpt('wz', 'Z-width', '64')
    env.Append(KERNEL_OPTS=['-DKERNEL=' + kernel])
    env.Append(KERNEL_OPTS=['-DSELECT=' + sel])
    env.Append(KERNEL_OPTS=['-DNTH=' + nth])
    env.Append(KERNEL_OPTS=['-DWIDTH=' + width])
    env.Append(KERNEL_OPTS=['-DWX=' + wx])
    env.Append(KERNEL_OPTS=['-DWY=' + wy])
    env.Append(KERNEL_OPTS=['-DWZ=' + wz])
    env.Append(KERNEL_OPTS=['-DLOOP_ORDER=' + loop_order])
    ref = getOpt('ref', 'Reference', '1')
    refflag = '-DREF'

    verbose = getOpt('v', 'Verbose', '0')
    vflag = '-DVERBOSE'
    if verbose == '0':
        vflag = ''

    warnings = getOpt('warn', 'Warnings', '1')
    wflag = '-Wall'
    if warnings == '0':
        vflag = ''

    version = getOpt('V', 'Version',
                     '1.2')  # FIXME! V1.2 is broken on most platforms
    verflag = ''
    if version == '1.2':
        verflag = '-DOCLV2'

    dbg = getOpt('dbg', 'Debug', '0')
    dbgflag = '-g'
    dbgmacro = '-DOCLDBG=1'
    if dbg == '0':
        dbgmacro = ''
        dbgflag = ''

    useF = getOpt('F', 'Functional', 0)
    if 'useF' in env:
        if env['useF'] == 1:
            useF = '1'

    useDyn = getOpt('dyn', 'Dynamic Library', 0)
    if 'useDyn' in env:
        if env['useDyn'] == 1:
            useDyn = '1'

    mcModel = getOpt('mcm', 'GCC Code Model Flag', 's')

    optim = getOpt('O', 'Optimisation', '2')
    optflag = '-O' + optim
    mode = getOpt('mode', 'Mode', '1')
    memreadflag = '-DMRMODE=' + mode
    devinfo = getOpt('info', 'DeviceInfo', '0')
    devinfoflag = ''
    platinfoflag = ''
    if devinfo == '1':
        devinfoflag = '-DDEVINFO'
        platinfoflag = '-DPLATINFO'

    defs = getOpt('D', 'Defines', None)
    defflags = []
    if defs != None:
        deflist = defs.split(',')
        defflags = map(lambda s: '-D' + s, deflist)

    DEVFLAGS = ['-DDEV_' + dev, devidxflag] + env['KERNEL_OPTS'] + [
        '-DNRUNS=' + nruns, '-DNGROUPS=' + ngroups, '-DREF=' + ref, vflag,
        verflag, memreadflag, devinfoflag, platinfoflag
    ] + defflags
    if plat == 'Altera':
        DEVFLAGS += ['-DFPGA']
    if dev == 'CPU':
        dbg_dev = dbgmacro + ' '
    else:
        dbg_dev = ''
    kernel_opts = '\\"' + kopts + ' -DEXT_DEFS ' + dbg_dev + (' '.join(
        env['KERNEL_OPTS'])) + '\\"'
    KERNEL_OPTS = ['-DKERNEL_OPTS=' + kernel_opts + '']
    if commands.getoutput("uname") == "Darwin":
        DEVFLAGS += ['-DOSX']
    if useOclWrapper:
        oclsources = map(
            lambda s: OPENCL_DIR + '/OpenCLIntegration/' + s,
            ['Timing.cc', 'DeviceInfo.cc', 'PlatformInfo.cc', 'OclWrapper.cc'])
        env['OCLSOURCES'] = oclsources
    if plat == 'Altera':
        oclsources += [
            OPENCL_DIR + '/OpenCLIntegration/libstdcxx-compatibility.cpp'
        ]
    if OSX == 1 and 'ROOTSYS' in os.environ:
        print 'Setting CXX to g++-4.2 for CERN ROOT on OS X'
        env['CXX'] = [
            'g++-4.2'
        ]  # FIXME: because any higher g++ results in ERROR: malloc: *** error for object 0x7fff7064c500: pointer being freed was not allocated
    elif 'CXX_COMPILER' in os.environ:
        env['CXX'] = [os.environ['CXX_COMPILER']]
    elif 'CXX' in os.environ:
        env['CXX'] = [os.environ['CXX']]
    if True or plat != 'Altera':
        env.Append(CXXFLAGS=['-std=c++11', wflag, dbgflag, dbgmacro, optflag] +
                   DEVFLAGS + KERNEL_OPTS)
    else:
        env.Append(CXXFLAGS=[wflag, dbgflag, dbgmacro, optflag] + DEVFLAGS +
                   KERNEL_OPTS)
    env.Append(CFLAGS=[wflag, dbgflag, optflag] + DEVFLAGS + KERNEL_OPTS)
    env['MACROS'] = DEVFLAGS
    #env.Append(CXXFLAGS = ['-mcmodel=large']

    env.Help(help)
    #if useOclWrapper:
    #env.Append(CPPPATH=[OPENCL_DIR,OPENCL_DIR+'/OpenCLIntegration'])
    env.Append(CPPPATH=[OPENCL_DIR + '/OpenCLIntegration'])
    #   else:
    #       env.Append(CPPPATH=[OPENCL_DIR])
    if OSX == 1:
        env.Append(FRAMEWORKS=['OpenCL'])
#        if useDyn=='1' and useF=='1':
#            env.Append(LIBPATH=['.'])
#            env.Append(LIBS=['OclWrapper'])
    else:
        if plat != 'Altera':
            env.Append(LIBS=['OpenCL'])
        if plat == 'AMD':
            env.Append(CPPPATH=[
                AMD_SDK_PATH + '/include/', AMD_SDK_PATH +
                '/include/CL', '/usr/include/CL'
            ])
            env.Append(LIBPATH=[AMD_SDK_PATH + '/lib/x86_64'])
        elif plat == 'Intel':
            env.Append(CPPPATH=[
                INTEL_SDK_PATH + '/include/', INTEL_SDK_PATH + '/include/CL'
            ])
            env.Append(LIBPATH=[INTEL_SDK_PATH + '/lib64'])
        elif plat == 'MIC':
            env.Append(CPPPATH=[INTEL_SDK_PATH + '/include/'])
            env.Append(LIBPATH=[INTEL_SDK_PATH + '/lib64'])
        elif plat == 'Altera':
            env.Append(CPPPATH=map(lambda s: ALTERA_SDK_PATH + s, [
                '/host/include/', '/common/inc', '/board/nalla_pcie/include'
            ]))
            env.Append(
                LIBPATH=[
                    ALTERA_SDK_PATH + '/host/linux64/lib',
                    ALTERA_SDK_PATH + '/board/nalla_pcie/linux64/lib'
                ]
            )  #,ALTERA_SDK_PATH+'/'+os.environ['AOCL_BOARD_PACKAGE_ROOT']+'/linux64/lib'])
            env.Append(LIBS=[
                'alteracl', 'dl', 'acl_emulator_kernel_rt', 'alterahalmmd',
                'nalla_pcie_mmd', 'elf', 'rt', 'stdc++'
            ])
            env.Append(CXXFLAGS=['-fPIC'])
        else:  # means NVIDIA
            env.Append(CPPPATH=[
                NVIDIA_SDK_PATH + '/OpenCL/common/inc', NVIDIA_SDK_PATH +
                '/OpenCL/common/inc/CL'
            ])

    if useF == '1':
        if 'FORTRAN_COMPILER' in os.environ:
            env['FORTRAN'] = os.environ['FORTRAN_COMPILER']
            env['F95'] = os.environ['FORTRAN_COMPILER']
        if 'FC' in os.environ:
            env['FORTRAN'] = os.environ['FC']
            env['F95'] = os.environ['FC']
        if ('GFORTRAN' in os.environ
                and env['FORTRAN'] == os.environ['GFORTRAN']):
            env['FORTRANFLAGS'] = env['CFLAGS']
            if OSX == 1:
                env['LINKFLAGS'] = ['-Wl,-stack_size,0x40000000'
                                    ]  # Give OS X 1G stack
            env.Append(FORTRANFLAGS=[
                '-Wno-aliasing', '-Wno-unused', '-Wno-unused-dummy-argument',
                '-cpp', '-m64', '-ffree-form', '-ffree-line-length-0',
                '-fconvert=big-endian'
            ])
            #env.Append(FORTRANFLAGS=['-mcmodel=large'])
            #env['F95FLAGS']=['-Wno-aliasing','-Wno-unused','-Wno-unused-dummy-argument','-cpp','-m64','-mcmodel=medium','-ffree-form','-ffree-line-length-0','-fconvert=big-endian']
            env['F95FLAGS'] = [
                '-Wno-aliasing', '-Wno-unused', '-Wno-unused-dummy-argument',
                '-cpp', '-m64', '-ffree-form', '-ffree-line-length-0',
                '-fconvert=big-endian'
            ]
            env.Append(F95FLAGS=env['CFLAGS'])
        else:
            env['CFLAGS'].pop(0)
            env['CFLAGS'].pop(0)
            env['CFLAGS'].pop(0)
            env['FORTRANFLAGS'] = env['CFLAGS']
            env.Append(FORTRANFLAGS=['-m64', '-fast', '-Mipa=fast'])
        if useOclWrapper:
            if useDyn == '1':
                flib = env.SharedLibrary('OclWrapperF', [
                    oclsources,
                    OPENCL_DIR + '/OpenCLIntegration/OclWrapperF.cc'
                ])
            else:
                flib = env.Library('OclWrapperF', [
                    oclsources,
                    OPENCL_DIR + '/OpenCLIntegration/OclWrapperF.cc'
                ])
            fflib = env.Object(
                'oclWrapper.o',
                OPENCL_DIR + '/OpenCLIntegration/oclWrapper.f95')
#    else:
    if useOclWrapper:
        if useDyn == '1':
            lib = env.Library('OclWrapper', oclsources)
        else:
            lib = env.Library('OclWrapper', oclsources)
        env.Append(LIBPATH=['.', OPENCL_DIR + '/OpenCLIntegration/'])
    else:
        env.Append(LIBPATH=['.'])

    if useOclWrapper:
        if useF:
            #env.Append(LIBS=['OclWrapperF','stdc++'])
            env.Append(LIBS=['stdc++'])
            env.Install(OPENCL_DIR + '/OpenCLIntegration/lib', flib)
            env.Alias('installf', OPENCL_DIR + '/OpenCLIntegration/lib', flib)


#    else:
        env.Append(LIBS=['OclWrapper'])
        env.Install(OPENCL_DIR + '/OpenCLIntegration/lib', lib)
        env.Alias('install', OPENCL_DIR + '/OpenCLIntegration/lib', lib)
    return env
Esempio n. 24
0
def build(appname,sources):

    global opts
    
    help = """
    Options:
    plat=AMD|NVIDIA [NVIDIA]
    dev=CPU|GPU [GPU] device
    kernel=<number> [1]   
    w=<number> [1024]   matrix width
    ref=0|1|2 [1]     reference 2=ref only
    v=0|1 [1]         verbose
    mode=0|1|2   COPY|COPY+ALLOC|USE 
    info=0|1
    gpu=-1|0|1 [-1, means automatic selection]
    """
    if commands.getoutput("uname") == "Darwin":
        OSX=1
        OSFLAG='-DOSX'
    else:
        OSX=0
        OSFLAG='-D__LINUX__'

    OPENCL_DIR=os.environ['OPENCL_DIR']
    opts=Variables()        

    args=sys.argv[1:]
    #import getopt
    #rest = getopt.getopt(args,"hABCD")
    for arg in args:
        if re.match("(\w+)=(\w+)",arg):
            (k,v)=arg.split('=')
            opts.args[k]=v
    
    dev=getOpt('dev','Device','GPU')
    plat=getOpt('plat','Platform','NVIDIA')
    if plat=='AMD':      
        print 'AMD platform'
        AMD_SDK_PATH=os.environ['AMDAPPSDKROOT']
    else:    
        NVIDIA_SDK_PATH=os.environ['NVSDKCUDA_ROOT']
        if os.environ['OPENCL_GPU']!='NVIDIA':
            print 'No NVIDIA platform, defaulting to AMD CPU'
            AMD_SDK_PATH=os.environ['AMDAPPSDKROOT']
            plat='AMD'
            dev='CPU'
    
    gpu=getOpt('gpu','GPU','-1')
    devidxflag='-DDEVIDX='+gpu
    if gpu!='-1':
        dev='GPU'
        
    kernel=getOpt('kernel','Kernel','1')
    width=getOpt('w','Width','1024')
    ref=getOpt('ref','Reference','1')
    refflag='-DREF'
    verbose=getOpt('v','Verbose','0')
    vflag='-DVERBOSE'
    if verbose=='0':
        vflag=''
    mode=getOpt('mode','Mode','1')
    memreadflag='-DMRMODE='+mode
    devinfo=getOpt('info','DeviceInfo','0')
    devinfoflag=''
    platinfoflag=''
    if devinfo=='1':
        devinfoflag='-DDEVINFO'
        platinfoflag='-DPLATINFO'
    DEVFLAGS=['-D'+dev,devidxflag,'-DKERNEL='+kernel,'-DWIDTH='+width,'-DREF='+ref,vflag, memreadflag,devinfoflag,platinfoflag]
    if commands.getoutput("uname") == "Darwin":
        DEVFLAGS+=['-DOSX']    
        
    oclsources=['../Timing.cc','../DeviceInfo.cc','../PlatformInfo.cc','../OclWrapper.cc']
        
    env = Environment( CC = 'g++', CXXFLAGS = ['-Wall','-g',DEVFLAGS]) 
    env.Help(help)
    
    if OSX==1:
        env['FRAMEWORKS'] = ['OpenCL']
        env['CPPPATH']=[OPENCL_DIR]
    else:    
        env['LIBS']=['OpenCL']
        if plat=='AMD':
            env['CPPPATH']=[OPENCL_DIR,AMD_SDK_PATH+'/include']
            env['LIBPATH']=[AMD_SDK_PATH+'/lib/x86_64']
        else:
            env['CPPPATH']=[OPENCL_DIR,NVIDIA_SDK_PATH+'/OpenCL/common/inc']
            
    env.Program(appname,oclsources+sources)
Esempio n. 25
0
def build(appname, sources):

    global opts

    help = """
    Options:
    lib=0|1 [1] build an OclWrapper library
    plat=AMD|NVIDIA|Intel [NVIDIA]
    dev=CPU|GPU [GPU] device
    kernel=<number> [1]   
    w=<number> [1024]   matrix width
    ref=0|1|2 [1]     reference 2=ref only
    v=0|1 [1]         verbose
    mode=0|1|2   COPY|COPY+ALLOC|USE 
    info=0|1
    gpu=-1|0|1 [-1, means automatic selection]
    dbg=0|1 [0]
    nruns= [1]
    D=[comma-sep list of macros]
    """

    if commands.getoutput("uname") == "Darwin":
        OSX = 1
        OSFLAG = '-DOSX'
    else:
        OSX = 0
        OSFLAG = '-D__LINUX__'

    OPENCL_DIR = '.'  #os.environ['OPENCL_DIR']
    opts = Variables()

    args = sys.argv[1:]
    for arg in args:
        if re.match("(\w+)=(\w+)", arg):
            (k, v) = arg.split('=')
            opts.args[k] = v
    buildLibrary = getOpt('lib', 'buildLibrary', '0')
    if appname == '' and buildLibrary == '0':
        buildLibrary = '1'
    dev = getOpt('dev', 'Device', 'GPU')
    plat = getOpt('plat', 'Platform', 'NVIDIA')
    if plat == 'AMD':
        AMD_SDK_PATH = os.environ['AMDAPPSDKROOT']
    elif plat == 'Intel':
        INTEL_SDK_PATH = os.environ['INTELOCLSDKROOT']
    else:
        NVIDIA_SDK_PATH = os.environ['NVSDKCUDA_ROOT']
        if os.environ['OPENCL_GPU'] != 'NVIDIA':
            print 'No NVIDIA platform, defaulting to AMD CPU'
            if os.environ['OPENCL_CPU'] == 'AMD':
                AMD_SDK_PATH = os.environ['AMDAPPSDKROOT']
                plat = 'AMD'
            elif os.environ['OPENCL_CPU'] == 'Intel':
                INTEL_SDK_PATH = os.environ['INTELOCLSDKROOT']
                plat = 'Intel'
            else:
                print 'No OpenCL-capable GPU found, giving up'
                exit
            dev = 'CPU'


#        else:
#            print 'NVIDIA'

    gpu = getOpt('gpu', 'GPU', '-1')
    devidxflag = '-DDEVIDX=' + gpu
    if gpu != '-1':
        dev = 'GPU'

    kernel = getOpt('kernel', 'Kernel', '1')
    nruns = getOpt('nruns', 'Number of runs', '1')
    width = getOpt('w', 'Width', '1024')
    ref = getOpt('ref', 'Reference', '1')
    refflag = '-DREF'
    verbose = getOpt('v', 'Verbose', '0')
    vflag = '-DVERBOSE'
    if verbose == '0':
        vflag = ''
    dbg = getOpt('dbg', 'Debug', '0')
    dbgflag = '-g'
    if dbg == '0':
        dbgflag = ''
    mode = getOpt('mode', 'Mode', '1')
    memreadflag = '-DMRMODE=' + mode
    devinfo = getOpt('info', 'DeviceInfo', '0')
    devinfoflag = ''
    platinfoflag = ''
    if devinfo == '1':
        devinfoflag = '-DDEVINFO'
        platinfoflag = '-DPLATINFO'

    defs = getOpt('D', 'Defines', None)
    defflags = []
    if defs != None:
        deflist = defs.split(',')
        defflags = map(lambda s: '-D' + s, deflist)

    DEVFLAGS = [
        '-D' + dev, devidxflag, '-DKERNEL=' + kernel, '-DNRUNS=' + nruns,
        '-DWIDTH=' + width, '-DREF=' + ref, vflag, memreadflag, devinfoflag,
        platinfoflag
    ] + defflags
    if commands.getoutput("uname") == "Darwin":
        DEVFLAGS += ['-DOSX']

    oclsources = map(
        lambda s: OPENCL_DIR + '/' + s,
        ['Timing.cc', 'DeviceInfo.cc', 'PlatformInfo.cc', 'OclWrapper.cc'])

    env = Environment(CC='g++', CXXFLAGS=['-Wall', dbgflag, '-O3', DEVFLAGS])
    env.Help(help)

    if OSX == 1:
        env['FRAMEWORKS'] = ['OpenCL']
        env.Append(CPPPATH=[OPENCL_DIR])
    else:
        env.Append(LIBS=['OpenCL'])
        if plat == 'AMD':
            env['CPPPATH'] = [
                OPENCL_DIR, AMD_SDK_PATH + '/include', '/usr/include/CL'
            ]
            env['LIBPATH'] = [AMD_SDK_PATH + '/lib/x86_64']
        elif plat == 'Intel':
            env['CPPPATH'] = [OPENCL_DIR, INTEL_SDK_PATH + '/include/CL']
            env['LIBPATH'] = [INTEL_SDK_PATH + '/lib64']
        else:
            env['CPPPATH'] = [
                OPENCL_DIR, OPENCL_DIR + '/CL',
                NVIDIA_SDK_PATH + '/OpenCL/common/inc'
            ]
    if buildLibrary == '1':
        env.Library('OclWrapper', oclsources)
    else:
        env.Append(CPPPATH='./OpenCLIntegration/')
        env.Append(LIBPATH='./OpenCLIntegration/')
        env.Append(LIBS='OclWrapper')
        env.SConscript('OpenCLIntegration/SConstruct')
        env.Program(appname + '_' + dev + '_' + plat + '_' + kernel, sources)
Esempio n. 26
0
__author__ = "Jussi Toivola"
__license__ = "MIT License"

from SCons.Script import ARGUMENTS, DefaultEnvironment, HelpFunction as Help
from SCons.Variables import Variables, EnumVariable
from config import *  #IGNORE:W0611
from os.path import join, abspath
from echoutil import loginfo
import os
import sys

#: Are we running a build? This is to avoid messing up code analyzers
#: and Epydoc.
RUNNING_SCONS = ("scons" in sys.argv[0] or "-c" == sys.argv[0])

VARS = Variables('arguments.py')


def GetArg(name, helpmsg, default, allowed_values=None, caseless=True):
    """Utility for adding help information and retrieving argument"""

    if allowed_values is not None:
        VARS.Add(
            EnumVariable(name,
                         helpmsg,
                         default,
                         allowed_values=allowed_values,
                         ignorecase=2))
    else:
        VARS.Add(name, helpmsg, default)
    value = ARGUMENTS.get(name, default)
Esempio n. 27
0
def build(wd,sources):

    destdir='../SBA/'
    global opts

    flags=[]
    switches=[]
    boost=0

    # MACROS
    wordsz=64
    WORDSZ='WORDSZ='+str(wordsz)
    GL='GPRM_LANGUAGE'
    NEW=''
    VERBOSE='' #V='VERBOSE'
    # Compile for VM (otherwise compiles to model HW)
    SEQVM='SEQVM=0'
    USE_THREADS='USE_THREADS=0'
    DISTR='DISTR=0'
    use_pthreads = False
    # B ashkan
    USE_TILERA='' #X= 'USE_TILERA'
    use_tilera = False
    USE_MIC=''
    use_mic = False
    # E ashkan
    STEAL=''
    KERNEL_HAS_STATE=''
    KERNEL_LOCK=''
    THREADED_CORE='' # 'THREADED_CORE=0'
    threaded_core = False
    # Count CPU cycles
    CYCLES='' # 'CYCLES'
    TIMINGS='' # 'TIMINGS'
    STATIC_ALLOC='STATIC_ALLOC'

    # Flags
    #Smash= '-fstack-protector '# Ashkan
    WARN='' #'-Wall '
    CXX0X = '-std=c++11'
    PTHREADS = '-pthread' 
    OPTSPEED    = '-O3 -fno-exceptions -fno-rtti '
    OPTSIZE = '-Os -fno-exceptions -fno-rtti '
    OPTTHREADS = '-O2 ' # '-ansi-alias '
    DEBUG = ''
    ARCH=''
    NO_SOCKET=''
    OPT = '-O2 '
    CYGWIN=0
    PIC = '' #'-fPIC '
    # These are used by the build script to generate flags/switches
    OSX=0
    # Flag for cross-compilation
    XC=0
    # Use LLVM
    # LLVM=1: x86, LLVM=2: ppc
    LLVM=0
    # SystemC
    SC=0
    H=0 # Help
    LIB=False
    SHLIB=False
    MACROS = [] # ['INTERFACE_OBJ']
    yaml_config='../../SystemConfigurations/SBA.yml'

    #use options without leading '-': scons v=0 gui=QtGui
    opts = Variables()
    opts.Add('v', 'Verbose', 0)
    opts.Add('w', 'Warnings', 0)
    opts.Add('new', 'New', 0)
    opts.Add('xc', 'Crosscompile','NONE')
    opts.Add('llvm', 'Use LLVM',0)
    opts.Add('win','CygWin',0)
    opts.Add('vm', 'Virtual Machine',0)
    opts.Add('sock', 'Use POSIX socket interface',1)
    opts.Add('svm', 'Sequential Virtual Machine',0)
# options can't take . or / in the strings!!
#    opts.Add('yml','YAML configuration file','') #'../../SBA.yml')
    opts.Add('cycles', 'Count CPU cycles',0)
    opts.Add('timings', 'Time program execution',0)
    opts.Add('dyn', 'Dynamic memory',0)
    opts.Add('pthreads', 'Use POSIX Threads',0)
    opts.Add('lib', 'Compile as a library named gannet ',0)
    opts.Add('shlib', 'Compile as a shared library named gannet ',0)
    opts.Add('steal', 'Enable task stealing',0)
    opts.Add('stateful', 'For stateful kernels',0)    
    opts.Add('locking', 'Always lock access to stateful kernels',0)    
    opts.Add('wordsz', 'Set WORDSZ',64)
    opts.Add('ptcore', 'Use POSIX Threaded Core',0)    
    opts.Add('dbg', 'Debug',0)
    opts.Add('nogen',"Don't generate C++ sources from Ruby code",0) 
    opts.Add('opt', 'Optimise','speed') # or 'size'
    opts.Add('D','Macros (add as a string: D="MACRO1:1 MACRO2 MACRO3:whatever"\nSCons is too stupid to allow "=")','') # add additional macros as a string
    opts.Add('h', 'Help',0)

    args=sys.argv[1:]
    #import getopt
    #rest = getopt.getopt(args,"hABCD")
    for arg in args:
        if re.match("(\w+)=(\w+)",arg):
            (k,v)=arg.split('=')
            opts.args[k]=v

    #exit(opts.options)

    for param in os.environ.keys():
        if param == "VERBOSE":
            VERBOSE='VERBOSE'
        if param == "GPRM_YML_CONFIG":
            yaml_config=os.environ["GPRM_YML_CONFIG"]

    for option in opts.options:
        if option.key == 'v' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            VERBOSE='VERBOSE'
        if option.key == 'w' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            WARN='-Wall '
        if option.key == 'new' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            NEW='NEW=1'
        if option.key == 'xc' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            XC=1
            # B ashkan
            if opts.args[option.key] == 'Tilera':
                use_tilera=True
                USE_TILERA='USE_TILERA'
            elif opts.args[option.key] == 'MIC':
                use_mic=True
                USE_MIC='USE_MIC'
                '-ansi-alias '
            # E ashkan
            OPT=OPTSPEED
        if option.key == 'llvm' and opts.args.has_key(option.key): # and opts.args[option.key]!=option.default:
            if opts.args[option.key]=='1':
                LLVM=1
            elif opts.args[option.key]=='2':
                LLVM=2
            else:
                LLVM=0
            OPT=OPTSPEED
        if option.key == 'win' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            CYGWIN=1
        if option.key == 'vm' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            VM='VM=1'
        if option.key == 'svm' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            VM='VM=1'
            SEQVM='SEQVM=1'
# doesn't work if the path has dots or slashes!
#        if option.key == 'yml' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
#            print "YAML!"
#            yaml_config=opts.args[option.key]
        if option.key == 'sock' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            NO_SOCKET='NO_SOCKET'
            sockpatt=re.compile('^\.\.\/GannetSocket')
            nsources=filter(lambda s: not(sockpatt.search(s)),sources)
            sources=nsources
        if option.key == 'wordsz' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            wordsz=opts.args[option.key]
            WORDSZ='WORDSZ='+str(wordsz)
        if option.key == 'lib' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            LIB=True
        if option.key == 'shlib' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            SHLIB=True
        if option.key == 'steal' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            STEAL='STEAL=1'
        if option.key == 'stateful' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            KERNEL_HAS_STATE='KERNEL_HAS_STATE=1'            
        if option.key == 'locking' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            KERNEL_LOCK='KERNEL_LOCK=1'            
        if option.key == 'pthreads' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            USE_THREADS='USE_THREADS=1'
            use_pthreads=True
            OPT=OPTTHREADS
        if option.key == 'ptcore' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            THREADED_CORE='THREADED_CORE=1'
            threaded_core=True
            OPT=OPTTHREADS
        if option.key == 'distr' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            DISTR='DISTR=1'
            OPT=OPTSPEED
        if option.key == 'cycles' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            CYCLES='CYCLES'
        if option.key == 'timings' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            TIMINGS='TIMINGS'
        if option.key == 'dyn' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            STATIC_ALLOC=''
        if option.key == 'dbg' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            DEBUG='-g -O0 ' #'-g -fno-exceptions -fno-rtti '
            OPT=''
        if option.key == 'opt' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            OPT=OPTSPEED
        if option.key == 'D' and  opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            macrostr=re.sub('\s*:\s*','=',opts.args[option.key])
            MACROS=macrostr.split(' ')
        if option.key == 'h' and opts.args.has_key(option.key):
            H=1

    if commands.getoutput("uname") == "Darwin":
        OSX=1
        switches+=['DARWIN']
        PTHREADS = ''
        if SC==1:
            ARCH='-arch i386'
            
    # Ashkan commented this out       
    #if XC==1:
    #    switches.append('__ppc__')

    FLAGS=''
    SWITCHES=''
    flags+=[CXX0X,WARN,DEBUG,ARCH,PIC,OPT,PTHREADS]
    # Ashkan added USE_TILERA
    switches+=[VERBOSE,SEQVM,WORDSZ,CYCLES,TIMINGS,STATIC_ALLOC,NO_SOCKET,USE_THREADS,THREADED_CORE,DISTR, STEAL, KERNEL_HAS_STATE, KERNEL_LOCK, USE_TILERA, USE_MIC]+MACROS
    for flag in flags:
        if flag !='':
            FLAGS+=flag+' '
            

    for switch in switches:
        if re.search('BOOST',switch):
            boost=1
        if switch != '':
            SWITCHES+='-D'+switch+' '

    GPRM_DIR=os.environ["GPRM_DIR"]
#    print "GPRM_DIR:"+GPRM_DIR
 			
    bin='gannetvm'+str(wordsz)
    if LIB:
       sources.append(GPRM_DIR+'/GPRM/src/gannet.cc')
    else:
       sources.append(GPRM_DIR+'/GPRM/src/gannetvm.cc')
    #------------------------------------------------------------------------------
    cxx= os.environ['CXX']

#    gcc_version = os.popen('g++ -dumpversion').read().rstrip("\n\r")
#    gcc_version_tuple = [int(x) for x in gcc_version.split('.')]
## WV: HACK! TOO SPECIFIC! USE ENV VAR!
#    if (gcc_version_tuple[1]<6):
#        cxx='/opt/local/bin/g++-mp-4.8'
#    else:
#        cxx='g++'
##Ashkan" none of them, icpc!
#	cxx='/home/ashkan/intel/composer_xe_2013_sp1.2.144/bin/intel64/icpc -no-offload -vec-report6'
        
    if XC==1:
       # cxx='powerpc-405-linux-gnu-g++'
       if use_tilera: 
#         cxx='tile-c++'
          cxx='tile-g++' 
       elif use_mic:
          cxx='/home/ashkan/intel/composer_xe_2013_sp1.2.144/bin/intel64/icpc -mmic -no-offload -vec-report6'
       else:   
          print "WARNING: NO VALID CROSS COMPILATION TARGET, using host CXX"  
    if LLVM==1:
        cxx='i686-pc-linux-gnu-g++'

    env = Environment(variables = opts, CXX = cxx, CXXFLAGS = FLAGS+SWITCHES, LINKFLAGS = [PTHREADS])
#    env.VariantDir(wd+'build/',GPRM_DIR+'/GPRM/build/', duplicate=0)    	
#   Help(opts.GenerateHelpText(env))
    if H==1:
        print(opts.GenerateHelpText(env))
        exit(1)

    if XC==1:
        HOME=os.environ['HOME']
        env['ENV']['PATH']=os.environ["GPRM_XC_PATH"]+":"+env['ENV']['PATH']
        print env['ENV']['PATH']

    if LLVM==1:
        env['ENV']['PATH']=os.environ["GPRM_LLVM_PATH"]+":"+env['ENV']['PATH']
        print env['ENV']['PATH']
 
#FIXME: dl only needed for dynamic loading!
#libs=['m','dl'] 
    libs=['m'] 
    if use_pthreads or threaded_core:
        libs+=['pthread']
    # Ashkan added tmc    
    if use_tilera:
        libs+=[]
#        libs+=['tmc']
#libs+=['pthread','boost_thread-mt']

    # SBA classes should not use boost shared libraries, only header files
    if boost==1:
        libs+=['boost_program_options']

    INCpaths=['.','../',GPRM_DIR+'/GPRM/src/SBA/'] # ,GPRM_DIR+'/GPRM/SBA/ServiceCoreLibraries/']
    LIBpaths=[]

    if boost==1:
        INCpaths+=[os.environ['BOOST_INC']]

    if OSX==1 or OSX==0: # UGLY HACK!
        INCpaths=[wd+'/gensrc/',wd+'/src/GPRM/Kernel/',wd+'/src/','.','../',GPRM_DIR+'/GPRM/src/SBA/',GPRM_DIR+'/GPRM/src/']
#        LIBpaths=['/opt/local/lib/gcc48/','/opt/local/lib/','/usr/local/lib/']
#        libs=['m']
        if boost==1:
            INCpaths+=[os.environ['BOOST_INC']]
            libs+=[os.environ['BOOST_LIB']] 

    #WV: to have multiple targets, we just need to set bin : bin is short for
    #env.Program(target=bin,...)

    if LIB:
            glib=env.Library('gannet',sources,LIBS=libs,LIBPATH=LIBpaths,CPPPATH=INCpaths)
    elif SHLIB:
            glib=env.SharedLibrary('gannet',sources,LIBS=libs,LIBPATH=LIBpaths,CPPPATH=INCpaths)
    else:
            prog=env.Program(bin,sources,LIBS=libs,LIBPATH=LIBpaths,CPPPATH=INCpaths)
            env.Install(wd+'/bin',prog)
            env.Alias('install',wd+'/bin') # make this wd+'/bin' ?
Esempio n. 28
0
def build(wd,sources,flibs):

    destdir='../SBA/'
    global opts

    flags=[]
    switches=[]
    boost=0

    # MACROS
    wordsz=32
    WORDSZ='WORDSZ='+str(wordsz)
    GL='GANNET_LANGUAGE'
    NEW=''
    VERBOSE='' #V='VERBOSE'
    # No SystemC by default
    SYSC=''
    SC_IDP=''
    SYSC_FIXME=''
    # Compile for VM (otherwise compiles to model HW)
    VM='VM=0'
    SEQVM='SEQVM=0'
#    OLDVM='OLDVM=1'
    USE_THREADS='USE_THREADS=0'
    DISTR='DISTR=0'
    use_pthreads = False
    # B ashkan
    USE_TILERA='' #X= 'USE_TILERA'
    use_tilera = False
    # E ashkan
    THREADED_CORE='' # 'THREADED_CORE=0'
    threaded_core = False
    # Count CPU cycles
    CYCLES='' # 'CYCLES'
    TIMINGS='' # 'TIMINGS'
    STATIC_ALLOC='STATIC_ALLOC'

    # Flags
    #Smash= '-fstack-protector '# Ashkan
    WARN='' #'-Wall '
    CXX11 = '-std=c++11'
    OPTSPEED    = '-O3 -fno-exceptions -fno-rtti '
    OPTSIZE = '-Os -fno-exceptions -fno-rtti '
    OPTTHREADS = '-O3 '
    DEBUG = ''
    ARCH=''
    NO_SOCKET=''
    OPT = '-O3 '
    CYGWIN=0
    PIC = '' #'-fPIC '
    # These are used by the build script to generate flags/switches
    OSX=0
    # Flag for cross-compilation
    XC=0
    # Use LLVM
    # LLVM=1: x86, LLVM=2: ppc
    LLVM=0
    # SystemC
    SC=0
    H=0 # Help
    LIB=False
    MACROS = ['INTERFACE_OBJ']
    yaml_config='../../SystemConfigurations/SBA.yml'

    #use options without leading '-': scons v=0 gui=QtGui
    opts = Variables()
    opts.Add('v', 'Verbose', 0)
    opts.Add('w', 'Warnings', 0)
    opts.Add('new', 'New', 0)
    opts.Add('xc', 'Crosscompile',0)
    opts.Add('llvm', 'Use LLVM',0)
    opts.Add('win','CygWin',0)
    opts.Add('vm', 'Virtual Machine',0)
    opts.Add('sock', 'Use POSIX socket interface',1)
    opts.Add('svm', 'Sequential Virtual Machine',0)
# options can't take . or / in the strings!!
#    opts.Add('yml','YAML configuration file','') #'../../SBA.yml')
    opts.Add('cycles', 'Count CPU cycles',0)
    opts.Add('timings', 'Time program execution',0)
    opts.Add('dyn', 'Dynamic memory',0)
    opts.Add('pthreads', 'Use POSIX Threads',0)
    opts.Add('lib', 'Compile as library',0)
    opts.Add('wordsz', 'Set WORDSZ',32)
    opts.Add('ptcore', 'Use POSIX Threaded Core',0)    
    opts.Add('dbg', 'Debug',0)
    opts.Add('nogen',"Don't generate C++ sources from Ruby code",0) 
    opts.Add('opt', 'Optimise','speed') # or 'size'
    opts.Add('D','Macros (add as a string: D="MACRO1:1 MACRO2 MACRO3:whatever"\nSCons is too stupid to allow "=")','') # add additional macros as a string
    opts.Add('h', 'Help',0)

    args=sys.argv[1:]
    #import getopt
    #rest = getopt.getopt(args,"hABCD")
    for arg in args:
        if re.match("(\w+)=(\w+)",arg):
            (k,v)=arg.split('=')
            opts.args[k]=v

    #exit(opts.options)

    for param in os.environ.keys():
        if param == "VERBOSE":
            VERBOSE='VERBOSE'
        if param == "GANNET_YML_CONFIG":
            yaml_config=os.environ["GANNET_YML_CONFIG"]

    for option in opts.options:
        if option.key == 'v' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            VERBOSE='VERBOSE'
        if option.key == 'w' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            WARN='-Wall '
        if option.key == 'new' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            NEW='NEW=1'
        if option.key == 'xc' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            XC=1
            # B ashkan
            use_tilera=True
            USE_TILERA='USE_TILERA'
            # E ashkan
            OPT=OPTSPEED
        if option.key == 'llvm' and opts.args.has_key(option.key): # and opts.args[option.key]!=option.default:
            if opts.args[option.key]=='1':
                LLVM=1
            elif opts.args[option.key]=='2':
                LLVM=2
            else:
                LLVM=0
            OPT=OPTSPEED
        if option.key == 'win' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            CYGWIN=1
        if option.key == 'vm' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            VM='VM=1'
        if option.key == 'svm' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            VM='VM=1'
            SEQVM='SEQVM=1'
# doesn't work if the path has dots or slashes!
#        if option.key == 'yml' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
#            print "YAML!"
#            yaml_config=opts.args[option.key]
        if option.key == 'sock' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            NO_SOCKET='NO_SOCKET'
            sockpatt=re.compile('^\.\.\/GannetSocket')
            nsources=filter(lambda s: not(sockpatt.search(s)),sources)
            sources=nsources
        if option.key == 'wordsz' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            wordsz=opts.args[option.key]
            WORDSZ='WORDSZ='+str(wordsz)
        if option.key == 'lib' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            LIB=True
        if option.key == 'pthreads' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            USE_THREADS='USE_THREADS=1'
            use_pthreads=True
            OPT=OPTTHREADS
        if option.key == 'ptcore' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            THREADED_CORE='THREADED_CORE=1'
            threaded_core=True
            OPT=OPTTHREADS
        if option.key == 'distr' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            DISTR='DISTR=1'
            OPT=OPTSPEED
        if option.key == 'cycles' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            CYCLES='CYCLES'
        if option.key == 'timings' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            TIMINGS='TIMINGS'
        if option.key == 'dyn' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            STATIC_ALLOC=''
        if option.key == 'dbg' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            DEBUG='-g -O0 -DGMCF_DEBUG ' #'-g -fno-exceptions -fno-rtti '
            OPT=''
        if option.key == 'opt' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            OPT=OPTSPEED
        if option.key == 'D' and  opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
            macrostr=re.sub('\s*:\s*','=',opts.args[option.key])
            MACROS=macrostr.split(' ')
        if option.key == 'h' and opts.args.has_key(option.key):
            H=1

    if commands.getoutput("uname") == "Darwin":
        OSX=1
        switches+=['DARWIN']
        if SC==1:
            ARCH='-arch i386'
            
    # ashkan commented it        
    #if XC==1:
    #    switches.append('__ppc__')

    FLAGS=''
    SWITCHES=''
    flags+=[CXX11,WARN,DEBUG,ARCH,PIC,OPT]
    # Ashkan added USE_TILERA
    switches+=[SYSC,SC_IDP,SYSC_FIXME,VERBOSE,NEW,VM,SEQVM,WORDSZ,CYCLES,TIMINGS,STATIC_ALLOC,NO_SOCKET,USE_THREADS,THREADED_CORE,DISTR, USE_TILERA]+MACROS
    for flag in flags:
        if flag !='':
            FLAGS+=flag+' '
            

    for switch in switches:
        if re.search('BOOST',switch):
            boost=1
        if switch != '':
            SWITCHES+='-D'+switch+' '

    GANNET_DIR=os.environ["GANNET_DIR"]
    print "GANNET_DIR:"+GANNET_DIR
 			
    bin='gmcfCoupler'
    if LIB:
       sources.append(GANNET_DIR+'/GPRM/src/gmcf.cc')
    else:
       sources.append(GANNET_DIR+'/GPRM/src/gmcfCoupler.cc')
    #------------------------------------------------------------------------------
    CXX = os.environ['CXX']
    gcc_version = os.popen(CXX+' -dumpversion').read().rstrip("\n\r")
    gcc_version_tuple = [int(x) for x in gcc_version.split('.')]
# WV: HACK! TOO SPECIFIC!
    if (gcc_version_tuple[1]<6):
        raise Exception('You need at least g++ 4.6 for this!')
    else:
        cxx=CXX
    if XC==1:
       # B ashkan
       # cxx='powerpc-405-linux-gnu-g++'
         cxx='tile-c++'
       # E ashkan
    if LLVM==1:
        cxx='i686-pc-linux-gnu-g++'

    env = Environment(variables = opts, CXX = cxx, CXXFLAGS = FLAGS+SWITCHES)
#    env.VariantDir(wd+'build/',GANNET_DIR+'/GPRM/build/', duplicate=0)    	
#   Help(opts.GenerateHelpText(env))
    if H==1:
        print(opts.GenerateHelpText(env))
        exit(1)

    if XC==1:
        HOME=os.environ['HOME']
        env['ENV']['PATH']=os.environ["GANNET_XC_PATH"]+":"+env['ENV']['PATH']
        print env['ENV']['PATH']

    if LLVM==1:
        env['ENV']['PATH']=os.environ["GANNET_LLVM_PATH"]+":"+env['ENV']['PATH']
        print env['ENV']['PATH']
 
#FIXME: dl only needed for dynamic loading!
#libs=['m','dl'] 
# In order to link a fortran library compiled with gfortran, we must include the gfortran library. Wonder what the equivalent is for ifort, pgfortran?
#FIXME!    libs=flibs+['gfortran','m'] 
    libs = ['m']    
    if use_pthreads or threaded_core:
        libs+=['pthread']


    INCpaths=[wd+'/gensrc/',wd+'/gensrc/GMCF/Models/',wd+'/src/','.','../',GANNET_DIR+'/GPRM/src/SBA/',GANNET_DIR+'/GPRM/src/']
    LIBpaths=[wd+'/gensrc/GMCF/Models/']

    if OSX==1:
        LIBpaths=[wd+'/gensrc/GMCF/Models/','/opt/local/lib/gcc49/','/opt/local/lib/','/usr/local/lib/']

    #WV: to have multiple targets, we just need to set bin : bin is short for
    #env.Program(target=bin,...)

    if LIB:
            glib=env.Library('gmcf',sources,LIBS=libs,LIBPATH=LIBpaths,CPPPATH=INCpaths)
#            env.Alias('install_gmcf',env.Install(wd+'/lib',glib))
    else:
            prog=env.Program(bin,sources,LIBS=libs,LIBPATH=LIBpaths,CPPPATH=INCpaths)
            env.Alias('install',env.Install(wd+'/bin',prog))
Esempio n. 29
0
def build(wd, sources):

    destdir = '../SBA/'
    global opts

    flags = []
    switches = []
    boost = 0

    # MACROS
    wordsz = 64
    WORDSZ = 'WORDSZ=' + str(wordsz)
    GL = 'GPRM_LANGUAGE'
    NEW = ''
    VERBOSE = ''  #V='VERBOSE'
    # Compile for VM (otherwise compiles to model HW)
    SEQVM = 'SEQVM=0'
    USE_THREADS = 'USE_THREADS=0'
    DISTR = 'DISTR=0'
    use_pthreads = False
    # B ashkan
    USE_TILERA = ''  #X= 'USE_TILERA'
    use_tilera = False
    USE_MIC = ''
    use_mic = False
    # E ashkan
    STEAL = ''
    KERNEL_HAS_STATE = ''
    KERNEL_LOCK = ''
    THREADED_CORE = ''  # 'THREADED_CORE=0'
    threaded_core = False
    # Count CPU cycles
    CYCLES = ''  # 'CYCLES'
    TIMINGS = ''  # 'TIMINGS'
    STATIC_ALLOC = 'STATIC_ALLOC'

    # Flags
    #Smash= '-fstack-protector '# Ashkan
    WARN = ''  #'-Wall '
    CXX0X = '-std=c++11'
    PTHREADS = '-pthread'
    OPTSPEED = '-O3 -fno-exceptions -fno-rtti '
    OPTSIZE = '-Os -fno-exceptions -fno-rtti '
    OPTTHREADS = '-O2 '  # '-ansi-alias '
    DEBUG = ''
    ARCH = ''
    NO_SOCKET = ''
    OPT = '-O2 '
    CYGWIN = 0
    PIC = ''  #'-fPIC '
    # These are used by the build script to generate flags/switches
    OSX = 0
    # Flag for cross-compilation
    XC = 0
    # Use LLVM
    # LLVM=1: x86, LLVM=2: ppc
    LLVM = 0
    # SystemC
    SC = 0
    H = 0  # Help
    LIB = False
    SHLIB = False
    MACROS = []  # ['INTERFACE_OBJ']
    yaml_config = '../../SystemConfigurations/SBA.yml'

    #use options without leading '-': scons v=0 gui=QtGui
    opts = Variables()
    opts.Add('v', 'Verbose', 0)
    opts.Add('w', 'Warnings', 0)
    opts.Add('new', 'New', 0)
    opts.Add('xc', 'Crosscompile', 'NONE')
    opts.Add('llvm', 'Use LLVM', 0)
    opts.Add('win', 'CygWin', 0)
    opts.Add('vm', 'Virtual Machine', 0)
    opts.Add('sock', 'Use POSIX socket interface', 1)
    opts.Add('svm', 'Sequential Virtual Machine', 0)
    # options can't take . or / in the strings!!
    #    opts.Add('yml','YAML configuration file','') #'../../SBA.yml')
    opts.Add('cycles', 'Count CPU cycles', 0)
    opts.Add('timings', 'Time program execution', 0)
    opts.Add('dyn', 'Dynamic memory', 0)
    opts.Add('pthreads', 'Use POSIX Threads', 0)
    opts.Add('lib', 'Compile as a library named gannet ', 0)
    opts.Add('shlib', 'Compile as a shared library named gannet ', 0)
    opts.Add('steal', 'Enable task stealing', 0)
    opts.Add('stateful', 'For stateful kernels', 0)
    opts.Add('locking', 'Always lock access to stateful kernels', 0)
    opts.Add('wordsz', 'Set WORDSZ', 64)
    opts.Add('ptcore', 'Use POSIX Threaded Core', 0)
    opts.Add('dbg', 'Debug', 0)
    opts.Add('nogen', "Don't generate C++ sources from Ruby code", 0)
    opts.Add('opt', 'Optimise', 'speed')  # or 'size'
    opts.Add(
        'D',
        'Macros (add as a string: D="MACRO1:1 MACRO2 MACRO3:whatever"\nSCons is too stupid to allow "=")',
        '')  # add additional macros as a string
    opts.Add('h', 'Help', 0)

    args = sys.argv[1:]
    #import getopt
    #rest = getopt.getopt(args,"hABCD")
    for arg in args:
        if re.match("(\w+)=(\w+)", arg):
            (k, v) = arg.split('=')
            opts.args[k] = v

    #exit(opts.options)

    for param in os.environ.keys():
        if param == "VERBOSE":
            VERBOSE = 'VERBOSE'
        if param == "GPRM_YML_CONFIG":
            yaml_config = os.environ["GPRM_YML_CONFIG"]

    for option in opts.options:
        if option.key == 'v' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            VERBOSE = 'VERBOSE'
        if option.key == 'w' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            WARN = '-Wall '
        if option.key == 'new' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            NEW = 'NEW=1'
        if option.key == 'xc' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            XC = 1
            # B ashkan
            if opts.args[option.key] == 'Tilera':
                use_tilera = True
                USE_TILERA = 'USE_TILERA'
            elif opts.args[option.key] == 'MIC':
                use_mic = True
                USE_MIC = 'USE_MIC'
                '-ansi-alias '
            # E ashkan
            OPT = OPTSPEED
        if option.key == 'llvm' and opts.args.has_key(
                option.key):  # and opts.args[option.key]!=option.default:
            if opts.args[option.key] == '1':
                LLVM = 1
            elif opts.args[option.key] == '2':
                LLVM = 2
            else:
                LLVM = 0
            OPT = OPTSPEED
        if option.key == 'win' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            CYGWIN = 1
        if option.key == 'vm' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            VM = 'VM=1'
        if option.key == 'svm' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            VM = 'VM=1'
            SEQVM = 'SEQVM=1'
# doesn't work if the path has dots or slashes!
#        if option.key == 'yml' and opts.args.has_key(option.key) and opts.args[option.key]!=option.default:
#            print "YAML!"
#            yaml_config=opts.args[option.key]
        if option.key == 'sock' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            NO_SOCKET = 'NO_SOCKET'
            sockpatt = re.compile('^\.\.\/GannetSocket')
            nsources = filter(lambda s: not (sockpatt.search(s)), sources)
            sources = nsources
        if option.key == 'wordsz' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            wordsz = opts.args[option.key]
            WORDSZ = 'WORDSZ=' + str(wordsz)
        if option.key == 'lib' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            LIB = True
        if option.key == 'shlib' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            SHLIB = True
        if option.key == 'steal' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            STEAL = 'STEAL=1'
        if option.key == 'stateful' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            KERNEL_HAS_STATE = 'KERNEL_HAS_STATE=1'
        if option.key == 'locking' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            KERNEL_LOCK = 'KERNEL_LOCK=1'
        if option.key == 'pthreads' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            USE_THREADS = 'USE_THREADS=1'
            use_pthreads = True
            OPT = OPTTHREADS
        if option.key == 'ptcore' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            THREADED_CORE = 'THREADED_CORE=1'
            threaded_core = True
            OPT = OPTTHREADS
        if option.key == 'distr' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            DISTR = 'DISTR=1'
            OPT = OPTSPEED
        if option.key == 'cycles' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            CYCLES = 'CYCLES'
        if option.key == 'timings' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            TIMINGS = 'TIMINGS'
        if option.key == 'dyn' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            STATIC_ALLOC = ''
        if option.key == 'dbg' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            DEBUG = '-g -O0 '  #'-g -fno-exceptions -fno-rtti '
            OPT = ''
        if option.key == 'opt' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            OPT = OPTSPEED
        if option.key == 'D' and opts.args.has_key(
                option.key) and opts.args[option.key] != option.default:
            macrostr = re.sub('\s*:\s*', '=', opts.args[option.key])
            MACROS = macrostr.split(' ')
        if option.key == 'h' and opts.args.has_key(option.key):
            H = 1

    if commands.getoutput("uname") == "Darwin":
        OSX = 1
        switches += ['DARWIN']
        PTHREADS = ''
        if SC == 1:
            ARCH = '-arch i386'

    # Ashkan commented this out
    #if XC==1:
    #    switches.append('__ppc__')

    FLAGS = ''
    SWITCHES = ''
    flags += [CXX0X, WARN, DEBUG, ARCH, PIC, OPT, PTHREADS]
    # Ashkan added USE_TILERA
    switches += [
        VERBOSE, SEQVM, WORDSZ, CYCLES, TIMINGS, STATIC_ALLOC, NO_SOCKET,
        USE_THREADS, THREADED_CORE, DISTR, STEAL, KERNEL_HAS_STATE,
        KERNEL_LOCK, USE_TILERA, USE_MIC
    ] + MACROS
    for flag in flags:
        if flag != '':
            FLAGS += flag + ' '

    for switch in switches:
        if re.search('BOOST', switch):
            boost = 1
        if switch != '':
            SWITCHES += '-D' + switch + ' '

    GPRM_DIR = os.environ["GPRM_DIR"]
    #    print "GPRM_DIR:"+GPRM_DIR

    bin = 'gannetvm' + str(wordsz)
    if LIB:
        sources.append(GPRM_DIR + '/GPRM/src/gannet.cc')
    else:
        sources.append(GPRM_DIR + '/GPRM/src/gannetvm.cc')
    #------------------------------------------------------------------------------
    cxx = os.environ['CXX']

    #    gcc_version = os.popen('g++ -dumpversion').read().rstrip("\n\r")
    #    gcc_version_tuple = [int(x) for x in gcc_version.split('.')]
    ## WV: HACK! TOO SPECIFIC! USE ENV VAR!
    #    if (gcc_version_tuple[1]<6):
    #        cxx='/opt/local/bin/g++-mp-4.8'
    #    else:
    #        cxx='g++'
    ##Ashkan" none of them, icpc!
    #	cxx='/home/ashkan/intel/composer_xe_2013_sp1.2.144/bin/intel64/icpc -no-offload -vec-report6'

    if XC == 1:
        # cxx='powerpc-405-linux-gnu-g++'
        if use_tilera:
            #         cxx='tile-c++'
            cxx = 'tile-g++'
        elif use_mic:
            cxx = '/home/ashkan/intel/composer_xe_2013_sp1.2.144/bin/intel64/icpc -mmic -no-offload -vec-report6'
        else:
            print "WARNING: NO VALID CROSS COMPILATION TARGET, using host CXX"
    if LLVM == 1:
        cxx = 'i686-pc-linux-gnu-g++'

    env = Environment(variables=opts,
                      CXX=cxx,
                      CXXFLAGS=FLAGS + SWITCHES,
                      LINKFLAGS=[PTHREADS])
    #    env.VariantDir(wd+'build/',GPRM_DIR+'/GPRM/build/', duplicate=0)
    #   Help(opts.GenerateHelpText(env))
    if H == 1:
        print(opts.GenerateHelpText(env))
        exit(1)

    if XC == 1:
        HOME = os.environ['HOME']
        env['ENV'][
            'PATH'] = os.environ["GPRM_XC_PATH"] + ":" + env['ENV']['PATH']
        print env['ENV']['PATH']

    if LLVM == 1:
        env['ENV'][
            'PATH'] = os.environ["GPRM_LLVM_PATH"] + ":" + env['ENV']['PATH']
        print env['ENV']['PATH']

#FIXME: dl only needed for dynamic loading!
#libs=['m','dl']
    libs = ['m']
    if use_pthreads or threaded_core:
        libs += ['pthread']
    # Ashkan added tmc
    if use_tilera:
        libs += []
#        libs+=['tmc']
#libs+=['pthread','boost_thread-mt']

# SBA classes should not use boost shared libraries, only header files
    if boost == 1:
        libs += ['boost_program_options']

    INCpaths = ['.', '../', GPRM_DIR + '/GPRM/src/SBA/'
                ]  # ,GPRM_DIR+'/GPRM/SBA/ServiceCoreLibraries/']
    LIBpaths = []

    if boost == 1:
        INCpaths += [os.environ['BOOST_INC']]

    if OSX == 1 or OSX == 0:  # UGLY HACK!
        INCpaths = [
            wd + '/gensrc/', wd + '/src/GPRM/Kernel/', wd + '/src/', '.',
            '../', GPRM_DIR + '/GPRM/src/SBA/', GPRM_DIR + '/GPRM/src/'
        ]
        #        LIBpaths=['/opt/local/lib/gcc48/','/opt/local/lib/','/usr/local/lib/']
        #        libs=['m']
        if boost == 1:
            INCpaths += [os.environ['BOOST_INC']]
            libs += [os.environ['BOOST_LIB']]

    #WV: to have multiple targets, we just need to set bin : bin is short for
    #env.Program(target=bin,...)

    if LIB:
        glib = env.Library('gannet',
                           sources,
                           LIBS=libs,
                           LIBPATH=LIBpaths,
                           CPPPATH=INCpaths)
    elif SHLIB:
        glib = env.SharedLibrary('gannet',
                                 sources,
                                 LIBS=libs,
                                 LIBPATH=LIBpaths,
                                 CPPPATH=INCpaths)
    else:
        prog = env.Program(bin,
                           sources,
                           LIBS=libs,
                           LIBPATH=LIBpaths,
                           CPPPATH=INCpaths)
        env.Install(wd + '/bin', prog)
        env.Alias('install', wd + '/bin')  # make this wd+'/bin' ?
Esempio n. 30
0
askaptoolpath = os.path.join(os.environ['ASKAP_ROOT'], 'share', 'scons_tools')

# The build environment.
env = Environment(ENV =  { 'PATH' : os.environ[ 'PATH' ],
                           '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