xref: /reactos/configure.cmd (revision 09c06a2f)
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    if not defined VS_VERSION (
64        echo Error: Visual Studio version too old or version detection failed.
65        endlocal
66        exit /b
67    )
68    set BUILD_ENVIRONMENT=VS
69    set VS_SOLUTION=0
70    set VS_RUNTIME_CHECKS=0
71    echo Detected Visual Studio Environment !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH!
72) else (
73    echo Error: Unable to detect build environment. Configure script failure.
74    endlocal
75    exit /b
76)
77
78REM Checkpoint
79if not defined ARCH (
80    echo Unknown build architecture
81    endlocal
82    exit /b
83)
84
85set NEW_STYLE_BUILD=1
86set USE_CLANG_CL=0
87
88REM Parse command line parameters
89:repeat
90    if /I "%1%" == "-DNEW_STYLE_BUILD" (
91        set NEW_STYLE_BUILD=%2
92    ) else 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 (
100            goto continue
101        )
102    ) else (
103        if /I "%1" == "CodeBlocks" (
104            set CMAKE_GENERATOR="CodeBlocks - NMake Makefiles"
105        ) else if /I "%1" == "Eclipse" (
106            set CMAKE_GENERATOR="Eclipse CDT4 - NMake Makefiles"
107        ) else if /I "%1" == "Makefiles" (
108            set CMAKE_GENERATOR="NMake Makefiles"
109        ) else if /I "%1" == "clang" (
110            set USE_CLANG_CL=1
111        ) else if /I "%1" == "VSSolution" (
112            set VS_SOLUTION=1
113            REM explicitly set VS version for project generator
114            if /I "%2" == "-VS_VER" (
115                set VS_VERSION=%3
116                echo Visual Studio Environment set to !BUILD_ENVIRONMENT!!VS_VERSION!-!ARCH!
117            )
118            if "!VS_VERSION!" == "9" (
119                if "!ARCH!" == "amd64" (
120                    set CMAKE_GENERATOR="Visual Studio 9 2008 Win64"
121                ) else (
122                    set CMAKE_GENERATOR="Visual Studio 9 2008"
123                )
124            ) else if "!VS_VERSION!" == "10" (
125                if "!ARCH!" == "amd64" (
126                    set CMAKE_GENERATOR="Visual Studio 10 Win64"
127                ) else (
128                    set CMAKE_GENERATOR="Visual Studio 10"
129                )
130            ) else if "!VS_VERSION!" == "11" (
131                if "!ARCH!" == "amd64" (
132                    set CMAKE_GENERATOR="Visual Studio 11 Win64"
133                ) else if "!ARCH!" == "arm" (
134                    set CMAKE_GENERATOR="Visual Studio 11 ARM"
135                    set CMAKE_GENERATOR_HOST="Visual Studio 11"
136                ) else (
137                    set CMAKE_GENERATOR="Visual Studio 11"
138                )
139            ) else if "!VS_VERSION!" == "12" (
140                if "!ARCH!" == "amd64" (
141                    set CMAKE_GENERATOR="Visual Studio 12 Win64"
142                ) else if "!ARCH!" == "arm" (
143                    set CMAKE_GENERATOR="Visual Studio 12 ARM"
144                    set CMAKE_GENERATOR_HOST="Visual Studio 12"
145                ) else (
146                    set CMAKE_GENERATOR="Visual Studio 12"
147                )
148            ) else if "!VS_VERSION!" == "14" (
149                if "!ARCH!" == "amd64" (
150                    set CMAKE_GENERATOR="Visual Studio 14 Win64"
151                ) else if "!ARCH!" == "arm" (
152                    set CMAKE_GENERATOR="Visual Studio 14 ARM"
153                    set CMAKE_GENERATOR_HOST="Visual Studio 14"
154                ) else (
155                    set CMAKE_GENERATOR="Visual Studio 14"
156                )
157            ) else if "!VS_VERSION!" == "15" (
158                if "!ARCH!" == "amd64" (
159                    set CMAKE_GENERATOR="Visual Studio 15 Win64"
160                ) else if "!ARCH!" == "arm" (
161                    set CMAKE_GENERATOR="Visual Studio 15 ARM"
162                    set CMAKE_GENERATOR_HOST="Visual Studio 15"
163                ) else (
164                    set CMAKE_GENERATOR="Visual Studio 15"
165                )
166            )
167        ) else if /I "%1" == "RTC" (
168            echo Runtime checks enabled
169            set VS_RUNTIME_CHECKS=1
170        ) else (
171            goto continue
172        )
173    )
174
175    REM Go to next parameter
176    SHIFT
177    goto repeat
178:continue
179
180REM Inform the user about the default build
181if "!CMAKE_GENERATOR!" == "Ninja" (
182    echo This script defaults to Ninja. Type "configure help" for alternative options.
183)
184
185REM Create directories
186set REACTOS_OUTPUT_PATH=output-%BUILD_ENVIRONMENT%-%ARCH%
187if "%REACTOS_SOURCE_DIR%" == "%CD%\" (
188    echo Creating directories in %REACTOS_OUTPUT_PATH%
189
190    if not exist %REACTOS_OUTPUT_PATH% (
191        mkdir %REACTOS_OUTPUT_PATH%
192    )
193    cd %REACTOS_OUTPUT_PATH%
194)
195
196if "%NEW_STYLE_BUILD%"=="0" (
197
198    if not exist host-tools (
199        mkdir host-tools
200    )
201
202    if not exist reactos (
203        mkdir reactos
204    )
205
206    echo Preparing host tools...
207    cd host-tools
208    if EXIST CMakeCache.txt (
209        del CMakeCache.txt /q
210    )
211
212    set REACTOS_BUILD_TOOLS_DIR=!CD!
213
214    REM Use x86 for ARM host tools
215    if "%ARCH%" == "arm" (
216        REM Launch new script instance for x86 host tools configuration
217        start "Preparing host tools for ARM cross build..." /I /B /WAIT %~dp0configure.cmd arm_hosttools "%VSINSTALLDIR%VC\vcvarsall.bat" %CMAKE_GENERATOR_HOST%
218    ) else (
219        cmake -G %CMAKE_GENERATOR% -DARCH:STRING=%ARCH% "%REACTOS_SOURCE_DIR%"
220    )
221
222    cd..
223
224)
225
226echo Preparing reactos...
227
228if "%NEW_STYLE_BUILD%"=="0" (
229    cd reactos
230)
231
232if EXIST CMakeCache.txt (
233    del CMakeCache.txt /q
234    del host-tools\CMakeCache.txt /q
235)
236
237if "%NEW_STYLE_BUILD%"=="0" (
238    set BUILD_TOOLS_FLAG=-DREACTOS_BUILD_TOOLS_DIR:PATH="%REACTOS_BUILD_TOOLS_DIR%"
239)
240
241if "%BUILD_ENVIRONMENT%" == "MinGW" (
242    cmake -G %CMAKE_GENERATOR% -DENABLE_CCACHE:BOOL=0 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=%MINGW_TOOCHAIN_FILE% -DARCH:STRING=%ARCH% %BUILD_TOOLS_FLAG% %* "%REACTOS_SOURCE_DIR%"
243) else if %USE_CLANG_CL% == 1 (
244        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%"
245) else (
246    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%"
247)
248
249if "%NEW_STYLE_BUILD%"=="0" (
250    cd..
251)
252
253echo Configure script complete^^! Execute appropriate build commands (ex: ninja, make, nmake, etc...).
254endlocal
255exit /b
256
257:cmake_notfound
258echo Unable to find cmake, if it is installed, check your PATH variable.
259endlocal
260exit /b
261