-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathtmake.main
125 lines (102 loc) · 3.16 KB
/
tmake.main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/python
def build_coreimg():
print_info('coreimg', 'Building core image')
# Files
src_files = [ \
bin_dir + 'tdlrhal.bin',
bin_dir + 'tdlrkrnl.bin',
bin_dir + 'tdlrdrv.bin',
bin_dir + 'tdlrsys.bin',
bin_dir + 'tdlrshell.bin',
src_dir + 'init/init.py',
]
target_name = bin_dir + 'tdlrcore.img'
# Check if we need to rebuild the img
regenerate = False
for f in src_files:
if need_build(f, target_name):
regenerate = True
break
if not regenerate:
return
# Compose the cmd
cmd = tools_bin_dir + 'coreimg ' + target_name
for f in src_files:
cmd += ' ' + f
# Execute the cmd
code = exec_cmd(cmd)
assert(code == 0)
# Update record
record_update(target_name)
def build_main():
# Build kernel
print_info('kernel', 'Building kernel')
kernel_ext_dep = []
kernel_ext_flags = {}
for d in arch_dirs:
kernel_ld = d + 'kernel/kernel.ld'
if os.path.exists(kernel_ld):
kernel_ext_dep.append(kernel_ld)
kernel_ext_flags['ld/script'] = kernel_ld
break
else:
kernel_ext_flags['ld/ext'] = '-Ttext 0xFFF01000'
kernel_files = get_all_files(src_dir + 'kernel/', [ '.c' ])
for d in arch_dirs:
kernel_files += get_all_files(d + 'kernel/', [ '.c', '.asm', '.s', '.S' ])
build_files(
kernel_files,
bin_dir + 'tdlrkrnl.bin',
ext_dep = kernel_ext_dep,
ext_flags = kernel_ext_flags,
)
# Build klibc
print_info('klibc', 'Building klibc')
klib_files = get_all_files(src_dir + 'klibc/', [ '.c' ])
for d in arch_dirs:
klib_files += get_all_files(d + 'klibc/', [ '.c', '.asm', '.s', '.S' ])
lib_files(
klib_files,
bin_dir + 'tdlrklibc.a'
)
# External flags for generic processes
user_ext_dep = []
user_ext_flags = {}
for d in arch_dirs:
user_ld = d + 'klibc/klibc.ld'
if os.path.exists(user_ld):
user_ext_dep.append(user_ld)
user_ext_flags['ld/script'] = user_ld
break
else:
user_ext_flags['ld/ext'] = '-e _start'
# Build driver
print_info('driver', 'Building driver')
build_dir(
src_dir + 'driver/', [ '.c' ],
bin_dir + 'tdlrdrv.bin',
ext_libs = [ bin_dir + 'tdlrklibc.a' ],
ext_dep = user_ext_dep,
ext_flags = user_ext_flags,
)
# Build system
print_info('system', 'Building system')
build_dir(
src_dir + 'system/', [ '.c' ],
bin_dir + 'tdlrsys.bin',
ext_libs = [ bin_dir + 'tdlrklibc.a' ],
ext_dep = user_ext_dep,
ext_flags = user_ext_flags,
)
# Build shell
print_info('shell', 'Building shell')
build_dir(
src_dir + 'shell/', [ '.c' ],
bin_dir + 'tdlrshell.bin',
ext_libs = [ bin_dir + 'tdlrklibc.a' ],
ext_dep = user_ext_dep,
ext_flags = user_ext_flags,
)
# Setup callback functions
arch_funcs['build_coreimg'] = build_coreimg
arch_funcs['build_main'] = build_main