@echo off 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\