diff --git a/.gitignore b/.gitignore index a6d4376..c9475be 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ -*.obj +obj/ fatroot/ -*.efi +BootX64.efi +OVMF/OVMF_VARS_4M.fd diff --git a/OVMF/OVMF_VARS_4M.fd b/OVMF/OVMF_VARS_4M.fd index 8aebd5b..49012af 100644 Binary files a/OVMF/OVMF_VARS_4M.fd and b/OVMF/OVMF_VARS_4M.fd differ diff --git a/build.bat b/build.bat index 059080e..9df531c 100644 --- a/build.bat +++ b/build.bat @@ -1,5 +1,42 @@ @echo off -cl /c /GS- /GR- /Oi /EHs-c- /nologo /Zc:threadSafeInit- /I include /Fo:main.obj main.cpp || pause && exit /b -echo linking.. -link /NODEFAULTLIB /ENTRY:efi_main /NOLOGO /SUBSYSTEM:EFI_APPLICATION /OUT:BootX64.efi main.obj efilib.lib || pause && exit /b +setlocal enabledelayedexpansion + +rem === Input files === +set cfiles= +set afiles= + +rem === Flags === +set cflags=/c /GS- /GR- /Oi /EHs-c- /nologo /Zc:threadSafeInit- /I include /Fo:obj\ +set lflags=/NODEFAULTLIB /ENTRY:efi_main /NOLOGO /SUBSYSTEM:EFI_APPLICATION /LIBPATH:obj /OUT:BootX64.efi efilib.lib + +rem === Ensure obj\ directory exists === +if not exist "obj\" ( + mkdir "obj" +) + +rem === Dynamically generate object list === +set objects= + +for %%f in (%cfiles%) do ( + set "base=%%~nf" + set "objects=!objects!!base!.obj " +) + +for %%f in (%afiles%) do ( + set "base=%%~nf" + set "objects=!objects!!base!.obj " +) + +rem === Assemble all .asm files === +for %%f in (%afiles%) do ( + ml64 /c /nologo /Foobj\%%~nf.obj %%f || pause && exit /b +) + +rem === Compile all .cpp files === +cl %cflags% %cfiles% || pause && exit /b + +rem === Link all objects === +link %lflags% !objects! || pause && exit /b + +rem === Copy output to EFI folder === copy /B /Y BootX64.efi fatroot\EFI\Boot\