import os import sys import rtconfig if os.getenv('RTT_ROOT'): RTT_ROOT = os.getenv('RTT_ROOT') else: RTT_ROOT = os.path.normpath(os.getcwd() + '/../..') if os.getenv('RTT_RTGUI'): RTT_RTGUI = os.getenv('RTT_RTGUI') else: # set the rtgui root directory by hand # empty string means use the RTGUI in svn RTT_RTGUI = os.path.normpath(r'F:\Project\git\rt-gui\components\rtgui') # RTT_RTGUI ='' sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] from building import * env = Environment() Export('RTT_ROOT') Export('rtconfig') if rtconfig.PLATFORM == 'cl': TARGET = 'rtthread-win32.' + rtconfig.TARGET_EXT libs = Split(''' winmm gdi32 winspool comdlg32 advapi32 shell32 ole32 oleaut32 uuid odbc32 odbccp32 ''') definitions = Split(''' WIN32 _DEBUG _CONSOLE MSVC _TIME_T_DEFINED ''') env.Append(CCFLAGS=rtconfig.CFLAGS) env.Append(LINKFLAGS=rtconfig.LFLAGS) env['LIBS']=libs env['CPPDEFINES']=definitions elif rtconfig.PLATFORM == 'mingw': libs = Split(''' winmm gdi32 winspool comdlg32 advapi32 shell32 ole32 oleaut32 uuid odbc32 odbccp32 ''') TARGET = 'rtthread-win32.' + rtconfig.TARGET_EXT env = Environment(tools = ['mingw'], AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, AR = rtconfig.AR, ARFLAGS = '-rc', LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) env['LIBS']=libs env.PrependENVPath('PATH', rtconfig.EXEC_PATH) else: TARGET = 'rtthread' env.Append(CCFLAGS=rtconfig.CFLAGS) env.Append(LINKFLAGS=rtconfig.LFLAGS) env.Append(LIBS=['m']) # prepare building environment objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False, remove_components=['rtgui']) if GetDepend('RT_USING_RTGUI'): sdl_lib = ['SDL', 'SDLmain'] sdl_lib_path = [os.path.abspath('SDL/lib/x86')] sdl_include_path = [os.path.abspath('SDL/include')] env.Append(LIBS=sdl_lib) env.Append(LIBPATH=sdl_lib_path) env.Append(CPPPATH=sdl_include_path) if RTT_RTGUI: objs += SConscript(os.path.join(RTT_RTGUI, 'SConscript'), variant_dir='build/components/rtgui', duplicate=0) objs = objs + SConscript(RTT_RTGUI+'/../../demo/examples/SConscript', variant_dir='build/examples/gui', duplicate=0) else: objs += SConscript(os.path.join(RTT_ROOT + '/components/rtgui', 'SConscript'), variant_dir='build/components/rtgui', duplicate=0) objs = objs + SConscript(RTT_ROOT + '/examples/gui/SConscript', variant_dir='build/examples/gui', duplicate=0) if GetDepend('RT_USING_TC'): objs = objs + SConscript(RTT_ROOT + '/examples/kernel/SConscript', variant_dir = 'build/tc/kernel', duplicate=0) def ObjRemove(objs, remove): for item in objs: # print type(item), os.path.basename(str(item)) if os.path.basename(str(item)) in remove: objs.remove(item) return # build program -shared if GetDepend('RT_USING_MODULE'): # Remove module.c in $RTT_ROOT/src ObjRemove(objs, ['module.obj', 'module.o']) AddOption('--def', dest='def', action='store_true', default=False, help='create rthread.def of rtthread.dll on windows') if GetOption('def'): if rtconfig.PLATFORM != 'mingw': print "scons error: `--def' can only work with mingw" exit(1) env['LINKFLAGS'] = rtconfig.DEFFILE_LFLAGS env.SharedLibrary("rtthread.dll", objs) program = '' else: if rtconfig.PLATFORM == 'cl': objs += ['rtthread.def'] elif rtconfig.PLATFORM == 'mingw': rtconfig.POST_ACTION = 'del /Q rtthread.lib \n rename librtthread.a rtthread.lib\n' # rtconfig.POST_ACTION = 'lib /machine:i386 /def:rtthread.def /out:rtthread.lib' env.SharedLibrary("rtthread.dll", objs) program = env.Program(TARGET, 'dummy.c', LIBS='rtthread', LIBPATH='.') else: program = env.Program(TARGET, objs) # end building EndBuilding(TARGET, program)