@@ -44,32 +44,62 @@ if 14 gtr %TMP_CHK% (
44
44
set PHP_SDK_VS_NUM = %TMP_CHK%
45
45
set TMP_CHK =
46
46
47
- if /i not " %2 " == " x64" (
48
- if /i not " %2 " == " x86" (
49
- echo Unsupported arch " %2 "
50
- goto out_error
51
- )
47
+ rem check target arch
48
+ if " %2 " == " x86" set PHP_SDK_ARCH = %2
49
+ if " %2 " == " x64" set PHP_SDK_ARCH = %2
50
+ if " %2 " == " x86_64" set PHP_SDK_ARCH = x64
51
+ if " %2 " == " amd64" set PHP_SDK_ARCH = x64
52
+ if " %2 " == " arm64" set PHP_SDK_ARCH = %2
53
+ if " %PHP_SDK_ARCH% " == " " (
54
+ echo Unsupported target arch %2 >& 2
55
+ goto out_error
52
56
)
53
57
54
- set PHP_SDK_ARCH = %2
55
-
56
58
rem check OS arch
57
- set TMPKEY = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
58
- reg query " %TMPKEY% " /v " ProgramFilesDir (x86)" > nul 2 > nul
59
- if not errorlevel 1 (
60
- set PHP_SDK_OS_ARCH = x64
61
- ) else (
62
- if /i " %PHP_SDK_ARCH% " == " x64" (
63
- echo 32-bit OS detected, native 64-bit toolchain is unavailable.
64
- goto out_error
65
- )
66
- set PHP_SDK_OS_ARCH = x86
59
+ rem todo: allow user choose host sdk arch (i.e. x64 target can be compiled at x64(native) or x86(cross))
60
+ for /f " usebackq tokens=1*" %%i in (`wmic cpu get Architecture /value /format:table ^ | findstr /r " [1234567890][1234567890]*" `) do (
61
+ set PHP_SDK_OS_ARCH_NUM = %%i
62
+ )
63
+
64
+ goto os_arch_cases
65
+ :os_arch_error
66
+ echo Unsupported OS arch %PHP_SDK_OS_ARCH% >& 2
67
+ goto out_error
68
+
69
+ :os_arch_cases
70
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 0" set PHP_SDK_OS_ARCH = x86
71
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 1" (set PHP_SDK_OS_ARCH=mips && goto os_arch_error)
72
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 2" (set PHP_SDK_OS_ARCH=alpha && goto os_arch_error)
73
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 3" (set PHP_SDK_OS_ARCH=ppc && goto os_arch_error)
74
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 4" (set PHP_SDK_OS_ARCH=shx && goto os_arch_error)
75
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 5" (set PHP_SDK_OS_ARCH=arm32 && goto os_arch_error)
76
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 6" (set PHP_SDK_OS_ARCH=ia64 && goto os_arch_error)
77
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 7" (set PHP_SDK_OS_ARCH=alpha64 && goto os_arch_error)
78
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 8" (set PHP_SDK_OS_ARCH=msil && goto os_arch_error)
79
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 9" set PHP_SDK_OS_ARCH = x64
80
+ rem wow64
81
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 10" set PHP_SDK_OS_ARCH = x86
82
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 11" (set PHP_SDK_OS_ARCH=neutral && goto os_arch_error)
83
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 12" set PHP_SDK_OS_ARCH = arm64
84
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 13" (set PHP_SDK_OS_ARCH=arm32 && goto os_arch_error)
85
+ rem woa64
86
+ if " %PHP_SDK_OS_ARCH_NUM% " == " 14" set PHP_SDK_OS_ARCH = x86
87
+ if " %PHP_SDK_OS_ARCH% " == " " (
88
+ goto os_arch_error
67
89
)
68
- set TMPKEY =
90
+
91
+ set PHP_SDK_OS_ARCH_NUM =
92
+
93
+ rem cross compile is ok, so we donot need this
94
+ rem if not /i "%PHP_SDK_ARCH%"=="PHP_SDK_OS_ARCH" (
95
+ rem echo 32-bit OS detected, native 64-bit toolchain is unavailable.
96
+ rem goto out_error
97
+ rem )
69
98
70
99
rem get vc base dir
71
100
if 15 gtr %PHP_SDK_VS_NUM% (
72
- if /i " %PHP_SDK_OS_ARCH% " == " x64" (
101
+ rem for arch other than x86, use WOW6432
102
+ if /i not " %PHP_SDK_OS_ARCH% " == " x86" (
73
103
set TMPKEY = HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%PHP_SDK_VS:~2 % .0\Setup\VC
74
104
) else (
75
105
set TMPKEY = HKLM\SOFTWARE\Microsoft\VisualStudio\%PHP_SDK_VS:~2 % .0\Setup\VC
@@ -85,16 +115,20 @@ if 15 gtr %PHP_SDK_VS_NUM% (
85
115
set /a PHP_SDK_VS_RANGE = PHP_SDK_VS_NUM + 1
86
116
set PHP_SDK_VS_RANGE = " [%PHP_SDK_VS_NUM% ,!PHP_SDK_VS_RANGE%! )"
87
117
88
- for /f " tokens=1* delims=: " %%a in ('%~dp0 \vswhere -nologo -version !PHP_SDK_VS_RANGE! -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath -format text') do (
118
+ set APPEND = x86.x64
119
+ if /i " %PHP_SDK_OS_ARCH% " == " arm64" (
120
+ set APPEND = ARM64
121
+ )
122
+ for /f " tokens=1* delims=: " %%a in ('%~dp0 \vswhere -nologo -version !PHP_SDK_VS_RANGE! -requires Microsoft.VisualStudio.Component.VC.Tools.!APPEND! -property installationPath -format text') do (
89
123
set PHP_SDK_VC_DIR = %%b \VC
90
124
)
91
125
if not exist " !PHP_SDK_VC_DIR! " (
92
- for /f " tokens=1* delims=: " %%a in ('%~dp0 \vswhere -nologo -version !PHP_SDK_VS_RANGE! -products Microsoft.VisualStudio.Product.BuildTools -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath -format text') do (
126
+ for /f " tokens=1* delims=: " %%a in ('%~dp0 \vswhere -nologo -version !PHP_SDK_VS_RANGE! -products Microsoft.VisualStudio.Product.BuildTools -requires Microsoft.VisualStudio.Component.VC.Tools.!APPEND! -property installationPath -format text') do (
93
127
set PHP_SDK_VC_DIR = %%b \VC
94
128
)
95
129
if not exist " !PHP_SDK_VC_DIR! " (
96
130
rem check for a preview release
97
- for /f " tokens=1* delims=: " %%a in ('%~dp0 \vswhere -nologo -version !PHP_SDK_VS_RANGE! -prerelease -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath -format text') do (
131
+ for /f " tokens=1* delims=: " %%a in ('%~dp0 \vswhere -nologo -version !PHP_SDK_VS_RANGE! -prerelease -requires Microsoft.VisualStudio.Component.VC.Tools.!APPEND! -property installationPath -format text') do (
98
132
set PHP_SDK_VC_DIR = %%b \VC
99
133
)
100
134
if not exist " !PHP_SDK_VC_DIR! " (
@@ -105,13 +139,15 @@ if 15 gtr %PHP_SDK_VS_NUM% (
105
139
)
106
140
set VSCMD_ARG_no_logo = nologo
107
141
)
142
+ set APPEND =
108
143
set TMPKEY =
109
144
set PHP_SDK_VS_RANGE =
110
145
111
146
if 15 gtr %PHP_SDK_VS_NUM% (
112
147
rem get sdk dir
113
148
rem if 10.0 is available, it's ok
114
- if /i " %PHP_SDK_OS_ARCH% " == " x64" (
149
+ rem for arch other than x86, use WOW6432
150
+ if /i not " %PHP_SDK_OS_ARCH% " == " x86" (
115
151
set TMPKEY = HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0
116
152
) else (
117
153
set TMPKEY = HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0
@@ -125,7 +161,8 @@ if 15 gtr %PHP_SDK_VS_NUM% (
125
161
)
126
162
127
163
rem Otherwise 8.1 should be available anyway
128
- if /i " %PHP_SDK_OS_ARCH% " == " x64" (
164
+ rem for arch other than x86, use WOW6432
165
+ if /i not " %PHP_SDK_OS_ARCH% " == " x86" (
129
166
set TMPKEY = HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1
130
167
) else (
131
168
set TMPKEY = HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1
@@ -143,18 +180,28 @@ if 15 gtr %PHP_SDK_VS_NUM% (
143
180
)
144
181
145
182
if /i " %PHP_SDK_ARCH% " == " x64" (
146
- if 15 gtr %PHP_SDK_VS_NUM% (
147
- set PHP_SDK_VS_SHELL_CMD = " !PHP_SDK_VC_DIR! \vcvarsall.bat" amd64
148
- ) else (
149
- set PHP_SDK_VS_SHELL_CMD = " !PHP_SDK_VC_DIR! \Auxiliary\Build\vcvarsall.bat" amd64
150
- )
183
+ set TARGET_ARCH_NAME = amd64
151
184
) else (
152
- if 15 gtr %PHP_SDK_VS_NUM% (
153
- set PHP_SDK_VS_SHELL_CMD = " !PHP_SDK_VC_DIR! \vcvarsall.bat" x86
154
- ) else (
155
- set PHP_SDK_VS_SHELL_CMD = " !PHP_SDK_VC_DIR! \Auxiliary\Build\vcvarsall.bat" x86
156
- )
185
+ set TARGET_ARCH_NAME = %PHP_SDK_ARCH%
186
+ )
187
+
188
+ if /i " %PHP_SDK_OS_ARCH% " == " x64" (
189
+ set HOST_ARCH_NAME = amd64
190
+ ) else (
191
+ set HOST_ARCH_NAME = %PHP_SDK_ARCH%
192
+ )
193
+
194
+ if " %HOST_ARCH_NAME% " == " %TARGET_ARCH_NAME% " (
195
+ set VCVARSALL_ARCH_NAME = %HOST_ARCH_NAME%
196
+ ) else (
197
+ set VCVARSALL_ARCH_NAME = %HOST_ARCH_NAME% _%TARGET_ARCH_NAME%
198
+ )
199
+ if 15 gtr %PHP_SDK_VS_NUM% (
200
+ set PHP_SDK_VS_SHELL_CMD = " !PHP_SDK_VC_DIR! \vcvarsall.bat" !VCVARSALL_ARCH_NAME!
201
+ ) else (
202
+ set PHP_SDK_VS_SHELL_CMD = " !PHP_SDK_VC_DIR! \Auxiliary\Build\vcvarsall.bat" !VCVARSALL_ARCH_NAME!
157
203
)
204
+ set VCVARSALL_ARCH_NAME =
158
205
159
206
rem echo Visual Studio VC path %PHP_SDK_VC_DIR%
160
207
rem echo Windows SDK path %PHP_SDK_WIN_SDK_DIR%
0 commit comments