Skip to content

Commit 8bc4b41

Browse files
committed
Merge branch 'PHP-8.3'
2 parents b17a75b + e7feac0 commit 8bc4b41

File tree

3 files changed

+163
-81
lines changed

3 files changed

+163
-81
lines changed

cmake/cmake/Flags.cmake

Lines changed: 7 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -425,85 +425,6 @@ if(PHP_MEMORY_SANITIZER OR PHP_ADDRESS_SANITIZER OR PHP_UNDEFINED_SANITIZER)
425425
endif()
426426
endif()
427427

428-
################################################################################
429-
# Check linker flags.
430-
################################################################################
431-
432-
# Align segments on huge page boundary.
433-
message(
434-
CHECK_START
435-
"Checking linker support for aligning segments on huge page boundary"
436-
)
437-
if(CMAKE_SYSTEM_NAME STREQUAL "Linux"
438-
AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3456]86.*|x86_64)$"
439-
)
440-
check_linker_flag(
441-
C
442-
"LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152"
443-
HAVE_ALIGNMENT_FLAGS_C
444-
)
445-
446-
if(HAVE_ALIGNMENT_FLAGS_C)
447-
target_link_options(
448-
php_configuration
449-
INTERFACE
450-
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<COMPILE_LANGUAGE:ASM,C>>:LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152>
451-
)
452-
else()
453-
check_linker_flag(
454-
C
455-
"LINKER:-z,max-page-size=2097152"
456-
HAVE_ZMAX_PAGE_SIZE_C
457-
)
458-
459-
if(HAVE_ZMAX_PAGE_SIZE_C)
460-
target_link_options(
461-
php_configuration
462-
INTERFACE
463-
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<COMPILE_LANGUAGE:ASM,C>>:LINKER:-z,max-page-size=2097152>
464-
)
465-
endif()
466-
endif()
467-
468-
check_linker_flag(
469-
CXX
470-
"LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152"
471-
HAVE_ALIGNMENT_FLAGS_CXX
472-
)
473-
474-
if(HAVE_ALIGNMENT_FLAGS_CXX)
475-
target_link_options(
476-
php_configuration
477-
INTERFACE
478-
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<COMPILE_LANGUAGE:CXX>>:LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152>
479-
)
480-
else()
481-
check_linker_flag(
482-
CXX
483-
"LINKER:-z,max-page-size=2097152"
484-
HAVE_ZMAX_PAGE_SIZE_CXX
485-
)
486-
487-
if(HAVE_ZMAX_PAGE_SIZE_CXX)
488-
target_link_options(
489-
php_configuration
490-
INTERFACE
491-
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<COMPILE_LANGUAGE:CXX>>:LINKER:-z,max-page-size=2097152>
492-
)
493-
endif()
494-
endif()
495-
496-
if(HAVE_ALIGNMENT_FLAGS_C AND HAVE_ALIGNMENT_FLAGS_CXX)
497-
message(CHECK_PASS "yes")
498-
elseif(HAVE_ZMAX_PAGE_SIZE_C AND HAVE_ZMAX_PAGE_SIZE_CXX)
499-
message(CHECK_PASS "yes")
500-
else()
501-
message(CHECK_FAIL "no")
502-
endif()
503-
else()
504-
message(CHECK_FAIL "no")
505-
endif()
506-
507428
# Check if compiler supports the -Wno-typedef-redefinition compile option. PHP
508429
# is written with C99 standard in mind, yet there is a possibility that typedef
509430
# redefinitions could happened in the source code. Since PHP CMake-based build
@@ -527,3 +448,10 @@ if(CMAKE_C_STANDARD EQUAL 99)
527448
)
528449
endif()
529450
endif()
451+
452+
################################################################################
453+
# Check linker flags.
454+
################################################################################
455+
456+
# Align segments on huge page boundary.
457+
include(PHP/CheckSegmentsAlignment)
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
#[=============================================================================[
2+
Check linker support for aligning segments on huge page boundary.
3+
]=============================================================================]#
4+
5+
include_guard(GLOBAL)
6+
7+
include(CheckLinkerFlag)
8+
include(CheckSourceRuns)
9+
include(CMakePushCheckState)
10+
11+
message(
12+
CHECK_START
13+
"Checking linker support for aligning segments on huge page boundary"
14+
)
15+
16+
if(
17+
NOT CMAKE_SYSTEM_NAME STREQUAL "Linux"
18+
AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3456]86.*|x86_64)$"
19+
)
20+
message(CHECK_FAIL "no")
21+
return()
22+
endif()
23+
24+
check_linker_flag(
25+
C
26+
"LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152"
27+
_HAVE_ALIGNMENT_FLAGS_C
28+
)
29+
30+
if(_HAVE_ALIGNMENT_FLAGS_C)
31+
cmake_push_check_state(RESET)
32+
set(
33+
CMAKE_REQUIRED_LINK_OPTIONS
34+
LINKER:-z,common-page-size=2097152
35+
LINKER:-z,max-page-size=2097152
36+
)
37+
check_source_runs(
38+
C
39+
[[int main(void) { return 0; }]]
40+
PHP_HAVE_ALIGNMENT_FLAGS_C
41+
)
42+
cmake_pop_check_state()
43+
44+
if(PHP_HAVE_ALIGNMENT_FLAGS_C)
45+
target_link_options(
46+
php_configuration
47+
INTERFACE
48+
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:ASM,C>>:LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152>
49+
)
50+
endif()
51+
else()
52+
check_linker_flag(
53+
C
54+
"LINKER:-z,max-page-size=2097152"
55+
_HAVE_ZMAX_PAGE_SIZE_C
56+
)
57+
58+
if(_HAVE_ZMAX_PAGE_SIZE_C)
59+
cmake_push_check_state(RESET)
60+
set(
61+
CMAKE_REQUIRED_LINK_OPTIONS
62+
LINKER:-z,max-page-size=2097152
63+
)
64+
check_source_runs(
65+
C
66+
[[int main(void) { return 0; }]]
67+
PHP_HAVE_ZMAX_PAGE_SIZE_C
68+
)
69+
cmake_pop_check_state()
70+
71+
if(PHP_HAVE_ZMAX_PAGE_SIZE_C)
72+
target_link_options(
73+
php_configuration
74+
INTERFACE
75+
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:ASM,C>>:LINKER:-z,max-page-size=2097152>
76+
)
77+
endif()
78+
endif()
79+
endif()
80+
81+
check_linker_flag(
82+
CXX
83+
"LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152"
84+
_HAVE_ALIGNMENT_FLAGS_CXX
85+
)
86+
87+
if(_HAVE_ALIGNMENT_FLAGS_CXX)
88+
cmake_push_check_state(RESET)
89+
set(
90+
CMAKE_REQUIRED_LINK_OPTIONS
91+
LINKER:-z,common-page-size=2097152
92+
LINKER:-z,max-page-size=2097152
93+
)
94+
check_source_runs(
95+
CXX
96+
[[int main(void) { return 0; }]]
97+
PHP_HAVE_ALIGNMENT_FLAGS_CXX
98+
)
99+
cmake_pop_check_state()
100+
101+
if(PHP_HAVE_ALIGNMENT_FLAGS_CXX)
102+
target_link_options(
103+
php_configuration
104+
INTERFACE
105+
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:CXX>>:LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152;>
106+
)
107+
endif()
108+
else()
109+
check_linker_flag(
110+
CXX
111+
"LINKER:-z,max-page-size=2097152"
112+
_HAVE_ZMAX_PAGE_SIZE_CXX
113+
)
114+
115+
if(_HAVE_ZMAX_PAGE_SIZE_CXX)
116+
cmake_push_check_state(RESET)
117+
set(
118+
CMAKE_REQUIRED_LINK_OPTIONS
119+
LINKER:-z,max-page-size=2097152
120+
)
121+
check_source_runs(
122+
CXX
123+
[[int main(void) { return 0; }]]
124+
PHP_HAVE_ZMAX_PAGE_SIZE_CXX
125+
)
126+
cmake_pop_check_state()
127+
128+
if(PHP_HAVE_ZMAX_PAGE_SIZE_CXX)
129+
target_link_options(
130+
php_configuration
131+
INTERFACE
132+
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:CXX>>:LINKER:-z,max-page-size=2097152>
133+
)
134+
endif()
135+
endif()
136+
endif()
137+
138+
if(
139+
HAVE_ALIGNMENT_FLAGS_C
140+
OR HAVE_ALIGNMENT_FLAGS_CXX
141+
OR HAVE_ZMAX_PAGE_SIZE_C
142+
OR HAVE_ZMAX_PAGE_SIZE_CXX
143+
)
144+
message(CHECK_PASS "done")
145+
else()
146+
message(CHECK_FAIL "no")
147+
endif()

cmake/cmake/toolchains/template.cmake

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1-
# This is a list of all exitcodes or result variables required when
1+
# This is a list of all exit codes or result variables required when
22
# cross-compiling to help identify the target system when cross-compiling
3-
# emulator is not available.
3+
# emulator (CMAKE_CROSSCOMPILING_EMULATOR) is not available.
4+
5+
# Set the exit codes for the alignment segments checks.
6+
# See PHP/CheckSegmentsAlignment.cmake
7+
set(PHP_HAVE_ALIGNMENT_FLAGS_C_EXITCODE 0)
8+
set(PHP_HAVE_ZMAX_PAGE_SIZE_C_EXITCODE 0)
9+
set(PHP_HAVE_ALIGNMENT_FLAGS_CXX_EXITCODE 0)
10+
set(PHP_HAVE_ZMAX_PAGE_SIZE_CXX_EXITCODE 0)
411

512
# Set the exit code for check of GNU C compiler with broken strlen optimization
613
# (relevant only for GCC version 8.2).

0 commit comments

Comments
 (0)