blob: 6af203f61494346e8086bfca4dba86692dced5e6 [file] [log] [blame]
:: @echo off
cd "%~dp0\.."
set PATH=%INSTALL_DIR%\bin;%PATH%
: The following environment variables are used exclusively by cmake and should have forward slashes rather than backslashes
set BASE_DIR=%cd:\=/%
set TORCH_LIB_DIR=%cd:\=/%/torch/lib
set THIRD_PARTY_DIR=%cd:\=/%/third_party
set BASIC_C_FLAGS=
set BASIC_CUDA_FLAGS=
IF NOT DEFINED INSTALL_DIR (
set "INSTALL_DIR=%cd:\=/%/torch/lib/tmp_install"
) ELSE (
set "INSTALL_DIR=%INSTALL_DIR:\=/%"
)
set LDFLAGS=/LIBPATH:%INSTALL_DIR%/lib
:: set TORCH_CUDA_ARCH_LIST=6.1
set C_FLAGS=%BASIC_C_FLAGS% /D_WIN32 /Z7 /EHa /DNOMINMAX
set LINK_FLAGS=/DEBUG:FULL
: End cmake variables
if not exist torch\lib\tmp_install mkdir torch\lib\tmp_install
: Variable defaults
set /a USE_CUDA=0
set /a USE_FBGEMM=1
set /a USE_ROCM=0
set /a USE_NNPACK=0
set /a USE_QNNPACK=0
set /a USE_GLOO_IBVERBS=0
set /a USE_MKLDNN=0
set _BUILD_ARGS=
: Process command line arguments
:process_args
if "%1"=="" (
goto :process_args_exit
)
if "%1"=="--use-cuda" (
set /a USE_CUDA=1
goto :process_args_processed
)
if "%1"=="--use-fbgemm" (
set /a USE_FBGEMM=1
goto :process_args_processed
)
if "%1"=="--use-rocm" (
set /a USE_ROCM=1
goto :process_args_processed
)
if "%1"=="--use-nnpack" (
set /a USE_NNPACK=1
goto :process_args_processed
)
if "%1"=="--use-qnnpack" (
set /a USE_QNNPACK=1
goto :process_args_processed
)
if "%1"=="--use-mkldnn" (
set /a USE_MKLDNN=1
goto :process_args_processed
)
if "%1"=="--use-gloo-ibverbs" (
echo Warning: gloo iverbs is enabled but build is not yet implemented 1>&2
set /a USE_GLOO_IBVERBS=1
goto :process_args_processed
)
set _BUILD_ARGS=%_BUILD_ARGS% %1
:: Fall-through intended
:process_args_processed
shift
goto :process_args
:process_args_exit
: Set vars based on environment state
set BUILD_TYPE=Release
IF "%DEBUG%"=="1" (
set BUILD_TYPE=Debug
)
IF "%REL_WITH_DEB_INFO%"=="1" (
set BUILD_TYPE=RelWithDebInfo
)
:: sccache will fail if all cores are used for compiling
IF NOT DEFINED MAX_JOBS (
set /a MAX_JOBS=%NUMBER_OF_PROCESSORS% - 1
)
IF NOT DEFINED BUILD_SHARED_LIBS (
set BUILD_SHARED_LIBS=ON
)
IF "%CMAKE_GENERATOR%"=="" (
set CMAKE_GENERATOR_COMMAND=
set MAKE_COMMAND=msbuild INSTALL.vcxproj /p:Configuration=Release
) ELSE (
set CMAKE_GENERATOR_COMMAND=-G "%CMAKE_GENERATOR%"
IF "%CMAKE_GENERATOR%"=="Ninja" (
IF "%CC%"== "" set CC=cl.exe
IF "%CXX%"== "" set CXX=cl.exe
set MAKE_COMMAND=cmake --build . --target install --config %BUILD_TYPE% -- -j%MAX_JOBS%
) ELSE (
set MAKE_COMMAND=msbuild INSTALL.vcxproj /p:Configuration=%BUILD_TYPE%
)
)
: Invoke functionality for each build requested
FOR %%a IN (%_BUILD_ARGS%) DO (
echo --------------------------------------------------------------------------------
echo ^|
echo ^| Building %%a
echo ^|
echo --------------------------------------------------------------------------------
IF "%%a"=="caffe2" (
call:build_caffe2 %%a
) ELSE (
IF "%%a"=="libshm_windows" (
SET IS_OURS=1
pushd torch\lib
call:build %%a
popd
) ELSE (
pushd third_party
call:build %%a
popd
)
)
)
: Copy Artifacts
cd torch\lib
copy /Y "%INSTALL_DIR%\lib\*" .
IF EXIST "%INSTALL_DIR%\bin" (
copy /Y "%INSTALL_DIR%\bin\*" .
)
xcopy /Y /E "%INSTALL_DIR%\include\*.*" include\*.*
xcopy /Y ..\..\aten\src\THNN\generic\THNN.h .
xcopy /Y ..\..\aten\src\THCUNN\generic\THCUNN.h .
cd ..\..
goto:eof
: Generate Build Functionality
:build
@setlocal
IF NOT "%PREBUILD_COMMAND%"=="" call "%PREBUILD_COMMAND%" %PREBUILD_COMMAND_ARGS%
if not exist build mkdir build\%~1
pushd build\%~1
cmake ../../%~1 %CMAKE_GENERATOR_COMMAND% ^
-DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%" ^
-DCMAKE_C_FLAGS="%C_FLAGS%" ^
-DCMAKE_SHARED_LINKER_FLAGS="%LINK_FLAGS%" ^
-DCMAKE_CXX_FLAGS="%C_FLAGS% %CPP_FLAGS%" ^
-DCUDA_NVCC_FLAGS="%BASIC_CUDA_FLAGS%" ^
-DUSE_CUDA=%USE_CUDA% ^
-DBUILD_EXAMPLES=OFF ^
-DBUILD_TEST=%BUILD_TEST% ^
-DUSE_NNPACK=%USE_NNPACK% ^
-DCMAKE_BUILD_TYPE=%BUILD_TYPE%
IF ERRORLEVEL 1 exit 1
IF NOT ERRORLEVEL 0 exit 1
%MAKE_COMMAND%
IF ERRORLEVEL 1 exit 1
IF NOT ERRORLEVEL 0 exit 1
popd
@endlocal
goto:eof
: libtorch-specific build functionality
:build_caffe2
@setlocal
: Note [Backslash munging on Windows]
: In CMake, Windows native backslashes are not well handled.
: It will cause a warning as the following
: CMake Warning (dev) at cmake (source_group):
: Syntax error in cmake code at cmake
: when parsing string
: Header Files C:\include\cudnn.h
: Invalid escape sequence \i
: which is said to become an error in the future.
: As an alternative, we should use forward slashes instead.
: Here those paths should be escaped before passing to CMake.
if not "%NVTOOLEXT_HOME%" == "" set NVTOOLEXT_HOME=%NVTOOLEXT_HOME:\=/%
if not "%CUDNN_INCLUDE_DIR%" == "" set CUDNN_INCLUDE_DIR=%CUDNN_INCLUDE_DIR:\=/%
if not "%CUDNN_LIB_DIR%" == "" set CUDNN_LIB_DIR=%CUDNN_LIB_DIR:\=/%
if not "%CUDNN_LIBRARY%" == "" set CUDNN_LIBRARY=%CUDNN_LIBRARY:\=/%
if not "%PYTORCH_PYTHON_LIBRARY%" == "" set PYTORCH_PYTHON_LIBRARY=%PYTORCH_PYTHON_LIBRARY:\=/%
if not "%NUMPY_INCLUDE_DIR%" == "" set NUMPY_INCLUDE_DIR=%NUMPY_INCLUDE_DIR:\=/%
IF NOT "%PREBUILD_COMMAND%"=="" call "%PREBUILD_COMMAND%" %PREBUILD_COMMAND_ARGS%
if not exist build mkdir build
pushd build
cmake .. %CMAKE_GENERATOR_COMMAND% ^
-DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
-DTORCH_BUILD_VERSION="%PYTORCH_BUILD_VERSION%" ^
-DPYTHON_LIBRARY="%PYTORCH_PYTHON_LIBRARY%" ^
-DBUILD_TORCH="%BUILD_TORCH%" ^
-DNVTOOLEXT_HOME="%NVTOOLEXT_HOME%" ^
-DBUILD_SHARED_LIBS="%BUILD_SHARED_LIBS%" ^
-DBUILD_PYTHON=%BUILD_PYTHON% ^
-DBUILD_BINARY=%BUILD_BINARY% ^
-DBUILD_TEST=%BUILD_TEST% ^
-DINSTALL_TEST=%INSTALL_TEST% ^
-DBUILD_CAFFE2_OPS=%BUILD_CAFFE2_OPS% ^
-DONNX_NAMESPACE=%ONNX_NAMESPACE% ^
-DUSE_CUDA=%USE_CUDA% ^
-DUSE_DISTRIBUTED=%USE_DISTRIBUTED% ^
-DUSE_FBGEMM=%USE_FBGEMM% ^
-DUSE_NUMPY=%USE_NUMPY% ^
-DNUMPY_INCLUDE_DIR="%NUMPY_INCLUDE_DIR%" ^
-DUSE_NNPACK=%USE_NNPACK% ^
-DUSE_LEVELDB=%USE_LEVELDB% ^
-DUSE_LMDB=%USE_LMDB% ^
-DUSE_OPENCV=%USE_OPENCV% ^
-DUSE_QNNPACK=%USE_QNNPACK% ^
-DUSE_FFMPEG=%USE_FFMPEG% ^
-DUSE_GLOG=OFF ^
-DUSE_GFLAGS=OFF ^
-DUSE_SYSTEM_EIGEN_INSTALL=OFF ^
-DCUDNN_INCLUDE_DIR="%CUDNN_INCLUDE_DIR%" ^
-DCUDNN_LIB_DIR="%CUDNN_LIB_DIR%" ^
-DCUDNN_LIBRARY="%CUDNN_LIBRARY%" ^
-DUSE_MKLDNN=%USE_MKLDNN% ^
-DATEN_NO_CONTRIB=1 ^
-DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%" ^
-DCMAKE_C_FLAGS="%USER_CFLAGS%" ^
-DCMAKE_CXX_FLAGS="/EHa %USER_CFLAGS%" ^
-DCMAKE_EXE_LINKER_FLAGS="%USER_LDFLAGS%" ^
-DCMAKE_SHARED_LINKER_FLAGS="%USER_LDFLAGS%" ^
-DUSE_ROCM=%USE_ROCM%
IF ERRORLEVEL 1 exit 1
IF NOT ERRORLEVEL 0 exit 1
%MAKE_COMMAND%
IF ERRORLEVEL 1 exit 1
IF NOT ERRORLEVEL 0 exit 1
popd
@endlocal
goto:eof