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 endlocal 19 exit /b 20) 21 22REM Special case %1 = arm_hosttools %2 = vcvarsall.bat %3 = %CMAKE_GENERATOR% 23if /I "%1" == "arm_hosttools" ( 24 echo Configuring x86 host tools for ARM cross build 25 26 REM This launches %VSINSTALLDIR%VS\vcvarsall.bat 27 call %2 x86 28 29 REM Configure host tools for x86. 30 cmake -G %3 -DARCH:STRING=i386 %~dp0 31 exit 32) 33 34REM Get the source root directory 35set REACTOS_SOURCE_DIR=%~dp0 36 37REM Set default generator 38set CMAKE_GENERATOR="Ninja" 39set CMAKE_GENERATOR_HOST=!CMAKE_GENERATOR! 40 41REM Detect presence of cmake 42cmd /c cmake --version 2>&1 | find "cmake version" > NUL || goto cmake_notfound 43 44REM Detect build environment (MinGW, VS, WDK, ...) 45if defined ROS_ARCH ( 46 echo Detected RosBE for %ROS_ARCH% 47 set BUILD_ENVIRONMENT=MinGW 48 set ARCH=%ROS_ARCH% 49 set MINGW_TOOCHAIN_FILE=toolchain-gcc.cmake 50 51) else if defined VCINSTALLDIR ( 52 REM VS command prompt does not put this in environment vars 53 cl 2>&1 | find "x86" > NUL && set ARCH=i386 54 cl 2>&1 | find "x64" > NUL && set ARCH=amd64 55 cl 2>&1 | find "ARM" > NUL && set ARCH=arm 56 cl 2>&1 | find "15.00." > NUL && set VS_VERSION=9 57 cl 2>&1 | find "16.00." > NUL && set VS_VERSION=10 58 cl 2>&1 | find "17.00." > NUL && set VS_VERSION=11 59 cl 2>&1 | find "18.00." > NUL && set VS_VERSION=12 60 cl 2>&1 | find "19.00." > NUL && set VS_VERSION=14 61 cl 2>&1 | find "19.10." > NUL && set VS_VERSION=15 62 cl 2>&1 | find "19.11." > NUL && set VS_VERSION=15 63 cl 2>&1 | find "19.12." > NUL && set VS_VERSION=15 64 if not defined VS_VERSION ( 65 echo Error: Visual Studio version too old or version detection failed. 66 endlocal 67 exit /b 68 ) 69 set BUILD_ENVIRONMENT=VS 70 set VS_SOLUTION=0 71 set VS_RUNTIME_CHECKS=0 72 echo Detected Visual Studio Environment !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH! 73) else ( 74 echo Error: Unable to detect build environment. Configure script failure. 75 endlocal 76 exit /b 77) 78 79REM Checkpoint 80if not defined ARCH ( 81 echo Unknown build architecture 82 endlocal 83 exit /b 84) 85 86set NEW_STYLE_BUILD=1 87set USE_CLANG_CL=0 88 89REM Parse command line parameters 90:repeat 91 if /I "%1%" == "-DNEW_STYLE_BUILD" ( 92 set NEW_STYLE_BUILD=%2 93 ) else if "%BUILD_ENVIRONMENT%" == "MinGW" ( 94 if /I "%1" == "Codeblocks" ( 95 set CMAKE_GENERATOR="CodeBlocks - MinGW Makefiles" 96 ) else if /I "%1" == "Eclipse" ( 97 set CMAKE_GENERATOR="Eclipse CDT4 - MinGW Makefiles" 98 ) else if /I "%1" == "Makefiles" ( 99 set CMAKE_GENERATOR="MinGW Makefiles" 100 ) else ( 101 goto continue 102 ) 103 ) else ( 104 if /I "%1" == "CodeBlocks" ( 105 set CMAKE_GENERATOR="CodeBlocks - NMake Makefiles" 106 ) else if /I "%1" == "Eclipse" ( 107 set CMAKE_GENERATOR="Eclipse CDT4 - NMake Makefiles" 108 ) else if /I "%1" == "Makefiles" ( 109 set CMAKE_GENERATOR="NMake Makefiles" 110 ) else if /I "%1" == "clang" ( 111 set USE_CLANG_CL=1 112 ) else if /I "%1" == "VSSolution" ( 113 set VS_SOLUTION=1 114 REM explicitly set VS version for project generator 115 if /I "%2" == "-VS_VER" ( 116 set VS_VERSION=%3 117 echo Visual Studio Environment set to !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH! 118 ) 119 if "!VS_VERSION!" == "9" ( 120 if "!ARCH!" == "amd64" ( 121 set CMAKE_GENERATOR="Visual Studio 9 2008 Win64" 122 ) else ( 123 set CMAKE_GENERATOR="Visual Studio 9 2008" 124 ) 125 ) else if "!VS_VERSION!" == "10" ( 126 if "!ARCH!" == "amd64" ( 127 set CMAKE_GENERATOR="Visual Studio 10 Win64" 128 ) else ( 129 set CMAKE_GENERATOR="Visual Studio 10" 130 ) 131 ) else if "!VS_VERSION!" == "11" ( 132 if "!ARCH!" == "amd64" ( 133 set CMAKE_GENERATOR="Visual Studio 11 Win64" 134 ) else if "!ARCH!" == "arm" ( 135 set CMAKE_GENERATOR="Visual Studio 11 ARM" 136 set CMAKE_GENERATOR_HOST="Visual Studio 11" 137 ) else ( 138 set CMAKE_GENERATOR="Visual Studio 11" 139 ) 140 ) else if "!VS_VERSION!" == "12" ( 141 if "!ARCH!" == "amd64" ( 142 set CMAKE_GENERATOR="Visual Studio 12 Win64" 143 ) else if "!ARCH!" == "arm" ( 144 set CMAKE_GENERATOR="Visual Studio 12 ARM" 145 set CMAKE_GENERATOR_HOST="Visual Studio 12" 146 ) else ( 147 set CMAKE_GENERATOR="Visual Studio 12" 148 ) 149 ) else if "!VS_VERSION!" == "14" ( 150 if "!ARCH!" == "amd64" ( 151 set CMAKE_GENERATOR="Visual Studio 14 Win64" 152 ) else if "!ARCH!" == "arm" ( 153 set CMAKE_GENERATOR="Visual Studio 14 ARM" 154 set CMAKE_GENERATOR_HOST="Visual Studio 14" 155 ) else ( 156 set CMAKE_GENERATOR="Visual Studio 14" 157 ) 158 ) else if "!VS_VERSION!" == "15" ( 159 if "!ARCH!" == "amd64" ( 160 set CMAKE_GENERATOR="Visual Studio 15 Win64" 161 ) else if "!ARCH!" == "arm" ( 162 set CMAKE_GENERATOR="Visual Studio 15 ARM" 163 set CMAKE_GENERATOR_HOST="Visual Studio 15" 164 ) else ( 165 set CMAKE_GENERATOR="Visual Studio 15" 166 ) 167 ) 168 ) else if /I "%1" == "RTC" ( 169 echo Runtime checks enabled 170 set VS_RUNTIME_CHECKS=1 171 ) else ( 172 goto continue 173 ) 174 ) 175 176 REM Go to next parameter 177 SHIFT 178 goto repeat 179:continue 180 181REM Inform the user about the default build 182if "!CMAKE_GENERATOR!" == "Ninja" ( 183 echo This script defaults to Ninja. Type "configure help" for alternative options. 184) 185 186REM Create directories 187set REACTOS_OUTPUT_PATH=output-%BUILD_ENVIRONMENT%-%ARCH% 188if "%REACTOS_SOURCE_DIR%" == "%CD%\" ( 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 "%NEW_STYLE_BUILD%"=="0" ( 198 199 if not exist host-tools ( 200 mkdir host-tools 201 ) 202 203 if not exist reactos ( 204 mkdir reactos 205 ) 206 207 echo Preparing host tools... 208 cd host-tools 209 if EXIST CMakeCache.txt ( 210 del CMakeCache.txt /q 211 ) 212 213 set REACTOS_BUILD_TOOLS_DIR=!CD! 214 215 REM Use x86 for ARM host tools 216 if "%ARCH%" == "arm" ( 217 REM Launch new script instance for x86 host tools configuration 218 start "Preparing host tools for ARM cross build..." /I /B /WAIT %~dp0configure.cmd arm_hosttools "%VSINSTALLDIR%VC\vcvarsall.bat" %CMAKE_GENERATOR_HOST% 219 ) else ( 220 cmake -G %CMAKE_GENERATOR% -DARCH:STRING=%ARCH% "%REACTOS_SOURCE_DIR%" 221 ) 222 223 cd.. 224 225) 226 227echo Preparing reactos... 228 229if "%NEW_STYLE_BUILD%"=="0" ( 230 cd reactos 231) 232 233if EXIST CMakeCache.txt ( 234 del CMakeCache.txt /q 235 del host-tools\CMakeCache.txt /q 236) 237 238if "%NEW_STYLE_BUILD%"=="0" ( 239 set BUILD_TOOLS_FLAG=-DREACTOS_BUILD_TOOLS_DIR:PATH="%REACTOS_BUILD_TOOLS_DIR%" 240) 241 242if "%BUILD_ENVIRONMENT%" == "MinGW" ( 243 cmake -G %CMAKE_GENERATOR% -DENABLE_CCACHE:BOOL=0 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=%MINGW_TOOCHAIN_FILE% -DARCH:STRING=%ARCH% %BUILD_TOOLS_FLAG% %* "%REACTOS_SOURCE_DIR%" 244) else if %USE_CLANG_CL% == 1 ( 245 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%" 246) else ( 247 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%" 248) 249 250if "%NEW_STYLE_BUILD%"=="0" ( 251 cd.. 252) 253 254echo Configure script complete^^! Execute appropriate build commands (ex: ninja, make, nmake, etc...). 255endlocal 256exit /b 257 258:cmake_notfound 259echo Unable to find cmake, if it is installed, check your PATH variable. 260endlocal 261exit /b 262