grep/dfa.c: Workaround for Visual C++ 2022 (amd64) optimizer bug. (same as sed)
[kbuild-mirror.git] / kBuild / envwin.cmd
blobe04dec5d6f97510e0859e61d317a759fa7ad26b2
1 @echo off
2 REM $Id$
3 REM REM @file
4 REM Environment setup script.
5 REM
7 REM
8 REM Copyright (c) 2005-2024 knut st. osmundsen <bird-kBuild-spamx@anduin.net>
9 REM
10 REM This file is part of kBuild.
11 REM
12 REM kBuild is free software; you can redistribute it and/or modify
13 REM it under the terms of the GNU General Public License as published by
14 REM the Free Software Foundation; either version 2 of the License, or
15 REM (at your option) any later version.
16 REM
17 REM kBuild is distributed in the hope that it will be useful,
18 REM but WITHOUT ANY WARRANTY; without even the implied warranty of
19 REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 REM GNU General Public License for more details.
21 REM
22 REM You should have received a copy of the GNU General Public License
23 REM along with kBuild; if not, write to the Free Software
24 REM Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 REM
27 REM
28 REM Globals
29 REM
30 set _KBUILD_CURDIR=%CD%
31 for /f "tokens=*" %%d in ('cd') do set _KBUILD_CURDIR=%%d
33 set _KBUILD_PATH=%KBUILD_PATH%
34 set _KBUILD_BIN_PATH=%KBUILD_BIN_PATH%
35 set _KBUILD_TYPE=%KBUILD_TYPE%
36 set _KBUILD_TARGET=%KBUILD_TARGET%
37 set _KBUILD_TARGET_ARCH=%KBUILD_TARGET_ARCH%
38 set _KBUILD_TARGET_CPU=%KBUILD_TARGET_CPU%
39 set _KBUILD_HOST=%KBUILD_HOST%
40 set _KBUILD_HOST_ARCH=%KBUILD_HOST_ARCH%
41 set _KBUILD_HOST_CPU=%KBUILD_HOST_CPU%
43 set _KBUILD_OVERRIDE_TYPE=0
44 set _KBUILD_OVERRIDE_TARGET=0
45 set _KBUILD_OVERRIDE_TARGET_ARCH=0
47 REM
48 REM Parse the arguments.
49 REM
50 REM Note: The 0 argument must be saved as it is also shifted.
51 REM
52 set _KBUILD_SELF=%0
53 set _KBUILD_OPT_FULL=0
54 set _KBUILD_OPT_LEGACY=0
55 set _KBUILD_OPT_VAR=
56 set _KBUILD_OPT_VALUE_ONLY=0
57 set _KBUILD_SHOW_VAR_PREFIX=
58 set _KBUILD_OPT_DBG=1
59 set _KBUILD_OPT_OVERRIDE_ALL=0
61 :argument_loop
62 if ".%1" == ".-h" goto do_help
63 if ".%1" == "./h" goto do_help
64 if ".%1" == "./H" goto do_help
65 if ".%1" == ".-h" goto do_help
66 if ".%1" == ".-help" goto do_help
67 if ".%1" == ".--help" goto do_help
69 if ".%1" == ".--win" goto want_win
70 if ".%1" == ".-win" goto want_win
71 if ".%1" == ".--win32" goto want_win32_bit
72 if ".%1" == ".-win32" goto want_win32_bit
73 if ".%1" == ".-win64" goto want_win64_bit
74 if ".%1" == ".--win64" goto want_win64_bit
75 if ".%1" == ".--nt" goto want_nt
76 if ".%1" == ".-nt" goto want_nt
77 if ".%1" == ".--nt32" goto want_nt32_bit
78 if ".%1" == ".-nt32" goto want_nt32_bit
79 if ".%1" == ".--nt64" goto want_nt64_bit
80 if ".%1" == ".-nt64" goto want_nt64_bit
82 if ".%1" == ".--release" goto want_release
83 if ".%1" == ".--profile" goto want_profile
84 if ".%1" == ".--debug" goto want_debug
86 if ".%1" == ".--full" goto opt_full
87 if ".%1" == ".--normal" goto opt_normal
88 if ".%1" == ".--legacy" goto opt_legacy
89 if ".%1" == ".--no-legacy" goto opt_no_legacy
90 if ".%1" == ".--debug-script" goto opt_debug_script
91 if ".%1" == ".--no-debug-script" goto opt_no_debug_script
92 if ".%1" == ".--var" goto opt_var
93 if ".%1" == ".--value-only" goto opt_value_only
94 if ".%1" == ".--name-and-value" goto opt_name_and_value
95 if ".%1" == ".--set" goto opt_set
96 if ".%1" == ".--no-set" goto opt_no_set
98 goto done_arguments
100 :want_win
101 shift
102 set _KBUILD_TARGET=win
103 set _KBUILD_OVERRIDE_TARGET=1
104 goto argument_loop
106 :want_win32_bit
107 shift
108 set _KBUILD_TARGET=win
109 set _KBUILD_TARGET_ARCH=x86
110 set _KBUILD_OVERRIDE_TARGET=1
111 set _KBUILD_OVERRIDE_TARGET_ARCH=1
112 goto argument_loop
114 :want_win64_bit
115 shift
116 set _KBUILD_TARGET=win
117 set _KBUILD_TARGET_ARCH=amd64
118 set _KBUILD_OVERRIDE_TARGET=1
119 set _KBUILD_OVERRIDE_TARGET_ARCH=1
120 goto argument_loop
122 :want_nt
123 shift
124 set _KBUILD_TARGET=nt
125 set _KBUILD_OVERRIDE_TARGET=1
126 goto argument_loop
128 :want_nt32_bit
129 shift
130 set _KBUILD_TARGET=nt
131 set _KBUILD_TARGET_ARCH=x86
132 set _KBUILD_OVERRIDE_TARGET=1
133 set _KBUILD_OVERRIDE_TARGET_ARCH=1
134 goto argument_loop
136 :want_nt64_bit
137 shift
138 set _KBUILD_TARGET=nt
139 set _KBUILD_TARGET_ARCH=amd64
140 set _KBUILD_OVERRIDE_TARGET=1
141 set _KBUILD_OVERRIDE_TARGET_ARCH=1
142 goto argument_loop
144 :want_release
145 shift
146 set _KBUILD_TYPE=release
147 set _KBUILD_OVERRIDE_TYPE=1
148 goto argument_loop
150 :want_profile
151 shift
152 set _KBUILD_TYPE=profile
153 set _KBUILD_OVERRIDE_TYPE=1
154 goto argument_loop
156 :want_debug
157 shift
158 set _KBUILD_TYPE=debug
159 set _KBUILD_OVERRIDE_TYPE=1
160 goto argument_loop
162 :opt_full
163 shift
164 set _KBUILD_OPT_FULL=1
165 goto argument_loop
167 :opt_normal
168 shift
169 set _KBUILD_OPT_FULL=0
170 goto argument_loop
172 :opt_legacy
173 shift
174 set _KBUILD_OPT_LEGACY=1
175 goto argument_loop
177 :opt_no_legacy
178 shift
179 set _KBUILD_OPT_LEGACY=0
180 goto argument_loop
182 :opt_debug_script
183 shift
184 set _KBUILD_OPT_DBG=1
185 goto argument_loop
187 :opt_no_debug_script
188 shift
189 set _KBUILD_OPT_DBG=0
190 goto argument_loop
192 :opt_var
193 shift
194 if ".%1" == "." echo syntax error: --var is missing it's variable name.
195 if ".%1" == "." goto failure
196 set _KBUILD_OPT_VAR=%_KBUILD_OPT_VAR% %1
197 shift
198 goto argument_loop
200 :opt_value_only
201 shift
202 set _KBUILD_OPT_VALUE_ONLY=1
203 goto argument_loop
205 :opt_name_and_value
206 shift
207 set _KBUILD_OPT_VALUE_ONLY=0
208 goto argument_loop
210 :opt_set
211 shift
212 set _KBUILD_SHOW_VAR_PREFIX=SET %_KBUILD_NON_EXISTING_VAR%
213 goto argument_loop
215 :opt_no_set
216 shift
217 set _KBUILD_SHOW_VAR_PREFIX=
218 goto argument_loop
221 REM #
222 REM # Syntax
223 REM #
224 :do_help
225 echo kBuild environment setup script for Windows NT.
226 echo Syntax: envwin.cmd [options] [command to be executed]
227 echo or: envwin.cmd [options] --var varname
228 echo .
229 echo Options:
230 echo --win
231 echo Force windows target and host platform.
232 echo --win32
233 echo Force x86 32-bit windows target platform.
234 echo --win64
235 echo Force AMD64 64-bit windows target platform.
236 echo --nt
237 echo Force NT target and host platform.
238 echo --nt32
239 echo Force x86 32-bit NT target platform.
240 echo --nt64
241 echo Force AMD64 64-bit NT target platform.
242 echo --debug, --release, --profile
243 echo Alternative way of specifying KBUILD_TYPE.
244 echo --full, --normal
245 echo Controls the variable set. Default: --normal
246 echo --legacy, --no-legacy
247 echo Include legacy variables in result. Default: --legacy
248 echo --value-only, --name-and-value
249 echo Controls what the result of a --var query. Default: --name-and-value
250 echo --set, --no-set
251 echo Whether to prefix the variable output with 'SET' or not.
252 echo Default: --no-set
254 goto end
256 :done_arguments
259 REM Convert legacy variable names.
261 if ".%_KBUILD_OPT_OVERRIDE_ALL%" == ".1" goto legacy_convertion_done
263 set _KBUILD_VARS=KBUILD_HOST (%_KBUILD_HOST%) and BUILD_PLATFORM (%BUILD_PLATFORM%)
264 if not ".%BUILD_PLATFORM%" == "." if not ".%_KBUILD_HOST%" == "." if ".%_KBUILD_HOST%" == ".%BUILD_PLATFORM%" goto legacy_mismatch
265 if not ".%BUILD_PLATFORM%" == "." set _KBUILD_HOST=%BUILD_PLATFORM%
267 set _KBUILD_VARS=KBUILD_HOST_ARCH (%_KBUILD_HOST_ARCH%) and BUILD_PLATFORM_ARCH (%BUILD_PLATFORM_ARCH%)
268 if not ".%BUILD_PLATFORM_ARCH%" == "." if not ".%_KBUILD_HOST_ARCH%" == "." if ".%_KBUILD_HOST_ARCH%" == ".%BUILD_PLATFORM_ARCH%" goto legacy_mismatch
269 if not ".%BUILD_PLATFORM_ARCH%" == "." set _KBUILD_HOST_ARCH=%BUILD_PLATFORM_ARCH%
271 set _KBUILD_VARS=KBUILD_HOST_CPU (%_KBUILD_HOST_CPU%) and BUILD_PLATFORM_CPU (%BUILD_PLATFORM_CPU%)
272 if not ".%BUILD_PLATFORM_CPU%" == "." if not ".%_KBUILD_HOST_CPU%" == "." if ".%_KBUILD_HOST_CPU%" == ".%BUILD_PLATFORM_CPU%" goto legacy_mismatch
273 if not ".%BUILD_PLATFORM_CPU%" == "." set _KBUILD_HOST_CPU=%BUILD_PLATFORM_CPU%
275 if ".%_KBUILD_OVERRIDE_TARGET%" == ".1" goto legacy_skip_target
276 set _KBUILD_VARS=KBUILD_TARGET (%_KBUILD_TARGET%) and BUILD_TARGET (%BUILD_TARGET%)
277 if not ".%BUILD_TARGET%" == "." if not ".%_KBUILD_TARGET%" == "." if ".%_KBUILD_TARGET%" == ".%BUILD_TARGET%" goto legacy_mismatch
278 if not ".%BUILD_TARGET%" == "." set _KBUILD_TARGET=%BUILD_TARGET%
279 :legacy_skip_target
281 if ".%_KBUILD_OVERRIDE_TARGET%" == ".1" goto legacy_skip_target_arch
282 set _KBUILD_VARS=KBUILD_TARGET_ARCH (%_KBUILD_TARGET_ARCH%) and BUILD_TARGET_ARCH (%BUILD_TARGET_ARCH%)
283 if not ".%BUILD_TARGET_ARCH%" == "." if not ".%_KBUILD_TARGET_ARCH%" == "." if ".%_KBUILD_TARGET_ARCH%" == ".%BUILD_TARGET_ARCH%" goto legacy_mismatch
284 if not ".%BUILD_TARGET_ARCH%" == "." set _KBUILD_TARGET_ARCH=%BUILD_TARGET_ARCH%
285 :legacy_skip_target_arch
287 if ".%_KBUILD_OVERRIDE_TARGET%" == ".1" goto legacy_skip_target_cpu
288 set _KBUILD_VARS=KBUILD_TARGET_CPU (%_KBUILD_TARGET_CPU%) and BUILD_TARGET_CPU (%BUILD_TARGET_CPU%)
289 if not ".%BUILD_TARGET_CPU%" == "." if not ".%_KBUILD_TARGET_CPU%" == "." if ".%_KBUILD_TARGET_CPU%" == ".%BUILD_TARGET_CPU%" goto legacy_mismatch
290 if not ".%BUILD_TARGET_CPU%" == "." set _KBUILD_TARGET_CPU=%BUILD_TARGET_CPU%
291 :legacy_skip_target_cpu
293 if ".%_KBUILD_OVERRIDE_TARGET%" == ".1" goto legacy_skip_type
294 set _KBUILD_VARS=KBUILD_TYPE (%_KBUILD_TYPE%) and BUILD_TYPE (%BUILD_TYPE%)
295 if not ".%BUILD_TYPE%" == "." if not ".%_KBUILD_TYPE%" == "." if ".%_KBUILD_TYPE%" == ".%BUILD_TYPE%" goto legacy_mismatch
296 if not ".%BUILD_TYPE%" == "." set _KBUILD_TYPE=%BUILD_TYPE%
297 :legacy_skip_type
299 set _KBUILD_VARS=KBUILD_PATH (%_KBUILD_PATH%) and PATH_KBUILD (%PATH_KBUILD%)
300 if not ".%PATH_KBUILD%" == "." if not ".%_KBUILD_PATH%" == "." if ".%_KBUILD_PATH%" == ".%PATH_KBUILD%" goto legacy_mismatch
301 if not ".%PATH_KBUILD%" == "." set _KBUILD_PATH=%PATH_KBUILD%
302 goto legacy_convertion_done
304 :legacy_mismatch
305 echo error: %_KBUILD_VARS% disagree.
306 goto failed
308 :legacy_convertion_done
312 REM Check for illegal target/platforms.
314 :target_and_platform
315 if "%_KBUILD_TARGET" == "win32" goto illegal_target
316 if "%_KBUILD_TARGET" == "win64" goto illegal_target
317 if "%_KBUILD_HOST" == "win32" goto illegal_host
318 if "%_KBUILD_HOST" == "win64" goto illegal_host
319 goto target_and_platform_ok
321 :illegal_target
322 echo error: KBUILD_TARGET=%KBUILD_TARGET% is no longer valid.
323 echo Only 'win' and 'nt' are permitted for targeting microsoft windows.
324 goto failed
326 :illegal_host
327 echo error: KBUILD_HOST=%KBUILD_HOST is no longer valid.
328 echo Only 'win' and 'nt' are permitted for building on microsoft windows.
329 goto failed
331 :target_and_platform_ok
334 REM Find kBuild.
336 REM We'll try determin the location of this script first and use that
337 REM as a starting point for guessing the kBuild directory.
340 REM Check if set via KBUILD_PATH.
341 if not ".%_KBUILD_PATH%" == "." if exist %_KBUILD_PATH%\footer.kmk goto found_kbuild
343 REM Determin a correct self - by %0
344 if exist "%_KBUILD_SELF%" goto found_self
345 set _KBUILD_SELF=%_KBUILD_SELF%.cmd
346 if exist "%_KBUILD_SELF%" goto found_self
348 REM Determin a correct self - by the PATH
349 REM This is very verbose because nested for loops didn't work out.
350 for /f "tokens=1 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
351 if exist "%_KBUILD_SELF%" goto found_self
352 for /f "tokens=2 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
353 if exist "%_KBUILD_SELF%" goto found_self
354 for /f "tokens=3 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
355 if exist "%_KBUILD_SELF%" goto found_self
356 for /f "tokens=4 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
357 if exist "%_KBUILD_SELF%" goto found_self
358 for /f "tokens=5 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
359 if exist "%_KBUILD_SELF%" goto found_self
360 for /f "tokens=6 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
361 if exist "%_KBUILD_SELF%" goto found_self
362 for /f "tokens=7 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
363 if exist "%_KBUILD_SELF%" goto found_self
364 for /f "tokens=8 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
365 if exist "%_KBUILD_SELF%" goto found_self
366 for /f "tokens=9 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
367 if exist "%_KBUILD_SELF%" goto found_self
368 for /f "tokens=10 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
369 if exist "%_KBUILD_SELF%" goto found_self
370 for /f "tokens=11 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
371 if exist "%_KBUILD_SELF%" goto found_self
372 for /f "tokens=12 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
373 if exist "%_KBUILD_SELF%" goto found_self
374 for /f "tokens=13 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
375 if exist "%_KBUILD_SELF%" goto found_self
376 for /f "tokens=14 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
377 if exist "%_KBUILD_SELF%" goto found_self
378 for /f "tokens=15 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
379 if exist "%_KBUILD_SELF%" goto found_self
380 for /f "tokens=16 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
381 if exist "%_KBUILD_SELF%" goto found_self
382 for /f "tokens=17 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
383 if exist "%_KBUILD_SELF%" goto found_self
384 for /f "tokens=18 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
385 if exist "%_KBUILD_SELF%" goto found_self
386 for /f "tokens=19 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
387 if exist "%_KBUILD_SELF%" goto found_self
388 for /f "tokens=20 delims=;" %%d in ("%PATH%") do set _KBUILD_SELF=%%d\envwin.cmd
389 if exist "%_KBUILD_SELF%" goto found_self
390 goto try_by_pwd
392 :found_self
393 cd "%_KBUILD_SELF%\.."
394 for /f "tokens=*" %%d in ('cd') do set _KBUILD_PATH=%%d
395 cd "%_KBUILD_CURDIR%"
396 if exist "%_KBUILD_PATH%\footer.kmk" goto found_kbuild
398 REM Try relative to the current directory.
399 :try_by_pwd
400 if exist "%_KBUILD_PATH%\footer.kmk" goto found_kbuild
401 set _KBUILD_PATH=%_KBUILD_CURDIR%
402 if exist "%_KBUILD_PATH%\footer.kmk" goto found_kbuild
403 set _KBUILD_PATH=%_KBUILD_CURDIR%\kBuild
404 if exist "%_KBUILD_PATH%\footer.kmk" goto found_kbuild
405 set _KBUILD_PATH=%_KBUILD_CURDIR%\..\kBuild
406 if exist "%_KBUILD_PATH%\footer.kmk" goto found_kbuild
407 set _KBUILD_PATH=%_KBUILD_CURDIR%\..\..\kBuild
408 if exist "%_KBUILD_PATH%\footer.kmk" goto found_kbuild
409 set _KBUILD_PATH=%_KBUILD_CURDIR%\..\..\..\kBuild
410 if exist "%_KBUILD_PATH%\footer.kmk" goto found_kbuild
411 set _KBUILD_PATH=%_KBUILD_CURDIR%\..\..\..\..\kBuild
412 if exist "%_KBUILD_PATH%\footer.kmk" goto found_kbuild
413 echo kBuild: Can't find the kBuild directory!
414 set CURDIR=
415 goto failed
417 :found_kbuild
418 cd "%_KBUILD_PATH%"
419 for /f "tokens=*" %%d in ('cd') do set _KBUILD_PATH=%%d
420 cd "%_KBUILD_CURDIR%"
421 if ".%_KBUILD_OPT_DBG%" == ".1" echo dbg: _KBUILD_PATH=%_KBUILD_PATH%
425 REM Type - release is the default.
427 if not ".%_KBUILD_TYPE%" == "." goto have_type
428 set _KBUILD_TYPE=release
429 :have_type
430 if ".%_KBUILD_OPT_DBG%" == ".1" echo dbg: _KBUILD_TYPE=%_KBUILD_TYPE%
434 REM Host platform - windows
436 if not ".%_KBUILD_HOST%" == "." goto have_host
437 set _KBUILD_HOST=win
438 if ".%_KBUILD_OPT_DBG%" == ".1" echo dbg: _KBUILD_HOST=%_KBUILD_HOST%
439 :have_host
441 if not ".%_KBUILD_HOST_ARCH%" == "." goto have_host_arch
442 REM try guess from _KBUILD_HOST_CPU
443 if ".%KBUILD_HOST_CPU%" == ".i386" set _KBUILD_HOST_ARCH=x86
444 if ".%KBUILD_HOST_CPU%" == ".i486" set _KBUILD_HOST_ARCH=x86
445 if ".%KBUILD_HOST_CPU%" == ".i586" set _KBUILD_HOST_ARCH=x86
446 if ".%KBUILD_HOST_CPU%" == ".i686" set _KBUILD_HOST_ARCH=x86
447 if ".%KBUILD_HOST_CPU%" == ".i786" set _KBUILD_HOST_ARCH=x86
448 if ".%KBUILD_HOST_CPU%" == ".i886" set _KBUILD_HOST_ARCH=x86
449 if ".%KBUILD_HOST_CPU%" == ".i986" set _KBUILD_HOST_ARCH=x86
450 if ".%KBUILD_HOST_CPU%" == ".k8" set _KBUILD_HOST_ARCH=amd64
451 if ".%KBUILD_HOST_CPU%" == ".k9" set _KBUILD_HOST_ARCH=amd64
452 if ".%KBUILD_HOST_CPU%" == ".k10" set _KBUILD_HOST_ARCH=amd64
453 if not ".%_KBUILD_HOST_ARCH%" == "." goto have_host_arch
454 REM try guess from PROCESSOR_ARCHITECTURE, PROCESSOR_ARCHITEW6432, and
455 REM PROCESSOR_IDENTIFIER (latter for arm running non-native shells (tcc.exe)).
456 set _KBUILD_TMP=%PROCESSOR_ARCHITECTURE%
457 if not ".%PROCESSOR_ARCHITEW6432%" == "." set _KBUILD_TMP=%PROCESSOR_ARCHITEW6432%
458 if "%_KBUILD_TMP%" == "x86" set _KBUILD_HOST_ARCH=x86
459 if "%_KBUILD_TMP%" == "X86" set _KBUILD_HOST_ARCH=x86
460 if "%_KBUILD_TMP%" == "amd64" set _KBUILD_HOST_ARCH=amd64
461 if "%_KBUILD_TMP%" == "Amd64" set _KBUILD_HOST_ARCH=amd64
462 if "%_KBUILD_TMP%" == "AMD64" set _KBUILD_HOST_ARCH=amd64
463 if "%_KBUILD_TMP%" == "x64" set _KBUILD_HOST_ARCH=amd64
464 if "%_KBUILD_TMP%" == "X64" set _KBUILD_HOST_ARCH=amd64
465 if /i "%PROCESSOR_IDENTIFIER:~0,5%" == "ARMv8" set _KBUILD_HOST_ARCH=arm64
466 if /i "%PROCESSOR_IDENTIFIER:~0,5%" == "ARMv9" set _KBUILD_HOST_ARCH=arm64
467 if not ".%_KBUILD_HOST_ARCH%" == "." goto have_host_arch
468 echo error: Cannot figure KBUILD_HOST_ARCH!
469 goto failed
470 :have_host_arch
471 if ".%_KBUILD_OPT_DBG%" == ".1" echo dbg: _KBUILD_HOST_ARCH=%_KBUILD_HOST_ARCH%
473 if not ".%_KBUILD_HOST_CPU%" == "." goto have_host_cpu
474 set _KBUILD_HOST_CPU=blend
475 :have_host_cpu
476 if ".%_KBUILD_OPT_DBG%" == ".1" echo dbg: _KBUILD_HOST_CPU=%_KBUILD_HOST_CPU%
479 REM The target platform.
480 REM Defaults to the host when not specified.
482 if not ".%_KBUILD_TARGET%" == "." goto have_target
483 set _KBUILD_TARGET=%_KBUILD_HOST%
484 :have_target
485 if ".%_KBUILD_OPT_DBG%" == ".1" echo dbg: _KBUILD_TARGET=%_KBUILD_TARGET%
487 if not ".%_KBUILD_TARGET_ARCH%" == "." goto have_target_arch
488 set _KBUILD_TARGET_ARCH=%_KBUILD_HOST_ARCH%
489 :have_target_arch
490 if ".%_KBUILD_OPT_DBG%" == ".1" echo dbg: _KBUILD_TARGET_ARCH=%_KBUILD_TARGET_ARCH%
492 if not ".%_KBUILD_TARGET_CPU%" == "." goto have_target_cpu
493 if ".%_KBUILD_TARGET_ARCH%" == ".%_KBUILD_HOST_ARCH%" set _KBUILD_TARGET_CPU=%_KBUILD_HOST_CPU%
494 if not ".%_KBUILD_TARGET_CPU%" == "." goto have_target_cpu
495 set _KBUILD_TARGET_CPU=%_KBUILD_HOST_CPU%
496 :have_target_cpu
497 if ".%_KBUILD_OPT_DBG%" == ".1" echo dbg: _KBUILD_TARGET_CPU=%_KBUILD_TARGET_CPU%
500 REM Calc KBUILD_BIN_PATH and the new PATH value.
502 if not ".%_KBUILD_BIN_PATH%" == "." goto have_kbuild_bin_path
503 set _KBUILD_BIN_PATH=%_KBUILD_PATH%\bin\win.%_KBUILD_HOST_ARCH%
504 :have_kbuild_bin_path
505 if ".%_KBUILD_OPT_DBG%" == ".1" echo dbg: _KBUILD_BIN_PATH=%_KBUILD_BIN_PATH%
507 set _KBUILD_NEW_PATH=%_KBUILD_BIN_PATH%;%PATH%
508 if ".%_KBUILD_OPT_DBG%" == ".1" echo dbg: _KBUILD_NEW_PATH=%_KBUILD_NEW_PATH%
511 REM Sanity check.
513 if not exist "%_KBUILD_BIN_PATH%" goto missing_bin_path
514 if not exist "%_KBUILD_BIN_PATH%" goto done_chekcing_for_tools
515 set _KBUILD_TMP=kmk kDepPre kDepIDB kmk_append kmk_ash kmk_cat kmk_cp kmk_echo kmk_install kmk_ln kmk_mkdir kmk_mv kmk_rm kmk_rmdir kmk_sed
516 for %%i in ( %_KBUILD_TMP% ) do if not exist "%_KBUILD_BIN_PATH%\%%i.exe" echo warning: The %%i program doesn't exist for this platform. (%_KBUILD_BIN_PATH%\%%i.exe)"
517 goto done_chekcing_for_tools
519 :missing_bin_path
520 echo warning: The bin directory for this platform doesn't exist. (%_KBUILD_BIN_PATH%)
521 :done_chekcing_for_tools
524 REM The environment is in place, now take the requested action.
526 if ".%_KBUILD_OPT_VAR%" == "." goto exec_or_setup_env
527 goto show_variable
530 REM Show a set of variables.
532 REM Note: 4nt doesn't grok the setlocal delayed expansion option.
533 REM So, we'll have to identify which shell we're running.
535 :show_variable
536 for %%i in ( %_KBUILD_OPT_VAR% ) do if "%%i" == "all" goto show_all_variables
538 if not ".%_4VER%" == "." goto 4nt
539 setlocal ENABLEDELAYEDEXPANSION
540 if errorlevel 1 goto no_delay_expansion
542 for %%i in ( %_KBUILD_OPT_VAR% ) do (
543 set _KBUILD_VAR=%%i
544 set _KBUILD_TMP=
545 if "%%i" == "KBUILD_PATH" set _KBUILD_TMP=%_KBUILD_PATH%
546 if "%%i" == "KBUILD_BIN_PATH" set _KBUILD_TMP=%_KBUILD_BIN_PATH%
547 if "%%i" == "KBUILD_TYPE" set _KBUILD_TMP=%_KBUILD_TYPE%
548 if "%%i" == "KBUILD_HOST" set _KBUILD_TMP=%_KBUILD_HOST%
549 if "%%i" == "KBUILD_HOST_ARCH" set _KBUILD_TMP=%_KBUILD_HOST_ARCH%
550 if "%%i" == "KBUILD_HOST_CPU" set _KBUILD_TMP=%_KBUILD_HOST_CPU%
551 if "%%i" == "KBUILD_TARGET" set _KBUILD_TMP=%_KBUILD_TARGET%
552 if "%%i" == "KBUILD_TARGET_ARCH" set _KBUILD_TMP=%_KBUILD_TARGET_ARCH%
553 if "%%i" == "KBUILD_TARGET_CPU" set _KBUILD_TMP=%_KBUILD_TARGET_CPU%
554 if ".!_KBUILD_TMP!" == "." goto varible_not_found
555 if not ".%_KBUILD_OPT_VALUE_ONLY%" == ".1" echo %_KBUILD_SHOW_VAR_PREFIX%%%i=!_KBUILD_TMP!
556 if ".%_KBUILD_OPT_VALUE_ONLY%" == ".1" echo !_KBUILD_TMP!
559 endlocal
560 goto end
562 :no_delay_expansion
563 echo error: Unable to enable delayed expansion in the shell.
565 :4nt
566 for %%i in ( %_KBUILD_OPT_VAR% ) do (
567 set _KBUILD_VAR=%%i
568 set _KBUILD_TMP=
569 if "%%i" == "KBUILD_PATH" set _KBUILD_TMP=%_KBUILD_PATH%
570 if "%%i" == "KBUILD_BIN_PATH" set _KBUILD_TMP=%_KBUILD_BIN_PATH%
571 if "%%i" == "KBUILD_TYPE" set _KBUILD_TMP=%_KBUILD_TYPE%
572 if "%%i" == "KBUILD_HOST" set _KBUILD_TMP=%_KBUILD_HOST%
573 if "%%i" == "KBUILD_HOST_ARCH" set _KBUILD_TMP=%_KBUILD_HOST_ARCH%
574 if "%%i" == "KBUILD_HOST_CPU" set _KBUILD_TMP=%_KBUILD_HOST_CPU%
575 if "%%i" == "KBUILD_TARGET" set _KBUILD_TMP=%_KBUILD_TARGET%
576 if "%%i" == "KBUILD_TARGET_ARCH" set _KBUILD_TMP=%_KBUILD_TARGET_ARCH%
577 if "%%i" == "KBUILD_TARGET_CPU" set _KBUILD_TMP=%_KBUILD_TARGET_CPU%
578 if ".%_KBUILD_TMP%" == "." goto varible_not_found
579 if not ".%_KBUILD_OPT_VALUE_ONLY%" == ".1" echo %_KBUILD_SHOW_VAR_PREFIX%%i=%_KBUILD_TMP%
580 if ".%_KBUILD_OPT_VALUE_ONLY%" == ".1" echo %_KBUILD_TMP%
582 goto end
584 :varible_not_found
585 echo error: Unknown variable %_KBUILD_VAR% specified in --var request.
586 goto failed
588 :show_all_variables
589 echo %_KBUILD_SHOW_VAR_PREFIX%KBUILD_PATH=%_KBUILD_PATH%
590 echo %_KBUILD_SHOW_VAR_PREFIX%KBUILD_BIN_PATH=%_KBUILD_BIN_PATH%
591 echo %_KBUILD_SHOW_VAR_PREFIX%KBUILD_TYPE=%_KBUILD_TYPE%
592 echo %_KBUILD_SHOW_VAR_PREFIX%KBUILD_HOST=%_KBUILD_HOST%
593 echo %_KBUILD_SHOW_VAR_PREFIX%KBUILD_HOST_ARCH=%_KBUILD_HOST_ARCH%
594 echo %_KBUILD_SHOW_VAR_PREFIX%KBUILD_HOST_CPU=%_KBUILD_HOST_CPU%
595 echo %_KBUILD_SHOW_VAR_PREFIX%KBUILD_TARGET=%_KBUILD_TARGET%
596 echo %_KBUILD_SHOW_VAR_PREFIX%KBUILD_TARGET_ARCH=%_KBUILD_TARGET_ARCH%
597 echo %_KBUILD_SHOW_VAR_PREFIX%KBUILD_TARGET_CPU=%_KBUILD_TARGET_CPU%
598 goto end
601 REM Setup environment for the current shell or execute a command.
603 REM Note: We use setlocal if we're going to execute a command as we
604 REM don't want the environment of the invoking shell to be changed.
606 :exec_or_setup_env
607 if not ".%1" == "." setlocal
609 REM The PATH is always set.
610 set PATH=%_KBUILD_NEW_PATH%
612 REM Clear up anything that should be overridden.
613 if not "%_KBUILD_OPT_OVERRIDE_ALL%" == "1" goto skip_override_all
614 set KBUILD_TYPE=
615 set KBUILD_HOST=
616 set KBUILD_HOST_ARCH=
617 set KBUILD_HOST_CPU=
618 set KBUILD_TARGET=
619 set KBUILD_TARGET_ARCH=
620 set KBUILD_TARGET_CPU=
621 set KBUILD_PATH=
622 set KBUILD_BIN_PATH=
623 if not "%_KBUILD_OPT_LEGACY%" == "1" goto skip_override_all
624 set BUILD_TYPE=
625 set BUILD_PLATFORM=
626 set BUILD_PLATFORM_ARCH=
627 set BUILD_PLATFORM_CPU=
628 set BUILD_TARGET=
629 set BUILD_TARGET_ARCH=
630 set BUILD_TARGET_CPU=
631 set PATH_KBUILD=
632 set PATH_KBUILD_BIN=
633 :skip_override_all
635 REM Specific overrides, these implicitly deletes the legacy variable.
636 if "%_KBUILD_OVERRIDE_TARGET%" == "1" set KBUILD_TARGET=%_KBUILD_TARGET%
637 if "%_KBUILD_OVERRIDE_TARGET%" == "1" set BUILD_TARGET=
638 if "%_KBUILD_OVERRIDE_TARGET_ARCH%" == "1" set KBUILD_TARGET_ARCH=%_KBUILD_TARGET_ARCH%
639 if "%_KBUILD_OVERRIDE_TARGET_ARCH%" == "1" set BUILD_TARGET_ARCH=
640 if "%_KBUILD_OVERRIDE_TYPE%" == "1" set KBUILD_TYPE=%_KBUILD_TYPE%
641 if "%_KBUILD_OVERRIDE_TYPE%" == "1" set BUILD_TYPE=
643 if not "%_KBUILD_OPT_FULL%" == "1" goto env_setup_done
644 set KBUILD_PATH=%_KBUILD_PATH%
645 set KBUILD_BIN_PATH=%_KBUILD_BIN_PATH%
646 set KBUILD_TYPE=%_KBUILD_TYPE%
647 set KBUILD_HOST=%_KBUILD_HOST%
648 set KBUILD_HOST_ARCH=%_KBUILD_HOST_ARCH%
649 set KBUILD_HOST_CPU=%_KBUILD_HOST_CPU%
650 set KBUILD_TARGET=%_KBUILD_TARGET%
651 set KBUILD_TARGET_ARCH=%_KBUILD_TARGET_ARCH%
652 set KBUILD_TARGET_CPU=%_KBUILD_TARGET_CPU%
654 if not "%_KBUILD_OPT_LEGACY%" == "1" goto env_setup_done
655 set PATH_KBUILD=%_KBUILD_PATH%
656 set PATH_KBUILD_BIN=%_KBUILD_BIN_PATH%
657 set BUILD_TYPE=%_KBUILD_TYPE%
658 set BUILD_PLATFORM=%_KBUILD_HOST%
659 set BUILD_PLATFORM_ARCH=%_KBUILD_HOST_ARCH%
660 set BUILD_PLATFORM_CPU=%_KBUILD_HOST_CPU%
661 set BUILD_TARGET=%_KBUILD_TARGET%
662 set BUILD_TARGET_ARCH=%_KBUILD_TARGET_ARCH%
663 set BUILD_TARGET_CPU=%_KBUILD_TARGET_CPU%
665 :env_setup_done
666 if ".%1" == "." goto end
668 REM Execute the specified command
669 if ".%_KBUILD_OPT_DBG%" == ".1" echo dbg: Executing: %1 %2 %3 %4 %5 %6 %7 %8 %9
670 set _KBUILD_CLEAN_GOTO=exec_command & goto cleanup
671 :exec_command
672 SET _KBUILD_CLEAN_GOTO=
673 %1 %2 %3 %4 %5 %6 %7 %8 %9
674 endlocal
675 goto end_no_exit
680 REM All exit paths leads to 'end' or 'failed' depending on
681 REM which exit code is desire. This is required as we're manually
682 REM performing environment cleanup (setlocal/endlocal is crap).
684 :cleanup
685 set _KBUILD_CURDIR=
686 set _KBUILD_PATH=
687 set _KBUILD_BIN_PATH=
688 set _KBUILD_NEW_PATH=
689 set _KBUILD_TYPE=
690 set _KBUILD_TARGET=
691 set _KBUILD_TARGET_ARCH=
692 set _KBUILD_TARGET_CPU=
693 set _KBUILD_HOST=
694 set _KBUILD_HOST_ARCH=
695 set _KBUILD_HOST_CPU=
696 set _KBUILD_OPT_OVERRIDE_ALL=
697 set _KBUILD_OVERRIDE_TYPE=
698 set _KBUILD_OVERRIDE_TARGET=
699 set _KBUILD_OVERRIDE_TARGET_ARCH=
701 set _KBUILD_SELF=
702 set _KBUILD_OPT_FULL=
703 set _KBUILD_OPT_LEGACY=
704 set _KBUILD_OPT_VAR=
705 set _KBUILD_OPT_VALUE_ONLY=
706 set _KBUILD_SHOW_VAR_PREFIX=
707 set _KBUILD_OPT_DBG=
708 set _KBUILD_OPT_OVERRIDE_ALL=
710 set _KBUILD_TMP=
711 set _KBUILD_VAR=
712 set _KBUILD_VARS=
713 goto %_KBUILD_CLEAN_GOTO%
715 :failed
716 set _KBUILD_CLEAN_GOTO=failed_done & goto cleanup
717 :failed_done
718 set _KBUILD_CLEAN_GOTO=
719 exit /b 1
721 :end
722 set _KBUILD_CLEAN_GOTO=end_done & goto cleanup
723 :end_done
724 set _KBUILD_CLEAN_GOTO=
725 exit /b 0
727 :end_no_exit