mirror of
https://github.com/drasko/codezero.git
synced 2026-03-26 22:09:04 +01:00
final.axf building from top-level build.py including containers
This commit is contained in:
46
build.py
Executable file
46
build.py
Executable 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()
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#! /usr/bin/env python2.6
|
#! /usr/bin/env python2.6
|
||||||
# -*- mode: python; coding: utf-8; -*-
|
# -*- mode: python; coding: utf-8; -*-
|
||||||
import os, sys, shelve, shutil, re
|
import os, sys, shelve, shutil, re, string
|
||||||
from projpaths import *
|
from projpaths import *
|
||||||
|
|
||||||
class Container:
|
class Container:
|
||||||
@@ -108,6 +108,23 @@ class configuration:
|
|||||||
# Make sure elements in order for indexed accessing
|
# Make sure elements in order for indexed accessing
|
||||||
self.containers.sort()
|
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):
|
def configuration_save(config):
|
||||||
if not os.path.exists(CONFIG_SHELVE_DIR):
|
if not os.path.exists(CONFIG_SHELVE_DIR):
|
||||||
os.mkdir(CONFIG_SHELVE_DIR)
|
os.mkdir(CONFIG_SHELVE_DIR)
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ def configure_kernel(cml_file):
|
|||||||
cml2_header_to_symbols(CML2_CONFIG_H, config)
|
cml2_header_to_symbols(CML2_CONFIG_H, config)
|
||||||
cml2_update_config_h(CONFIG_H, config)
|
cml2_update_config_h(CONFIG_H, config)
|
||||||
configuration_save(config)
|
configuration_save(config)
|
||||||
|
#config.config_print()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
configure_kernel(join(CML2_CONFIG_SRCDIR, "arm.cml"))
|
configure_kernel(join(CML2_CONFIG_SRCDIR, "arm.cml"))
|
||||||
|
|||||||
@@ -36,17 +36,19 @@ def build_container(container):
|
|||||||
"container of type: %s" % (container.type)
|
"container of type: %s" % (container.type)
|
||||||
Exit(1)
|
Exit(1)
|
||||||
|
|
||||||
def main():
|
def build_all_containers():
|
||||||
container_images = []
|
container_images = []
|
||||||
|
|
||||||
config = configuration_retrieve()
|
config = configuration_retrieve()
|
||||||
|
|
||||||
|
# config.config_print()
|
||||||
for container in config.containers:
|
for container in config.containers:
|
||||||
container_images.append(build_container(container))
|
container_images.append(build_container(container))
|
||||||
|
|
||||||
all_cont_packer = AllContainerPacker(container_images, config.containers)
|
all_cont_packer = AllContainerPacker(container_images, config.containers)
|
||||||
|
|
||||||
all_cont_packer.pack_all()
|
return all_cont_packer.pack_all()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
build_all_containers()
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ class AllContainerPacker:
|
|||||||
file_body = ""
|
file_body = ""
|
||||||
img_i = 0
|
img_i = 0
|
||||||
for img in self.cont_images_in:
|
for img in self.cont_images_in:
|
||||||
print img
|
|
||||||
file_body += containers_assembler_body % (img_i, img)
|
file_body += containers_assembler_body % (img_i, img)
|
||||||
img_i += 1
|
img_i += 1
|
||||||
|
|
||||||
@@ -86,10 +85,8 @@ class AllContainerPacker:
|
|||||||
self.containers_lds_out,
|
self.containers_lds_out,
|
||||||
self.containers_S_out))
|
self.containers_S_out))
|
||||||
|
|
||||||
# oldwd = os.getcwd()
|
# Return the final image to calling script
|
||||||
# os.chdir(PROJROOT)
|
return self.containers_elf_out
|
||||||
# os.system("scons -f SConstruct.loader")
|
|
||||||
# os.chdir(oldwd)
|
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
if os.path.exists(self.containers_elf_out):
|
if os.path.exists(self.containers_elf_out):
|
||||||
|
|||||||
@@ -44,9 +44,6 @@ assembler_symbol_definition = \
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
def generate_ksym_to_loader(target_path, source_path):
|
def generate_ksym_to_loader(target_path, source_path):
|
||||||
print "Source: ", source_path
|
|
||||||
print "Target: ", target_path
|
|
||||||
|
|
||||||
symbols = ['break_virtual']
|
symbols = ['break_virtual']
|
||||||
with open(target_path, 'w') as asm_file:
|
with open(target_path, 'w') as asm_file:
|
||||||
asm_file.write(ksym_header % (target_path, source_path, sys.argv[0]))
|
asm_file.write(ksym_header % (target_path, source_path, sys.argv[0]))
|
||||||
@@ -76,7 +73,6 @@ def generate_image_S(target_path, images):
|
|||||||
fbody = ''
|
fbody = ''
|
||||||
with open(target_path, 'w+') as images_S:
|
with open(target_path, 'w+') as images_S:
|
||||||
for img in images:
|
for img in images:
|
||||||
# print img[:-len(kern_fname)]
|
|
||||||
print os.path.basename(img.path)
|
print os.path.basename(img.path)
|
||||||
if os.path.basename(img.path) == kern_fname:
|
if os.path.basename(img.path) == kern_fname:
|
||||||
fbody += decl_sect_asm % ('.kernel', img)
|
fbody += decl_sect_asm % ('.kernel', img)
|
||||||
|
|||||||
Reference in New Issue
Block a user