d-uefi-loader/Rsconscript

38 lines
1.3 KiB
Plaintext

configure do
check_d_compiler "ldc2"
check_c_compiler "x86_64-w64-mingw32-gcc"
check_program "mformat"
end
class Image < Builder
def run(options)
unless @cache.up_to_date?(@target, nil, @sources, @env)
print_run_message("Image <target>#{@target}<reset>", nil)
system(*%W[dd if=/dev/zero of=#{@target} bs=1k count=1440])
system(*%W[mformat -i #{@target} -f 1440 ::])
system(*%W[mmd -i #{@target} ::/EFI])
system(*%W[mmd -i #{@target} ::/EFI/BOOT])
system(*%W[mcopy -i #{@target} #{@sources.first} ::/EFI/BOOT])
@cache.register_build(@target, nil, @sources, @env)
end
true
end
end
uefi_env = env "uefi" do |env|
env.add_builder(Image)
env["sources"] = glob("src/**/*.d")
env["sources"] += glob("uefi-d/source/**/*.d")
env["DFLAGS"] += %w[-mtriple=x86_64-unknown-windows-coff --betterC -release]
env["D_IMPORT_PATH"] += %w[uefi-d/source]
env["LD"] = "x86_64-w64-mingw32-gcc"
env["LDFLAGS"] += %w[-nostdlib -Wl,-dll -shared -Wl,--subsystem,10 -e efi_main]
env["LDCMD"] = %w[${LD} -o ${_TARGET} ${LDFLAGS} ${_SOURCES} ${LIBDIRPREFIX}${LIBPATH} ${LIBLINKPREFIX}${LIBS}]
env.Program("^/BOOTX64.EFI", "${sources}")
env.Image("^/efi-loader.img", "^/BOOTX64.EFI")
end
task "run" do
sh %W[qemu-system-x86_64 -bios OVMF.fd -hda #{uefi_env.expand("^/efi-loader.img")}]
end