From dd04734491a1abb95597da432d1367d9fc249fc7 Mon Sep 17 00:00:00 2001 From: Bahadir Balban Date: Mon, 14 Sep 2009 11:52:01 +0300 Subject: [PATCH] Top-level SConsctruct can now retrive shelved configuration By moving shelve retrieval details to configuration_retrieve() into configuration.py, the top-level SConstruct can now get full configuration object from shelve. --- SConstruct | 17 ++++++++++------- config/configuration.py | 22 +++++----------------- configure.py | 5 ----- conts/libl4/SConscript | 31 ++++++++++++++++++++++++------- 4 files changed, 39 insertions(+), 36 deletions(-) diff --git a/SConstruct b/SConstruct index b6a163a..884f5ee 100644 --- a/SConstruct +++ b/SConstruct @@ -7,6 +7,7 @@ import os, shelve import configure from configure import * +from os.path import * env = Environment(CC = 'arm-none-eabi-gcc', # We don't use -nostdinc because sometimes we need standard headers, @@ -21,12 +22,12 @@ env = Environment(CC = 'arm-none-eabi-gcc', CPPPATH = "#include", CPPFLAGS = '-include l4/config.h -include l4/macros.h -include l4/types.h -D__KERNEL__') -config_shelve = shelve.open(CONFIG_SHELVE) -#symbols = config_shelve["config_symbols"] -arch = config_shelve["arch"] -subarch = config_shelve["subarch"] -platform = config_shelve["platform"] -all_syms = config_shelve["all_symbols"] + +config = configuration_retrieve() +arch = config.arch +subarch = config.subarch +platform = config.platform +all_syms = config.all objects = [] objects += SConscript('src/drivers/SConscript', exports = {'symbols' : all_syms, 'env' : env}) @@ -40,4 +41,6 @@ objects += SConscript('src/api/SConscript', exports = {'symbols' : all_syms, 'en kernel_elf = env.Program(BUILDDIR + '/kernel.elf', objects) - +#libl4 = SConscript('conts/libl4/SConscript', \ +# exports = { 'arch' : arch }, duplicate = 0, \ +# variant_dir = join(BUILDDIR, os.path.relpath('conts/libl4', PROJROOT))) diff --git a/config/configuration.py b/config/configuration.py index 1e88ff8..2aa2f2e 100644 --- a/config/configuration.py +++ b/config/configuration.py @@ -16,11 +16,11 @@ class Container: class configuration: def __init__(self): - self.containers = [] self.arch = None self.subarch = None self.platform = None self.all = [] + self.containers = [] # Get all name value symbols def get_all(self, name, val): @@ -115,14 +115,10 @@ def configuration_save(config): config_shelve = shelve.open(CONFIG_SHELVE) config_shelve["configuration"] = config - # Save containers explicitly -# for i, c in zip(range(len(config.containers)), config.containers): - # config_shelve["container" + str(i)] = c - -# config_shelve["arch"] = configuration.arch -# config_shelve["subarch"] = configuration.subarch -# config_shelve["platform"] = configuration.platform -# config_shelve["all_symbols"] = configuration.all + config_shelve["arch"] = config.arch + config_shelve["subarch"] = config.subarch + config_shelve["platform"] = config.platform + config_shelve["all_symbols"] = config.all config_shelve.close() @@ -130,12 +126,4 @@ def configuration_retrieve(): # Get configuration information config_shelve = shelve.open(CONFIG_SHELVE) config = config_shelve["configuration"] - - # Retrieve and append containers explicitly - # for i in range(int(config.ncontainers)): - # config.containers.append(config_shelve["container" + str(i)]) - - #config.containers.sort() - - return config diff --git a/configure.py b/configure.py index 07e8412..5a1c66c 100755 --- a/configure.py +++ b/configure.py @@ -44,11 +44,6 @@ def configure_kernel(cml_file): cml2_header_to_symbols(CML2_CONFIG_H, config) cml2_update_config_h(CONFIG_H, config) configuration_save(config) -# config2 = configuration_retrieve() -# print "containers: " + config2.ncontainers -# for c in config2.containers: -# print c.type -# print c.id if __name__ == "__main__": configure_kernel(join(CML2_CONFIG_SRCDIR, "arm.cml")) diff --git a/conts/libl4/SConscript b/conts/libl4/SConscript index d0a213b..3e2368d 100644 --- a/conts/libl4/SConscript +++ b/conts/libl4/SConscript @@ -17,16 +17,33 @@ # # Author: Russel Winder -Import('environment') +import os, sys -e = environment.Clone() -e.Append(CPPPATH = ['include']) +PROJRELROOT = '../..' + +sys.path.append(PROJRELROOT) + +from config.projpaths import * + +Import('arch') + +env = Environment(CC = 'arm-none-linux-gnueabi-gcc', + CCFLAGS = ['-g', '-nostdlib', '-ffreestanding'], + LINKFLAGS = ['-nostdlib'], + ASFLAGS = ['-D__ASSEMBLY__'], + ENV = {'PATH' : os.environ['PATH']}, + LIBS = 'gcc', + CPPPATH = ['#include', '#include/l4lib/arch', join(PROJROOT,'include') ]) + + +def create_symlinks(arch): + if not os.path.exists("include/l4lib/arch"): + os.system("ln -s %s %s" % ("arch-" + arch, "include/l4lib/arch")) # TODO: There are errors in this code that -Werror gives problems with. -e['CCFLAGS'] = ['-g', '-nostdlib', '-Wall', '-ffreestanding', '-std=gnu99'] - -objects = e.StaticObject(Glob('src/*.c') + Glob('src/' + e['ARCH'] + '/*.[cS]')) -library = e.StaticLibrary('l4', objects) +create_symlinks(arch) +objects = env.StaticObject(Glob('src/*.c') + Glob('src/' + arch + '/*.[cS]')) +library = env.StaticLibrary('l4', objects) Return('library')