final.axf building from top-level build.py including containers

This commit is contained in:
Bahadir Balban
2009-09-17 12:49:49 +03:00
parent 6b899ebf15
commit 6aac5332ae
6 changed files with 72 additions and 13 deletions

46
build.py Executable file
View File

@@ -0,0 +1,46 @@
#! /usr/bin/env python2.6
# -*- mode: python; coding: utf-8; -*-
#
# Top-level build script for Codezero
#
# Configures the Codezero environment, builds the kernel and userspace
# libraries, builds and packs all containers and builds the final loader
# image that contains all images.
#
import os, sys, shelve, shutil
from os.path import join
from config.projpaths import *
from config.configuration import *
from scripts.conts import containers
from configure import *
# NOTE:
# The scripts obtain all the configuration data (a set of class
# instances) from the configuration shelve, so we don't pass
# any arguments here.
def main():
#
# Configure
#
configure_kernel(join(CML2_CONFIG_SRCDIR, 'arm.cml'))
#
# Build the kernel and libl4
#
os.chdir(PROJROOT)
os.system("scons")
#
# Build containers
#
containers.build_all_containers()
#
# Build libs and loader
#
os.chdir(PROJROOT)
os.system("scons -f SConstruct.loader")
if __name__ == "__main__":
main()

View File

@@ -1,6 +1,6 @@
#! /usr/bin/env python2.6
# -*- mode: python; coding: utf-8; -*-
import os, sys, shelve, shutil, re
import os, sys, shelve, shutil, re, string
from projpaths import *
class Container:
@@ -108,6 +108,23 @@ class configuration:
# Make sure elements in order for indexed accessing
self.containers.sort()
def containers_print(self, containers):
for c in containers:
print '\nContainer %d' % c.id
print 'Container type: %s' % string.ljust(c.type, 10)
print 'Container lma: %s' % string.ljust('%s - %s' % (c.lma_start, c.lma_end), 10)
print 'Container vma: %s' % string.ljust('%s - %s' % (c.vma_start, c.vma_end), 10)
def config_print(self):
print 'Configuration\n'
print '-------------\n'
print 'Arch: %s' % string.ljust('%s, %s' % (self.arch, self.subarch), 16)
print 'Platform: %s' % string.ljust(self.platform, 16)
print 'Symbols:\n %s' % self.all
print 'Containers: %s' % self.ncontainers
self.containers_print(self.containers)
def configuration_save(config):
if not os.path.exists(CONFIG_SHELVE_DIR):
os.mkdir(CONFIG_SHELVE_DIR)

View File

@@ -44,6 +44,7 @@ def configure_kernel(cml_file):
cml2_header_to_symbols(CML2_CONFIG_H, config)
cml2_update_config_h(CONFIG_H, config)
configuration_save(config)
#config.config_print()
if __name__ == "__main__":
configure_kernel(join(CML2_CONFIG_SRCDIR, "arm.cml"))

View File

@@ -36,17 +36,19 @@ def build_container(container):
"container of type: %s" % (container.type)
Exit(1)
def main():
def build_all_containers():
container_images = []
config = configuration_retrieve()
# config.config_print()
for container in config.containers:
container_images.append(build_container(container))
all_cont_packer = AllContainerPacker(container_images, config.containers)
all_cont_packer.pack_all()
return all_cont_packer.pack_all()
if __name__ == "__main__":
main()
build_all_containers()

View File

@@ -62,7 +62,6 @@ class AllContainerPacker:
file_body = ""
img_i = 0
for img in self.cont_images_in:
print img
file_body += containers_assembler_body % (img_i, img)
img_i += 1
@@ -86,10 +85,8 @@ class AllContainerPacker:
self.containers_lds_out,
self.containers_S_out))
# oldwd = os.getcwd()
# os.chdir(PROJROOT)
# os.system("scons -f SConstruct.loader")
# os.chdir(oldwd)
# Return the final image to calling script
return self.containers_elf_out
def clean(self):
if os.path.exists(self.containers_elf_out):

View File

@@ -44,9 +44,6 @@ assembler_symbol_definition = \
'''
def generate_ksym_to_loader(target_path, source_path):
print "Source: ", source_path
print "Target: ", target_path
symbols = ['break_virtual']
with open(target_path, 'w') as asm_file:
asm_file.write(ksym_header % (target_path, source_path, sys.argv[0]))
@@ -76,7 +73,6 @@ def generate_image_S(target_path, images):
fbody = ''
with open(target_path, 'w+') as images_S:
for img in images:
# print img[:-len(kern_fname)]
print os.path.basename(img.path)
if os.path.basename(img.path) == kern_fname:
fbody += decl_sect_asm % ('.kernel', img)