www.pudn.com > mantis-0.9.5.rar > SConstruct



import os
import glob
import string
import sys
from scripts.build_support import *

#SConscriptChdir(1)



#local vars

platform   = ARGUMENTS.get('platform', 'mica2')      
homedir    = os.getcwd ()

localpath  = string.replace(os.environ['PWD'] + '/',
                           homedir + '/', '')
build_path = 'build-' + platform + '/'


# build targets function
def build_src():
    BuildDir (localpath + build_path + 'src', 'src', duplicate = 0)
    SConscript (localpath + build_path + 'src/SConscript', 'env')

    SConscript (localpath + 'SConscript',
                          'env',
                          src_dir = localpath,
                          build_dir = localpath + build_path,
                          duplicate = 0)
    return None


libpaths = '#' + localpath + build_path + 'src/'

# include paths init
cpppath_list = []

# libraries
lib_list = []



# library paths
lib_path_list = []

add_lib_path (lib_path_list, libpaths + 'mos/sys')
add_lib_path (lib_path_list, libpaths + 'mos/dev')
add_lib_path (lib_path_list, libpaths + 'mos/com')
add_lib_path (lib_path_list, libpaths + 'mos/share')
add_lib_path (lib_path_list, libpaths + 'lib')


if platform == 'linux':
    print "Output Target set to Linux (x86)"

    # linux platform includes and libs
    add_include_path (cpppath_list, '#src/mos/kernel/linux/include')
    add_include_path (cpppath_list, '#src/mos/kernel/include')
    add_include_path (cpppath_list, '#src/mos/sys/include')
    add_include_path (cpppath_list, '#src/mos/dev/include')
    add_include_path (cpppath_list, '#src/lib/include')
    add_include_path (cpppath_list, '#src/mos/com/include')
    add_include_path (cpppath_list, '#src/mos/share/include')
    add_include_path (cpppath_list, '/usr/include/netinet')

    add_link_lib (lib_list, 'share')
    add_link_lib (lib_list, 'sys')
    add_link_lib (lib_list, 'com')
    add_link_lib (lib_list, 'moslibs')
    add_link_lib (lib_list, 'kernel')
    add_link_lib (lib_list, 'dev')
    add_link_lib (lib_list, 'pthread')
    add_lib_path (lib_path_list, libpaths + 'mos/kernel/linux')

    # config file for drivers, 
    add_include_path (cpppath_list, '#' + localpath)

    env = Environment(ENV = os.environ,
                      CPPDEFINES = {
                                 'SCONS' : 1,
                                 'PLATFORM_LINUX' : 1,
                                 'ARCH_LINUX' : 1
                                 },
		      CCFLAGS = ['-ggdb', '-Wall'],
                      LINKFLAGS = ['-ggdb', '-Wall'],
		      CPPPATH = cpppath_list,
                      LIBS = lib_list,
                      LIBPATH = lib_path_list,
		      rootdir = homedir + '/',
		      appdir = localpath,
                      builddir = build_path,
                      envparams = '',
		      plat = 'linux'
		      )

