Skip to content

Commit 9bb193e

Browse files
committed
perf: switched to jom for windows builds
1 parent b74e0f7 commit 9bb193e

10 files changed

Lines changed: 196 additions & 17 deletions

File tree

.github/actions/setup-windows/action.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,39 @@ name: Setup
22
runs:
33
using: composite
44
steps:
5+
- name: Setup jom
6+
shell: pwsh
7+
run: |
8+
$jomDirectory = Join-Path $env:RUNNER_TEMP "jom"
9+
$jomArchive = Join-Path $env:RUNNER_TEMP "jom.zip"
10+
Invoke-WebRequest https://download.qt.io/official_releases/jom/jom_1_1_7.zip -OutFile $jomArchive
11+
if ((Get-FileHash $jomArchive -Algorithm SHA256).Hash -ne "4C8AF345586A9A08FBFD2F613FCAC748226D91A75627AA3581B297DD513046FE") {
12+
throw "Unexpected jom archive checksum"
13+
}
14+
Expand-Archive $jomArchive -DestinationPath $jomDirectory
15+
$jomDirectory | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
16+
- name: Setup sccache
17+
shell: pwsh
18+
run: |
19+
$sccacheDirectory = Join-Path $env:RUNNER_TEMP "sccache-bin"
20+
$sccacheCacheDirectory = Join-Path $env:RUNNER_TEMP "sccache"
21+
$sccacheArchive = Join-Path $env:RUNNER_TEMP "sccache.zip"
22+
Invoke-WebRequest https://github.com/mozilla/sccache/releases/download/v0.15.0/sccache-v0.15.0-x86_64-pc-windows-msvc.zip -OutFile $sccacheArchive
23+
if ((Get-FileHash $sccacheArchive -Algorithm SHA256).Hash -ne "DCF489090AA5EF4C7D145E8B29F759124C803D636C3107F397BD50D425B5F341") {
24+
throw "Unexpected sccache archive checksum"
25+
}
26+
Expand-Archive $sccacheArchive -DestinationPath $sccacheDirectory
27+
(Join-Path $sccacheDirectory "sccache-v0.15.0-x86_64-pc-windows-msvc") |
28+
Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
29+
"SCCACHE_DIR=$sccacheCacheDirectory" |
30+
Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
31+
- name: Restore compiler cache
32+
continue-on-error: true
33+
uses: actions/cache/restore@v5
34+
with:
35+
path: ${{ runner.temp }}\sccache
36+
key: ${{ env.SCCACHE_CACHE_KEY }}
37+
restore-keys: ${{ env.SCCACHE_CACHE_RESTORE_PREFIX }}
538
- name: Setup MySQL
639
shell: cmd
740
run: |

.github/matrix.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
['name' => 'PHP-8.2', 'ref' => 'PHP-8.2', 'version' => [8, 2]],
99
];
1010

