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 cl 2>&1 | find "19.16." > NUL && set VS_VERSION=15 76 if not defined VS_VERSION ( 77 echo Error: Visual Studio version too old ^(before 10 ^(2010^)^) or version detection failed. 78 goto quit 79 ) 80 set BUILD_ENVIRONMENT=VS 81 set VS_SOLUTION=0 82 set VS_RUNTIME_CHECKS=0 83 echo Detected Visual Studio Environment !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH! 84) else ( 85 echo Error: Unable to detect build environment. Configure script failure. 86 goto quit 87) 88 89REM Checkpoint 90if not defined ARCH ( 91 echo Unknown build architecture 92 goto quit 93) 94 95set NEW_STYLE_BUILD=1 96set USE_CLANG_CL=0 97 98REM Parse command line parameters 99:repeat 100 if /I "%1" == "-DNEW_STYLE_BUILD" ( 101 set NEW_STYLE_BUILD=%2 102 ) else if "%BUILD_ENVIRONMENT%" == "MinGW" ( 103 if /I "%1" == "Codeblocks" ( 104 set CMAKE_GENERATOR="CodeBlocks - MinGW Makefiles" 105 ) else if /I "%1" == "Eclipse" ( 106 set CMAKE_GENERATOR="Eclipse CDT4 - MinGW Makefiles" 107 ) else if /I "%1" == "Makefiles" ( 108 set CMAKE_GENERATOR="MinGW Makefiles" 109 ) else if /I "%1" == "VSSolution" ( 110 echo. && echo Error: Creation of VS Solution files is not supported in a MinGW environment. 111 echo Please run this command in a [Developer] Command Prompt for Visual Studio. 112 goto quit 113 ) else if /I "%1" == "RTC" ( 114 echo. && echo Warning: RTC switch is ignored outside of a Visual Studio environment. && echo. 115 ) else if /I "%1" NEQ "" ( 116 echo %1| find /I "-D" > NUL 117 if %ERRORLEVEL% == 0 ( 118 REM User is passing a switch to CMake 119 REM Ignore it, and ignore the next parameter that follows 120 Shift 121 ) else ( 122 echo. && echo Warning: Unrecognized switch "%1" && echo. 123 ) 124 ) else ( 125 goto continue 126 ) 127 ) else ( 128 if /I "%1" == "CodeBlocks" ( 129 set CMAKE_GENERATOR="CodeBlocks - NMake Makefiles" 130 ) else if /I "%1" == "Eclipse" ( 131 set CMAKE_GENERATOR="Eclipse CDT4 - NMake Makefiles" 132 ) else if /I "%1" == "Makefiles" ( 133 set CMAKE_GENERATOR="NMake Makefiles" 134 ) else if /I "%1" == "clang" ( 135 set USE_CLANG_CL=1 136 ) else if /I "%1" == "VSSolution" ( 137 set VS_SOLUTION=1 138 REM explicitly set VS version for project generator 139 if /I "%2" == "-VS_VER" ( 140 set VS_VERSION=%3 141 echo Visual Studio Environment set to !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH! 142 ) 143 if "!VS_VERSION!" == "10" ( 144 if "!ARCH!" == "amd64" ( 145 set CMAKE_GENERATOR="Visual Studio 10 Win64" 146 ) else ( 147 set CMAKE_GENERATOR="Visual Studio 10" 148 ) 149 ) else if "!VS_VERSION!" == "11" ( 150 if "!ARCH!" == "amd64" ( 151 set CMAKE_GENERATOR="Visual Studio 11 Win64" 152 ) else if "!ARCH!" == "arm" ( 153 set CMAKE_GENERATOR="Visual Studio 11 ARM" 154 set CMAKE_GENERATOR_HOST="Visual Studio 11" 155 ) else ( 156 set CMAKE_GENERATOR="Visual Studio 11" 157 ) 158 ) else if "!VS_VERSION!" == "12" ( 159 if "!ARCH!" == "amd64" ( 160 set CMAKE_GENERATOR="Visual Studio 12 Win64" 161 ) else if "!ARCH!" == "arm" ( 162 set CMAKE_GENERATOR="Visual Studio 12 ARM" 163 set CMAKE_GENERATOR_HOST="Visual Studio 12" 164 ) else ( 165 set CMAKE_GENERATOR="Visual Studio 12" 166 ) 167 ) else if "!VS_VERSION!" == "14" ( 168 if "!ARCH!" == "amd64" ( 169 set CMAKE_GENERATOR="Visual Studio 14 Win64" 170 ) else if "!ARCH!" == "arm" ( 171 set CMAKE_GENERATOR="Visual Studio 14 ARM" 172 set CMAKE_GENERATOR_HOST="Visual Studio 14" 173 ) else ( 174 set CMAKE_GENERATOR="Visual Studio 14" 175 ) 176 ) else if "!VS_VERSION!" == "15" ( 177 if "!ARCH!" == "amd64" ( 178 set CMAKE_GENERATOR="Visual Studio 15 Win64" 179 ) else if "!ARCH!" == "arm" ( 180 set CMAKE_GENERATOR="Visual Studio 15 ARM" 181 set CMAKE_GENERATOR_HOST="Visual Studio 15" 182 ) else ( 183 set CMAKE_GENERATOR="Visual Studio 15" 184 ) 185 ) 186 ) else if /I "%1" == "RTC" ( 187 echo Runtime checks enabled 188 set VS_RUNTIME_CHECKS=1 189 ) else if /I "%1" NEQ "" ( 190 echo %1| find /I "-D" > NUL 191 if %ERRORLEVEL% == 0 ( 192 REM User is passing a switch to CMake 193 REM Ignore it, and ignore the next parameter that follows 194 Shift 195 ) else ( 196 echo. && echo Warning: Unrecognized switch "%1" && echo. 197 ) 198 ) else ( 199 goto continue 200 ) 201 ) 202 203 REM Go to next parameter 204 SHIFT 205 goto repeat 206:continue 207 208REM Inform the user about the default build 209if "!CMAKE_GENERATOR!" == "Ninja" ( 210 echo This script defaults to Ninja. Type "configure help" for alternative options. 211) 212 213REM Create directories 214set REACTOS_OUTPUT_PATH=output-%BUILD_ENVIRONMENT%-%ARCH% 215 216if "%VS_SOLUTION%" == "1" ( 217 set REACTOS_OUTPUT_PATH=%REACTOS_OUTPUT_PATH%-sln 218) 219 220if "%REACTOS_SOURCE_DIR%" == "%CD%\" ( 221 set CD_SAME_AS_SOURCE=1 222 echo Creating directories in %REACTOS_OUTPUT_PATH% 223 224 if not exist %REACTOS_OUTPUT_PATH% ( 225 mkdir %REACTOS_OUTPUT_PATH% 226 ) 227 cd %REACTOS_OUTPUT_PATH% 228) 229 230if "%VS_SOLUTION%" == "1" ( 231 232 if exist build.ninja ( 233 echo. && echo Error: This directory has already been configured for ninja. 234 echo An output folder configured for ninja can't be reconfigured for VSSolution. 235 echo Use an empty folder or delete the contents of this folder, then try again. 236 goto quit 237 ) 238) else if exist REACTOS.sln ( 239 echo. && echo Error: This directory has already been configured for Visual Studio. 240 echo An output folder configured for VSSolution can't be reconfigured for ninja. 241 echo Use an empty folder or delete the contents of this folder, then try again. && echo. 242 goto quit 243) 244 245if "%NEW_STYLE_BUILD%"=="0" ( 246 247 if not exist host-tools ( 248 mkdir host-tools 249 ) 250 251 if not exist reactos ( 252 mkdir reactos 253 ) 254 255 echo Preparing host tools... 256 cd host-tools 257 if EXIST CMakeCache.txt ( 258 del CMakeCache.txt /q 259 ) 260 261 set REACTOS_BUILD_TOOLS_DIR=!CD! 262 263 REM Use x86 for ARM host tools 264 if "%ARCH%" == "arm" ( 265 REM Launch new script instance for x86 host tools configuration 266 start "Preparing host tools for ARM cross build..." /I /B /WAIT %~dp0configure.cmd arm_hosttools "%VSINSTALLDIR%VC\vcvarsall.bat" %CMAKE_GENERATOR_HOST% 267 ) else ( 268 cmake -G %CMAKE_GENERATOR% -DARCH:STRING=%ARCH% "%REACTOS_SOURCE_DIR%" 269 ) 270 271 cd.. 272 273) 274 275echo Preparing reactos... 276 277if "%NEW_STYLE_BUILD%"=="0" ( 278 cd reactos 279) 280 281if EXIST CMakeCache.txt ( 282 del CMakeCache.txt /q 283 del host-tools\CMakeCache.txt /q 284) 285 286if "%NEW_STYLE_BUILD%"=="0" ( 287 set BUILD_TOOLS_FLAG=-DREACTOS_BUILD_TOOLS_DIR:PATH="%REACTOS_BUILD_TOOLS_DIR%" 288) 289 290if "%BUILD_ENVIRONMENT%" == "MinGW" ( 291 cmake -G %CMAKE_GENERATOR% -DENABLE_CCACHE:BOOL=0 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=%MINGW_TOOCHAIN_FILE% -DARCH:STRING=%ARCH% %BUILD_TOOLS_FLAG% %* "%REACTOS_SOURCE_DIR%" 292) else if %USE_CLANG_CL% == 1 ( 293 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%" 294) else ( 295 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%" 296) 297 298if "%NEW_STYLE_BUILD%"=="0" ( 299 cd.. 300) 301 302if %ERRORLEVEL% NEQ 0 ( 303 goto quit 304) 305 306if "%CD_SAME_AS_SOURCE%" == "1" ( 307 set ENDV= from %REACTOS_OUTPUT_PATH% 308) 309 310if "%VS_SOLUTION%" == "1" ( 311 set ENDV= You can now use msbuild or open REACTOS.sln%ENDV%. 312) else ( 313 set ENDV= Execute appropriate build commands ^(ex: ninja, make, nmake, etc...^)%ENDV% 314) 315 316echo. && echo Configure script complete^^!%ENDV% 317 318goto quit 319 320:cmake_notfound 321echo Unable to find cmake, if it is installed, check your PATH variable. 322 323:quit 324endlocal 325exit /b 326