3 REM This is needed so as to avoid static expansion of environment variables
4 REM inside if (...) conditionals.
5 REM See http://stackoverflow.com/questions/305605/weird-scope-issue-in-bat-file
6 REM for more explanation.
7 REM Precisely needed for configuring Visual Studio Environment.
8 setlocal enabledelayedexpansion
10 REM Does the user need help?
11 if /I "%1" == "help" goto 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
21 REM Special case %1 = arm_hosttools %2 = vcvarsall.bat %3 = %CMAKE_GENERATOR%
22 if /I "%1" == "arm_hosttools" (
23 echo Configuring x86 host tools for ARM cross build
25 REM This launches %VSINSTALLDIR%VS\vcvarsall.bat
28 REM Configure host tools for x86.
29 cmake -G %3 -DARCH:STRING=i386 %~dp0
33 REM Get the source root directory
34 set REACTOS_SOURCE_DIR=%~dp0
36 REM Ensure there's no spaces in the source path
37 echo %REACTOS_SOURCE_DIR%| find " " > NUL
38 if %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.
46 REM Set default generator
47 set CMAKE_GENERATOR="Ninja"
48 set CMAKE_GENERATOR_HOST=!CMAKE_GENERATOR!
50 REM Detect presence of cmake
51 cmd /c cmake --version 2>&1 | find "cmake version" > NUL || goto cmake_notfound
53 REM Detect build environment (MinGW, VS, WDK, ...)
55 echo Detected RosBE for %ROS_ARCH%
56 set BUILD_ENVIRONMENT=MinGW
58 set MINGW_TOOCHAIN_FILE=toolchain-gcc.cmake
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 if not defined VS_VERSION (
74 echo Error: Visual Studio version too old ^(before 10 ^(2010^)^) or version detection failed.
77 set BUILD_ENVIRONMENT=VS
79 set VS_RUNTIME_CHECKS=0
80 echo Detected Visual Studio Environment !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH!
82 echo Error: Unable to detect build environment. Configure script failure.
88 echo Unknown build architecture
95 REM Parse command line parameters
97 if /I "%1" == "-DNEW_STYLE_BUILD" (
98 set NEW_STYLE_BUILD=%2
99 ) else if "%BUILD_ENVIRONMENT%" == "MinGW" (
100 if /I "%1" == "Codeblocks" (
101 set CMAKE_GENERATOR="CodeBlocks - MinGW Makefiles"
102 ) else if /I "%1" == "Eclipse" (
103 set CMAKE_GENERATOR="Eclipse CDT4 - MinGW Makefiles"
104 ) else if /I "%1" == "Makefiles" (
105 set CMAKE_GENERATOR="MinGW Makefiles"
106 ) else if /I "%1" == "VSSolution" (
107 echo. && echo Error: Creation of VS Solution files is not supported in a MinGW environment.
108 echo Please run this command in a [Developer] Command Prompt for Visual Studio.
110 ) else if /I "%1" == "RTC" (
111 echo. && echo Warning: RTC switch is ignored outside of a Visual Studio environment. && echo.
112 ) else if /I "%1" NEQ "" (
113 echo %1| find /I "-D" > NUL
114 if %ERRORLEVEL% == 0 (
115 REM User is passing a switch to CMake
116 REM Ignore it, and ignore the next parameter that follows
119 echo. && echo Warning: Unrecognized switch "%1" && echo.
125 if /I "%1" == "CodeBlocks" (
126 set CMAKE_GENERATOR="CodeBlocks - NMake Makefiles"
127 ) else if /I "%1" == "Eclipse" (
128 set CMAKE_GENERATOR="Eclipse CDT4 - NMake Makefiles"
129 ) else if /I "%1" == "Makefiles" (
130 set CMAKE_GENERATOR="NMake Makefiles"
131 ) else if /I "%1" == "clang" (
133 ) else if /I "%1" == "VSSolution" (
135 REM explicitly set VS version for project generator
136 if /I "%2" == "-VS_VER" (
138 echo Visual Studio Environment set to !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH!
140 if "!VS_VERSION!" == "10" (
141 if "!ARCH!" == "amd64" (
142 set CMAKE_GENERATOR="Visual Studio 10 Win64"
144 set CMAKE_GENERATOR="Visual Studio 10"
146 ) else if "!VS_VERSION!" == "11" (
147 if "!ARCH!" == "amd64" (
148 set CMAKE_GENERATOR="Visual Studio 11 Win64"
149 ) else if "!ARCH!" == "arm" (
150 set CMAKE_GENERATOR="Visual Studio 11 ARM"
151 set CMAKE_GENERATOR_HOST="Visual Studio 11"
153 set CMAKE_GENERATOR="Visual Studio 11"
155 ) else if "!VS_VERSION!" == "12" (
156 if "!ARCH!" == "amd64" (
157 set CMAKE_GENERATOR="Visual Studio 12 Win64"
158 ) else if "!ARCH!" == "arm" (
159 set CMAKE_GENERATOR="Visual Studio 12 ARM"
160 set CMAKE_GENERATOR_HOST="Visual Studio 12"
162 set CMAKE_GENERATOR="Visual Studio 12"
164 ) else if "!VS_VERSION!" == "14" (
165 if "!ARCH!" == "amd64" (
166 set CMAKE_GENERATOR="Visual Studio 14 Win64"
167 ) else if "!ARCH!" == "arm" (
168 set CMAKE_GENERATOR="Visual Studio 14 ARM"
169 set CMAKE_GENERATOR_HOST="Visual Studio 14"
171 set CMAKE_GENERATOR="Visual Studio 14"
173 ) else if "!VS_VERSION!" == "15" (
174 if "!ARCH!" == "amd64" (
175 set CMAKE_GENERATOR="Visual Studio 15 Win64"
176 ) else if "!ARCH!" == "arm" (
177 set CMAKE_GENERATOR="Visual Studio 15 ARM"
178 set CMAKE_GENERATOR_HOST="Visual Studio 15"
180 set CMAKE_GENERATOR="Visual Studio 15"
183 ) else if /I "%1" == "RTC" (
184 echo Runtime checks enabled
185 set VS_RUNTIME_CHECKS=1
186 ) else if /I "%1" NEQ "" (
187 echo %1| find /I "-D" > NUL
188 if %ERRORLEVEL% == 0 (
189 REM User is passing a switch to CMake
190 REM Ignore it, and ignore the next parameter that follows
193 echo. && echo Warning: Unrecognized switch "%1" && echo.
200 REM Go to next parameter
205 REM Inform the user about the default build
206 if "!CMAKE_GENERATOR!" == "Ninja" (
207 echo This script defaults to Ninja. Type "configure help" for alternative options.
210 REM Create directories
211 set REACTOS_OUTPUT_PATH=output-%BUILD_ENVIRONMENT%-%ARCH%
213 if "%VS_SOLUTION%" == "1" (
214 set REACTOS_OUTPUT_PATH=%REACTOS_OUTPUT_PATH%-sln
217 if "%REACTOS_SOURCE_DIR%" == "%CD%\" (
218 set CD_SAME_AS_SOURCE=1
219 echo Creating directories in %REACTOS_OUTPUT_PATH%
221 if not exist %REACTOS_OUTPUT_PATH% (
222 mkdir %REACTOS_OUTPUT_PATH%
224 cd %REACTOS_OUTPUT_PATH%
227 if "%VS_SOLUTION%" == "1" (
229 if exist build.ninja (
230 echo. && echo Error: This directory has already been configured for ninja.
231 echo An output folder configured for ninja can't be reconfigured for VSSolution.
232 echo Use an empty folder or delete the contents of this folder, then try again.
235 ) else if exist REACTOS.sln (
236 echo. && echo Error: This directory has already been configured for Visual Studio.
237 echo An output folder configured for VSSolution can't be reconfigured for ninja.
238 echo Use an empty folder or delete the contents of this folder, then try again. && echo.
242 if "%NEW_STYLE_BUILD%"=="0" (
244 if not exist host-tools (
248 if not exist reactos (
252 echo Preparing host tools...
254 if EXIST CMakeCache.txt (
255 del CMakeCache.txt /q
258 set REACTOS_BUILD_TOOLS_DIR=!CD!
260 REM Use x86 for ARM host tools
261 if "%ARCH%" == "arm" (
262 REM Launch new script instance for x86 host tools configuration
263 start "Preparing host tools for ARM cross build..." /I /B /WAIT %~dp0configure.cmd arm_hosttools "%VSINSTALLDIR%VC\vcvarsall.bat" %CMAKE_GENERATOR_HOST%
265 cmake -G %CMAKE_GENERATOR% -DARCH:STRING=%ARCH% "%REACTOS_SOURCE_DIR%"
272 echo Preparing reactos...
274 if "%NEW_STYLE_BUILD%"=="0" (
278 if EXIST CMakeCache.txt (
279 del CMakeCache.txt /q
280 del host-tools\CMakeCache.txt /q
283 if "%NEW_STYLE_BUILD%"=="0" (
284 set BUILD_TOOLS_FLAG=-DREACTOS_BUILD_TOOLS_DIR:PATH="%REACTOS_BUILD_TOOLS_DIR%"
287 if "%BUILD_ENVIRONMENT%" == "MinGW" (
288 cmake -G %CMAKE_GENERATOR% -DENABLE_CCACHE:BOOL=0 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=%MINGW_TOOCHAIN_FILE% -DARCH:STRING=%ARCH% %BUILD_TOOLS_FLAG% %* "%REACTOS_SOURCE_DIR%"
289 ) else if %USE_CLANG_CL% == 1 (
290 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%"
292 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%"
295 if "%NEW_STYLE_BUILD%"=="0" (
299 if %ERRORLEVEL% NEQ 0 (
303 if "%CD_SAME_AS_SOURCE%" == "1" (
304 set ENDV= from %REACTOS_OUTPUT_PATH%
307 if "%VS_SOLUTION%" == "1" (
308 set ENDV= You can now use msbuild or open REACTOS.sln%ENDV%.
310 set ENDV= Execute appropriate build commands ^(ex: ninja, make, nmake, etc...^)%ENDV%
313 echo. && echo Configure script complete^^!%ENDV%
318 echo Unable to find cmake, if it is installed, check your PATH variable.