File: gen_asm_script.cmd

package info (click to toggle)
mupen64plus-core 2.6.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 7,760 kB
  • sloc: ansic: 80,337; cpp: 1,404; asm: 1,096; makefile: 765; python: 619; sh: 325; awk: 9
file content (89 lines) | stat: -rw-r--r-- 2,976 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
@echo off
setlocal enableextensions

:: Countermeasure vs tainted build environment by known third party utilities
set FIND=find
find /? >nul 2>&1
if errorlevel 1 (
	echo WARNING: GNU utilities in PATH can break MSVC
	echo.
	set FIND=findstr
)

:: Anchor to the project file path, otherwise the arguments would be invalid:
::
:: * In theory this is unnecessary, but it makes the process more transparent
::   to people unfamiliar with VS's not-so-well-explained behaviors
::
pushd "%~dp0..\projects\msvc\"
if errorlevel 1 exit /b 101

:: Validating arguments passed from Visual Studio to use as variables:
::
:: * Arguments with conflicting syntax can terminate the script abruptly
:: * 'GAS_EXTRA' argument isn't used in some cases
::
set GAS_SRCDIR=
set GAS_OBJDIR=
set GAS_EXTRA=
for /f "tokens=1,2*" %%A in ('echo %*') do (
	set GAS_SRCDIR=%%A
	set GAS_OBJDIR=%%B
	set GAS_EXTRA=%%C
)
set GAS_CLARG=%GAS_OBJDIR%
if defined GAS_EXTRA set GAS_CLARG=%GAS_OBJDIR% %GAS_EXTRA%

:: "Anti-PEBCAK":
::
:: * Ensure that 'GAS_SRCDIR' and 'GAS_OBJDIR' exist or are defined and send an
::   error signal if not
::
if not exist "%GAS_SRCDIR%asm_defines.c" exit /b 202
if not defined GAS_OBJDIR exit /b 303

:: Legacy code adaptation for this script:
::
:: * Delete the libraries previously generated by 'gawk' or this script
:: * CL's stuff/witchcraft, if all goes well it will generate 'asm_defines.obj'
::
del /f /q "%GAS_SRCDIR%asm_defines_*" 2>nul
cl /c /Fo%GAS_CLARG% /I ..\..\src "%GAS_SRCDIR%asm_defines.c"

:: If 'asm_defines.obj' does not exist, send error
if not exist "%GAS_OBJDIR%asm_defines.obj" exit /b 404
if "%USE_GAWK%" NEQ "1" goto native

:: Legacy code adaptation for 'gawk':
::
:: * Define 'USE_GAWK=1' to use 'gawk'
:: * A POSIX version of 'GAS_SRCDIR' is required for 'dest_dir' argument
::
set "GAS_SRCDIR2=%GAS_SRCDIR:\=/%"
set GAWK=..\..\..\mupen64plus-win32-deps\gawk-3.1.6-1\bin\gawk.exe
"%GAWK%" -v dest_dir="%GAS_SRCDIR2%" -f "%~dp0gen_asm_defines.awk" "%GAS_OBJDIR%asm_defines.obj"
goto log
:native

:: Adaptation of 'gen_asm_defines.awk' / 'gen_asm_script.sh':
::
:: 1. Display 'asm_defines.obj' as a list, looking only for patterns
::    '@ASM_DEFINE'
:: 2. Sort for easy reading, the result is interpreted as an array
::    with ' ' as default delimiter in the 'for' command
:: 3. The for's 'tokens=2,3' ignores pattern "1" (@ASM_DEFINE) and anything
::    beyond "3", take "2" (offset* value) as 'J' and "3" (hex* value) as 'K'
:: 4. Print current values and repeat steps 3 and 4 on the next line
::    until EOL is reached
::
for /f "tokens=2,3" %%J in ('type "%GAS_OBJDIR%asm_defines.obj" ^| %FIND% "@ASM_DEFINE" ^| sort') do (
	echo %%define %%J ^(%%K^)>>"%GAS_SRCDIR%asm_defines_nasm.h"
	echo #define %%J ^(%%K^)>>"%GAS_SRCDIR%asm_defines_gas.h"
)
:log

:: Display 'asm_defines_nasm.h' in the log
echo.
type "%GAS_SRCDIR%asm_defines_nasm.h"
echo.
exit /b 0