1Import('rtconfig')
2from building import *
3import os
4
5cwd     = GetCurrentDir()
6src     = []
7CPPPATH = [cwd]
8
9support_arch  = {"arm": ["cortex-m3", "cortex-m4", "cortex-m7", "arm926", "cortex-a"],
10                 "aarch64":["cortex-a"],
11                 "risc-v": ["rv64"],
12                 "x86": ["i386"]}
13platform_file = {'armcc': 'rvds.S', 'gcc': 'gcc.S', 'iar': 'iar.S'}
14
15platform = rtconfig.PLATFORM
16arch     = rtconfig.ARCH
17cpu      = rtconfig.CPU
18
19# fix the cpu for risc-v
20if arch == 'risc-v':
21    if GetDepend('ARCH_CPU_64BIT'):
22        cpu = 'rv64'
23
24if platform in platform_file.keys(): # support platforms
25    if arch in support_arch.keys() and cpu in support_arch[arch]:
26        asm_path = 'arch/' + arch + '/' + cpu + '/*_' + platform_file[platform]
27        arch_common = 'arch/' + arch + '/' + 'common/*.c'
28        common = 'arch/common/*.c'
29        if not GetDepend('RT_USING_VDSO'):
30            vdso_files = ['vdso_data.c', 'vdso.c']
31            src += [f for f in Glob(arch_common) if os.path.basename(str(f)) not in vdso_files]
32            src += [f for f in Glob(common) if os.path.basename(str(f)) not in vdso_files]
33        else:
34            src += Glob(arch_common)
35            src += Glob(common)
36        if not GetDepend('ARCH_MM_MMU'):
37            excluded_files = ['ioremap.c', 'lwp_futex.c', 'lwp_mm_area.c', 'lwp_pmutex.c', 'lwp_shm.c', 'lwp_user_mm.c']
38            src += [f for f in Glob('*.c') if os.path.basename(str(f)) not in excluded_files] + Glob(asm_path)
39        else:
40            src += Glob('*.c') + Glob(asm_path)
41        src += Glob('arch/' + arch + '/' + cpu + '/*.c')
42        CPPPATH = [cwd]
43        CPPPATH += [cwd + '/arch/' + arch + '/' + cpu]
44
45# Terminal I/O Subsystem
46termios_path = ['./terminal/', './terminal/freebsd/']
47for item in termios_path:
48    src += Glob(item + '*.c')
49CPPPATH += ['./terminal/']
50
51# Remove optional sources
52if not GetDepend(['LWP_USING_RUNTIME']):
53    SrcRemove(src, 'lwp_runtime.c')
54
55group = DefineGroup('lwProcess', src, depend = ['RT_USING_SMART'], CPPPATH = CPPPATH)
56
57group = group + SConscript(os.path.join('vdso', 'SConscript'))
58Return('group')
59