Updating wscripts to use custom tasks
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
43
wscript
43
wscript
@@ -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,17 +207,35 @@ def build(bld):
|
|||||||
)
|
)
|
||||||
|
|
||||||
bld(
|
bld(
|
||||||
source = [
|
source = src.make_node(join("assets", "fonts", bld.env.FONT_NAME)),
|
||||||
|
target = font,
|
||||||
|
rule = "cp ${SRC} ${TGT}",
|
||||||
|
)
|
||||||
|
|
||||||
|
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", "boot", "boot.efi")),
|
||||||
out.make_node(join("src", "kernel", kernel_name)),
|
out.make_node(join("src", "kernel", kernel_name)),
|
||||||
src.make_node(join("assets", "fonts", bld.env.FONT_NAME)),
|
font,
|
||||||
],
|
])
|
||||||
rule = "; ".join([
|
bld.add_to_group(copy_img)
|
||||||
"${mcopy} -i popcorn.img ${SRC[0]} ::/efi/boot/bootx64.efi",
|
|
||||||
"${mcopy} -i popcorn.img ${SRC[1]} ::/",
|
|
||||||
"${mcopy} -i popcorn.img ${SRC[2]} ::/screenfont.psf",
|
|
||||||
]),
|
|
||||||
)
|
|
||||||
|
|
||||||
elif bld.variant == 'tests':
|
elif bld.variant == 'tests':
|
||||||
for mod_path in bld.env.MODULES:
|
for mod_path in bld.env.MODULES:
|
||||||
|
|||||||
Reference in New Issue
Block a user