11+
// Temporary while profiling Windows CI builds. Remove after this work is complete.
12+
const WINDOWS_ONLY_CI = true;
13+
1114
function get_branch_commit_cache_file_path(): string {
1215
return dirname(__DIR__) . '/branch-commit-cache.json';
1316
}
@@ -180,13 +183,16 @@ function select_jobs($repository, $trigger, $nightly, $labels, $php_version, $re
180183

181184
$labels = json_decode($argv[4] ?? '[]', true) ?? [];
182185
$labels = array_column($labels, 'name');
183-
$all_variations = $nightly || in_array('CI: All variations', $labels, true);
186+
$all_variations = WINDOWS_ONLY_CI || $nightly || in_array('CI: All variations', $labels, true);
184187

185188
$repository = $argv[5] ?? null;
186189

187190
foreach ($branches as &$branch) {
188191
$php_version = $branch['version'][0] . '.' . $branch['version'][1];
189192
$branch['jobs'] = select_jobs($repository, $trigger, $nightly, $labels, $php_version, $branch['ref'], $all_variations);
193+
if (WINDOWS_ONLY_CI) {
194+
$branch['jobs'] = array_intersect_key($branch['jobs'], ['WINDOWS' => true]);
195+
}
190196
$branch['config']['ubuntu_version'] = version_compare($php_version, '8.5', '>=') ? '24.04' : '22.04';
191197
}
192198

.github/scripts/windows/build_task.bat

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ if "%CLANG_TOOLSET%" equ "1" (
4141

4242
cmd /c configure.bat ^
4343
--enable-snapshot-build ^
44+
--enable-parallel-build ^
4445
--disable-debug-pack ^
4546
--without-analyzer ^
4647
--enable-object-out-dir=%PHP_BUILD_OBJ_DIR% ^
@@ -49,9 +50,20 @@ cmd /c configure.bat ^
4950
--disable-test-ini
5051
if %errorlevel% neq 0 exit /b 3
5152

52-
nmake /NOLOGO
53+
if "%CLANG_TOOLSET%" equ "1" (
54+
set SCCACHE_COMPILER=clang-cl.exe
55+
) else (
56+
set SCCACHE_COMPILER=cl.exe
57+
)
58+
59+
sccache --zero-stats
60+
61+
jom /NOLOGO CC="sccache %SCCACHE_COMPILER%"
5362
if %errorlevel% neq 0 exit /b 3
54-
nmake /NOLOGO comtest.dll
63+
jom /NOLOGO CC="sccache %SCCACHE_COMPILER%" comtest.dll
5564
if %errorlevel% neq 0 exit /b 3
5665

66+
sccache --show-stats
67+
sccache --stop-server
68+
5769
exit /b 0

.github/workflows/test-suite.yml

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -857,10 +857,14 @@ jobs:
857857
PLATFORM: ${{ matrix.x64 && 'x64' || 'x86' }}
858858
THREAD_SAFE: "${{ matrix.zts && '1' || '0' }}"
859859
INTRINSICS: "${{ matrix.zts && 'AVX2' || '' }}"
860-
PARALLEL: -j2
860+
PARALLEL: -j4
861861
OPCACHE: "${{ matrix.opcache && '1' || '0' }}"
862862
ASAN: "${{ matrix.asan && '1' || '0' }}"
863863
CLANG_TOOLSET: "${{ matrix.clang && '1' || '0' }}"
864+
SCCACHE_CACHE_SIZE: 500M
865+
SCCACHE_IGNORE_SERVER_IO_ERROR: "1"
866+
SCCACHE_CACHE_KEY: windows-sccache-v1-php${{ join(fromJson(inputs.branch).version, '.') }}-${{ fromJson(inputs.branch).jobs.WINDOWS.config.vs_crt_version }}-${{ matrix.x64 && 'x64' || 'x86' }}-zts${{ matrix.zts && '1' || '0' }}-asan${{ matrix.asan && '1' || '0' }}-clang${{ matrix.clang && '1' || '0' }}-${{ github.sha }}
867+
SCCACHE_CACHE_RESTORE_PREFIX: windows-sccache-v1-php${{ join(fromJson(inputs.branch).version, '.') }}-${{ fromJson(inputs.branch).jobs.WINDOWS.config.vs_crt_version }}-${{ matrix.x64 && 'x64' || 'x86' }}-zts${{ matrix.zts && '1' || '0' }}-asan${{ matrix.asan && '1' || '0' }}-clang${{ matrix.clang && '1' || '0' }}-
864868
steps:
865869
- name: git config
866870
run: git config --global core.autocrlf false && git config --global core.eol lf
@@ -872,8 +876,21 @@ jobs:
872876
uses: ./.github/actions/setup-windows
873877
- name: Build
874878
run: .github/scripts/windows/build.bat
879+
# Temporary while measuring the local compiler-cache hit rate.
880+
- name: Benchmark warm build
881+
shell: cmd
882+
run: |
883+
rmdir /s /q %PHP_BUILD_OBJ_DIR%
884+
.github\scripts\windows\build.bat
875885
- name: Test
876886
run: .github/scripts/windows/test.bat
887+
- name: Save compiler cache
888+
if: ${{ github.event_name != 'pull_request' }}
889+
continue-on-error: true
890+
uses: actions/cache/save@v5
891+
with:
892+
path: ${{ runner.temp }}\sccache
893+
key: ${{ env.SCCACHE_CACHE_KEY }}
877894
FREEBSD:
878895
if: ${{ fromJson(inputs.branch).jobs.FREEBSD }}
879896
strategy:

ext/com_dotnet/Makefile.frag.w32

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,17 @@ $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.c: ext\com_dotnet\tests\comt
22
-md $(BUILD_DIR)\ext\com_dotnet\tests\comtest
33
midl /nologo /h $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest.h /iid $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.c /tlb $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest.tlb ext\com_dotnet\tests\comtest\comtest.idl
44

5+
!if "$(PARALLEL_BUILD)" == "yes"
6+
$(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest.obj: ext\com_dotnet\tests\comtest\comtest.cpp $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.c
7+
$(PHP_CL) /nologo /c /Fo$(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest.obj /I $(BUILD_DIR)\ext\com_dotnet\tests\comtest ext\com_dotnet\tests\comtest\comtest.cpp
8+
9+
$(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.obj: $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.c
10+
$(PHP_CL) /nologo /c /Fo$(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.obj $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.c
11+
!else
512
$(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest.obj $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.obj: ext\com_dotnet\tests\comtest\comtest.cpp $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.c
613
$(PHP_CL) /nologo /c /Fo$(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest.obj /I $(BUILD_DIR)\ext\com_dotnet\tests\comtest ext\com_dotnet\tests\comtest\comtest.cpp
714
$(PHP_CL) /nologo /c /Fo$(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.obj $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.c
15+
!endif
816

917
$(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest.dll: $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest.obj $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.obj ext\com_dotnet\tests\comtest\comtest.def
1018
"$(LINK)" /nologo /dll /out:$(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest.dll $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest.obj $(BUILD_DIR)\ext\com_dotnet\tests\comtest\comtest_i.obj /def:ext\com_dotnet\tests\comtest\comtest.def OleAut32.lib

ext/json/Makefile.frag.w32

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
1+
!if "$(PARALLEL_BUILD)" == "yes"
2+
ext\json\php_json_scanner_defs.h: ext\json\json_scanner.c
3+
ext\json\json_scanner.c: ext\json\json_scanner.re ext\json\json_parser.tab.h
4+
$(RE2C) $(RE2C_FLAGS) -t ext/json/php_json_scanner_defs.h -bci -o ext/json/json_scanner.c ext/json/json_scanner.re
5+
6+
ext\json\json_parser.tab.h: ext\json\json_parser.tab.c
7+
ext\json\json_parser.tab.c: ext\json\json_parser.y
8+
$(BISON) $(BISON_FLAGS) --defines -l ext/json/json_parser.y -o ext/json/json_parser.tab.c
9+
!else
110
ext\json\json_scanner.c ext\json\php_json_scanner_defs.h: ext\json\json_scanner.re ext\json\json_parser.tab.h
211
$(RE2C) $(RE2C_FLAGS) -t ext/json/php_json_scanner_defs.h -bci -o ext/json/json_scanner.c ext/json/json_scanner.re
312

413
ext\json\json_parser.tab.c ext\json\json_parser.tab.h: ext\json\json_parser.y
514
$(BISON) $(BISON_FLAGS) --defines -l ext/json/json_parser.y -o ext/json/json_parser.tab.c
15+
!endif

ext/standard/Makefile.frag.w32

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ ext\standard\url_scanner_ex.c: ext\standard\url_scanner_ex.re
66
cd $(PHP_SRC_DIR)
77
$(RE2C) $(RE2C_FLAGS) -b -o ext/standard/url_scanner_ex.c ext/standard/url_scanner_ex.re
88

9-
$(BUILD_DIR)\ext\standard\basic_functions.obj: $(PHP_SRC_DIR)\Zend\zend_language_parser.h
9+
$(BUILD_DIR)\ext\standard\basic_functions.obj: Zend\zend_language_parser.h
1010

1111
$(PHP_SRC_DIR)\ext\standard\tests\helpers\bad_cmd.exe: $(PHP_SRC_DIR)\ext\standard\tests\helpers\bad_cmd.c
1212
cd $(PHP_SRC_DIR)\ext\standard\tests\helpers

win32/build/Makefile

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,31 @@ DEBUGGER_ARGS=
5454

5555
all: generated_files $(EXT_TARGETS) $(PECL_TARGETS) $(SAPI_TARGETS) test_helpers
5656

57+
!if "$(PARALLEL_BUILD)" == "yes"
58+
BUILD_DIR_TARGET=build_dirs
59+
!else
5760
build_dirs: $(BUILD_DIR) $(BUILD_DIRS_SUB) $(BUILD_DIR_DEV)
61+
BUILD_DIR_TARGET=$(BUILD_DIR) $(BUILD_DIRS_SUB) $(BUILD_DIR_DEV)
62+
!endif
5863

64+
!if "$(PARALLEL_BUILD)" == "yes"
65+
!if $(RE2C) == ""
66+
generated_files: build_dirs .SYNC \
67+
Zend\zend_ini_parser.c Zend\zend_ini_parser.h \
68+
Zend\zend_language_parser.c Zend\zend_language_parser.h \
69+
sapi\phpdbg\phpdbg_parser.c sapi\phpdbg\phpdbg_parser.h \
70+
$(PHPDEF) $(MCFILE)
71+
!else
72+
generated_files: build_dirs .SYNC \
73+
Zend\zend_ini_parser.c Zend\zend_ini_parser.h \
74+
Zend\zend_language_parser.c Zend\zend_language_parser.h \
75+
Zend\zend_ini_scanner.c Zend\zend_ini_scanner_defs.h \
76+
Zend\zend_language_scanner.c Zend\zend_language_scanner_defs.h \
77+
sapi\phpdbg\phpdbg_parser.c sapi\phpdbg\phpdbg_parser.h \
78+
sapi\phpdbg\phpdbg_lexer.c \
79+
$(PHPDEF) $(MCFILE)
80+
!endif
81+
!else
5982
!if $(RE2C) == ""
6083
generated_files: build_dirs \
6184
Zend\zend_ini_parser.c Zend\zend_ini_parser.h \
@@ -71,10 +94,28 @@ generated_files: build_dirs \
7194
sapi\phpdbg\phpdbg_parser.c sapi\phpdbg\phpdbg_lexer.c \
7295
$(PHPDEF) $(MCFILE)
7396
!endif
97+
!endif
7498

7599
$(BUILD_DIR)\$(PHPDLL).def: $(PHP_DLL_DEF_SOURCES)
76100
type $(PHP_DLL_DEF_SOURCES) > $(BUILD_DIR)\$(PHPDLL).def
77101

102+
!if "$(PARALLEL_BUILD)" == "yes"
103+
# Bison and re2c generate two files per invocation. Give the recipe to one
104+
# target and make the side-effect output depend on it, so jom runs it once.
105+
Zend\zend_ini_parser.h: Zend\zend_ini_parser.c
106+
Zend\zend_ini_parser.c: Zend\zend_ini_parser.y
107+
$(BISON) $(BISON_FLAGS) --output=Zend/zend_ini_parser.c -v -d Zend/zend_ini_parser.y
108+
109+
Zend\zend_language_parser.h: Zend\zend_language_parser.c
110+
Zend\zend_language_parser.c: Zend\zend_language_parser.y
111+
$(BISON) $(BISON_FLAGS) --output=Zend/zend_language_parser.c -v -d Zend/zend_language_parser.y
112+
@if "$(SED)" neq "" $(SED) -i "s,^int zendparse\(.*\),ZEND_API int zendparse\1,g" Zend/zend_language_parser.c
113+
@if "$(SED)" neq "" $(SED) -i "s,^int zendparse\(.*\),ZEND_API int zendparse\1,g" Zend/zend_language_parser.h
114+
115+
sapi\phpdbg\phpdbg_parser.h: sapi\phpdbg\phpdbg_parser.c
116+
sapi\phpdbg\phpdbg_parser.c: sapi\phpdbg\phpdbg_parser.y
117+
$(BISON) $(BISON_FLAGS) --output=sapi/phpdbg/phpdbg_parser.c -v -d sapi/phpdbg/phpdbg_parser.y
118+
!else
78119
Zend\zend_ini_parser.c Zend\zend_ini_parser.h: Zend\zend_ini_parser.y
79120
$(BISON) $(BISON_FLAGS) --output=Zend/zend_ini_parser.c -v -d Zend/zend_ini_parser.y
80121

@@ -85,13 +126,24 @@ Zend\zend_language_parser.c Zend\zend_language_parser.h: Zend\zend_language_pars
85126

86127
sapi\phpdbg\phpdbg_parser.c sapi\phpdbg\phpdbg_parser.h: sapi\phpdbg\phpdbg_parser.y
87128
$(BISON) $(BISON_FLAGS) --output=sapi/phpdbg/phpdbg_parser.c -v -d sapi/phpdbg/phpdbg_parser.y
129+
!endif
88130

89131
!if $(RE2C) != ""
132+
!if "$(PARALLEL_BUILD)" == "yes"
133+
Zend\zend_ini_scanner_defs.h: Zend\zend_ini_scanner.c
134+
Zend\zend_ini_scanner.c: Zend\zend_ini_scanner.l
135+
$(RE2C) $(RE2C_FLAGS) --case-inverted -cbdFt Zend/zend_ini_scanner_defs.h -oZend/zend_ini_scanner.c Zend/zend_ini_scanner.l
136+
137+
Zend\zend_language_scanner_defs.h: Zend\zend_language_scanner.c
138+
Zend\zend_language_scanner.c: Zend\zend_language_scanner.l
139+
$(RE2C) $(RE2C_FLAGS) --case-inverted -cbdFt Zend/zend_language_scanner_defs.h -oZend/zend_language_scanner.c Zend/zend_language_scanner.l
140+
!else
90141
Zend\zend_ini_scanner.c Zend\zend_ini_scanner_defs.h: Zend\zend_ini_scanner.l
91142
$(RE2C) $(RE2C_FLAGS) --case-inverted -cbdFt Zend/zend_ini_scanner_defs.h -oZend/zend_ini_scanner.c Zend/zend_ini_scanner.l
92143

93144
Zend\zend_language_scanner.c Zend\zend_language_scanner_defs.h: Zend\zend_language_scanner.l
94145
$(RE2C) $(RE2C_FLAGS) --case-inverted -cbdFt Zend/zend_language_scanner_defs.h -oZend/zend_language_scanner.c Zend/zend_language_scanner.l
146+
!endif
95147

96148
sapi\phpdbg\phpdbg_lexer.c: sapi\phpdbg\phpdbg_lexer.l
97149
$(RE2C) $(RE2C_FLAGS) -cbdFo sapi/phpdbg/phpdbg_lexer.c sapi/phpdbg/phpdbg_lexer.l
@@ -124,7 +176,7 @@ _VC_MANIFEST_EMBED_EXE= if exist $@.manifest $(MT) -nologo -manifest $@.manifest
124176
_VC_MANIFEST_EMBED_DLL= if exist $@.manifest $(MT) -nologo -manifest $@.manifest -outputresource:$@;2
125177
!endif
126178

127-
$(PHPDLL_RES): win32\build\template.rc
179+
$(PHPDLL_RES): generated_files $(MCFILE) win32\build\template.rc
128180
$(RC) /nologo /fo $(PHPDLL_RES) /d FILE_DESCRIPTION="\"PHP Script Interpreter\"" \
129181
/d FILE_NAME="\"$(PHPDLL)\"" /d PRODUCT_NAME="\"PHP Script Interpreter\"" \
130182
/I$(BUILD_DIR) /d MC_INCLUDE="\"$(MCFILE)\"" \
@@ -138,7 +190,7 @@ $(BUILD_DIR)\$(PHPDLL): generated_files $(PHPDEF) $(PHP_GLOBAL_OBJS) $(STATIC_EX
138190

139191
$(BUILD_DIR)\$(PHPLIB): $(BUILD_DIR)\$(PHPDLL)
140192

141-
$(BUILD_DIR) $(BUILD_DIRS_SUB) $(BUILD_DIR_DEV):
193+
$(BUILD_DIR_TARGET):
142194
@echo Recreating build dirs
143195
@if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)
144196
@cd $(BUILD_DIR)

win32/build/config.w32

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,18 @@ DEFINE('PHP_PREFIX', PHP_PREFIX);
6262

6363
DEFINE("BASE_INCLUDES", "/I . /I main /I Zend /I TSRM /I ext ");
6464

65+
ARG_ENABLE('parallel-build', 'Generate independent object targets for a parallel NMAKE-compatible tool', 'no');
66+
DEFINE('PARALLEL_BUILD', PHP_PARALLEL_BUILD);
67+
6568
toolset_setup_common_cflags();
6669

6770
if (VS_TOOLSET) {
6871
ARG_WITH('mp', 'Tell Visual Studio use up to [n,auto,disable] processes for compilation', 'auto');
6972
var PHP_MP_DISABLED = true;
7073

71-
if (PHP_MP != 'disable') {
74+
if (PHP_PARALLEL_BUILD == 'yes') {
75+
STDOUT.WriteLine('Using make-level parallel compilation');
76+
} else if (PHP_MP != 'disable') {
7277
if(PHP_DEBUG == 'yes') {
7378
STDOUT.WriteLine('WARNING: Debug builds cannot be built using multi processing');
7479
} else {
@@ -273,14 +278,16 @@ if (TARGET_ARCH == 'x64') {
273278
}
274279
ADD_FLAG('ASM_OBJS', all_asm_objs);
275280

276-
MFO.WriteLine('$(BUILD_DIR)\\Zend\\jump_' + FIBER_ASM_ABI + '.obj: Zend\\asm\\jump_' + FIBER_ASM_ABI + '.asm');
281+
var fiber_asm_build_deps = PHP_PARALLEL_BUILD == 'yes' ? 'generated_files ' : '';
282+
283+
MFO.WriteLine('$(BUILD_DIR)\\Zend\\jump_' + FIBER_ASM_ABI + '.obj: ' + fiber_asm_build_deps + 'Zend\\asm\\jump_' + FIBER_ASM_ABI + '.asm');
277284
MFO.WriteLine('\t$(PHP_ASSEMBLER) $(FIBER_ASM_FLAGS) $(BUILD_DIR)\\Zend\\jump_$(FIBER_ASM_ABI).obj Zend\\asm\\jump_$(FIBER_ASM_ABI).asm');
278285

279-
MFO.WriteLine('$(BUILD_DIR)\\Zend\\make_' + FIBER_ASM_ABI + '.obj: Zend\\asm\\make_' + FIBER_ASM_ABI + '.asm');
286+
MFO.WriteLine('$(BUILD_DIR)\\Zend\\make_' + FIBER_ASM_ABI + '.obj: ' + fiber_asm_build_deps + 'Zend\\asm\\make_' + FIBER_ASM_ABI + '.asm');
280287
MFO.WriteLine('\t$(PHP_ASSEMBLER) $(FIBER_ASM_FLAGS) $(BUILD_DIR)\\Zend\\make_$(FIBER_ASM_ABI).obj Zend\\asm\\make_$(FIBER_ASM_ABI).asm');
281288

282289
if (TARGET_ARCH == 'x64') {
283-
MFO.WriteLine('$(BUILD_DIR)\\Zend\\save_xmm_x86_64_ms_masm.obj: Zend\\asm\\save_xmm_x86_64_ms_masm.asm');
290+
MFO.WriteLine('$(BUILD_DIR)\\Zend\\save_xmm_x86_64_ms_masm.obj: ' + fiber_asm_build_deps + 'Zend\\asm\\save_xmm_x86_64_ms_masm.asm');
284291
MFO.WriteLine('\t$(PHP_ASSEMBLER) $(FIBER_ASM_FLAGS) $(BUILD_DIR)\\Zend\\save_xmm_x86_64_ms_masm.obj Zend\\asm\\save_xmm_x86_64_ms_masm.asm');
285292
}
286293

0 commit comments

Comments
 (0)