1@echo off 2 3REM This is needed so as to avoid static expansion of environment variables 4REM inside if (...) conditionals. 5REM See http://stackoverflow.com/questions/305605/weird-scope-issue-in-bat-file 6REM for more explanation. 7REM Precisely needed for configuring Visual Studio Environment. 8setlocal enabledelayedexpansion 9 10REM Does the user need help? 11if /I "%1" == "help" goto help 12if /I "%1" == "/?" ( 13:help 14 echo Help for configure script 15 echo Syntax: path\to\source\configure.cmd [script-options] [Cmake-options] 16 echo Available script-options: Codeblocks, Eclipse, Makefiles, clang, VSSolution, RTC 17 echo Cmake-options: -DVARIABLE:TYPE=VALUE 18 goto quit 19) 20 21REM Special case %1 = arm_hosttools %2 = vcvarsall.bat %3 = %CMAKE_GENERATOR% 22if /I "%1" == "arm_hosttools" ( 23 echo Configuring x86 host tools for ARM cross build 24 25 REM This launches %VSINSTALLDIR%VS\vcvarsall.bat 26 call %2 x86 27 28 REM Configure host tools for x86. 29 cmake -G %3 -DARCH:STRING=i386 %~dp0 30 exit 31) 32 33REM Get the source root directory 34set REACTOS_SOURCE_DIR=%~dp0 35 36REM Ensure there's no spaces in the source path 37echo %REACTOS_SOURCE_DIR%| find " " > NUL 38if %ERRORLEVEL% == 0 ( 39 echo. && echo Your source path contains at least one space. 40 echo This will cause problems with building. 41 echo Please rename your folders so there are no spaces in the source path, 42 echo or move your source to a different folder. 43 goto quit 44) 45 46REM Set default generator 47set CMAKE_GENERATOR="Ninja" 48set CMAKE_GENERATOR_HOST=!CMAKE_GENERATOR! 49 50REM Detect presence of cmake 51cmd /c cmake --version 2>&1 | find "cmake version" > NUL || goto cmake_notfound 52 53REM Detect build environment (MinGW, VS, WDK, ...) 54if defined ROS_ARCH ( 55 echo Detected RosBE for %ROS_ARCH% 56 set BUILD_ENVIRONMENT=MinGW 57 set ARCH=%ROS_ARCH% 58 set MINGW_TOOCHAIN_FILE=toolchain-gcc.cmake 59 60) else if defined VCINSTALLDIR ( 61 REM VS command prompt does not put this in environment vars 62 cl 2>&1 | find "x86" > NUL && set ARCH=i386 63 cl 2>&1 | find "x64" > NUL && set ARCH=amd64 64 cl 2>&1 | find "ARM" > NUL && set ARCH=arm 65 cl 2>&1 | find "16.00." > NUL && set VS_VERSION=10 66 cl 2>&1 | find "17.00." > NUL && set VS_VERSION=11 67 cl 2>&1 | find "18.00." > NUL && set VS_VERSION=12 68 cl 2>&1 | find "19.00." > NUL && set VS_VERSION=14 69 cl 2>&1 | find "19.10." > NUL && set VS_VERSION=15 70 cl 2>&1 | find "19.11." > NUL && set VS_VERSION=15 71 cl 2>&1 | find "19.12." > NUL && set VS_VERSION=15 72 cl 2>&1 | find "19.13." > NUL && set VS_VERSION=15 73 cl 2>&1 | find "19.14." > NUL && set VS_VERSION=15 74 cl 2>&1 | find "19.15." > NUL && set VS_VERSION=15 75 if not defined VS_VERSION ( 76 echo Error: Visual Studio version too old ^(before 10 ^(2010^)^) or version detection failed. 77 goto quit 78 ) 79 set BUILD_ENVIRONMENT=VS 80 set VS_SOLUTION=0 81 set VS_RUNTIME_CHECKS=0 82 echo Detected Visual Studio Environment !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH! 83) else ( 84 echo Error: Unable to detect build environment. Configure script failure. 85 goto quit 86) 87 88REM Checkpoint 89if not defined ARCH ( 90 echo Unknown build architecture 91 goto quit 92) 93 94set NEW_STYLE_BUILD=1 95set USE_CLANG_CL=0 96 97REM Parse command line parameters 98:repeat 99 if /I "%1" == "-DNEW_STYLE_BUILD" ( 100 set NEW_STYLE_BUILD=%2 101 ) else if "%BUILD_ENVIRONMENT%" == "MinGW" ( 102 if /I "%1" == "Codeblocks" ( 103 set CMAKE_GENERATOR="CodeBlocks - MinGW Makefiles" 104 ) else if /I "%1" == "Eclipse" ( 105 set CMAKE_GENERATOR="Eclipse CDT4 - MinGW Makefiles" 106 ) else if /I "%1" == "Makefiles" ( 107 set CMAKE_GENERATOR="MinGW Makefiles" 108 ) else if /I "%1" == "VSSolution" ( 109 echo. && echo Error: Creation of VS Solution files is not supported in a MinGW environment. 110 echo Please run this command in a [Developer] Command Prompt for Visual Studio. 111 goto quit 112 ) else if /I "%1" == "RTC" ( 113 echo. && echo Warning: RTC switch is ignored outside of a Visual Studio environment. && echo. 114 ) else if /I "%1" NEQ "" ( 115 echo %1| find /I "-D" > NUL 116 if %ERRORLEVEL% == 0 ( 117 REM User is passing a switch to CMake 118 REM Ignore it, and ignore the next parameter that follows 119 Shift 120 ) else ( 121 echo. && echo Warning: Unrecognized switch "%1" && echo. 122 ) 123 ) else ( 124 goto continue 125 ) 126 ) else ( 127 if /I "%1" == "CodeBlocks" ( 128 set CMAKE_GENERATOR="CodeBlocks - NMake Makefiles" 129 ) else if /I "%1" == "Eclipse" ( 130 set CMAKE_GENERATOR="Eclipse CDT4 - NMake Makefiles" 131 ) else if /I "%1" == "Makefiles" ( 132 set CMAKE_GENERATOR="NMake Makefiles" 133 ) else if /I "%1" == "clang" ( 134 set USE_CLANG_CL=1 135 ) else if /I "%1" == "VSSolution" ( 136 set VS_SOLUTION=1 137 REM explicitly set VS version for project generator 138 if /I "%2" == "-VS_VER" ( 139 set VS_VERSION=%3 140 echo Visual Studio Environment set to !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH! 141 ) 142 if "!VS_VERSION!" == "10" ( 143 if "!ARCH!" == "amd64" ( 144 set CMAKE_GENERATOR="Visual Studio 10 Win64" 145 ) else ( 146 set CMAKE_GENERATOR="Visual Studio 10" 147 ) 148 ) else if "!VS_VERSION!" == "11" ( 149 if "!ARCH!" == "amd64" ( 150 set CMAKE_GENERATOR="Visual Studio 11 Win64" 151 ) else if "!ARCH!" == "arm" ( 152 set CMAKE_GENERATOR="Visual Studio 11 ARM" 153 set CMAKE_GENERATOR_HOST="Visual Studio 11" 154 ) else ( 155 set CMAKE_GENERATOR="Visual Studio 11" 156 ) 157 ) else if "!VS_VERSION!" == "12" ( 158 if "!ARCH!" == "amd64" ( 159 set CMAKE_GENERATOR="Visual Studio 12 Win64" 160 ) else if "!ARCH!" == "arm" ( 161 set CMAKE_GENERATOR="Visual Studio 12 ARM" 162 set CMAKE_GENERATOR_HOST="Visual Studio 12" 163 ) else ( 164 set CMAKE_GENERATOR="Visual Studio 12" 165 ) 166 ) else if "!VS_VERSION!" == "14" ( 167 if "!ARCH!" == "amd64" ( 168 set CMAKE_GENERATOR="Visual Studio 14 Win64" 169 ) else if "!ARCH!" == "arm" ( 170 set CMAKE_GENERATOR="Visual Studio 14 ARM" 171 set CMAKE_GENERATOR_HOST="Visual Studio 14" 172 ) else ( 173 set CMAKE_GENERATOR="Visual Studio 14" 174 ) 175 ) else if "!VS_VERSION!" == "15" ( 176 if "!ARCH!" == "amd64" ( 177 set CMAKE_GENERATOR="Visual Studio 15 Win64" 178 ) else if "!ARCH!" == "arm" ( 179 set CMAKE_GENERATOR="Visual Studio 15 ARM" 180 set CMAKE_GENERATOR_HOST="Visual Studio 15" 181 ) else ( 182 set CMAKE_GENERATOR="Visual Studio 15" 183 ) 184 ) 185 ) else if /I "%1" == "RTC" ( 186 echo Runtime checks enabled 187 set VS_RUNTIME_CHECKS=1 188 ) else if /I "%1" NEQ "" ( 189 echo %1| find /I "-D" > NUL 190 if %ERRORLEVEL% == 0 ( 191 REM User is passing a switch to CMake 192 REM Ignore it, and ignore the next parameter that follows 193 Shift 194 ) else ( 195 echo. && echo Warning: Unrecognized switch "%1" && echo. 196 ) 197 ) else ( 198 goto continue 199 ) 200 ) 201 202 REM Go to next parameter 203 SHIFT 204 goto repeat 205:continue 206 207REM Inform the user about the default build 208if "!CMAKE_GENERATOR!" == "Ninja" ( 209 echo This script defaults to Ninja. Type "configure help" for alternative options. 210) 211 212REM Create directories 213set REACTOS_OUTPUT_PATH=output-%BUILD_ENVIRONMENT%-%ARCH% 214 215if "%VS_SOLUTION%" == "1" ( 216 set REACTOS_OUTPUT_PATH=%REACTOS_OUTPUT_PATH%-sln 217) 218 219if "%REACTOS_SOURCE_DIR%" == "%CD%\" ( 220 set CD_SAME_AS_SOURCE=1 221 echo Creating directories in %REACTOS_OUTPUT_PATH% 222 223 if not exist %REACTOS_OUTPUT_PATH% ( 224 mkdir %REACTOS_OUTPUT_PATH% 225 ) 226 cd %REACTOS_OUTPUT_PATH% 227) 228 229if "%VS_SOLUTION%" == "1" ( 230 231 if exist build.ninja ( 232 echo. && echo Error: This directory has already been configured for ninja. 233 echo An output folder configured for ninja can't be reconfigured for VSSolution. 234 echo Use an empty folder or delete the contents of this folder, then try again. 235 goto quit 236 ) 237) else if exist REACTOS.sln ( 238 echo. && echo Error: This directory has already been configured for Visual Studio. 239 echo An output folder configured for VSSolution can't be reconfigured for ninja. 240 echo Use an empty folder or delete the contents of this folder, then try again. && echo. 241 goto quit 242) 243 244if "%NEW_STYLE_BUILD%"=="0" ( 245 246 if not exist host-tools ( 247 mkdir host-tools 248 ) 249 250 if not exist reactos ( 251 mkdir reactos 252 ) 253 254 echo Preparing host tools... 255 cd host-tools 256 if EXIST CMakeCache.txt ( 257 del CMakeCache.txt /q 258 ) 259 260 set REACTOS_BUILD_TOOLS_DIR=!CD! 261 262 REM Use x86 for ARM host tools 263 if "%ARCH%" == "arm" ( 264 REM Launch new script instance for x86 host tools configuration 265 start "Preparing host tools for ARM cross build..." /I /B /WAIT %~dp0configure.cmd arm_hosttools "%VSINSTALLDIR%VC\vcvarsall.bat" %CMAKE_GENERATOR_HOST% 266 ) else ( 267 cmake -G %CMAKE_GENERATOR% -DARCH:STRING=%ARCH% "%REACTOS_SOURCE_DIR%" 268 ) 269 270 cd.. 271 272) 273 274echo Preparing reactos... 275 276if "%NEW_STYLE_BUILD%"=="0" ( 277 cd reactos 278) 279 280if EXIST CMakeCache.txt ( 281 del CMakeCache.txt /q 282 del host-tools\CMakeCache.txt /q 283) 284 285if "%NEW_STYLE_BUILD%"=="0" ( 286 set BUILD_TOOLS_FLAG=-DREACTOS_BUILD_TOOLS_DIR:PATH="%REACTOS_BUILD_TOOLS_DIR%" 287) 288 289if "%BUILD_ENVIRONMENT%" == "MinGW" ( 290 cmake -G %CMAKE_GENERATOR% -DENABLE_CCACHE:BOOL=0 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=%MINGW_TOOCHAIN_FILE% -DARCH:STRING=%ARCH% %BUILD_TOOLS_FLAG% %* "%REACTOS_SOURCE_DIR%" 291) else if %USE_CLANG_CL% == 1 ( 292 cmake -G %CMAKE_GENERATOR% -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-msvc.cmake -DARCH:STRING=%ARCH% %BUILD_TOOLS_FLAG% -DUSE_CLANG_CL:BOOL=1 -DRUNTIME_CHECKS:BOOL=%VS_RUNTIME_CHECKS% %* "%REACTOS_SOURCE_DIR%" 293) else ( 294 cmake -G %CMAKE_GENERATOR% -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-msvc.cmake -DARCH:STRING=%ARCH% %BUILD_TOOLS_FLAG% -DRUNTIME_CHECKS:BOOL=%VS_RUNTIME_CHECKS% %* "%REACTOS_SOURCE_DIR%" 295) 296 297if "%NEW_STYLE_BUILD%"=="0" ( 298 cd.. 299) 300 301if %ERRORLEVEL% NEQ 0 ( 302 goto quit 303) 304 305if "%CD_SAME_AS_SOURCE%" == "1" ( 306 set ENDV= from %REACTOS_OUTPUT_PATH% 307) 308 309if "%VS_SOLUTION%" == "1" ( 310 set ENDV= You can now use msbuild or open REACTOS.sln%ENDV%. 311) else ( 312 set ENDV= Execute appropriate build commands ^(ex: ninja, make, nmake, etc...^)%ENDV% 313) 314 315echo. && echo Configure script complete^^!%ENDV% 316 317goto quit 318 319:cmake_notfound 320echo Unable to find cmake, if it is installed, check your PATH variable. 321 322:quit 323endlocal 324exit /b 325