/branches/dynload/kernel/kernel.config |
---|
File deleted |
/branches/dynload/kernel/Makefile |
---|
30,8 → 30,8 |
## Include configuration |
# |
-include ../version |
-include Makefile.config |
include ../version |
-include ../Makefile.config |
INCLUDES = generic/include |
OPTIMIZATION = 3 |
359,23 → 359,16 |
ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES))) |
GENARCH_OBJECTS := $(addsuffix .o,$(basename $(GENARCH_SOURCES))) |
.PHONY: all build config distclean clean archlinks depend disasm |
.PHONY: all build clean archlinks depend disasm |
all: |
../tools/config.py kernel.config default $(ARCH) $(COMPILER) $(CONFIG_DEBUG) $(MACHINE) |
all: ../Makefile.config |
-rm Makefile.depend |
$(MAKE) -C . build |
build: kernel.bin disasm |
config: |
-rm Makefile.depend |
../tools/config.py kernel.config |
-include Makefile.depend |
distclean: clean |
-rm Makefile.config |
clean: |
-rm -f kernel.bin kernel.raw kernel.map kernel.map.pre kernel.objdump kernel.disasm generic/src/debug/real_map.bin Makefile.depend* generic/include/arch generic/include/genarch arch/$(ARCH)/_link.ld |
find generic/src/ arch/*/src/ genarch/src/ test/ -name '*.o' -follow -exec rm \{\} \; |
/branches/dynload/tools/xtui.py |
---|
0,0 → 1,257 |
# |
# Copyright (c) 2009 Martin Decky |
# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
# modification, are permitted provided that the following conditions |
# are met: |
# |
# - Redistributions of source code must retain the above copyright |
# notice, this list of conditions and the following disclaimer. |
# - Redistributions in binary form must reproduce the above copyright |
# notice, this list of conditions and the following disclaimer in the |
# documentation and/or other materials provided with the distribution. |
# - The name of the author may not be used to endorse or promote products |
# derived from this software without specific prior written permission. |
# |
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
""" |
Text User Interface wrapper |
""" |
import sys |
import os |
def call_dlg(dlgcmd, *args, **kw): |
"Wrapper for calling 'dialog' program" |
indesc, outdesc = os.pipe() |
pid = os.fork() |
if (not pid): |
os.close(2) |
os.dup(outdesc) |
os.close(indesc) |
dlgargs = [dlgcmd] |
for key, val in kw.items(): |
dlgargs.append('--' + key) |
dlgargs.append(val) |
dlgargs += args |
os.execlp(dlgcmd, *dlgargs) |
os.close(outdesc) |
try: |
errout = os.fdopen(indesc, 'r') |
data = errout.read() |
errout.close() |
pid, status = os.wait() |
except: |
# Reset terminal |
os.system('reset') |
raise |
if (not os.WIFEXITED(status)): |
# Reset terminal |
os.system('reset') |
raise EOFError |
status = os.WEXITSTATUS(status) |
if (status == 255): |
raise EOFError |
return (status, data) |
try: |
import snack |
newt = True |
dialog = False |
except ImportError: |
newt = False |
dlgcmd = os.environ.get('DIALOG', 'dialog') |
if (call_dlg(dlgcmd, '--print-maxsize')[0] != 0): |
dialog = False |
else: |
dialog = True |
width_extra = 13 |
height_extra = 11 |
def width_fix(screen, width): |
"Correct width to screen size" |
if (width + width_extra > screen.width): |
width = screen.width - width_extra |
if (width <= 0): |
width = screen.width |
return width |
def height_fix(screen, height): |
"Correct height to screen size" |
if (height + height_extra > screen.height): |
height = screen.height - height_extra |
if (height <= 0): |
height = screen.height |
return height |
def screen_init(): |
"Initialize the screen" |
if (newt): |
return snack.SnackScreen() |
return None |
def screen_done(screen): |
"Cleanup the screen" |
if (newt): |
screen.finish() |
def choice_window(screen, title, text, options, position): |
"Create options menu" |
maxopt = 0 |
for option in options: |
length = len(option) |
if (length > maxopt): |
maxopt = length |
width = maxopt |
height = len(options) |
if (newt): |
width = width_fix(screen, width + width_extra) |
height = height_fix(screen, height) |
if (height > 3): |
large = True |
else: |
large = False |
buttonbar = snack.ButtonBar(screen, ('Done', 'Cancel')) |
textbox = snack.TextboxReflowed(width, text) |
listbox = snack.Listbox(height, scroll = large, returnExit = 1) |
cnt = 0 |
for option in options: |
listbox.append(option, cnt) |
cnt += 1 |
if (position != None): |
listbox.setCurrent(position) |
grid = snack.GridForm(screen, title, 1, 3) |
grid.add(textbox, 0, 0) |
grid.add(listbox, 0, 1, padding = (0, 1, 0, 1)) |
grid.add(buttonbar, 0, 2, growx = 1) |
retval = grid.runOnce() |
return (buttonbar.buttonPressed(retval), listbox.current()) |
elif (dialog): |
args = [] |
cnt = 0 |
for option in options: |
args.append(str(cnt + 1)) |
args.append(option) |
cnt += 1 |
kw = {} |
if (position != None): |
kw['default-item'] = str(position + 1) |
status, data = call_dlg(dlgcmd, '--title', title, '--extra-button', '--extra-label', 'Done', '--menu', text, str(height + height_extra), str(width + width_extra), str(cnt), *args, **kw) |
if (status == 1): |
return ('cancel', None) |
try: |
choice = int(data) - 1 |
except ValueError: |
return ('cancel', None) |
if (status == 0): |
return (None, choice) |
return ('done', choice) |
sys.stdout.write("\n *** %s *** \n%s\n\n" % (title, text)) |
maxcnt = len(str(len(options))) |
cnt = 0 |
for option in options: |
sys.stdout.write("%*s. %s\n" % (maxcnt, cnt + 1, option)) |
cnt += 1 |
sys.stdout.write("\n%*s. Done\n" % (maxcnt, '0')) |
sys.stdout.write("%*s. Quit\n\n" % (maxcnt, 'q')) |
while True: |
if (position != None): |
sys.stdout.write("Selection[%s]: " % str(position + 1)) |
else: |
sys.stdout.write("Selection: ") |
inp = sys.stdin.readline() |
if (not inp): |
raise EOFError |
if (not inp.strip()): |
if (position != None): |
return (None, position) |
continue |
if (inp.strip() == 'q'): |
return ('cancel', None) |
try: |
choice = int(inp.strip()) |
except ValueError: |
continue |
if (choice == 0): |
return ('done', 0) |
if (choice < 1) or (choice > len(options)): |
continue |
return (None, choice - 1) |
def error_dialog(screen, title, msg): |
"Print error dialog" |
width = len(msg) |
if (newt): |
width = width_fix(screen, width) |
buttonbar = snack.ButtonBar(screen, ['Ok']) |
textbox = snack.TextboxReflowed(width, msg) |
grid = snack.GridForm(screen, title, 1, 2) |
grid.add(textbox, 0, 0, padding = (0, 0, 0, 1)) |
grid.add(buttonbar, 0, 1, growx = 1) |
grid.runOnce() |
elif (dialog): |
call_dlg(dlgcmd, '--title', title, '--msgbox', msg, '6', str(width + width_extra)) |
sys.stdout.write("\n%s: %s\n" % (title, msg)) |
/branches/dynload/tools/config.py |
---|
1,6 → 1,7 |
#!/usr/bin/env python |
# |
# Copyright (c) 2006 Ondrej Palkovsky |
# Copyright (c) 2009 Martin Decky |
# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
27,512 → 28,320 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
""" |
HelenOS configuration script |
HelenOS configuration system |
""" |
import sys |
import os |
import re |
import commands |
import xtui |
INPUT = sys.argv[1] |
OUTPUT = 'Makefile.config' |
TMPOUTPUT = 'Makefile.config.tmp' |
class DefaultDialog: |
"Wrapper dialog that tries to return default values" |
def __init__(self, dlg): |
self.dlg = dlg |
def read_defaults(fname, defaults): |
"Read saved values from last configuration run" |
def set_title(self,text): |
self.dlg.set_title(text) |
inf = file(fname,'r') |
def yesno(self, text, default=None): |
if default is not None: |
return default |
return self.dlg.yesno(text, default) |
def noyes(self, text, default=None): |
if default is not None: |
return default |
return self.dlg.noyes(text, default) |
for line in inf: |
res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line) |
if (res): |
defaults[res.group(1)] = res.group(2) |
def choice(self, text, choices, defopt=None): |
if defopt is not None: |
return choices[defopt][0] |
return self.dlg.choice(text, choices, defopt) |
inf.close() |
class NoDialog: |
def __init__(self): |
self.printed = None |
self.title = 'HelenOS Configuration' |
def check_condition(text, defaults, ask_names): |
"Check for condition" |
def print_title(self): |
if not self.printed: |
sys.stdout.write("\n*** %s ***\n" % self.title) |
self.printed = True |
ctype = 'cnf' |
def set_title(self, text): |
self.title = text |
self.printed = False |
def noyes(self, text, default=None): |
if not default: |
default = 'n' |
return self.yesno(text, default) |
def yesno(self, text, default=None): |
self.print_title() |
if default != 'n': |
default = 'y' |
while 1: |
sys.stdout.write("%s (y/n)[%s]: " % (text,default)) |
inp = sys.stdin.readline() |
if not inp: |
raise EOFError |
inp = inp.strip().lower() |
if not inp: |
return default |
if inp == 'y': |
return 'y' |
elif inp == 'n': |
return 'n' |
def _print_choice(self, text, choices, defopt): |
sys.stdout.write('%s:\n' % text) |
for i,(text,descr) in enumerate(choices): |
if descr is '': |
sys.stdout.write('\t%2d. %s\n' % (i, text)) |
else: |
sys.stdout.write('\t%2d. %s\n' % (i, descr)) |
if defopt is not None: |
sys.stdout.write('Enter choice number[%d]: ' % defopt) |
else: |
sys.stdout.write('Enter choice number: ') |
def menu(self, text, choices, button, defopt=None): |
self.title = 'Main menu' |
menu = [] |
for key, descr in choices: |
txt = key + (45-len(key))*' ' + ': ' + descr |
menu.append((key, txt)) |
return self.choice(text, [button] + menu) |
def choice(self, text, choices, defopt=None): |
self.print_title() |
while 1: |
self._print_choice(text, choices, defopt) |
inp = sys.stdin.readline() |
if not inp: |
raise EOFError |
if not inp.strip(): |
if defopt is not None: |
return choices[defopt][0] |
continue |
try: |
number = int(inp.strip()) |
except ValueError: |
continue |
if number < 0 or number >= len(choices): |
continue |
return choices[number][0] |
def eof_checker(fnc): |
def wrapper(self, *args, **kw): |
try: |
return fnc(self, *args, **kw) |
except EOFError: |
return getattr(self.bckdialog,fnc.func_name)(*args, **kw) |
return wrapper |
class Dialog(NoDialog): |
def __init__(self): |
NoDialog.__init__(self) |
self.dlgcmd = os.environ.get('DIALOG','dialog') |
self.title = '' |
self.backtitle = 'HelenOS Configuration' |
if os.system('%s --print-maxsize >/dev/null 2>&1' % self.dlgcmd) != 0: |
raise NotImplementedError |
self.bckdialog = NoDialog() |
def set_title(self,text): |
self.title = text |
self.bckdialog.set_title(text) |
def calldlg(self,*args,**kw): |
"Wrapper for calling 'dialog' program" |
indesc, outdesc = os.pipe() |
pid = os.fork() |
if not pid: |
os.close(2) |
os.dup(outdesc) |
os.close(indesc) |
dlgargs = [self.dlgcmd,'--title',self.title, |
'--backtitle', self.backtitle] |
for key,val in kw.items(): |
dlgargs.append('--'+key) |
dlgargs.append(val) |
dlgargs += args |
os.execlp(self.dlgcmd,*dlgargs) |
os.close(outdesc) |
try: |
errout = os.fdopen(indesc,'r') |
data = errout.read() |
errout.close() |
pid,status = os.wait() |
except: |
os.system('reset') # Reset terminal |
raise |
if not os.WIFEXITED(status): |
os.system('reset') # Reset terminal |
raise EOFError |
status = os.WEXITSTATUS(status) |
if status == 255: |
raise EOFError |
return status,data |
def yesno(self, text, default=None): |
if text[-1] not in ('?',':'): |
text = text + ':' |
width = '50' |
height = '5' |
if len(text) < 48: |
text = ' '*int(((48-len(text))/2)) + text |
else: |
width = '0' |
height = '0' |
if default == 'n': |
res,data = self.calldlg('--defaultno','--yesno',text,height,width) |
else: |
res,data = self.calldlg('--yesno',text,height,width) |
if res == 0: |
return 'y' |
return 'n' |
yesno = eof_checker(yesno) |
def menu(self, text, choices, button, defopt=None): |
self.title = 'Main menu' |
text = text + ':' |
width = '70' |
height = str(8 + len(choices)) |
args = [] |
for key,val in choices: |
args.append(key) |
args.append(val) |
kw = {} |
if defopt: |
kw['default-item'] = choices[defopt][0] |
res,data = self.calldlg('--ok-label','Change', |
'--extra-label',button[1], |
'--extra-button', |
'--menu',text,height,width, |
str(len(choices)),*args,**kw) |
if res == 3: |
return button[0] |
if res == 1: # Cancel |
sys.exit(1) |
elif res: |
print data |
raise EOFError |
return data |
menu = eof_checker(menu) |
def choice(self, text, choices, defopt=None): |
text = text + ':' |
width = '50' |
height = str(8 + len(choices)) |
args = [] |
for key,val in choices: |
args.append(key) |
args.append(val) |
kw = {} |
if defopt: |
kw['default-item'] = choices[defopt][0] |
res,data = self.calldlg('--nocancel','--menu',text,height,width, |
str(len(choices)),*args, **kw) |
if res: |
print data |
raise EOFError |
return data |
choice = eof_checker(choice) |
def read_defaults(fname,defaults): |
"Read saved values from last configuration run" |
f = file(fname,'r') |
for line in f: |
res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line) |
if res: |
defaults[res.group(1)] = res.group(2) |
f.close() |
def check_condition(text, defaults, asked_names): |
seen_vars = [ x[0] for x in asked_names ] |
ctype = 'cnf' |
if ')|' in text or '|(' in text: |
if ((')|' in text) or ('|(' in text)): |
ctype = 'dnf' |
if ctype == 'cnf': |
if (ctype == 'cnf'): |
conds = text.split('&') |
else: |
conds = text.split('|') |
for cond in conds: |
if cond.startswith('(') and cond.endswith(')'): |
if (cond.startswith('(')) and (cond.endswith(')')): |
cond = cond[1:-1] |
inside = check_inside(cond, defaults, ctype, seen_vars) |
inside = check_inside(cond, defaults, ctype) |
if ctype == 'cnf' and not inside: |
if (ctype == 'cnf') and (not inside): |
return False |
if ctype == 'dnf' and inside: |
if (ctype == 'dnf') and (inside): |
return True |
if ctype == 'cnf': |
if (ctype == 'cnf'): |
return True |
return False |
def check_inside(text, defaults, ctype, seen_vars): |
""" |
Check that the condition specified on input line is True |
def check_inside(text, defaults, ctype): |
"Check that the condition specified on input line is True (only CNF is supported)" |
only CNF is supported |
""" |
if ctype == 'cnf': |
if (ctype == 'cnf'): |
conds = text.split('|') |
else: |
conds = text.split('&') |
for cond in conds: |
res = re.match(r'^(.*?)(!?=)(.*)$', cond) |
if not res: |
if (not res): |
raise RuntimeError("Invalid condition: %s" % cond) |
condname = res.group(1) |
oper = res.group(2) |
condval = res.group(3) |
if condname not in seen_vars: |
if (not defaults.has_key(condname)): |
varval = '' |
## raise RuntimeError("Variable %s not defined before being asked." %\ |
## condname) |
elif not defaults.has_key(condname): |
raise RuntimeError("Condition var %s does not exist: %s" % \ |
(condname,text)) |
else: |
varval = defaults[condname] |
if ctype == 'cnf': |
if oper == '=' and condval == varval: |
if (ctype == 'cnf'): |
if (oper == '=') and (condval == varval): |
return True |
if oper == '!=' and condval != varval: |
if (oper == '!=') and (condval != varval): |
return True |
else: |
if oper== '=' and condval != varval: |
if (oper == '=') and (condval != varval): |
return False |
if oper== '!=' and condval == varval: |
if (oper == '!=') and (condval == varval): |
return False |
if ctype=='cnf': |
if (ctype == 'cnf'): |
return False |
return True |
def parse_config(input, output, dlg, defaults={}, askonly=None): |
"Parse configuration file and create Makefile.config on the fly" |
def ask_the_question(dialog): |
"Ask question based on the type of variables to ask" |
# This is quite a hack, this thingy is written just to |
# have access to local variables.. |
if vartype == 'y/n': |
return dialog.yesno(comment, default) |
elif vartype == 'n/y': |
return dialog.noyes(comment, default) |
elif vartype == 'choice': |
defopt = None |
if default is not None: |
for i,(key,val) in enumerate(choices): |
if key == default: |
defopt = i |
break |
return dialog.choice(comment, choices, defopt) |
else: |
raise RuntimeError("Bad method: %s" % vartype) |
def parse_config(fname, ask_names): |
"Parse configuration file" |
inf = file(fname, 'r') |
f = file(input, 'r') |
outf = file(output, 'w') |
name = '' |
choices = [] |
outf.write('#########################################\n') |
outf.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n') |
outf.write('#########################################\n\n') |
for line in inf: |
asked_names = [] |
comment = '' |
default = None |
choices = [] |
for line in f: |
if line.startswith('%'): |
res = re.match(r'^%\s*(?:\[(.*?)\])?\s*(.*)$', line) |
if not res: |
raise RuntimeError('Invalid command: %s' % line) |
if res.group(1): |
if not check_condition(res.group(1), defaults, |
asked_names): |
continue |
args = res.group(2).strip().split(' ') |
cmd = args[0].lower() |
args = args[1:] |
if cmd == 'saveas': |
outf.write('%s = %s\n' % (args[1],defaults[args[0]])) |
elif cmd == 'shellcmd': |
varname = args[0] |
args = args[1:] |
for i,arg in enumerate(args): |
if arg.startswith('$'): |
args[i] = defaults[arg[1:]] |
data,status = commands.getstatusoutput(' '.join(args)) |
if status: |
raise RuntimeError('Error running: %s' % ' '.join(args)) |
outf.write('%s = %s\n' % (varname,data.strip())) |
continue |
if line.startswith('!'): |
if (line.startswith('!')): |
# Ask a question |
res = re.search(r'!\s*(?:\[(.*?)\])?\s*([^\s]+)\s*\((.*)\)\s*$', line) |
if not res: |
if (not res): |
raise RuntimeError("Weird line: %s" % line) |
cond = res.group(1) |
varname = res.group(2) |
vartype = res.group(3) |
default = defaults.get(varname,None) |
if res.group(1): |
if not check_condition(res.group(1), defaults, |
asked_names): |
if default is not None: |
outf.write('#!# %s = %s\n' % (varname, default)) |
# Clear cumulated values |
comment = '' |
default = None |
ask_names.append((varname, vartype, name, choices, cond)) |
name = '' |
choices = [] |
continue |
asked_names.append((varname,comment)) |
if (line.startswith('@')): |
# Add new line into the 'choices' array |
res = re.match(r'@\s*(?:\[(.*?)\])?\s*"(.*?)"\s*(.*)$', line) |
if default is None or not askonly or askonly == varname: |
default = ask_the_question(dlg) |
else: |
default = ask_the_question(DefaultDialog(dlg)) |
if not res: |
raise RuntimeError("Bad line: %s" % line) |
outf.write('%s = %s\n' % (varname, default)) |
# Remeber the selected value |
defaults[varname] = default |
# Clear cumulated values |
comment = '' |
default = None |
choices = [] |
choices.append((res.group(2), res.group(3))) |
continue |
if line.startswith('@'): |
# Add new line into the 'choice array' |
res = re.match(r'@\s*(?:\[(.*?)\])?\s*"(.*?)"\s*(.*)$', line) |
if not res: |
raise RuntimeError("Bad line: %s" % line) |
if res.group(1): |
if not check_condition(res.group(1),defaults, |
asked_names): |
if (line.startswith('%')): |
# Name of the option |
name = line[1:].strip() |
continue |
choices.append((res.group(2), res.group(3))) |
if ((line.startswith('#')) or (line == '\n')): |
# Comment or empty line |
continue |
# All other things print to output file |
outf.write(line) |
if re.match(r'^#[^#]', line): |
# Last comment before question will be displayed to the user |
comment = line[1:].strip() |
elif line.startswith('## '): |
# Set title of the dialog window |
dlg.set_title(line[2:].strip()) |
outf.write('\n') |
raise RuntimeError("Unknown syntax: %s" % line) |
inf.close() |
def yes_no(default): |
"Return '*' if yes, ' ' if no" |
if (default == 'y'): |
return '*' |
return ' ' |
def subchoice(screen, name, choices, default): |
"Return choice of choices" |
maxkey = 0 |
for key, val in choices: |
length = len(key) |
if (length > maxkey): |
maxkey = length |
options = [] |
position = None |
cnt = 0 |
for key, val in choices: |
if ((default) and (key == default)): |
position = cnt |
options.append(" %-*s %s " % (maxkey, key, val)) |
cnt += 1 |
(button, value) = xtui.choice_window(screen, name, 'Choose value', options, position) |
if (button == 'cancel'): |
return None |
return choices[value][0] |
def check_choices(defaults, ask_names): |
"Check whether all accessible variables have a default" |
for varname, vartype, name, choices, cond in ask_names: |
if ((cond) and (not check_condition(cond, defaults, ask_names))): |
continue |
if (not defaults.has_key(varname)): |
return False |
return True |
def create_output(fname, defaults, ask_names): |
"Create output configuration" |
outf = file(fname, 'w') |
outf.write('#########################################\n') |
outf.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n') |
outf.write('#########################################\n\n') |
for varname, vartype, name, choices, cond in ask_names: |
if ((cond) and (not check_condition(cond, defaults, ask_names))): |
continue |
if (not defaults.has_key(varname)): |
default = '' |
else: |
default = defaults[varname] |
outf.write('# %s\n%s = %s\n\n' % (name, varname, default)) |
outf.write('REVISION = %s\n' % commands.getoutput('svnversion . 2> /dev/null')) |
outf.write('TIMESTAMP = %s\n' % commands.getoutput('date "+%Y-%m-%d %H:%M:%S"')) |
outf.close() |
f.close() |
return asked_names |
def main(): |
defaults = {} |
try: |
dlg = Dialog() |
except NotImplementedError: |
dlg = NoDialog() |
ask_names = [] |
if len(sys.argv) >= 3 and sys.argv[2]=='default': |
defmode = True |
else: |
defmode = False |
# Parse configuration file |
parse_config(INPUT, ask_names) |
# Default run will update the configuration file |
# with newest options |
# Read defaults from previous run |
if os.path.exists(OUTPUT): |
read_defaults(OUTPUT, defaults) |
# Get ARCH from command line if specified |
if len(sys.argv) >= 4: |
defaults['ARCH'] = sys.argv[3] |
defaults['PLATFORM'] = sys.argv[3] |
# Default mode: only check defaults and regenerate configuration |
if ((len(sys.argv) >= 3) and (sys.argv[2] == 'default')): |
if (check_choices(defaults, ask_names)): |
create_output(OUTPUT, defaults, ask_names) |
return 0 |
# Get COMPILER from command line if specified |
if len(sys.argv) >= 5: |
defaults['COMPILER'] = sys.argv[4] |
screen = xtui.screen_init() |
try: |
selname = None |
while True: |
# Get CONFIG_DEBUG from command line if specified |
if len(sys.argv) >= 6: |
defaults['CONFIG_DEBUG'] = sys.argv[5] |
options = [] |
opt2row = {} |
position = None |
cnt = 0 |
for varname, vartype, name, choices, cond in ask_names: |
# Get MACHINE/IMAGE from command line if specified |
if len(sys.argv) >= 7: |
defaults['MACHINE'] = sys.argv[6] |
defaults['IMAGE'] = sys.argv[6] |
if ((cond) and (not check_condition(cond, defaults, ask_names))): |
continue |
# Dry run only with defaults |
varnames = parse_config(INPUT, TMPOUTPUT, DefaultDialog(dlg), defaults) |
# If not in default mode, present selection of all possibilities |
if not defmode: |
defopt = 0 |
while 1: |
# varnames contains variable names that were in the |
# last question set |
choices = [ (x[1],defaults[x[0]]) for x in varnames ] |
res = dlg.menu('Configuration',choices,('save','Save'),defopt) |
if res == 'save': |
parse_config(INPUT, TMPOUTPUT, DefaultDialog(dlg), defaults) |
if (varname == selname): |
position = cnt |
if (not defaults.has_key(varname)): |
default = None |
else: |
default = defaults[varname] |
if (vartype == 'choice'): |
# Check if the default is an acceptable value |
if ((default) and (not default in [choice[0] for choice in choices])): |
default = None |
defaults.pop(varname) |
# If there is just one option, use it |
if (len(choices) == 1): |
default = choices[0][0] |
defaults[varname] = default |
options.append(" %s [%s] --> " % (name, default)) |
elif (vartype == 'y/n'): |
if (default == None): |
default = 'y' |
defaults[varname] = default |
options.append(" <%s> %s " % (yes_no(default), name)) |
elif (vartype == 'n/y'): |
if (default == None): |
default = 'n' |
defaults[varname] = default |
options.append(" <%s> %s " % (yes_no(default), name)) |
else: |
raise RuntimeError("Unknown variable type: %s" % vartype) |
opt2row[cnt] = (varname, vartype, name, choices) |
cnt += 1 |
(button, value) = xtui.choice_window(screen, 'HelenOS configuration', 'Choose configuration option', options, position) |
if (button == 'cancel'): |
return 'Configuration canceled' |
if (not opt2row.has_key(value)): |
raise RuntimeError("Error selecting value: %s" % value) |
(selname, seltype, name, choices) = opt2row[value] |
if (not defaults.has_key(selname)): |
default = None |
else: |
default = defaults[selname] |
if (button == 'done'): |
if (check_choices(defaults, ask_names)): |
break |
# transfer description back to varname |
for i,(vname,descr) in enumerate(varnames): |
if res == descr: |
defopt = i |
break |
# Ask the user a simple question, produce output |
# as if the user answered all the other questions |
# with default answer |
varnames = parse_config(INPUT, TMPOUTPUT, dlg, defaults, |
askonly=varnames[i][0]) |
else: |
xtui.error_dialog(screen, 'Error', 'Some options have still undefined values.') |
continue |
if (seltype == 'choice'): |
defaults[selname] = subchoice(screen, name, choices, default) |
elif ((seltype == 'y/n') or (seltype == 'n/y')): |
if (defaults[selname] == 'y'): |
defaults[selname] = 'n' |
else: |
defaults[selname] = 'y' |
finally: |
xtui.screen_done(screen) |
if os.path.exists(OUTPUT): |
os.unlink(OUTPUT) |
os.rename(TMPOUTPUT, OUTPUT) |
create_output(OUTPUT, defaults, ask_names) |
return 0 |
if not defmode and dlg.yesno('Rebuild everything?') == 'y': |
os.execlp('make','make','clean','build') |
if __name__ == '__main__': |
main() |
exit(main()) |
/branches/dynload/uspace/uspace.config |
---|
File deleted |
/branches/dynload/uspace/app/bdsh/Makefile |
---|
30,7 → 30,7 |
# POSSIBILITY OF SUCH DAMAGE. |
include ../../../version |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/app/init/Makefile |
---|
27,7 → 27,7 |
# |
include ../../../version |
include ../../Makefile.config |
-include ../../../Makefile.config |
## Setup toolchain |
# |
/branches/dynload/uspace/app/tester/Makefile |
---|
29,7 → 29,7 |
## Setup toolchain |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/app/tetris/Makefile |
---|
1,4 → 1,4 |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/app/klog/Makefile |
---|
29,7 → 29,7 |
## Setup toolchain |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/app/trace/Makefile |
---|
29,7 → 29,7 |
## Setup toolchain |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/lib/libfs/Makefile |
---|
30,7 → 30,7 |
## Common compiler flags |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../libc |
## Setup toolchain |
/branches/dynload/uspace/lib/libblock/Makefile |
---|
30,7 → 30,7 |
## Common compiler flags |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../libc |
## Setup toolchain |
/branches/dynload/uspace/lib/softfloat/Makefile |
---|
29,7 → 29,7 |
## Common compiler flags |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../libc |
## Setup toolchain |
/branches/dynload/uspace/lib/softint/Makefile |
---|
30,7 → 30,7 |
## Common compiler flags |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../libc |
## Setup toolchain |
/branches/dynload/uspace/lib/libc/Makefile.toolchain |
---|
30,12 → 30,11 |
CFLAGS = -fno-builtin -Wall -Werror-implicit-function-declaration -Wmissing-prototypes -O3 -nostdlib -nostdinc -I$(LIBC_PREFIX)/include -pipe -g |
LFLAGS = -M -N $(SOFTINT_PREFIX)/libsoftint.a |
AFLAGS = |
#-Werror |
## Setup platform configuration |
# |
include $(LIBC_PREFIX)/arch/$(ARCH)/Makefile.inc |
-include $(LIBC_PREFIX)/arch/$(ARCH)/Makefile.inc |
## Simple detection of the host system |
# |
/branches/dynload/uspace/lib/libc/Makefile |
---|
30,7 → 30,7 |
## Common compiler flags |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = $(shell pwd) |
SOFTINT_PREFIX = ../softint |
/branches/dynload/uspace/lib/libc/arch/mips32/Makefile.inc |
---|
37,7 → 37,7 |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/mipsel/bin |
CFLAGS += -mips3 |
-include ../../Makefile.config |
-include ../../../Makefile.config |
ifeq ($(CONFIG_MIPS_FPU),y) |
CFLAGS += -DCONFIG_MIPS_FPU |
endif |
/branches/dynload/uspace/srv/kbd/Makefile |
---|
29,14 → 29,14 |
## Setup toolchain |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
RTLD_PREFIX = ../../lib/rtld |
include $(LIBC_PREFIX)/Makefile.toolchain |
include $(LIBC_PREFIX)/Makefile.app |
include ../../../Makefile.config |
CFLAGS += -Iinclude -I../libadt/include |
/branches/dynload/uspace/srv/ns/Makefile |
---|
29,7 → 29,7 |
## Setup toolchain |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/srv/console/Makefile |
---|
29,7 → 29,7 |
## Setup toolchain |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/srv/rd/Makefile |
---|
29,7 → 29,7 |
## Setup toolchain |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/srv/loader/Makefile |
---|
27,7 → 27,7 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
## Setup toolchain |
# |
/branches/dynload/uspace/srv/fb/Makefile |
---|
29,7 → 29,7 |
## Setup toolchain |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/srv/fs/tmpfs/Makefile |
---|
29,7 → 29,7 |
## Setup toolchain |
# |
include ../../../Makefile.config |
-include ../../../../Makefile.config |
LIBC_PREFIX = ../../../lib/libc |
LIBFS_PREFIX = ../../../lib/libfs |
/branches/dynload/uspace/srv/fs/fat/Makefile |
---|
29,7 → 29,7 |
## Setup toolchain |
# |
include ../../../Makefile.config |
-include ../../../../Makefile.config |
LIBC_PREFIX = ../../../lib/libc |
LIBFS_PREFIX = ../../../lib/libfs |
/branches/dynload/uspace/srv/pci/libpci/Makefile |
---|
3,7 → 3,7 |
# Modified and ported to HelenOS by Jakub Jermar |
include ../../../Makefile.config |
-include ../../../../Makefile.config |
LIBC_PREFIX=$(shell cd ../../../lib/libc; pwd) |
/branches/dynload/uspace/srv/pci/Makefile |
---|
29,7 → 29,7 |
## Setup toolchain |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/srv/devmap/Makefile |
---|
29,7 → 29,7 |
## Setup toolchain |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/srv/vfs/Makefile |
---|
30,7 → 30,7 |
## Setup toolchain |
# |
include ../../Makefile.config |
-include ../../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
/branches/dynload/uspace/Makefile |
---|
29,7 → 29,7 |
## Include configuration |
# |
-include Makefile.config |
-include ../Makefile.config |
DIRS = \ |
lib/rtld \ |
79,22 → 79,14 |
BUILDS := $(addsuffix .build,$(DIRS)) |
CLEANS := $(addsuffix .clean,$(DIRS)) |
.PHONY: all config build $(BUILDS) $(CLEANS) clean distclean |
.PHONY: all $(BUILDS) $(CLEANS) clean kerninc |
all: |
../tools/config.py uspace.config default $(ARCH) $(COMPILER) $(CONFIG_DEBUG) |
$(MAKE) -C lib/libc kerninc |
$(MAKE) -C . build |
all: ../Makefile.config kerninc $(BUILDS) |
config: |
../tools/config.py uspace.config |
build: $(BUILDS) |
clean: $(CLEANS) |
distclean: clean |
-rm Makefile.config |
kerninc: |
$(MAKE) -C lib/libc kerninc |
$(CLEANS): |
-$(MAKE) -C $(basename $@) clean |
/branches/dynload/HelenOS.config |
---|
26,9 → 26,10 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
## General configuration directives |
# Platform |
## General platform options |
% Platform |
@ "amd64" AMD64/Intel EM64T (PC) |
@ "arm32" ARM 32-bit |
@ "ia32" Intel IA-32 (PC) |
40,7 → 41,7 |
@ "sparc64" Sun UltraSPARC 64-bit |
! PLATFORM (choice) |
# Machine |
% Machine type |
@ "msim" MSIM |
@ "simics" Simics |
@ "bgxemul" GXEmul big endian |
47,12 → 48,37 |
@ "lgxemul" GXEmul little endian |
! [PLATFORM=mips32] MACHINE (choice) |
# Machine type |
% Machine type |
@ "i460GX" i460GX chipset machine |
@ "ski" Ski ia64 simulator |
! [PLATFORM=ia64] MACHINE (choice) |
# Compiler |
% CPU type |
@ "pentium4" Pentium 4 |
@ "pentium3" Pentium 3 |
@ "core" Core Solo/Duo |
@ "athlon-xp" Athlon XP |
@ "athlon-mp" Athlon MP |
! [PLATFORM=ia32|PLATFORM=ia32xen] MACHINE (choice) |
% CPU type |
@ "opteron" Opteron |
! [PLATFORM=amd64] MACHINE (choice) |
% CPU type |
@ "us" UltraSPARC I-II subarchitecture |
@ "us3" UltraSPARC III-IV subarchitecture |
! [PLATFORM=sparc64] MACHINE (choice) |
% Ramdisk format |
@ "tmpfs" TMPFS image |
@ "fat" FAT16 image |
! RDFMT (choice) |
## Compiler options |
% Compiler |
@ "gcc_cross" GCC Cross-compiler |
@ "gcc_native" GCC Native |
@ "icc_native" ICC Native |
59,22 → 85,140 |
@ "suncc_native" Sun Studio C Compiler |
! [PLATFORM=amd64|PLATFORM=ia32|PLATFORM=ia32xen] COMPILER (choice) |
# Compiler |
% Compiler |
@ "gcc_cross" GCC Cross-compiler |
@ "gcc_native" GCC Native |
@ "icc_native" ICC Native |
! [PLATFORM=ia64] COMPILER (choice) |
# Compiler |
% Compiler |
@ "gcc_cross" GCC Cross-compiler |
@ "gcc_native" GCC Native |
@ "suncc_native" Sun Studio C Compiler |
! [PLATFORM=sparc64] COMPILER (choice) |
# Compiler |
% Compiler |
@ "gcc_cross" GCC Cross-compiler |
@ "gcc_native" GCC Native |
! [PLATFORM=arm32|PLATFORM=mips32|PLATFORM=ppc32|PLATFORM=ppc64] COMPILER (choice) |
# Debug build |
## Debug build options |
% Debug build |
! CONFIG_DEBUG (y/n) |
## Kernel features options |
% Support for SMP |
! [PLATFORM=ia32|PLATFORM=amd64|PLATFORM=ia32xen|PLATFORM=sparc64|PLATFORM=ia64] CONFIG_SMP (y/n) |
% Improved support for hyperthreading |
! [(PLATFORM=ia32|PLATFORM=amd64|PLATFORM=ia32xen)&CONFIG_SMP=y] CONFIG_HT (y/n) |
% Simics BIOS AP boot fix |
! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_SMP=y] CONFIG_SIMICS_FIX (y/n) |
% Lazy FPU context switching |
! [(PLATFORM=mips32&MACHINE!=msim&MACHINE!=simics)|PLATFORM=amd64|PLATFORM=ia32|PLATFORM=ia64|PLATFORM=sparc64|PLATFORM=ia32xen] CONFIG_FPU_LAZY (y/n) |
% Use VHPT |
! [PLATFORM=ia64] CONFIG_VHPT (n/y) |
% Use TSB |
! [PLATFORM=sparc64] CONFIG_TSB (y/n) |
% Support for Z8530 serial port |
! [PLATFORM=sparc64] CONFIG_Z8530 (y/n) |
% Support for NS16550 serial port |
! [PLATFORM=sparc64|(PLATFORM=ia64&MACHINE!=ski)] CONFIG_NS16550 (n/y) |
% Support for Serengeti console |
! [PLATFORM=sparc64] CONFIG_SGCN (y/n) |
% IOSapic on default address support |
! [PLATFORM=ia64&MACHINE!=ski] CONFIG_IOSAPIC (y/n) |
% Interrupt-driven driver for Legacy Keyboard? |
! [CONFIG_NS16550=n&CONFIG_IOSAPIC=y&MACHINE!=ski] CONFIG_I8042_INTERRUPT_DRIVEN (y/n) |
% Interrupt-driven driver for NS16550? |
! [CONFIG_NS16550=y&((PLATFORM!=ia64)|CONFIG_IOSAPIC=y)&MACHINE!=ski] CONFIG_NS16550_INTERRUPT_DRIVEN (y/n) |
% Virtually indexed D-cache support |
! [PLATFORM=sparc64] CONFIG_VIRT_IDX_DCACHE (y/n) |
% Support for userspace debuggers |
! CONFIG_UDEBUG (n/y) |
% Kernel console support |
! CONFIG_KCONSOLE (y/n) |
% Detailed kernel logging |
! CONFIG_LOG (n/y) |
% Deadlock detection support for spinlocks |
! [CONFIG_DEBUG=y&CONFIG_SMP=y] CONFIG_DEBUG_SPINLOCK (y/n) |
% Watchpoint on rewriting AS with zero |
! [CONFIG_DEBUG=y&(PLATFORM=amd64|PLATFORM=ia32|PLATFORM=ia32xen)] CONFIG_DEBUG_AS_WATCHPOINT (y/n) |
% Save all interrupt registers |
! [CONFIG_DEBUG=y&(PLATFORM=amd64|PLATFORM=mips32|PLATFORM=ia32|PLATFORM=ia32xen)] CONFIG_DEBUG_ALLREGS (y/n) |
% Compile kernel tests |
! CONFIG_TEST (y/n) |
## Hardware support |
% Framebuffer support |
! [(PLATFORM=mips32&MACHINE=lgxemul)|(PLATFORM=mips32&MACHINE=bgxemul)|(PLATFORM=ia32)|(PLATFORM=amd64)|(PLATFORM=arm32)] CONFIG_FB (y/n) |
% Framebuffer width |
@ "640" |
@ "800" |
@ "1024" |
@ "1152" |
@ "1280" |
@ "1400" |
@ "1440" |
@ "1600" |
@ "2048" |
! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_FB=y] CONFIG_VESA_WIDTH (choice) |
% Framebuffer height |
@ "480" |
@ "600" |
@ "768" |
@ "852" |
@ "900" |
@ "960" |
@ "1024" |
@ "1050" |
@ "1200" |
@ "1536" |
! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_FB=y] CONFIG_VESA_HEIGHT (choice) |
% Framebuffer depth |
@ "8" |
@ "16" |
@ "24" |
! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_FB=y] CONFIG_VESA_BPP (choice) |
% Start AP processors by the loader |
! [PLATFORM=sparc64] CONFIG_SMP (y/n) |
% Use Block Address Translation by the loader |
! [PLATFORM=ppc32] CONFIG_BAT (y/n) |
% Preserve A.OUT header in isofs.b |
! [PLATFORM=sparc64] CONFIG_AOUT_ISOFS_B (y/n) |
% External ramdisk |
! [PLATFORM=sparc64] CONFIG_RD_EXTERNAL (y/n) |
% Use shared C library |
! CONFIG_SHARED_LIBC (y/n) |
/branches/dynload/boot/boot.config |
---|
File deleted |
/branches/dynload/boot/Makefile |
---|
29,7 → 29,7 |
## Include configuration |
# |
-include Makefile.config |
-include ../Makefile.config |
## Paths |
# |
50,19 → 50,11 |
DEFS += -DCONFIG_SMP |
endif |
.PHONY: all build config distclean clean generic_clean |
.PHONY: all build clean generic_clean |
all: |
../tools/config.py boot.config default $(ARCH) $(COMPILER) $(CONFIG_DEBUG) $(IMAGE) |
$(MAKE) -C . build |
all: ../Makefile.config build |
-include arch/$(ARCH)/Makefile.inc |
config: |
../tools/config.py boot.config |
distclean: clean |
-rm Makefile.config |
generic_clean: |
-rm generic/*.o genarch/*.o |
/branches/dynload/boot/arch/sparc64/loader/Makefile |
---|
27,7 → 27,7 |
# |
include ../../../../version |
include ../../../Makefile.config |
include ../../../../Makefile.config |
## Toolchain configuration |
# |
/branches/dynload/boot/arch/ia64/loader/Makefile |
---|
27,7 → 27,7 |
# |
include ../../../../version |
include ../../../Makefile.config |
include ../../../../Makefile.config |
## Toolchain configuration |
# |
/branches/dynload/boot/arch/arm32/loader/Makefile |
---|
27,7 → 27,7 |
# |
include ../../../../version |
include ../../../Makefile.config |
include ../../../../Makefile.config |
## Toolchain configuration |
# |
/branches/dynload/boot/arch/ppc32/loader/Makefile |
---|
27,7 → 27,7 |
# |
include ../../../../version |
include ../../../Makefile.config |
include ../../../../Makefile.config |
## Toolchain configuration |
# |
/branches/dynload/boot/arch/ppc64/loader/Makefile |
---|
27,7 → 27,7 |
# |
include ../../../../version |
include ../../../Makefile.config |
include ../../../../Makefile.config |
## Toolchain configuration |
# |
/branches/dynload/boot/arch/mips32/loader/Makefile |
---|
27,7 → 27,7 |
# |
include ../../../../version |
include ../../../Makefile.config |
include ../../../../Makefile.config |
## Toolchain configuration |
# |
/branches/dynload/Makefile |
---|
36,7 → 36,6 |
ifeq ($(PLATFORM),amd64) |
KARCH = amd64 |
MACHINE = opteron |
UARCH = amd64 |
BARCH = amd64 |
endif |
111,35 → 110,24 |
.PHONY: all build config distclean clean cscope |
all: |
tools/config.py HelenOS.config default $(PLATFORM) $(COMPILER) $(CONFIG_DEBUG) |
tools/config.py HelenOS.config default |
$(MAKE) -C . build |
build: |
ifneq ($(MACHINE),) |
$(MAKE) -C kernel ARCH=$(KARCH) COMPILER=$(COMPILER) CONFIG_DEBUG=$(CONFIG_DEBUG) MACHINE=$(MACHINE) |
else |
$(MAKE) -C kernel ARCH=$(KARCH) COMPILER=$(COMPILER) CONFIG_DEBUG=$(CONFIG_DEBUG) |
endif |
$(MAKE) -C uspace ARCH=$(UARCH) COMPILER=$(COMPILER) CONFIG_DEBUG=$(CONFIG_DEBUG) |
ifneq ($(IMAGE),) |
$(MAKE) -C boot ARCH=$(BARCH) COMPILER=$(COMPILER) CONFIG_DEBUG=$(CONFIG_DEBUG) IMAGE=$(IMAGE) |
else |
$(MAKE) -C boot ARCH=$(BARCH) COMPILER=$(COMPILER) CONFIG_DEBUG=$(CONFIG_DEBUG) |
endif |
build: Makefile.config |
$(MAKE) -C kernel ARCH=$(KARCH) |
$(MAKE) -C uspace ARCH=$(UARCH) |
$(MAKE) -C boot ARCH=$(BARCH) IMAGE=$(IMAGE) |
config: |
config: HelenOS.config |
tools/config.py HelenOS.config |
distclean: |
-$(MAKE) -C kernel distclean |
-$(MAKE) -C uspace distclean |
-$(MAKE) -C boot distclean |
distclean: clean |
rm -f Makefile.config tools/*.pyc |
clean: |
-$(MAKE) -C kernel clean |
-$(MAKE) -C uspace clean |
-$(MAKE) -C boot clean |
-$(MAKE) -C kernel clean ARCH=$(KARCH) |
-$(MAKE) -C uspace clean ARCH=$(UARCH) |
-$(MAKE) -C boot clean ARCH=$(BARCH) IMAGE=$(IMAGE) |
cscope: |
find kernel boot uspace -regex '^.*\.[chsS]$$' -print > srclist |