Updating wscripts to use custom tasks

This commit is contained in:
Justin C. Miller
2018-05-09 10:16:44 -07:00
parent 7ded9fe219
commit 87e7c5f00a
3 changed files with 80 additions and 30 deletions

View File

@@ -17,14 +17,6 @@ def configure(ctx):
'-T', lds_path, '-T', lds_path,
]) ])
ctx.env.append_value('SECTIONS_EFI', [ ctx.env.append_value('SECTIONS_EFI', [
"-j .text",
"-j .sdata",
"-j .data",
"-j .dynamic",
"-j .dynsym",
"-j .rel",
"-j .rela",
"-j .reloc",
]) ])
def build(bld): def build(bld):
@@ -37,11 +29,33 @@ def build(bld):
use = 'EFI', use = 'EFI',
) )
bld( from waflib.Task import Task
rule = "${objcopy} ${SECTIONS_EFI} --target=efi-app-${POPCORN_ARCH} ${SRC} ${TGT}", class make_efi(Task):
source = "boot.elf", color = 'YELLOW'
target = "boot.efi", def keyword(self):
) return "Creating"
def __str__(self):
node = self.outputs[0]
return node.path_from(node.ctx.launch_node())
def run(self):
from subprocess import check_call as call
args = self.env.objcopy
sections = [".text", ".sdata", ".data", ".dynamic",
".dynsym", ".rel", ".rela", ".reloc"]
for s in sections: args.extend(['-j', s])
args.append('--target=efi-app-' + self.env.POPCORN_ARCH)
args.append(self.inputs[0].abspath())
args.append(self.outputs[0].abspath())
call(args)
src = bld.path
out = bld.path.get_bld()
efi = make_efi(env=bld.env)
efi.set_inputs([out.make_node("boot.elf")])
efi.set_outputs([out.make_node("boot.efi")])
bld.add_to_group(efi)
# vim: ft=python et sw=4 # vim: ft=python et sw=4

View File

@@ -19,10 +19,25 @@ def build(bld):
linkflags = "-T {}".format(lds), linkflags = "-T {}".format(lds),
) )
bld( from waflib.Task import Task
source = bld.env.KERNEL_FILENAME, class objdump(Task):
target = "{}/kernel.dump".format(bld.out_dir), color = 'PINK'
rule = "objdump -D ${SRC} > ${TGT}", def keyword(self):
) return "Dumping"
def __str__(self):
node = self.outputs[0]
return node.path_from(node.ctx.launch_node())
def run(self):
from subprocess import check_output
args = self.env.objdump + ["-D", self.inputs[0].abspath()]
with file(self.outputs[0].abspath(), 'w') as output:
output.write(check_output(args))
out = bld.path.get_bld()
dump = objdump(env=bld.env)
dump.set_inputs([out.make_node(bld.env.KERNEL_FILENAME)])
dump.set_outputs([out.make_node("kernel.dump")])
bld.add_to_group(dump)
# vim: ft=python et # vim: ft=python et

45
wscript
View File

@@ -188,12 +188,15 @@ def build(bld):
bld.recurse(join("src", "kernel")) bld.recurse(join("src", "kernel"))
src = bld.path src = bld.path
out = bld.root.make_node(bld.out_dir) out = bld.path.get_bld()
kernel_name = bld.env.KERNEL_FILENAME kernel_name = bld.env.KERNEL_FILENAME
image = out.make_node("popcorn.img")
font = out.make_node("screenfont.psf")
bld( bld(
source = src.make_node(join("assets", "floppy.img")), source = src.make_node(join("assets", "floppy.img")),
target = out.make_node("popcorn.img"), target = image,
rule = "cp ${SRC} ${TGT}", rule = "cp ${SRC} ${TGT}",
) )
@@ -204,18 +207,36 @@ def build(bld):
) )
bld( bld(
source = [ source = src.make_node(join("assets", "fonts", bld.env.FONT_NAME)),
out.make_node(join("src", "boot", "boot.efi")), target = font,
out.make_node(join("src", "kernel", kernel_name)), rule = "cp ${SRC} ${TGT}",
src.make_node(join("assets", "fonts", bld.env.FONT_NAME)),
],
rule = "; ".join([
"${mcopy} -i popcorn.img ${SRC[0]} ::/efi/boot/bootx64.efi",
"${mcopy} -i popcorn.img ${SRC[1]} ::/",
"${mcopy} -i popcorn.img ${SRC[2]} ::/screenfont.psf",
]),
) )
from waflib.Task import Task
class mcopy(Task):
color = 'YELLOW'
def keyword(self):
return "Updating"
def __str__(self):
node = self.inputs[0]
return node.path_from(node.ctx.launch_node())
def run(self):
from subprocess import check_call as call
args = self.env.mcopy + ["-i", self.inputs[0].abspath(), "-D", "o"]
b_args = args + [self.inputs[1].abspath(), "::/efi/boot/bootx64.efi"]
call(b_args)
for inp in self.inputs[2:]:
call(args + [inp.abspath(), "::/"])
copy_img = mcopy(env = bld.env)
copy_img.set_inputs([
image,
out.make_node(join("src", "boot", "boot.efi")),
out.make_node(join("src", "kernel", kernel_name)),
font,
])
bld.add_to_group(copy_img)
elif bld.variant == 'tests': elif bld.variant == 'tests':
for mod_path in bld.env.MODULES: for mod_path in bld.env.MODULES:
bld.recurse(mod_path) bld.recurse(mod_path)