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