Add initial HOS EFI Loader sources
This commit is contained in:
parent
1fc2dd34e5
commit
54451bcf5b
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "uefi-d"]
|
||||
path = uefi-d
|
||||
url = git://github.com/kubasz/uefi-d
|
29
Rsconscript
29
Rsconscript
@ -3,9 +3,9 @@ path_prepend "x86_64-elf-gcc/bin"
|
||||
|
||||
configure do
|
||||
rscons "x86_64-elf-gcc.rb", "-b", "#{build_dir}/x86_64-elf-gcc"
|
||||
check_program "ldc2"
|
||||
check_program "x86_64-w64-mingw32-gcc"
|
||||
check_program "x86_64-elf-gcc"
|
||||
check_d_compiler "ldc2", use: "ldc2"
|
||||
check_c_compiler "x86_64-w64-mingw32-gcc", use: "x86_64-w64-mingw32-gcc"
|
||||
check_c_compiler "x86_64-elf-gcc", use: "x86_64-elf-gcc"
|
||||
check_c_compiler
|
||||
check_program "mformat", on_fail: "Install the mtools package"
|
||||
check_cfg package: "freetype2", on_fail: "Install libfreetype-dev", use: "freetype"
|
||||
@ -45,6 +45,7 @@ end
|
||||
|
||||
# FontGen Environment
|
||||
fontgen_env = env "fontgen", use: "freetype" do |env|
|
||||
env["LDCMD"].map! {|v| v == "-of" ? "-o" : v}
|
||||
env.Program("^/fontgen", glob("src/fontgen/**/*.c"))
|
||||
end
|
||||
|
||||
@ -69,7 +70,23 @@ end
|
||||
# env.Image("^/hos.img", %w[^/hos.elf])
|
||||
#end
|
||||
|
||||
task "run", desc: "Run HOS in QEMU" do
|
||||
img = kernel_env.expand("^/hos.img")
|
||||
sh %W[qemu-system-x86_64 -bios OVMF.fd -hda #{img}]
|
||||
hel_env = env "hel", use: %w[ldc2 x86_64-w64-mingw32-gcc] do |env|
|
||||
env.add_builder(Image)
|
||||
env["sources"] = glob("src/hel/**/*.d")
|
||||
env["sources"] += glob("uefi-d/source/**/*.d")
|
||||
env["DC"] = "ldc2"
|
||||
env["DFLAGS"] += %w[-mtriple=x86_64-unknown-windows-coff --betterC -release -O3]
|
||||
env["D_IMPORT_PATH"] += %w[src 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["OBJDUMP"] = "x86_64-w64-mingw32-objdump"
|
||||
env.Program("^/BOOTX64.EFI", "${sources}")
|
||||
env.Disassemble("^/BOOTX64.txt", "^/BOOTX64.EFI")
|
||||
env.Image("^/hos.img", "^/BOOTX64.EFI")
|
||||
end
|
||||
|
||||
task "run", desc: "Run HOS in QEMU" do
|
||||
img = hel_env.expand("^/hos.img")
|
||||
sh %W[qemu-system-x86_64 -bios OVMF.fd -drive file=#{img},format=raw]
|
||||
end
|
||||
|
17
src/hel/hel.d
Normal file
17
src/hel/hel.d
Normal file
@ -0,0 +1,17 @@
|
||||
import uefi;
|
||||
|
||||
extern (C) EFI_STATUS efi_main(EFI_HANDLE image_handle, EFI_SYSTEM_TABLE * st)
|
||||
{
|
||||
st.ConOut.ClearScreen(st.ConOut);
|
||||
|
||||
st.ConOut.OutputString(st.ConOut, cast(CHAR16 *)"HOS EFI loader\r\n"w);
|
||||
st.ConOut.OutputString(st.ConOut, cast(CHAR16 *)"Press any key...\r\n"w);
|
||||
|
||||
st.ConIn.Reset(st.ConIn, FALSE);
|
||||
EFI_INPUT_KEY key;
|
||||
while (st.ConIn.ReadKeyStroke(st.ConIn, &key) == EFI_NOT_READY)
|
||||
{
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
1
uefi-d
Submodule
1
uefi-d
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit e70959ce8ad1b113b5f7aa2111ea4d88f6b6ea63
|
Loading…
x
Reference in New Issue
Block a user