Files
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

272 lines
7.5 KiB
Batchfile
Executable File

@ECHO off
SETLOCAL
::
:: This script copies all required files back into the plugin folder tree and adds them to a new Perforce CL.
::
:: If an intermediate step fails, the script exits.
::
:: Get arguments
IF NOT DEFINED ARGS_PARSED (
CALL "%~dp0_ParseArgs.bat" %* || EXIT /B %ERRORLEVEL%
)
SET "BUILD_DIR=%WORKING_DIR%\iree-org"
SET "BUILD_SCRIPT_DIR=%~dp0"
SET "ROBOCOPY_ARGS=/A-:R /NFL /NDL /NJH /NJS /NP"
:: Skip helper function(s)
goto :main
:: Copy files with robocopy and catch errors
:CP
SETLOCAL
robocopy %* %ROBOCOPY_ARGS%
SET "RC=%ERRORLEVEL%"
IF %RC% LEQ 3 (
IF %RC% EQU 0 ( ECHO Up-to-date )
IF %RC% EQU 1 ( ECHO Copied successfully )
IF %RC% EQU 2 ( ECHO Warning: extras in destination )
IF %RC% EQU 3 ( ECHO Copied successfully; extras exist )
ECHO "%~1" 1>&2
ECHO "%~2" 1>&2
ENDLOCAL & EXIT /B 0
)
ECHO Robocopy failed ^(code %RC%^)
ECHO "%~1" 1>&2
ECHO "%~2" 1>&2
ENDLOCAL & EXIT /B 1
:: P4 wrapper
:P4
p4 %*
IF ERRORLEVEL 1 GOTO :fail
GOTO :eof
:: Canonicalize paths for Perforce (no '.' or '..' etc.)
:Canonicalize
FOR %%I IN ("%~1") DO SET "%~2=%%~fI"
GOTO :eof
:: Main body
:main
CALL :Canonicalize "%BUILD_SCRIPT_DIR%\..\..\Include" UE_INCLUDE_DIR
CALL :Canonicalize "%BUILD_SCRIPT_DIR%\..\..\Source" UE_SOURCE_DIR
CALL :Canonicalize "%BUILD_SCRIPT_DIR%\..\..\..\.." UE_PLUGIN_ROOT
ECHO Plugin root dir: "%UE_PLUGIN_ROOT%"
ECHO Build dir: "%BUILD_DIR%"
ECHO Source dir: "%UE_SOURCE_DIR%"
ECHO Additional runtime platform argument list: "%PLATFORM_LIST%"
ECHO:
ECHO =========================================
ECHO ======== Copying Compiler Files =========
ECHO =========================================
SET "TARGET_IREE_FOLDER=%UE_PLUGIN_ROOT%\Source\ThirdParty\IREE"
SET "BINARIES_FOLDER=%UE_PLUGIN_ROOT%\Binaries\ThirdParty\IREE\Windows"
CALL :CP "%BUILD_DIR%\iree-compiler\llvm-project\bin" "%BINARIES_FOLDER%" clang++.exe ld.lld.exe
IF ERRORLEVEL 1 GOTO :fail
CALL :CP "%BUILD_DIR%\iree-compiler\tools" "%BINARIES_FOLDER%" iree-compile.exe IREECompiler.dll
IF ERRORLEVEL 1 GOTO :fail
ECHO:
ECHO Copying Compiler Files: Done
ECHO:
ECHO =========================================
ECHO ========= Copying Header Files ==========
ECHO =========================================
SET "HEADERS_FOLDER=%TARGET_IREE_FOLDER%\Include"
CALL :CP "%BUILD_DIR%\iree\third_party\flatcc\include\flatcc" "%HEADERS_FOLDER%\flatcc" *.h /MIR
IF ERRORLEVEL 1 GOTO :fail
CALL :CP "%BUILD_DIR%\iree\runtime\src\iree" "%HEADERS_FOLDER%\iree" *.h /MIR
IF ERRORLEVEL 1 GOTO :fail
CALL :CP "%UE_INCLUDE_DIR%\Clang" "%HEADERS_FOLDER%\Clang" *.h /MIR
IF ERRORLEVEL 1 GOTO :fail
CALL :CP "%BUILD_DIR%\iree-compiler\runtime\src\iree\base\internal\flatcc" "%HEADERS_FOLDER%\iree\base\internal\flatcc" dummy_reader.h dummy_verifier.h
IF ERRORLEVEL 1 GOTO :fail
CALL :CP "%BUILD_DIR%\iree-compiler\runtime\src\iree\schemas" "%HEADERS_FOLDER%\iree\schemas" executable_debug_info_reader.h executable_debug_info_verifier.h
IF ERRORLEVEL 1 GOTO :fail
CALL :CP "%BUILD_DIR%\iree-compiler\compiler\plugins\target\UnrealShader" "%HEADERS_FOLDER%\iree\schemas" unreal_executable_def_reader.h unreal_executable_def_verifier.h
IF ERRORLEVEL 1 GOTO :fail
ECHO:
ECHO Copying Header Files: Done
ECHO:
ECHO =========================================
ECHO ====== Copying NNEMlirTools Files =======
ECHO =========================================
SET "MLIR_TOOLS_INCLUDE_DIR=%UE_PLUGIN_ROOT%\Source\ThirdParty\NNEMlirTools\Internal"
SET "MLIR_TOOLS_BINARIES_DIR=%UE_PLUGIN_ROOT%\Binaries\ThirdParty\NNEMlirTools\Win64"
CALL :CP "%BUILD_DIR%\NNEMlirTools" "%MLIR_TOOLS_BINARIES_DIR%" NNEMlirTools.dll
IF ERRORLEVEL 1 GOTO :fail
CALL :CP "%UE_SOURCE_DIR%\NNEMlirTools\NNERuntimeIREE\Include" "%MLIR_TOOLS_INCLUDE_DIR%" *.h /MIR
IF ERRORLEVEL 1 GOTO :fail
ECHO:
ECHO Copying NNEMlirTools Files: Done
ECHO:
ECHO =========================================
ECHO ========= Copying Windows Files =========
ECHO =========================================
SET "LIBRARIES_FOLDER=%TARGET_IREE_FOLDER%\Lib\Windows"
CALL :CP "%BUILD_DIR%\iree-runtime-windows\iree\build_tools\third_party\flatcc" "%LIBRARIES_FOLDER%" flatcc_parsing.lib
IF ERRORLEVEL 1 GOTO :fail
CALL :CP "%BUILD_DIR%\iree-runtime-windows" "%LIBRARIES_FOLDER%" ireert.lib
IF ERRORLEVEL 1 GOTO :fail
ECHO:
ECHO Copying Windows Files: Done
ECHO:
ECHO =========================================
ECHO == Copying Additional Platforms Files ===
ECHO =========================================
SETLOCAL ENABLEDELAYEDEXPANSION
SET "ADDITIONAL_FOLDERS="
FOR %%i IN (%PLATFORM_LIST% "") DO IF NOT "%%~i"=="" (
CALL :Canonicalize "%UE_PLUGIN_ROOT%\..\..\..\Platforms\%%~i\Plugins\Experimental\NNERuntimeIREE" UE_PLATFORM_PLUGIN_ROOT
SET "PLATFORM_LIBRARIES_FOLDER=!UE_PLATFORM_PLUGIN_ROOT!\Source\ThirdParty\IREE\Lib\%%~i"
ECHO Platform Plugin root: "!UE_PLATFORM_PLUGIN_ROOT!"
ECHO Library dir: "!PLATFORM_LIBRARIES_FOLDER!"
IF DEFINED ADDITIONAL_FOLDERS (
SET "ADDITIONAL_FOLDERS=!ADDITIONAL_FOLDERS! "!PLATFORM_LIBRARIES_FOLDER!""
) ELSE (
SET "ADDITIONAL_FOLDERS="!PLATFORM_LIBRARIES_FOLDER!""
)
CALL :CP "%BUILD_DIR%\iree-runtime-%%~i\iree\build_tools\third_party\flatcc" "!PLATFORM_LIBRARIES_FOLDER!" *.lib *.a
IF ERRORLEVEL 1 GOTO :fail
CALL :CP "%BUILD_DIR%\iree-runtime-%%~i" "!PLATFORM_LIBRARIES_FOLDER!" *.lib *.a
IF ERRORLEVEL 1 GOTO :fail
SET "PLATFORM_HEADERS_FOLDER_SRC=!UE_PLATFORM_PLUGIN_ROOT!\Source\ExternalBuild\Include"
IF EXIST !PLATFORM_HEADERS_FOLDER_SRC! (
SET "PLATFORM_HEADERS_FOLDER_DST=!UE_PLATFORM_PLUGIN_ROOT!\Source\ThirdParty\IREE\Include"
ECHO:
ECHO Copy headers:
ECHO from "!PLATFORM_HEADERS_FOLDER_SRC!"
ECHO to "!PLATFORM_HEADERS_FOLDER_DST!"
CALL :CP "!PLATFORM_HEADERS_FOLDER_SRC!" "!PLATFORM_HEADERS_FOLDER_DST!" *.h /MIR
IF ERRORLEVEL 1 GOTO :fail
)
)
ECHO All dirs to reconcile: "%ADDITIONAL_FOLDERS%"
ECHO:
ECHO Copying Additional Platforms Files: Done
ECHO:
ECHO =========================================
ECHO ============== Save to CL ===============
ECHO =========================================
:: Check for P4 CLI client
WHERE p4 >NUL 2>&1
IF errorlevel 1 (
ECHO Error: Perforce CLI ^(p4.exe^) not found in PATH. 1>&2
GOTO :fail
)
:: Check connection to server
p4 -G info >NUL 2>&1
IF errorlevel 1 (
ECHO Error: Unable to reach Perforce server. 1>&2
GOTO :fail
)
:: Check logged in
p4 login -s >NUL 2>&1
IF errorlevel 1 (
ECHO Starting interactive login...
p4 login
if errorlevel 1 (
ECHO Error: Login failed. 1>&2
GOTO :fail
)
)
SET "CL_DESC=IREE install"
:: Create a new CL with the description and NO files in it
for /f "tokens=2" %%C in ('
p4 --field "Description=%CL_DESC%" --field "Files=" change -o ^
^| p4 change -i ^
^| findstr /r "^Change [0-9][0-9]*"
') do (
SET "CL=%%C"
)
ECHO Created changelist #%CL%
:: Reconcile modified directories
p4 reconcile -a -e -d -c %CL% "%BINARIES_FOLDER%\..."
IF ERRORLEVEL 1 GOTO :fail
p4 reconcile -a -e -d -c %CL% "%HEADERS_FOLDER%\..."
IF ERRORLEVEL 1 GOTO :fail
p4 reconcile -a -e -d -c %CL% "%LIBRARIES_FOLDER%\..."
IF ERRORLEVEL 1 GOTO :fail
p4 reconcile -a -e -d -c %CL% "%MLIR_TOOLS_INCLUDE_DIR%\..."
IF ERRORLEVEL 1 GOTO :fail
p4 reconcile -a -e -d -c %CL% "%MLIR_TOOLS_BINARIES_DIR%\..."
IF ERRORLEVEL 1 GOTO :fail
IF DEFINED ADDITIONAL_FOLDERS (
FOR %%F IN (!ADDITIONAL_FOLDERS!) DO (
p4 reconcile -a -e -d -c %CL% "%%~F%\..."
IF ERRORLEVEL 1 GOTO :fail
)
)
:: Note: this is required for the ADDITIONAL_FOLDERS list to be up-to-date
ENDLOCAL
ECHO:
ECHO Save to CL: Done
ECHO:
ENDLOCAL
ECHO All work done successfully, bye!
EXIT /B 0
:fail
ECHO.
ECHO Install script failed. Exiting 1>&2
ENDLOCAL & EXIT /B 1