aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/build_driver.bat
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--build_driver.bat103
1 files changed, 103 insertions, 0 deletions
diff --git a/build_driver.bat b/build_driver.bat
new file mode 100644
index 0000000..54ee32e
--- /dev/null
+++ b/build_driver.bat
@@ -0,0 +1,103 @@
+@setlocal enabledelayedexpansion
+@echo off
+
+if [%1] == [] (
+ echo Usage: %~0 DRIVER_SRC_ROOT
+ exit /b 1
+)
+
+call check_env.bat || exit /b !errorlevel!
+call check_ddk.bat || exit /b !errorlevel!
+
+set driver_src_root=%~f1
+cd "%driver_src_root%"
+
+for /f %%i in ("%driver_src_root%") do (
+ set driver_name=%%~ni
+ set driver_dist_subdir=%%~dpi
+)
+
+call :make_relative driver_dist_subdir "%src_root%"
+
+set sys_dist_dir=%bin_root%\%target_platform%\%target_configuration%\%driver_dist_subdir%
+set pdb_dist_dir=%bin_root%\%target_platform%\%target_configuration%\%driver_dist_subdir%
+set lib_dist_dir=%lib_root%\%target_platform%\%target_configuration%\%driver_dist_subdir%
+
+echo =========================== DRIVER INFO ===========================
+echo Driver source directory: "%driver_src_root%"
+echo Driver name: "%driver_name%"
+echo ========================= END DRIVER INFO =========================
+echo.
+echo ============================== BUILD ==============================
+set LIBDISTDIR=%lib_dist_dir%
+build.exe /cegwZ
+if %errorlevel% equ 0 (
+ echo ========================== BUILD SUCCESS ==========================
+) else (
+ echo ========================== BUILD FAILURE ==========================
+ exit /b %errorlevel%
+)
+
+if [%_BUILDARCH%] == [x86] (
+ set sys_path=obj%BUILD_ALT_DIR%\i386\%driver_name%.sys
+ set pdb_path=obj%BUILD_ALT_DIR%\i386\%driver_name%.pdb
+ set lib_path=obj%BUILD_ALT_DIR%\i386\%driver_name%.lib
+) else (
+ set sys_path=obj%BUILD_ALT_DIR%\%_BUILDARCH%\%driver_name%.sys
+ set pdb_path=obj%BUILD_ALT_DIR%\%_BUILDARCH%\%driver_name%.pdb
+ set lib_path=obj%BUILD_ALT_DIR%\%_BUILDARCH%\%driver_name%.lib
+)
+
+echo.
+call "%root%\sign.bat" "%sys_path%" || exit /b !errorlevel!
+
+echo.
+echo ============================== DISTR ==============================
+call :distr_copy "%pdb_path%" "%pdb_dist_dir%" || goto :distr_failure
+call :distr_copy "%sys_path%" "%sys_dist_dir%" || goto :distr_failure
+if exist "%lib_path%" (
+ call :distr_copy "%lib_path%" || goto :distr_failure
+)
+echo ========================== DISTR SUCCESS ==========================
+exit /b
+
+:distr_mkdir
+if not exist "%~1\" (
+ echo mkdir "%~1"
+ mkdir "%~1" >nul || exit /b !errorlevel!
+)
+exit /b
+
+:distr_copy
+call :distr_mkdir "%~2" || exit /b !errorlevel!
+echo copy "%~1" "%~2"
+copy "%~1" "%~2" >nul || exit /b !errorlevel!
+exit /b
+
+:distr_failure
+echo ========================== DISTR FAILURE ==========================
+exit /b %errorlevel%
+
+:make_relative
+@setlocal enabledelayedexpansion
+set src=%~1
+if defined %1 set src=!%~1!
+set base=%~2
+if not defined base set base=%cd%
+for /f "tokens=*" %%a in ("%src%") do set src=%%~fa
+for /f "tokens=*" %%a in ("%base%") do set base=%%~fa
+set match=
+set c=
+for /f "tokens=*" %%a in ('echo.%base:\=^&echo.%') do (
+ set sub=!sub!%%a\
+ call set tmp=%%src:!sub!=%%
+ if "!tmp!" neq "!src!" (
+ set match=!sub!
+ ) else (
+ set upper=!upper!..\
+ )
+)
+set src=%upper%!src:%match%=!
+(endlocal
+if defined %1 (set %~1=%src%) else (echo.%src%))
+exit /b