]> rtime.felk.cvut.cz Git - linux-conf-perf.git/blob - scripts/initialize.py
146acbff9703a54faa541ab6b3c97f6ef11ccb33
[linux-conf-perf.git] / scripts / initialize.py
1 #!/usr/bin/env python3
2 import os
3 import sys
4 import subprocess
5 import shutil
6
7 import utils
8 import database
9 from conf import conf
10 from conf import sf
11 import exceptions
12 import loop
13 import configurations
14
15 def all():
16         base()
17         parse_kconfig()
18         gen_requred()
19         try:
20                 configurations.generate()
21         except exceptions.NoSolution:
22                 pass
23         # check if database is initialized
24         database.database()
25
26 def base():
27         print('Initialize base...')
28         try:
29                 os.mkdir(sf(conf.build_folder))
30         except FileExistsError:
31                 pass
32         try:
33                 os.mkdir(sf(conf.configurations_folder))
34         except FileExistsError:
35                 pass
36         try:
37                 os.mkdir(sf(conf.log_folder))
38         except FileExistsError:
39                 pass
40
41         if os.path.isfile(sf(conf.phase_file)):
42                 print("Warning: file " + conf.phase_file + " already exists. Not overwritten.")
43         else:
44                 loop.phase_set(1)
45
46         if os.path.isfile(sf(conf.iteration_file)):
47                 print("Warning: file " + conf.iteration_file + " already exists. Not overwritten.")
48         else:
49                 loop.iteration_reset()
50
51
52 def parse_kconfig():
53         "Execute parse_kconfig in linux_sources directory."
54         if os.path.isfile(sf(conf.symbol_map_file)) and \
55                         os.path.isfile(sf(conf.rules_file)) and \
56                         os.path.isfile(sf(conf.variable_count_file)):
57                 print('Warning: parse_kconfig not executed. Files already exists.')
58                 return
59         print('Executing parse_kconfig...')
60         env = dict(os.environ)
61         wd = os.getcwd()
62         os.chdir(sf(conf.linux_sources))
63         parse_kconfig_cmd = [sf(conf.parse_kconfig)]
64         parse_kconfig_cmd += [sf(conf.linux_kconfig_head), sf(conf.build_folder)]
65         parse_kconfig_cmd += ['-v', '-v']
66         utils.callsubprocess("parse_kconfig", parse_kconfig_cmd,
67                         conf.parse_kconfig_output, env=utils.get_kernel_env())
68         os.chdir(wd)
69
70
71 def gen_requred():
72         "Generates required depenpency from dot_config file."
73         print('Generating required configuration...')
74
75         if not os.path.isfile(sf(conf.dot_config)):
76                 raise exceptions.MissingFile(sf(conf.dot_config),
77                                 'Generate fixed configuration. Use make dot_config.')
78
79         utils.build_symbol_map() # Ensure smap existence
80         srmap = {value:key for key, value in utils.smap.items()} # swap dictionary
81
82         shutil.copy(sf(conf.dot_config), sf(conf.dot_config_back_file))
83
84         with open(sf(conf.dot_config), 'r') as f:
85                 with open(sf(conf.required_file), 'w') as freq:
86                         for line in f:
87                                 if (line[0] == '#') or (not '=' in line):
88                                         continue
89                                 indx = line.index('=')
90                                 if (line[indx + 1] == 'y'):
91                                         if line[7:indx] == "MODULES": # exception if modules set
92                                                 raise exceptions.ConfigurationError("Fixed kernel configuration must have MODULES disabled.")
93                                         freq.write(str(srmap[line[7:indx]]) + "\n")
94                                 elif (line[indx + 1] == 'n' or line[indx + 1] == 'm'):
95                                         freq.write("-" + str(srmap[line[7:indx]]) + "\n")
96
97
98 #################################################################################
99
100 if __name__ == '__main__':
101         all()