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 Get the source root directory 22set REACTOS_SOURCE_DIR=%~dp0 23 24REM Ensure there's no spaces in the source path 25echo %REACTOS_SOURCE_DIR%| find " " > NUL 26if %ERRORLEVEL% == 0 ( 27 echo. && echo Your source path contains at least one space. 28 echo This will cause problems with building. 29 echo Please rename your folders so there are no spaces in the source path, 30 echo or move your source to a different folder. 31 goto quit 32) 33 34REM Set default generator 35set CMAKE_GENERATOR="Ninja" 36set CMAKE_ARCH= 37 38REM Detect presence of cmake 39cmd /c cmake --version 2>&1 | find "cmake version" > NUL || goto cmake_notfound 40 41REM Detect build environment (MinGW, VS, WDK, ...) 42if defined ROS_ARCH ( 43 echo Detected RosBE for %ROS_ARCH% 44 set BUILD_ENVIRONMENT=MinGW 45 set ARCH=%ROS_ARCH% 46 set MINGW_TOOCHAIN_FILE=toolchain-gcc.cmake 47 48) else if defined VCINSTALLDIR ( 49 REM VS command prompt does not put this in environment vars 50 cl 2>&1 | find "x86" > NUL && set ARCH=i386 51 cl 2>&1 | find "x64" > NUL && set ARCH=amd64 52 cl 2>&1 | find "ARM" > NUL && set ARCH=arm 53 cl 2>&1 | find "16.00." > NUL && set VS_VERSION=10 54 cl 2>&1 | find "17.00." > NUL && set VS_VERSION=11 55 cl 2>&1 | find "18.00." > NUL && set VS_VERSION=12 56 cl 2>&1 | find "19.00." > NUL && set VS_VERSION=14 57 cl 2>&1 | find "19.10." > NUL && set VS_VERSION=15 58 cl 2>&1 | find "19.11." > NUL && set VS_VERSION=15 59 cl 2>&1 | find "19.12." > NUL && set VS_VERSION=15 60 cl 2>&1 | find "19.13." > NUL && set VS_VERSION=15 61 cl 2>&1 | find "19.14." > NUL && set VS_VERSION=15 62 cl 2>&1 | find "19.15." > NUL && set VS_VERSION=15 63 cl 2>&1 | find "19.16." > NUL && set VS_VERSION=15 64 cl 2>&1 | find "19.20." > NUL && set VS_VERSION=16 65 cl 2>&1 | find "19.21." > NUL && set VS_VERSION=16 66 cl 2>&1 | find "19.22." > NUL && set VS_VERSION=16 67 cl 2>&1 | find "19.23." > NUL && set VS_VERSION=16 68 cl 2>&1 | find "19.24." > NUL && set VS_VERSION=16 69 if not defined VS_VERSION ( 70 echo Error: Visual Studio version too old ^(before 10 ^(2010^)^) or version detection failed. 71 goto quit 72 ) 73 set BUILD_ENVIRONMENT=VS 74 set VS_SOLUTION=0 75 set VS_RUNTIME_CHECKS=0 76 echo Detected Visual Studio Environment !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH! 77) else ( 78 echo Error: Unable to detect build environment. Configure script failure. 79 goto quit 80) 81 82REM Checkpoint 83if not defined ARCH ( 84 echo Unknown build architecture 85 goto quit 86) 87 88set USE_CLANG_CL=0 89 90REM Parse command line parameters 91:repeat 92 if "%BUILD_ENVIRONMENT%" == "MinGW" ( 93 if /I "%1" == "Codeblocks" ( 94 set CMAKE_GENERATOR="CodeBlocks - MinGW Makefiles" 95 ) else if /I "%1" == "Eclipse" ( 96 set CMAKE_GENERATOR="Eclipse CDT4 - MinGW Makefiles" 97 ) else if /I "%1" == "Makefiles" ( 98 set CMAKE_GENERATOR="MinGW Makefiles" 99 ) else if /I "%1" == "VSSolution" ( 100 echo. && echo Error: Creation of VS Solution files is not supported in a MinGW environment. 101 echo Please run this command in a [Developer] Command Prompt for Visual Studio. 102 goto quit 103 ) else if /I "%1" == "RTC" ( 104 echo. && echo Warning: RTC switch is ignored outside of a Visual Studio environment. && echo. 105 ) else if /I "%1" NEQ "" ( 106 echo %1| find /I "-D" > NUL 107 if %ERRORLEVEL% == 0 ( 108 REM User is passing a switch to CMake 109 REM Ignore it, and ignore the next parameter that follows 110 Shift 111 ) else ( 112 echo. && echo Warning: Unrecognized switch "%1" && echo. 113 ) 114 ) else ( 115 goto continue 116 ) 117 ) else ( 118 if /I "%1" == "CodeBlocks" ( 119 set CMAKE_GENERATOR="CodeBlocks - NMake Makefiles" 120 ) else if /I "%1" == "Eclipse" ( 121 set CMAKE_GENERATOR="Eclipse CDT4 - NMake Makefiles" 122 ) else if /I "%1" == "Makefiles" ( 123 set CMAKE_GENERATOR="NMake Makefiles" 124 ) else if /I "%1" == "clang" ( 125 set USE_CLANG_CL=1 126 ) else if /I "%1" == "VSSolution" ( 127 set VS_SOLUTION=1 128 REM explicitly set VS version for project generator 129 if /I "%2" == "-VS_VER" ( 130 set VS_VERSION=%3 131 echo Visual Studio Environment set to !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH! 132 ) 133 set CMAKE_GENERATOR="Visual Studio !VS_VERSION!" 134 if "!ARCH!" == "i386" ( 135 set CMAKE_ARCH=-A Win32 136 ) else if "!ARCH!" == "amd64" ( 137 set CMAKE_ARCH=-A x64 138 ) else if "!ARCH!" == "arm" ( 139 set CMAKE_ARCH=-A ARM 140 ) 141 ) else if /I "%1" == "RTC" ( 142 echo Runtime checks enabled 143 set VS_RUNTIME_CHECKS=1 144 ) else if /I "%1" NEQ "" ( 145 echo %1| find /I "-D" > NUL 146 if %ERRORLEVEL% == 0 ( 147 REM User is passing a switch to CMake 148 REM Ignore it, and ignore the next parameter that follows 149 Shift 150 ) else ( 151 echo. && echo Warning: Unrecognized switch "%1" && echo. 152 ) 153 ) else ( 154 goto continue 155 ) 156 ) 157 158 REM Go to next parameter 159 SHIFT 160 goto repeat 161:continue 162 163REM Inform the user about the default build 164if "!CMAKE_GENERATOR!" == "Ninja" ( 165 echo This script defaults to Ninja. Type "configure help" for alternative options. 166) 167 168REM Create directories 169set REACTOS_OUTPUT_PATH=output-%BUILD_ENVIRONMENT%-%ARCH% 170 171if "%VS_SOLUTION%" == "1" ( 172 set REACTOS_OUTPUT_PATH=%REACTOS_OUTPUT_PATH%-sln 173) 174 175if "%REACTOS_SOURCE_DIR%" == "%CD%\" ( 176 set CD_SAME_AS_SOURCE=1 177 echo Creating directories in %REACTOS_OUTPUT_PATH% 178 179 if not exist %REACTOS_OUTPUT_PATH% ( 180 mkdir %REACTOS_OUTPUT_PATH% 181 ) 182 cd %REACTOS_OUTPUT_PATH% 183) 184 185if "%VS_SOLUTION%" == "1" ( 186 187 if exist build.ninja ( 188 echo. && echo Error: This directory has already been configured for ninja. 189 echo An output folder configured for ninja can't be reconfigured for VSSolution. 190 echo Use an empty folder or delete the contents of this folder, then try again. 191 goto quit 192 ) 193) else if exist REACTOS.sln ( 194 echo. && echo Error: This directory has already been configured for Visual Studio. 195 echo An output folder configured for VSSolution can't be reconfigured for ninja. 196 echo Use an empty folder or delete the contents of this folder, then try again. && echo. 197 goto quit 198) 199 200echo Preparing reactos... 201 202if EXIST CMakeCache.txt ( 203 del CMakeCache.txt /q 204) 205 206 207if "%BUILD_ENVIRONMENT%" == "MinGW" ( 208 cmake -G %CMAKE_GENERATOR% -DENABLE_CCACHE:BOOL=0 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=%MINGW_TOOCHAIN_FILE% -DARCH:STRING=%ARCH% %BUILD_TOOLS_FLAG% %* "%REACTOS_SOURCE_DIR%" 209) else if %USE_CLANG_CL% == 1 ( 210 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%" 211) else ( 212 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%" 213) 214 215if %ERRORLEVEL% NEQ 0 ( 216 goto quit 217) 218 219if "%CD_SAME_AS_SOURCE%" == "1" ( 220 set ENDV= from %REACTOS_OUTPUT_PATH% 221) 222 223if "%VS_SOLUTION%" == "1" ( 224 set ENDV= You can now use msbuild or open REACTOS.sln%ENDV%. 225) else ( 226 set ENDV= Execute appropriate build commands ^(ex: ninja, make, nmake, etc...^)%ENDV% 227) 228 229echo. && echo Configure script complete^^!%ENDV% 230 231goto quit 232 233:cmake_notfound 234echo Unable to find cmake, if it is installed, check your PATH variable. 235 236:quit 237endlocal 238exit /b 239