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