WinUSB版px4_drvをビルドするバッチファイル

ソースをダウンロードしてビルド、アーカイブを作成するバッチファイルです。

スポンサーリンク
スポンサーリンク

必要

Visual Studio

2019以降でビルドできます。

こちらの記事を参考にインストールしてください。

2026で動作確認しています。

Git for Windows

公式サイトの「Download」をクリックします。

インストールで特に変更するところはありません。

7-Zip

公式サイトからダウンロードしてインストールします。

バッチファイル

拡張子を.batにして保存します。

@echo off
setlocal
cd /d %~dp0

rem デフォルト設定
rem x86|x64|Both
set ARCH=x86
rem dynamic|static
set CRT_TYPE=dynamic
rem Build|Rebuild|Clean
set TARGET=Build
rem Debug|Release
set CONFIG=Release
rem keep|del
set REPO_ACTION=keep
rem nns779|tsukumijima
set EDITION=nns779
rem ソースのダウンロード先フォルダ
set REPO_DIR=px4_drv
rem アーカイブの出力先フォルダ
set OUT_DIR=package

rem 引数の取得
for %%i in (%*) do (
    if /i "%%i" == "help"    goto Help
    if /i "%%i" == "x86"     set ARCH=x86
    if /i "%%i" == "x64"     set ARCH=x64
    if /i "%%i" == "Both"    set ARCH=Both
    if /i "%%i" == "dynamic" set CRT_TYPE=dynamic
    if /i "%%i" == "MD"      set CRT_TYPE=dynamic
    if /i "%%i" == "static"  set CRT_TYPE=static
    if /i "%%i" == "MT"      set CRT_TYPE=static
    if /i "%%i" == "Build"   set TARGET=Build
    if /i "%%i" == "Rebuild" set TARGET=Rebuild
    if /i "%%i" == "Clean"   set TARGET=Clean
    if /i "%%i" == "Debug"   set CONFIG=Debug
    if /i "%%i" == "Release" set CONFIG=Release
    if /i "%%i" == "keep"    set REPO_ACTION=keep
    if /i "%%i" == "del"     set REPO_ACTION=del
)

rem ソースの削除
if /i "%REPO_ACTION%" == "del" (
    if exist "%REPO_DIR%" rd /s /q "%REPO_DIR%"
)
rem ソースのダウンロード
if not exist "%REPO_DIR%" (
    git clone https://github.com/%EDITION%/px4_drv.git "%REPO_DIR%"
)
cd /d "%REPO_DIR%"

rem Visual Studioのインストールパスの取得
for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do (
    set VS_INSTALL_DIR=%%i
)

rem 開発者コマンドプロンプトの起動
call "%VS_INSTALL_DIR%\Common7\Tools\VsDevCmd.bat" -no_logo >nul

rem ビルドサブルーチンの呼び出し
if /i "%ARCH%" == "Both" (
    call :Build x86
    if errorlevel 1 exit /b 1
    call :Build x64
    if errorlevel 1 exit /b 1
) else (
    call :Build %ARCH%
    if errorlevel 1 exit /b 1
)

exit /b 0

rem ビルドサブルーチン
:Build
set ARCH=%1

rem プラットフォームツールセットの設定
if "%VisualStudioVersion%" == "18.0" (
    set TOOLSET=v145
) else if "%VisualStudioVersion%" == "17.0" (
    set TOOLSET=v143
) else (
    set TOOLSET=v142
)

if /i "%CONFIG%" == "Debug" set CRT_TYPE=

rem ソリューション構成の設定
if /i "%CRT_TYPE%" == "static" (
    set BUILD_CONFIG=%CONFIG%-static
) else (
    set BUILD_CONFIG=%CONFIG%
)

rem ビルド
pushd winusb
MSBuild px4_winusb.sln /nologo /m /t:%TARGET% /p:Configuration=%BUILD_CONFIG%;Platform=%ARCH%;PlatformToolset=%TOOLSET%
popd
if errorlevel 1 exit /b 1

