groot_deployment / GR00T-WholeBodyControl /external_dependencies /XRoboToolkit-PC-Service-Pybind_X86_and_ARM64 /setup_windows.bat
| @echo off | |
| setlocal | |
| echo Setting up environment for XRoboToolkit-PC-Service... | |
| :: Define the base directory for the script execution | |
| set "SCRIPT_ROOT=%CD%" | |
| :: Define a temporary directory for cloning | |
| set "TEMP_DIR=tmp" | |
| :: Define source paths relative to the cloned repository root | |
| set "XROBOTKIT_CLONED_REPO_PATH=%TEMP_DIR%\XRoboToolkit-PC-Service" | |
| set "PXREAROBOTSDK_SOURCE_DIR=%XROBOTKIT_CLONED_REPO_PATH%\RoboticsService\PXREARobotSDK" | |
| set "PXREAROBOTSDK_LIB_DIR=%XROBOTKIT_CLONED_REPO_PATH%\RoboticsService\SDK\win\64" | |
| :: Define destination directories | |
| set "LIB_DEST_DIR=%SCRIPT_ROOT%\lib" | |
| set "INCLUDE_DEST_DIR=%SCRIPT_ROOT%\include" | |
| :: Create destination directories | |
| echo Creating destination directories... | |
| mkdir "%LIB_DEST_DIR%" 2>NUL | |
| if not exist "%LIB_DEST_DIR%" ( | |
| echo Error: Failed to create lib directory. Exiting. | |
| exit /b 1 | |
| ) | |
| mkdir "%INCLUDE_DEST_DIR%" 2>NUL | |
| if not exist "%INCLUDE_DEST_DIR%" ( | |
| echo Error: Failed to create include directory. Exiting. | |
| exit /b 1 | |
| ) | |
| echo Destination directories created successfully. | |
| :: --- Check for pybind11 and install if not found --- | |
| echo. | |
| echo Checking for pybind11... | |
| pip show pybind11 >NUL 2>&1 | |
| if %errorlevel% neq 0 ( | |
| echo Error: pybind11 not found. Please run `pip install pybind11` first. Exiting. | |
| exit /b 1 | |
| ) | |
| :: --- Set PYBIND11_DIR for CMake --- | |
| echo. | |
| echo Setting PYBIND11_DIR environment variable... | |
| for /f "usebackq" %%i in (`python -c "import sys; print(sys.prefix)"`) do set PYTHON_PREFIX=%%i | |
| if not defined PYTHON_PREFIX ( | |
| echo Error: Could not determine Python installation prefix. | |
| echo Please ensure Python is correctly installed and in your PATH. Exiting. | |
| exit /b 1 | |
| ) | |
| set "PYBIND11_DIR=%PYTHON_PREFIX%\Lib\site-packages\pybind11\share\cmake\pybind11" | |
| echo Attempting to set PYBIND11_DIR to: %PYBIND11_DIR% | |
| set PYBIND11_DIR=%PYBIND11_DIR% | |
| if not exist "%PYBIND11_DIR%\pybind11Config.cmake" ( | |
| echo Warning: pybind11Config.cmake not found at expected PYBIND11_DIR: "%PYBIND11_DIR%" | |
| echo This might indicate a problem with the pybind11 installation or its path. | |
| :: Attempting to find another common path if the standard one doesn't work. | |
| for /d %%d in ("%PYTHON_PREFIX%\Lib\site-packages\pybind11\share\cmake\*") do ( | |
| if exist "%%d\pybind11Config.cmake" ( | |
| set "PYBIND11_DIR=%%d" | |
| echo Found pybind11Config.cmake in "%%d". Using this path. | |
| goto :pybind11_dir_found | |
| ) | |
| ) | |
| echo Critical Error: pybind11Config.cmake could not be found after pybind11 installation. | |
| echo Please check your pybind11 installation. Exiting. | |
| exit /b 1 | |
| ) | |
| :pybind11_dir_found | |
| echo PYBIND11_DIR set to: %PYBIND11_DIR% | |
| set "DLL_NAME=PXREARobotSDK.dll" | |
| set "LIB_NAME=PXREARobotSDK.lib" | |
| :: Create the temporary directory and navigate into it | |
| echo Creating temporary directory: %TEMP_DIR% | |
| mkdir %TEMP_DIR% | |
| if not exist %TEMP_DIR% ( | |
| echo Error: Failed to create temporary directory %TEMP_DIR%. Ingore. | |
| ) | |
| cd %TEMP_DIR% | |
| if %errorlevel% neq 0 ( | |
| echo Error: Failed to navigate into %TEMP_DIR%. Exiting. | |
| exit /b 1 | |
| ) | |
| :: Clone the repository | |
| echo Cloning XRoboToolkit-PC-Service repository... | |
| git clone https://github.com/XR-Robotics/XRoboToolkit-PC-Service.git | |
| if %errorlevel% neq 0 ( | |
| echo Error: Git clone failed. Exiting. | |
| cd .. | |
| rmdir /s /q %TEMP_DIR% | |
| exit /b 1 | |
| ) | |
| :: Navigate back to the script's root directory to handle destinations | |
| cd %SCRIPT_ROOT% | |
| if %errorlevel% neq 0 ( | |
| echo Error: Failed to navigate back to script root. Exiting. | |
| exit /b 1 | |
| ) | |
| :: --- Copy Header Files --- | |
| echo. | |
| echo Copying header files to %INCLUDE_DEST_DIR%... | |
| :: Copy PXREARobotSDK.h | |
| set "PXREAROBOTSDK_H_SRC=%PXREAROBOTSDK_SOURCE_DIR%\PXREARobotSDK.h" | |
| echo Copying %PXREAROBOTSDK_H_SRC% | |
| copy "%PXREAROBOTSDK_H_SRC%" "%INCLUDE_DEST_DIR%\" | |
| if %errorlevel% neq 0 ( | |
| echo Error: Failed to copy PXREARobotSDK.h. Exiting. | |
| goto :cleanup_and_exit | |
| ) | |
| :: Create nlohmann subdirectory in include | |
| set "NLOHMANN_INCLUDE_DEST_DIR=%INCLUDE_DEST_DIR%\nlohmann" | |
| echo Ensuring '%NLOHMANN_INCLUDE_DEST_DIR%' directory exists... | |
| mkdir %NLOHMANN_INCLUDE_DEST_DIR% 2>NUL | |
| if %errorlevel% neq 0 ( | |
| echo Error: Failed to create nlohmann include directory. Ignore. | |
| ) | |
| :: Copy nlohmann/json.hpp | |
| set "NLOHMANN_JSON_HPP_SRC=%PXREAROBOTSDK_SOURCE_DIR%\nlohmann\json.hpp" | |
| echo Copying %NLOHMANN_JSON_HPP_SRC% | |
| copy "%NLOHMANN_JSON_HPP_SRC%" "%NLOHMANN_INCLUDE_DEST_DIR%\" | |
| if %errorlevel% neq 0 ( | |
| echo Error: Failed to copy nlohmann/json.hpp. Exiting. | |
| goto :cleanup_and_exit | |
| ) | |
| :: Copy nlohmann/json_fwd.hpp | |
| set "NLOHMANN_JSON_FWD_HPP_SRC=%PXREAROBOTSDK_SOURCE_DIR%\nlohmann\json_fwd.hpp" | |
| echo Copying %NLOHMANN_JSON_FWD_HPP_SRC% | |
| copy "%NLOHMANN_JSON_FWD_HPP_SRC%" "%NLOHMANN_INCLUDE_DEST_DIR%\" | |
| if %errorlevel% neq 0 ( | |
| echo Error: Failed to copy nlohmann/json_fwd.hpp. Exiting. | |
| goto :cleanup_and_exit | |
| ) | |
| echo Header files copied successfully. | |
| :: --- Copy Pre-built PXREARobotSDK DLL and LIB --- | |
| echo. | |
| echo Checking for pre-built libraries in %PXREAROBOTSDK_LIB_DIR% | |
| set "DLL_SOURCE_PATH=%PXREAROBOTSDK_LIB_DIR%\%DLL_NAME%" | |
| set "LIB_SOURCE_PATH=%PXREAROBOTSDK_LIB_DIR%\%LIB_NAME%" | |
| if not exist "%DLL_SOURCE_PATH%" ( | |
| echo Error: Required DLL "%DLL_SOURCE_PATH%" not found. | |
| echo Please ensure the cloned repository contains the pre-built files. | |
| goto :cleanup_and_exit | |
| ) | |
| if not exist "%LIB_SOURCE_PATH%" ( | |
| echo Error: Required LIB "%LIB_SOURCE_PATH%" not found. | |
| echo Please ensure the cloned repository contains the pre-built files. | |
| goto :cleanup_and_exit | |
| ) | |
| echo Copying %DLL_NAME% to %LIB_DEST_DIR%/ | |
| copy "%DLL_SOURCE_PATH%" "%LIB_DEST_DIR%\" | |
| if %errorlevel% neq 0 ( | |
| echo Error: Failed to copy %DLL_NAME%. Exiting. | |
| goto :cleanup_and_exit | |
| ) | |
| echo Copying %LIB_NAME% to %LIB_DEST_DIR%/ | |
| copy "%LIB_SOURCE_PATH%" "%LIB_DEST_DIR%\" | |
| if %errorlevel% neq 0 ( | |
| echo Error: Failed to copy %LIB_NAME%. Exiting. | |
| goto :cleanup_and_exit | |
| ) | |
| echo Libraries copied successfully. | |
| :: Build and install the Python project | |
| echo. | |
| echo Building and installing the Python project... | |
| python setup.py install | |
| if %errorlevel% neq 0 ( | |
| echo Error: Python setup.py install failed. Exiting. | |
| goto :cleanup_and_exit | |
| ) | |
| :: Copy DLL to the installed package location | |
| echo. | |
| echo Copying DLL to the installed package location... | |
| for /f "usebackq" %%i in (`python -c "import site; print(site.getsitepackages()[0])"`) do set SITE_PACKAGES=%%i | |
| if not defined SITE_PACKAGES ( | |
| echo Warning: Could not determine site-packages directory. | |
| echo DLL not copied to package location. You may need to do this manually. | |
| goto :cleanup_and_exit | |
| ) | |
| :: Find the egg directory | |
| set "FOUND_EGG=" | |
| for /d %%d in ("%SITE_PACKAGES%\Lib\site-packages\xrobotoolkit_sdk-*") do ( | |
| set "FOUND_EGG=%%d" | |
| goto :egg_found | |
| ) | |
| :egg_found | |
| if not defined FOUND_EGG ( | |
| echo Warning: Could not find xrobotoolkit_sdk egg directory in %SITE_PACKAGES% | |
| echo Looking in easy-install.pth... | |
| if exist "%SITE_PACKAGES%\easy-install.pth" ( | |
| for /f "usebackq tokens=*" %%i in (`findstr /i "xrobotoolkit_sdk" "%SITE_PACKAGES%\easy-install.pth"`) do set "FOUND_EGG=%%i" | |
| ) | |
| ) | |
| if not defined FOUND_EGG ( | |
| echo Warning: Could not find xrobotoolkit_sdk egg directory. | |
| echo DLL not copied to package location. You may need to do this manually. | |
| ) else ( | |
| echo Found egg directory: %FOUND_EGG% | |
| echo Copying %DLL_NAME% to %FOUND_EGG% | |
| copy "%LIB_DEST_DIR%\%DLL_NAME%" "%FOUND_EGG%\" | |
| if %errorlevel% neq 0 ( | |
| echo Warning: Failed to copy DLL to egg directory. | |
| ) else ( | |
| echo DLL successfully copied to package location. | |
| ) | |
| ) | |
| echo Setup completed successfully! | |
| :cleanup_and_exit | |
| :: Remove the temporary directory | |
| echo Cleaning up temporary directory: %TEMP_DIR% | |
| rmdir /s /q "%SCRIPT_ROOT%\%TEMP_DIR%" | |
| if %errorlevel% neq 0 ( | |
| echo Warning: Failed to remove temporary directory "%SCRIPT_ROOT%\%TEMP_DIR%". Please remove it manually. | |
| ) | |
| endlocal |