mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-10 09:40:53 +01:00
616dbbe140
Signed-off-by: SergeySlice <sergey.slice@gmail.com>
736 lines
21 KiB
Batchfile
736 lines
21 KiB
Batchfile
@echo off
|
|
rem # windows batch script for building clover
|
|
rem # 2012-09-06 apianti
|
|
rem # 2016 cecekpawon
|
|
|
|
pushd .
|
|
|
|
rem # parse parameters for what we need
|
|
set ENABLE_SECURE_BOOT=0
|
|
set TARGETARCH=
|
|
set TOOLCHAIN=
|
|
set BUILDTARGET=
|
|
set DSCFILE=
|
|
set CLEANING=
|
|
set THREADNUMBER=
|
|
set SHOW_USAGE=0
|
|
set EDK_BUILDINFOS=
|
|
set EDK2SHELL=
|
|
set BUILD_IA32=
|
|
set BUILD_X64=
|
|
set EDK2_BUILD_OPTIONS=-D NO_GRUB_DRIVERS -D MDEPKG_NDEBUG -D MSFT
|
|
set VBIOSPATCHCLOVEREFI=0
|
|
set ONLY_SATA_0=0
|
|
set USE_BIOS_BLOCKIO=0
|
|
set USE_LOW_EBDA=0
|
|
set DISABLE_USB_SUPPORT=0
|
|
set GENPAGE=0
|
|
set MSG=
|
|
set DEVSTAGE=
|
|
set IASL_PREFIX=c:\ASL\
|
|
|
|
set DEFAULT_CYGWIN_HOME=c:\cygwin
|
|
rem %WORKSPACE_TOOLS_PATH%\Bin\CYGWIN_NT-5.1-i686\
|
|
rem set DEFAULT_PYTHONHOME=d:\Program File\Python38
|
|
rem set DEFAULT_PYTHONPATH=d:\Program File\Python38\Lib
|
|
rem set DEFAULT_PYTHON_FREEZER_PATH=%PYTHON_HOME%\Scripts
|
|
rem set "PYTHONHOME=d:\Program File\Python37"
|
|
rem set "PYTHON_FREEZER_PATH=%PYTHONHOME%\Scripts"
|
|
set PYTHON3_ENABLE=TRUE
|
|
set DEFAULT_NASM_PREFIX=C:\Program Files\NASM
|
|
rem # %DEFAULT_CYGWIN_HOME%\bin
|
|
set DEFAULT_TOOLCHAIN=VS2017
|
|
set DEFAULT_BUILDTARGET=RELEASE
|
|
set DEFAULT_TARGETARCH=X64
|
|
set DEFAULT_THREADNUMBER=%NUMBER_OF_PROCESSORS%
|
|
set WIN_IASL_BIN=c:\ASL
|
|
set WIN_ASL_BIN=c:\ASL
|
|
|
|
rem set CYGWIN_HOME=%WORKSPACE_TOOLS_PATH%\Bin\CYGWIN_NT-5.1-i686\
|
|
|
|
call:parseArguments %*
|
|
if errorlevel 1 (
|
|
set MSG=Unknown error
|
|
goto failscript
|
|
)
|
|
|
|
rem # get the current revision number
|
|
:getrevision
|
|
rem get svn revision number
|
|
rem set F_VER_TXT=vers.txt
|
|
rem # svnversion -n>%F_VER_TXT%
|
|
rem set /P s=<%F_VER_TXT%
|
|
rem # del %F_VER_TXT%
|
|
rem git rev-list --tags --max-count=1 > revs.txt
|
|
rem set /p c=< revs.txt
|
|
rem del revs.txt
|
|
rem git describe --tags %c% > vers.txt
|
|
git describe --always --abbrev=0 > vers.txt
|
|
set /P s=< vers.txt
|
|
del vers.txt
|
|
|
|
set SVNREVISION=
|
|
|
|
rem # get the current revision number
|
|
:fixrevision
|
|
if not defined s goto init
|
|
set c=%s:~0,1%
|
|
set s=%s:~1%
|
|
if ["%c::=%"] == [""] goto init
|
|
if ["%c:M=%"] == [""] goto init
|
|
if ["%c:S=%"] == [""] goto init
|
|
if ["%c:P=%"] == [""] goto init
|
|
set SVNREVISION=%SVNREVISION%%c%
|
|
goto fixrevision
|
|
|
|
:createDir
|
|
if not exist "%~1" mkdir "%~1"
|
|
goto:eof
|
|
|
|
rem # copybin
|
|
:copybin
|
|
if not exist "%~1" goto:eof
|
|
call:createDir "%~2"
|
|
echo -^> "%~3"
|
|
copy /B /Y "%~1" "%~2\%~3">nul
|
|
goto:eof
|
|
|
|
rem # sometimes broken
|
|
:getFilesize
|
|
set filesize=%~z1
|
|
goto:eof
|
|
|
|
rem # initialize
|
|
:init
|
|
if not defined SVNREVISION (
|
|
set MSG=Invalid ^(local^) source
|
|
goto failscript
|
|
) else (
|
|
set SVNREVISION=%SVNREVISION%%DEVSTAGE%
|
|
)
|
|
|
|
rem # pass 1-call param
|
|
if ["%SHOW_USAGE%"] == ["1"] goto usage
|
|
|
|
if not defined CYGWIN_HOME (
|
|
echo No cygwin_home....
|
|
set CYGWIN_HOME=%DEFAULT_CYGWIN_HOME%
|
|
)
|
|
rem if not defined PYTHONHOME (
|
|
rem set PYTHONHOME=%DEFAULT_PYTHONHOME%
|
|
rem )
|
|
rem if not defined PYTHON_HOME (
|
|
rem set PYTHON_HOME=%PYTHONHOME%
|
|
rem )
|
|
rem if not defined PYTHON_PATH (
|
|
rem set PYTHON_PATH=%PYTHON_HOME%
|
|
rem )
|
|
rem if not defined PYTHON_FREEZER_PATH (
|
|
rem set PYTHON_FREEZER_PATH=%DEFAULT_PYTHON_FREEZER_PATH%
|
|
rem )
|
|
if not defined NASM_PREFIX (
|
|
set NASM_PREFIX=%DEFAULT_NASM_PREFIX%
|
|
)
|
|
|
|
rem # setup current dir and edk2 if needed
|
|
if defined WORKSPACE goto prebuild
|
|
echo Searching for EDK2 ...
|
|
|
|
rem # search edk path
|
|
:searchforedk
|
|
if exist edksetup.bat (
|
|
echo ==^> Found EDK2 ^<==
|
|
echo.
|
|
call edksetup.bat
|
|
@echo off
|
|
goto prebuild
|
|
)
|
|
rem # if ["%CD%"] == ["%~d0%\"] (
|
|
rem # popd
|
|
rem # echo ==^> EDK2 not found ^<==
|
|
rem # goto failscript
|
|
rem # )
|
|
rem # cd ..
|
|
goto searchforedk
|
|
|
|
rem # setup build
|
|
:prebuild
|
|
popd
|
|
|
|
rem # fix any parameters not set
|
|
set "BASETOOLS_DIR=%WORKSPACE_TOOLS_PATH%\Bin\Win32"
|
|
set "CYGWIN_HOME=%WORKSPACE_TOOLS_PATH%\Bin\CYGWIN_NT-5.1-i686"
|
|
if defined EDK_TOOLS_BIN (
|
|
set "BASETOOLS_DIR=%EDK_TOOLS_BIN%"
|
|
)
|
|
set NASM_INC=
|
|
|
|
rem # pass 1-call param
|
|
if defined EDK_BUILDINFOS goto getEDKBuildInfos
|
|
|
|
if ["%USE_BIOS_BLOCKIO%"] == ["1"] call:addEdk2BuildOption "-D USE_BIOS_BLOCKIO"
|
|
if ["%VBIOSPATCHCLOVEREFI%"] == ["1"] call:addEdk2BuildOption "-D VBIOSPATCHCLOVEREFI"
|
|
if ["%ONLY_SATA_0%"] == ["1"] call:addEdk2BuildOption "-D ONLY_SATA_0"
|
|
if ["%USE_LOW_EBDA%"] == ["1"] call:addEdk2BuildOption "-D USE_LOW_EBDA"
|
|
if ["%DISABLE_USB_SUPPORT%"] == ["1"] call:addEdk2BuildOption "-D DISABLE_USB_SUPPORT"
|
|
|
|
:readTemplate
|
|
rem # Read target.txt. Dont look TARGET_ARCH, we build multi ARCH if undefined
|
|
|
|
set F_TMP_TXT=tmp.txt
|
|
set EDK_CONF_TARGET_TXT=Conf\target.txt
|
|
findstr /v /r /c:"^#" /c:"^$" "%EDK_CONF_TARGET_TXT%">%F_TMP_TXT%
|
|
for /f "tokens=1*" %%i in ('type %F_TMP_TXT% ^| findstr /i "TOOL_CHAIN_TAG"') do set SCAN_TOOLCHAIN%%j
|
|
for /f "tokens=1*" %%i in ('type %F_TMP_TXT% ^| findstr /i "TARGET_ARCH"') do set SCAN_TARGETARCH%%j
|
|
for /f "tokens=1*" %%i in ('type %F_TMP_TXT% ^| findstr /v /r /c:"TARGET_ARCH" ^| findstr /i "TARGET"') do set SCAN_BUILDTARGET%%j
|
|
del %F_TMP_TXT%
|
|
|
|
if defined SCAN_TOOLCHAIN (
|
|
set SCAN_TOOLCHAIN=%SCAN_TOOLCHAIN: =%
|
|
if not ["%SCAN_TOOLCHAIN: =%"] == [""] set DEFAULT_TOOLCHAIN=%SCAN_TOOLCHAIN: =%
|
|
)
|
|
|
|
if not ["%BUILD_X64%"] == ["1"] (
|
|
if not ["%BUILD_IA32%"] == ["1"] (
|
|
if not defined SCAN_TARGETARCH set "SCAN_TARGETARCH=%DEFAULT_TARGETARCH%"
|
|
if defined SCAN_TARGETARCH (
|
|
for %%i in (%SCAN_TARGETARCH%) do (
|
|
if ["%%i"] == ["X64"] (
|
|
set BUILD_X64=1
|
|
) else (
|
|
if ["%%i"] == ["IA32"] (
|
|
set BUILD_IA32=1
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
if defined SCAN_BUILDTARGET (
|
|
set SCAN_BUILDTARGET=%SCAN_BUILDTARGET: =%
|
|
if not ["%SCAN_BUILDTARGET: =%"] == [""] set DEFAULT_BUILDTARGET=%SCAN_BUILDTARGET: =%
|
|
)
|
|
|
|
if not defined TOOLCHAIN set TOOLCHAIN=%DEFAULT_TOOLCHAIN%
|
|
if not defined BUILDTARGET set BUILDTARGET=%DEFAULT_BUILDTARGET%
|
|
if not defined THREADNUMBER set THREADNUMBER=%DEFAULT_THREADNUMBER%
|
|
|
|
rem # check DSC: Clover default
|
|
if not defined DSCFILE set DSCFILE="%CD%\Clover.dsc"
|
|
if not exist %DSCFILE% (
|
|
set MSG=No Platform
|
|
goto usage
|
|
)
|
|
|
|
if ["%BUILD_X64%"] == ["1"] (
|
|
if ["%BUILD_IA32%"] == ["1"] (
|
|
if defined CLEANING (
|
|
echo Cleaning architecture ^(X64 ^& IA32^) ...
|
|
) else (
|
|
echo Building architecture ^(X64 ^& IA32^) ...
|
|
)
|
|
) else (
|
|
if defined CLEANING (
|
|
echo Cleaning architecture ^(X64^) ...
|
|
) else (
|
|
echo Building architecture ^(X64^) ...
|
|
)
|
|
)
|
|
) else (
|
|
if ["%BUILD_IA32%"] == ["1"] (
|
|
if defined CLEANING (
|
|
echo Cleaning architecture ^(IA32^) ...
|
|
) else (
|
|
echo Building architecture ^(IA32^) ...
|
|
)
|
|
goto build32
|
|
) else (
|
|
set MSG=No build architecture
|
|
goto usage
|
|
)
|
|
)
|
|
|
|
set "TARGETARCH=X64"
|
|
set UEFI_DRV_LIST=(FSInject OsxFatBinaryDrv VBoxHfs)
|
|
set UEFI_OFF_DRV_LIST=(CsmVideoDxe EmuVariableUefi OsxAptioFixDrv OsxAptioFix2Drv OsxLowMemFixDrv PartitionDxe)
|
|
set DRV_LIST=(NvmExpressDxe Ps2MouseDxe UsbMouseDxe VBoxIso9600 VBoxExt2 VBoxExt4 XhciDxe)
|
|
goto startbuild
|
|
|
|
:build32
|
|
set "TARGETARCH=IA32"
|
|
set UEFI_DRV_LIST=(FSInject OsxFatBinaryDrv VBoxHfs)
|
|
set UEFI_OFF_DRV_LIST=(CsmVideoDxe)
|
|
set DRV_LIST=(Ps2KeyboardDxe Ps2MouseAbsolutePointerDxe Ps2MouseDxe UsbMouseDxe VBoxExt2 VBoxExt4 XhciDxe)
|
|
|
|
:startbuild
|
|
set "CMD_BUILD=build -a %TARGETARCH% -t %TOOLCHAIN% -b %BUILDTARGET% -n %THREADNUMBER% %CLEANING%"
|
|
set F_VER_H=Version.h
|
|
echo.
|
|
if not defined CLEANING (
|
|
echo Building Clover ^(%TARGETARCH%^) ...
|
|
echo.
|
|
echo Generating %CD%\%F_VER_H%
|
|
echo.
|
|
) else (
|
|
echo Start ^(%CLEANING%^ %TARGETARCH%^) build ...
|
|
echo.
|
|
goto callbuild
|
|
)
|
|
|
|
for /f "tokens=2 delims=[]" %%x in ('ver') do set WINVER=%%x
|
|
set WINVER=%WINVER:Version =%
|
|
|
|
set "CMD_BUILD=%CMD_BUILD% -p %DSCFILE% %EDK2_BUILD_OPTIONS%"
|
|
|
|
set clover_build_info="cbuild.bat"
|
|
set clover_build_info=%clover_build_info:\=\\%
|
|
set clover_build_info=%clover_build_info:"=\"%
|
|
for /f "tokens=* delims= " %%A in ('echo %clover_build_info% ') do set clover_build_info=%%A
|
|
set clover_build_info=%clover_build_info:~0,-1%
|
|
set clover_build_info="Command: %clover_build_info% | OS: Win %WINVER%"
|
|
|
|
rem # generate build date and time
|
|
set BUILDDATE=%date:~10,4%-%date:~4,2%-%date:~7,2% %time:~0,-3%
|
|
|
|
rem # generate version.h
|
|
echo // Autogenerated %F_VER_H%>%F_VER_H%
|
|
echo #define FIRMWARE_VERSION "2.31">>%F_VER_H%
|
|
echo #define FIRMWARE_BUILDDATE "%BUILDDATE%">>%F_VER_H%
|
|
echo #define FIRMWARE_REVISION L"%SVNREVISION%">>%F_VER_H%
|
|
echo #define REVISION_STR "Clover revision: %SVNREVISION%">>%F_VER_H%
|
|
echo #define BUILDINFOS_STR %clover_build_info%>>%F_VER_H%
|
|
rem # copy %F_VER_H% rEFIt_UEFI\%F_VER_H%
|
|
|
|
:callbuild
|
|
rem # launch build
|
|
call %CMD_BUILD%
|
|
|
|
if errorlevel 1 (
|
|
set MSG=Error while building
|
|
goto failscript
|
|
)
|
|
|
|
rem # drop compiled files to EFI folder
|
|
:postbuild
|
|
set SIGNTOOL_BUILD_DIR=%CD%\SignTool
|
|
set SIGNTOOL_BUILD=BuildSignTool.bat
|
|
set SIGNTOOL=%CD%\SignTool\SignTool
|
|
set BUILD_DIR=%WORKSPACE%\Build\Clover\%BUILDTARGET%_%TOOLCHAIN%
|
|
set DEST_DIR=%CD%\CloverPackage\CloverV2
|
|
set BOOTSECTOR_BIN_DIR=%CD%\CloverEFI\BootSector\bin
|
|
set BUILD_DIR_ARCH=%BUILD_DIR%\%TARGETARCH%
|
|
|
|
set TARGETARCH_INT=%TARGETARCH:ia=%
|
|
set TARGETARCH_INT=%TARGETARCH_INT:x=%
|
|
|
|
set "DEST_BOOTSECTORS=%DEST_DIR%\BootSectors"
|
|
set "DEST_BOOTLOADERS=%DEST_DIR%\Bootloaders"
|
|
set "DEST_EFI=%DEST_DIR%\EFI"
|
|
set "DEST_BOOT=%DEST_EFI%\BOOT"
|
|
set "DEST_CLOVER=%DEST_EFI%\CLOVER"
|
|
set "DEST_TOOLS=%DEST_CLOVER%\tools"
|
|
set "DEST_DRIVER=%DEST_CLOVER%\drivers%TARGETARCH_INT%"
|
|
set "DEST_OFF=%DEST_DIR%\drivers-Off\drivers%TARGETARCH_INT%"
|
|
|
|
set "EDK2SHELL_PATH=%WORKSPACE%\EdkShellBinPkg\%EDK2SHELL%\%TARGETARCH%"
|
|
set "EDK2SHELL_MIN=%EDK2SHELL_PATH%\Shell.efi"
|
|
set "EDK2SHELL_FULL=%EDK2SHELL_PATH%\Shell_Full.efi"
|
|
set CLOVER_EDK2SHELL=
|
|
|
|
if exist "%EDK2SHELL_MIN%" (
|
|
set CLOVER_EDK2SHELL=%EDK2SHELL_MIN%
|
|
) else (
|
|
if exist "%EDK2SHELL_FULL%" (
|
|
set CLOVER_EDK2SHELL=%EDK2SHELL_FULL%
|
|
)
|
|
)
|
|
|
|
if not defined CLEANING goto finalizebuild
|
|
|
|
for /R "%DEST_BOOTSECTORS%" %%i in (boot0* boot1*) do del "%%i"
|
|
for /R "%DEST_BOOTLOADERS%\%TARGETARCH%" %%i in (boot*) do del "%%i"
|
|
for /R "%DEST_TOOLS%" %%i in (Shell*.efi) do ren "%%i" "%%~nxi.ctmp"
|
|
for /R "%DEST_DIR%" %%i in (*%TARGETARCH%.efi *-%TARGETARCH_INT%.efi) do del /F /Q "%%i"
|
|
for /R "%DEST_TOOLS%" %%i in (*.ctmp) do ren "%%i" "%%~ni"
|
|
|
|
echo.
|
|
echo End ^(%CLEANING% %TARGETARCH%^) build ...
|
|
echo.
|
|
if ["%BUILD_IA32%"] == ["1"] (
|
|
if not ["%TARGETARCH%"] == ["IA32"] goto build32
|
|
)
|
|
goto done
|
|
|
|
:finalizebuild
|
|
echo.
|
|
echo Performing post build operations ...
|
|
echo.
|
|
|
|
rem # Be sure that all needed directories exists
|
|
call:createDir %DEST_BOOTSECTORS%
|
|
call:createDir %DEST_BOOT%
|
|
call:createDir %DEST_TOOLS%
|
|
call:createDir %DEST_DRIVER%
|
|
call:createDir %DEST_DRIVER%UEFI
|
|
call:createDir %DEST_OFF%
|
|
call:createDir %DEST_OFF%UEFI
|
|
|
|
rem # fixme: openssl compilation error
|
|
if ["%ENABLE_SECURE_BOOT%"] == ["1"] (
|
|
rem echo Building signing tool ...
|
|
rem pushd .
|
|
rem cd "%SIGNTOOL_BUILD_DIR%"
|
|
rem call "%SIGNTOOL_BUILD%"
|
|
rem popd
|
|
rem if errorlevel 1 (
|
|
rem set MSG=Error while signing
|
|
rem goto failscript
|
|
rem )
|
|
echo.
|
|
echo "ENABLE_SECURE_BOOT" doesnt work ATM ...
|
|
echo.
|
|
)
|
|
rem goto noboot
|
|
call:createDir %DEST_BOOTLOADERS%\%TARGETARCH%
|
|
|
|
echo Compressing DUETEFIMainFv.FV ^(%TARGETARCH%^) ...
|
|
LzmaCompress -e -q -o "%BUILD_DIR%\FV\DUETEFIMAINFV%TARGETARCH%.z" "%BUILD_DIR%\FV\DUETEFIMAINFV%TARGETARCH%.Fv"
|
|
|
|
echo Compressing DxeMain.efi ^(%TARGETARCH%^) ...
|
|
LzmaCompress -e -q -o "%BUILD_DIR%\FV\DxeMain%TARGETARCH%.z" "%BUILD_DIR%\%TARGETARCH%\DxeCore.efi"
|
|
|
|
echo Compressing DxeIpl.efi ^(%TARGETARCH%^) ...
|
|
LzmaCompress -e -q -o "%BUILD_DIR%\FV\DxeIpl%TARGETARCH%.z" "%BUILD_DIR%\%TARGETARCH%\DxeIpl.efi"
|
|
|
|
echo Generating Loader Image ^(%TARGETARCH%^) ...
|
|
EfiLdrImage -o "%BUILD_DIR%\FV\Efildr%TARGETARCH_INT%" "%BUILD_DIR%\%TARGETARCH%\EfiLoader.efi" "%BUILD_DIR%\FV\DxeIpl%TARGETARCH%.z" "%BUILD_DIR%\FV\DxeMain%TARGETARCH%.z" "%BUILD_DIR%\FV\DUETEFIMAINFV%TARGETARCH%.z"
|
|
|
|
set EDBA_MAX=417792
|
|
set filesize=
|
|
|
|
call:getFilesize "%BUILD_DIR%\FV\Efildr%TARGETARCH_INT%"
|
|
|
|
if ["%GENPAGE%"] == ["0"] (
|
|
if not ["%USE_LOW_EBDA%"] == ["0"] (
|
|
if defined filesize (
|
|
if %filesize% gtr %EDBA_MAX% (
|
|
echo warning: boot file bigger than low-ebda permits, switching to --std-ebda
|
|
set USE_LOW_EBDA=0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
if ["%TARGETARCH%"] == ["X64"] (
|
|
Setlocal EnableDelayedExpansion
|
|
rem # first key index 0/1?
|
|
rem set COM_NAMES=(H H2 H3 H4 H5 H6 H5 H6)
|
|
set COM_NAMES[0]=H
|
|
set COM_NAMES[1]=H2
|
|
set COM_NAMES[2]=H3
|
|
set COM_NAMES[3]=H4
|
|
set COM_NAMES[4]=H5
|
|
set COM_NAMES[5]=H6
|
|
set /A "block=%GENPAGE% << 2 | %USE_LOW_EBDA% << 1 | %USE_BIOS_BLOCKIO%"
|
|
set "block=COM_NAMES[%block%]"
|
|
set startBlock=Start%TARGETARCH_INT%!%block%!.com
|
|
Endlocal
|
|
) else if ["%USE_BIOS_BLOCKIO%"] == ["1"] (
|
|
set startBlock=Start%TARGETARCH_INT%H.com2
|
|
) else (
|
|
set startBlock=Start%TARGETARCH_INT%.com
|
|
)
|
|
set GENLDR=Efildr%TARGETARCH_INT%Pure
|
|
if not ["%GENPAGE%"] == ["0"] set GENLDR=boot%TARGETARCH_INT%
|
|
set GENLDR=%BUILD_DIR%\FV\%GENLDR%
|
|
copy /B /Y "%BOOTSECTOR_BIN_DIR%\%startBlock%"+"%BOOTSECTOR_BIN_DIR%\efi%TARGETARCH_INT%.com3"+"%BUILD_DIR%\FV\Efildr%TARGETARCH_INT%" "%GENLDR%">nul
|
|
set GENINT=-o "%BUILD_DIR%\FV\Efildr%TARGETARCH_INT%"
|
|
if not ["%USE_LOW_EBDA%"] == ["0"] set GENINT= -b 0x88000 -f 0x68000 %GENINT%
|
|
GenPage "%GENLDR%" %GENINT%
|
|
Split -f "%BUILD_DIR%\FV\Efildr%TARGETARCH_INT%" -p %BUILD_DIR%\FV\ -o Efildr%TARGETARCH_INT%.1 -t boot%TARGETARCH_INT% -s 512
|
|
del "%BUILD_DIR%\FV\Efildr%TARGETARCH_INT%.1"
|
|
|
|
set /A "cloverEFIFile=(%TARGETARCH_INT:~0,1% + %USE_BIOS_BLOCKIO%)"
|
|
set cloverEFIFile=boot%cloverEFIFile%
|
|
:noboot
|
|
echo.
|
|
echo Start copying:
|
|
|
|
echo.
|
|
echo Mandatory ^(UEFI^) drivers:
|
|
echo.
|
|
|
|
set CP_DEST=%DEST_DRIVER%UEFI
|
|
for %%i in %UEFI_DRV_LIST% do (
|
|
call:copybin "%BUILD_DIR_ARCH%\%%i.efi" "%CP_DEST%" "%%i-%TARGETARCH_INT%.efi"
|
|
)
|
|
|
|
echo.
|
|
echo Optional ^(UEFI^) drivers:
|
|
echo.
|
|
|
|
set CP_DEST=%DEST_OFF%UEFI
|
|
for %%i in %UEFI_OFF_DRV_LIST% do (
|
|
call:copybin "%BUILD_DIR_ARCH%\%%i.efi" "%CP_DEST%" "%%i-%TARGETARCH_INT%.efi"
|
|
)
|
|
|
|
echo.
|
|
echo Optional drivers:
|
|
echo.
|
|
|
|
set CP_DEST=%DEST_OFF%
|
|
for %%i in %DRV_LIST% do (
|
|
call:copybin "%BUILD_DIR_ARCH%\%%i.efi" "%CP_DEST%" "%%i-%TARGETARCH_INT%.efi"
|
|
)
|
|
|
|
echo.
|
|
echo CloverEFI + Applications:
|
|
echo.
|
|
|
|
call:copybin "%BUILD_DIR%\FV\boot%TARGETARCH_INT%" "%DEST_BOOTLOADERS%\%TARGETARCH%" "%cloverEFIFile%"
|
|
call:copybin "%BUILD_DIR_ARCH%\bdmesg.efi" "%DEST_TOOLS%" "bdmesg-%TARGETARCH_INT%.efi"
|
|
call:copybin "%BUILD_DIR_ARCH%\CLOVERX64.efi" "%DEST_CLOVER%" "CLOVER%TARGETARCH%.efi"
|
|
call:copybin "%BUILD_DIR_ARCH%\CLOVERX64.efi" "%DEST_BOOT%" "BOOT%TARGETARCH%.efi"
|
|
|
|
if not defined CLOVER_EDK2SHELL goto donebuild
|
|
|
|
echo.
|
|
echo EDK2 Shell ^(%EDK2SHELL%^):
|
|
echo.
|
|
|
|
set CLOVER_SHELL_LIST=(Shell%TARGETARCH_INT%U Shell%TARGETARCH_INT%)
|
|
for %%i in %CLOVER_SHELL_LIST% do (
|
|
if not exist "%DEST_TOOLS%\%%i.efi.bak" (
|
|
if exist "%DEST_TOOLS%\%%i.efi" (
|
|
ren "%DEST_TOOLS%\%%i.efi" "%%i.efi.bak"
|
|
)
|
|
)
|
|
)
|
|
call:copybin "%CLOVER_EDK2SHELL%" "%DEST_TOOLS%" "Shell%TARGETARCH_INT%.efi"
|
|
|
|
:donebuild
|
|
echo.
|
|
echo End copying ...
|
|
echo.
|
|
|
|
if ["%BUILD_IA32%"] == ["1"] (
|
|
if not ["%TARGETARCH%"] == ["IA32"] goto build32
|
|
)
|
|
|
|
if defined CLEANING goto done
|
|
|
|
echo Generating BootSectors ...
|
|
echo.
|
|
|
|
pushd BootHFS
|
|
set DESTDIR=%DEST_BOOTSECTORS%
|
|
nmake /nologo /c /a /f Makefile.win
|
|
popd
|
|
|
|
:done
|
|
echo.
|
|
echo ### Build dir: "%BUILD_DIR%"
|
|
echo ### EFI dir: "%DEST_DIR%\EFI"
|
|
echo.
|
|
echo Done!
|
|
exit /b 0
|
|
|
|
rem # add build option
|
|
:addEdk2BuildOption
|
|
set "%~1=1"
|
|
set "EDK2_BUILD_OPTIONS=%EDK2_BUILD_OPTIONS% %~1"
|
|
goto:eof
|
|
|
|
rem # print build.exe infos
|
|
:getEDKBuildInfos
|
|
if not exist %BASETOOLS_DIR% (
|
|
set MSG=No basetools. Run edksetup
|
|
goto failscript
|
|
) else (
|
|
build %EDK_BUILDINFOS%
|
|
if errorlevel 1 (
|
|
set MSG=Failed to retrieve infos
|
|
goto failscript
|
|
)
|
|
)
|
|
exit /b 0
|
|
|
|
:failscript
|
|
if not defined MSG (
|
|
set MSG=Build failed
|
|
)
|
|
echo.
|
|
echo !!! %MSG% !!!
|
|
exit /b 0
|
|
|
|
rem # Print the usage
|
|
:usage
|
|
if defined MSG (
|
|
echo.
|
|
echo !!! Error: %MSG% !!!
|
|
echo.
|
|
)
|
|
rem echo.
|
|
rem printf "Usage: %s [OPTIONS] [all|fds|genc|genmake|clean|cleanpkg|cleanall|cleanlib|modules|libraries]\n" "$SELF"
|
|
echo Infos:
|
|
echo --usage : print this message and exit
|
|
echo --version : print build version and exit
|
|
echo -h, --help : print build help and exit
|
|
echo.
|
|
echo Configurations:
|
|
echo -n, --threadnumber ^<THREADNUMBER^> : build with multi-threaded [default CPUs + 1]
|
|
echo -t, --tagname ^<TOOLCHAIN^> : force to use a specific toolchain
|
|
echo -a, --arch ^<TARGETARCH^> : overrides target.txt's TARGET_ARCH definition
|
|
echo -p, --platform ^<PLATFORMFILE^> : build the platform specified by the DSC argument
|
|
echo -m, --module ^<MODULEFILE^> : build only the module specified by the INF argument
|
|
echo -d, --define=^<MACRO^>, ex: -D ENABLE_SECURE_BOOT
|
|
echo -b, --buildtarget ^<BUILDTARGET^> : using the BUILDTARGET to build the platform, or:
|
|
echo --debug : set DEBUG buildtarget
|
|
echo --release : set RELEASE buildtarget
|
|
echo.
|
|
echo Options:
|
|
echo --vbios-patch-cloverefi : activate vbios patch in CloverEFI
|
|
echo --only-sata0 : activate only SATA0 patch
|
|
echo --std-ebda : ebda offset dont shift to 0x88000
|
|
echo --genpage : dynamically generate page table under ebda
|
|
echo --no-usb : disable USB support
|
|
echo --mc : build in 64-bit [boot7] using BiosBlockIO ^(compatible with MCP chipset^)
|
|
echo --edk2shell ^<MinimumShell^|FullShell^> : copy edk2 Shell to EFI tools dir
|
|
echo.
|
|
echo Extras:
|
|
echo --cygwin : set CYGWIN dir ^(def: %DEFAULT_CYGWIN_HOME%^)
|
|
echo --nasmprefix : set NASM bin dir ^(def: %DEFAULT_NASM_PREFIX%^)
|
|
echo --pythonhome : set PYTHON dir ^(def: %DEFAULT_PYTHONHOME%^)
|
|
echo --pythonfreezer : set PYTHON Freeze dir ^(def: %DEFAULT_PYTHON_FREEZER_PATH%^)
|
|
rem echo.
|
|
rem echo Report bugs to https://sourceforge.net/p/cloverefiboot/discussion/1726372/
|
|
exit /b 0
|
|
|
|
:parseArguments
|
|
if ["%~1"] == [""] exit /b 0
|
|
if ["%~1"] == ["--cygwin"] (
|
|
if not ["%~2"] == [""] (
|
|
set CYGWIN_HOME="%~2"
|
|
)
|
|
)
|
|
if ["%~1"] == ["--nasmprefix"] (
|
|
if not ["%~2"] == [""] (
|
|
set NASM_PREFIX="%~2"
|
|
)
|
|
)
|
|
if ["%~1"] == ["--pythonhome"] (
|
|
if not ["%~2"] == [""] (
|
|
set PYTHONHOME="%~2"
|
|
)
|
|
)
|
|
if ["%~1"] == ["--pythonfreezer"] (
|
|
if not ["%~2"] == [""] (
|
|
set PYTHON_FREEZER_PATH="%~2"
|
|
)
|
|
)
|
|
if ["%~1"] == ["-d"] (
|
|
if not ["%~2"] == [""] (
|
|
call:addEdk2BuildOption "-D %~2"
|
|
)
|
|
)
|
|
if ["%~1"] == ["--define"] (
|
|
if not ["%~2"] == [""] (
|
|
call:addEdk2BuildOption "-D %~2"
|
|
)
|
|
)
|
|
if ["%~1"] == ["-m"] (
|
|
if not ["%~2"] == [""] (
|
|
call:addEdk2BuildOption "-m %~2"
|
|
)
|
|
)
|
|
if ["%~1"] == ["-b"] (
|
|
set BUILDTARGET=%2
|
|
)
|
|
if ["%~1"] == ["--buildtarget"] (
|
|
set BUILDTARGET=%2
|
|
)
|
|
if ["%~1"] == ["--debug"] (
|
|
set BUILDTARGET=DEBUG
|
|
)
|
|
if ["%~1"] == ["--release"] (
|
|
set BUILDTARGET=RELEASE
|
|
)
|
|
if ["%~1"] == ["-n"] (
|
|
set THREADNUMBER=%2
|
|
)
|
|
if ["%~1"] == ["--threadnumber"] (
|
|
set THREADNUMBER=%2
|
|
)
|
|
if ["%~1"] == ["-t"] (
|
|
set TOOLCHAIN=%2
|
|
)
|
|
if ["%~1"] == ["--tagname"] (
|
|
set TOOLCHAIN=%2
|
|
)
|
|
if ["%~1"] == ["-a"] (
|
|
if /i ["%~2"] == ["X64"] (
|
|
set BUILD_X64=1
|
|
) else (
|
|
if /i ["%~2"] == ["IA32"] set BUILD_IA32=1
|
|
)
|
|
)
|
|
if ["%~1"] == ["--arch"] (
|
|
if /i ["%~2"] == ["X64"] (
|
|
set BUILD_X64=1
|
|
) else (
|
|
if /i ["%~2"] == ["IA32"] set BUILD_IA32=1
|
|
)
|
|
)
|
|
if ["%~1"] == ["-p"] (
|
|
set DSCFILE=%2
|
|
)
|
|
if ["%~1"] == ["--platform"] (
|
|
set DSCFILE=%2
|
|
)
|
|
if ["%~1"] == ["--vbios-patch-cloverefi"] (
|
|
set VBIOSPATCHCLOVEREFI=1
|
|
)
|
|
if ["%~1"] == ["--only-sata0"] (
|
|
set ONLY_SATA_0=1
|
|
)
|
|
if ["%~1"] == ["--std-ebda"] (
|
|
set USE_LOW_EBDA=0
|
|
)
|
|
if ["%~1"] == ["--genpage"] (
|
|
set GENPAGE=1
|
|
)
|
|
if ["%~1"] == ["--mc"] (
|
|
set BUILD_X64=1
|
|
set USE_BIOS_BLOCKIO=1
|
|
)
|
|
if ["%~1"] == ["--no-usb"] (
|
|
set DISABLE_USB_SUPPORT=1
|
|
)
|
|
if ["%~1"] == ["--edk2shell"] (
|
|
set EDK2SHELL=%2
|
|
)
|
|
if ["%~1"] == ["--beta"] (
|
|
set DEVSTAGE=b
|
|
)
|
|
if ["%~1"] == ["-h"] (
|
|
set EDK_BUILDINFOS=%1
|
|
)
|
|
if ["%~1"] == ["--help"] (
|
|
set EDK_BUILDINFOS=%1
|
|
)
|
|
if ["%~1"] == ["--version"] (
|
|
set EDK_BUILDINFOS=%1
|
|
)
|
|
if ["%~1"] == ["--usage"] (
|
|
set SHOW_USAGE=1
|
|
)
|
|
if /i ["%~1"] == ["clean"] (
|
|
set CLEANING=clean
|
|
)
|
|
if /i ["%~1"] == ["cleanall"] (
|
|
set CLEANING=cleanall
|
|
)
|
|
shift
|
|
goto parseArguments
|