if /i "%TARGET%" == "Clean" exit /b 0

set SRC_DIR=winusb\build\%ARCH%\%BUILD_CONFIG%
set DST_DIR=%OUT_DIR%\%ARCH%\%CONFIG%

rem 出力先フォルダの準備
if exist "%DST_DIR%" rd /s /q "%DST_DIR%"
md "%DST_DIR%\BonDriver_PX4"
md "%DST_DIR%\DriverHost_PX4"
md "%DST_DIR%\fwtool"
md "%DST_DIR%\inf"

rem ファイルの配置
copy /v %SRC_DIR%\BonDriver_PX4.dll  "%DST_DIR%\BonDriver_PX4" >nul
copy /v %SRC_DIR%\DriverHost_PX4.exe "%DST_DIR%\DriverHost_PX4" >nul
copy /v %SRC_DIR%\fwtool.exe         "%DST_DIR%\fwtool" >nul
copy /v winusb\pkg\BonDriver_PX4     "%DST_DIR%\BonDriver_PX4" >nul
copy /v winusb\pkg\DriverHost_PX4    "%DST_DIR%\DriverHost_PX4" >nul
copy /v winusb\pkg\inf               "%DST_DIR%\inf" >nul
copy /v fwtool\fwinfo.tsv            "%DST_DIR%\fwtool" >nul
copy /v README.md                    "%DST_DIR%" >nul

rem バージョン情報の取得
for /f "usebackq tokens=2*" %%i in (`findstr /r /c:"^#define PX4_DRV_VERSION" driver\driver_module.h`) do set VERSION=%%~j
rem コミットの日付を取得
for /f "usebackq tokens=*" %%i in (`git log -1 --pretty^=format:"%%ad" --date^=format:"%%y%%m%%d"`) do set GIT_DATE=%%i
rem コミットハッシュの取得
for /f "usebackq tokens=*" %%i in (`git rev-parse --short HEAD`) do set GIT_HASH=%%i

set ARCHIVE_NAME=%OUT_DIR%\px4_drv_winusb_%VERSION%_%GIT_DATE%_%GIT_HASH%_%ARCH%

rem 7-Zipのインストールパスの取得
for /f "usebackq tokens=1,2*" %%i in (`reg query HKLM\Software\7-Zip /v Path`) do set SEVENZIP=%%k7z.exe

rem アーカイブの作成
if exist "%ARCHIVE_NAME%.7z" del "%ARCHIVE_NAME%.7z"
"%SEVENZIP%" a "%ARCHIVE_NAME%.7z" ".\%DST_DIR%\*" -mx=9 -ms=on -myx=9

exit /b

:Help
echo.
echo Usage:
echo %~nx0 [x86^|x64^|Both] [dynamic^|static] [Build^|Rebuild^|Clean] [Debug^|Release] [keep^|del]
echo.
echo Default:
echo %~nx0 %ARCH% %CRT_TYPE% %TARGET% %CONFIG% %REPO_ACTION%

exit /b

使い方

コマンドプロンプトでバッチファイルを実行するときに引数を指定します。

Usage:
px4_drv.bat [x86|x64|Both] [dynamic|static] [Build|Rebuild|Clean] [Debug|Release] [keep|del]

Default:
px4_drv.bat x86 dynamic Build Release keep

上記はhelpを指定すると表示されます。

x86は32bit版、x64は64bit版、Bothは32bit版と64bit版の両方です。

dynamicは動的リンク、staticは静的リンクです。
dynamicの代わりにMD、staticの代わりにMTを指定することもできます。

keepはソースを残す、delは削除してからダウンロードし直します。

tsukumijima版をビルドする場合は「set EDITION=」に「tsukumijima」と書きます。

バッチファイルと同じフォルダにある px4_drv\package に出力されます。

ソースのダウンロード先を変更する場合は「set REPO_DIR=」にフォルダパスを書きます。

アーカイブの出力先を変更する場合は「set OUT_DIR=」にフォルダパスを相対パスで書きます。

コメント

タイトルとURLをコピーしました