else:
    # microcontroller includes and libs
    
    add_include_path (cpppath_list, '#src/mos/kernel/include')
    add_include_path (cpppath_list, '#src/mos/sys/include')
    add_include_path (cpppath_list, '#src/mos/com/include')
    add_include_path (cpppath_list, '#src/mos/dev/include')
    add_include_path (cpppath_list, '#src/mos/share/include')
    add_include_path (cpppath_list, '#src/mos/net/include')
    add_include_path (cpppath_list, '#src/lib/include')

    add_link_lib (lib_list, 'net')
    add_link_lib (lib_list, 'sys')
    add_link_lib (lib_list, 'share')
    add_link_lib (lib_list, 'com')
    add_link_lib (lib_list, 'moslibs')
    add_link_lib (lib_list, 'dev')
    add_link_lib (lib_list, 'kernel_generic')
    add_link_lib (lib_list, 'kernel')
    add_link_lib (lib_list, 'dev')
    
    add_lib_path (lib_path_list, libpaths + 'mos/net')
    add_lib_path (lib_path_list, libpaths + 'mos/kernel/micro')


    # config file for drivers, 
    add_include_path (cpppath_list, '#'+localpath)

    # options from file
    opts = Options(localpath + 'scons.config')     

    env = Environment(ENV = os.environ,
                      options = opts,
                      CPPDEFINES = {'SCONS' : 1,
                                    'FLOODING_ROUTING' : 1,
                                    },
                      CCFLAGS = ['-Wall',
                                 '-Wno-format',
                                 '-g',
                                 '-Os'
                                 ],
                      LINKFLAGS = ['-Wall',
                                   '-Wno-format',
                                   '-g',
                                   '-Os'
                                   ],
                      PROGSUFFIX = '.elf',
                      
                      CPPPATH = cpppath_list,
                      LIBS = lib_list,
                      LIBPATH = lib_path_list,
                      rootdir = homedir + '/',
                      appdir = localpath,
                      envparams = '',
                      builddir = build_path,
                      )

    env.Append(CPPDEFINES = {'ARCH_MICRO' : 1})

    if platform == 'telosb':
        print "Output Target set to TELOSB"
        
        env.Append(CPPPATH = '#src/mos/kernel/micro/include')
        env.Append(CPPPATH = '#src/mos/kernel/msp430/include')
        env.Append(LIBPATH = libpaths + 'mos/kernel/msp430')

        env.Append(CPPDEFINES = {'PLATFORM_TELOSB' : 1})
        env.Append(CPPDEFINES = {'CLOCK_SPEED_4_0' : 1})
        env.Append(CPPDEFINES = {'ARCH_MSP430' : 1})

        env.Append(CCFLAGS = '-mmcu=msp430x1611')
        env.Append(LINKFLAGS = '-mmcu=msp430x1611')  

        env['CC'] = 'msp430-gcc'
        env['plat'] = 'telosb'
        env['RANLIB'] = 'msp430-ranlib'
        env['OBJCOPY'] = 'msp430-objcopy'
        

    else:
        env.Append(CPPPATH = '#src/mos/kernel/micro/include')
        env.Append(CPPPATH = '#src/mos/kernel/avr/include')
        env.Append(CPPPATH = '#src/mos/kernel/avr/boot/include')
        env.Append(LIBPATH = libpaths + 'mos/kernel/avr')

        env.Append(CPPDEFINES = {'ARCH_AVR' : 1})


        env.Append(CCFLAGS = '-mmcu=atmega128')
        env.Append(LINKFLAGS = '-mmcu=atmega128')
        
        env['CC'] = 'avr-gcc'
        env['RANLIB'] = 'avr-ranlib'
        env['OBJCOPY'] = 'avr-objcopy'

                
        if platform == 'mica2':
            print "Output Target set to MICA2"
            env.Append(CPPDEFINES = {'PLATFORM_MICA2' : 1})
            env.Append(CPPDEFINES = {'CLOCK_SPEED_7_37' : 1})
            env.Append(CPPDEFINES = {'PLATFORM_MICA_ANY' : 1})
            env['plat'] = 'mica2'

        if platform == 'micaz':
            print "Output Target set to MICAZ"
            env.Append(CPPDEFINES = {'PLATFORM_MICAZ' : 1})
            env.Append(CPPDEFINES = {'CLOCK_SPEED_7_37' : 1})
            env.Append(CPPDEFINES = {'PLATFORM_MICA_ANY' : 1})
            env['plat'] = 'micaz' 
    
        if platform == 'mica2dot':
            print "Output Target set to MICA2DOT"
            env.Append(CPPDEFINES = {'PLATFORM_MICA2DOT' : 1})
            env.Append(CPPDEFINES = {'CLOCK_SPEED_4_0' : 1})
            env.Append(CPPDEFINES = {'PLATFORM_MICA_ANY' : 1})
            env['plat'] = 'mica2dot'

        if platform == 'avrdev':
            print "Output Target set to AVRDEV"
            env.Append(CPPDEFINES = {'PLATFORM_AVRDEV' : 1})
            env.Append(CPPDEFINES = {'CLOCK_SPEED_3_68' : 1})
            env['plat'] = 'avrdev'
            env['envparams'] = '--sbaud B38400 '

if os.getenv('CC') != None:
   env['CC'] = os.getenv('CC')
if os.getenv('CFLAGS') != None:
   env['CCFLAGS'] = os.getenv('CFLAGS')
if os.getenv('ASFLAGS') != None:
   env['LINKFLAGS'] = os.getenv('ASFLAGS')

env['loadparams'] = ARGUMENTS.get('loadparams', '')

# define builder for avr-objcopy
objcopy = Builder(action = obj_copy_function)
env.Append(BUILDERS = {'ObjCopy' : objcopy})


# set build targets
if os.access(localpath + 'optsconfig.h', os.F_OK):
    targets = build_src()
else:
    Exit('Error: Current directory does not contain an optsconfig.h file')

#SourceSignatures('timestamp')

Export ('env')