mirror of
https://github.com/drasko/codezero.git
synced 2026-01-12 19:03:15 +01:00
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
#
|
|
# Binary to elf build script
|
|
# Works by including a binary in an assembler file and linking it.
|
|
#
|
|
# Copyright (C) 2007 Bahadir Balban
|
|
#
|
|
import os
|
|
import sys
|
|
import shutil
|
|
from os.path import join
|
|
from glob import glob
|
|
|
|
elfimg_name = "romfs"
|
|
|
|
# The root directory of the repository where this file resides:
|
|
project_root = "../.."
|
|
tools_root = join(project_root, "tools")
|
|
prev_image = join(project_root, "tasks/test0/test0.axf")
|
|
ld_script = "include/linker.lds"
|
|
physical_base_ld_script = "include/physical_base.lds"
|
|
|
|
def get_physical_base(source, target, env):
|
|
os.system(join(tools_root, "pyelf/readelf.py --first-free-page " + \
|
|
prev_image + " >> " + physical_base_ld_script))
|
|
|
|
# The kernel build environment:
|
|
env = Environment(CC = 'arm-none-linux-gnueabi-gcc',
|
|
# We don't use -nostdinc because sometimes we need standard headers,
|
|
# such as stdarg.h e.g. for variable args, as in printk().
|
|
CCFLAGS = ['-g', '-nostdlib', '-ffreestanding', '-std=gnu99', '-Wall', '-Werror'],
|
|
LINKFLAGS = ['-nostdlib', '-T' + ld_script],
|
|
ASFLAGS = ['-D__ASSEMBLY__'],
|
|
PROGSUFFIX = '.axf', # The suffix to use for final executable
|
|
ENV = {'PATH' : os.environ['PATH']}, # Inherit shell path
|
|
CPPFLAGS = "-D__USERSPACE__",
|
|
CPPPATH = ['#include'])
|
|
|
|
src = [glob("*.S")]
|
|
objs = env.Object(src)
|
|
physical_base = env.Command(physical_base_ld_script, prev_image, get_physical_base)
|
|
task = env.Program(elfimg_name, objs)
|
|
env.Alias(elfimg_name, task)
|
|
env.Depends(task, physical_base)
|