Skip to content

Commit 28400cf

Browse files
committed
Fix nits
- Synced adding flags. - Rechecked -undefined dynamic_lookup flag on macOS and confirming it. - Removed Bootstrap.cmake file in favor of direct inlined inclusion of the code.
1 parent 5fc8f7b commit 28400cf

File tree

11 files changed

+119
-86
lines changed

11 files changed

+119
-86
lines changed

cmake/CMakeLists.txt

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,64 @@ endif()
4242
set(CMAKE_C_STANDARD 99)
4343
set(CMAKE_C_STANDARD_REQUIRED TRUE)
4444

45+
################################################################################
46+
# Create interface targets providing usage requirements.
47+
################################################################################
48+
49+
# Usage requirements for all PHP-related targets in the build.
50+
add_library(php_config INTERFACE)
51+
add_library(PHP::config ALIAS php_config)
52+
target_include_directories(
53+
php_config
54+
INTERFACE
55+
${PHP_BINARY_DIR}
56+
${PHP_SOURCE_DIR}
57+
)
58+
59+
# Interface library that ties objects and configuration together for PHP SAPIs.
60+
add_library(php_sapi INTERFACE)
61+
add_library(PHP::sapi ALIAS php_sapi)
62+
target_link_libraries(php_sapi INTERFACE PHP::config)
63+
4564
################################################################################
4665
# Configure project.
4766
################################################################################
4867

49-
include(cmake/Bootstrap.cmake)
68+
define_property(
69+
TARGET
70+
PROPERTY PHP_CLI
71+
BRIEF_DOCS "Whether the PHP SAPI or extension is CLI-based"
72+
)
73+
74+
define_property(
75+
TARGET
76+
PROPERTY PHP_SAPI_FASTCGI
77+
BRIEF_DOCS "Whether the PHP SAPI is FastCGI-based"
78+
)
79+
80+
# Check whether IPO/LTO can be enabled.
81+
include(PHP/Optimization)
82+
83+
# Set CMAKE_POSITION_INDEPENDENT_CODE.
84+
include(PHP/PositionIndependentCode)
85+
86+
# Configure build types.
87+
include(cmake/BuildTypes.cmake)
88+
89+
# Set platform-specific configuration.
90+
include(cmake/Platform.cmake)
91+
92+
# Set PHP configuration options and variables.
93+
include(cmake/Configuration.cmake)
94+
95+
# Check requirements.
96+
include(cmake/Requirements.cmake)
97+
98+
# Run PHP configuration checks.
99+
include(cmake/ConfigureChecks.cmake)
100+
101+
# Check compilation options.
102+
include(cmake/Flags.cmake)
50103

51104
add_subdirectory(sapi)
52105
add_subdirectory(ext)
@@ -69,9 +122,12 @@ include(PHP/Stubs)
69122
# Check thread safety.
70123
include(PHP/ThreadSafety)
71124

125+
################################################################################
72126
# Execute all deferred calls. Calls are additionally sorted with natural
73127
# comparison method by their IDs. If call hasn't set any ID number, CMake
74128
# assigns it a default value of __<number>.
129+
################################################################################
130+
75131
block()
76132
cmake_language(DEFER GET_CALL_IDS ids)
77133
list(SORT ids COMPARE NATURAL)

cmake/cmake/Bootstrap.cmake

Lines changed: 0 additions & 62 deletions
This file was deleted.

cmake/cmake/ConfigureChecks.cmake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
Project-wide configuration checks.
33
#]=============================================================================]
44

5+
message(STATUS "")
6+
message(STATUS "")
7+
message(STATUS "Running system checks")
8+
message(STATUS "=====================")
9+
message(STATUS "")
10+
511
include_guard(GLOBAL)
612

713
include(CheckFunctionExists)

cmake/cmake/Flags.cmake

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ if(PHP_ADDRESS_SANITIZER)
289289
target_link_options(
290290
php_config
291291
INTERFACE
292-
$<$<COMPILE_LANGUAGE:ASM,C,CXX>:-fsanitize=address>
292+
$<$<LINK_LANGUAGE:C,CXX>:-fsanitize=address>
293293
)
294294

295295
target_compile_definitions(
@@ -336,7 +336,7 @@ if(PHP_UNDEFINED_SANITIZER)
336336
target_link_options(
337337
php_config
338338
INTERFACE
339-
$<$<COMPILE_LANGUAGE:ASM,C,CXX>:-fsanitize=undefined;-fno-sanitize-recover=undefined>
339+
$<$<LINK_LANGUAGE:C,CXX>:-fsanitize=undefined;-fno-sanitize-recover=undefined>
340340
)
341341

342342
# Disable object-size sanitizer, because it is incompatible with the
@@ -368,7 +368,7 @@ if(PHP_UNDEFINED_SANITIZER)
368368
target_link_options(
369369
php_config
370370
INTERFACE
371-
$<$<COMPILE_LANGUAGE:ASM,C,CXX>:-fno-sanitize=object-size>
371+
$<$<LINK_LANGUAGE:C,CXX>:-fno-sanitize=object-size>
372372
)
373373
endif()
374374

cmake/cmake/modules/PHP/CheckSegmentsAlignment.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ if(PHP_HAS_ALIGNMENT_FLAGS_C)
4848
target_link_options(
4949
php_config
5050
INTERFACE
51-
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:ASM,C>>:LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152>
51+
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:C>>:LINKER:-z,common-page-size=2097152;LINKER:-z,max-page-size=2097152>
5252
)
5353
else()
5454
cmake_push_check_state(RESET)
@@ -69,7 +69,7 @@ else()
6969
target_link_options(
7070
php_config
7171
INTERFACE
72-
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:ASM,C>>:LINKER:-z,max-page-size=2097152>
72+
$<$<AND:$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>,$<LINK_LANGUAGE:C>>:LINKER:-z,max-page-size=2097152>
7373
)
7474
endif()
7575
endif()

cmake/cmake/platforms/Darwin.cmake

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@ endif()
2727
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
2828
set(DARWIN TRUE)
2929

30-
# TODO: This is still needed for shared extensions on macOS, otherwise
31-
# undefined symbol errors happen in the linking step when using Clang.
30+
# Set -undefined <treatment> linker flag to "dynamic_lookup" (default
31+
# <treatment> is "error"). This is needed for shared and module PHP targets on
32+
# macOS, otherwise undefined symbol errors happen in the linking step.
33+
# Autotools with libtool here uses older "suppress" treatment instead and
34+
# "-flat_namespace" linker option.
3235
check_linker_flag(
3336
C
3437
"LINKER:-undefined,dynamic_lookup"
@@ -38,7 +41,20 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
3841
target_link_options(
3942
php_config
4043
INTERFACE
41-
$<$<IN_LIST:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY;SHARED_LIBRARY>:LINKER:-undefined,dynamic_lookup>
44+
$<$<AND:$<LINK_LANGUAGE:C>,$<IN_LIST:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY;SHARED_LIBRARY>>:LINKER:-undefined,dynamic_lookup>
45+
)
46+
endif()
47+
48+
check_linker_flag(
49+
CXX
50+
"LINKER:-undefined,dynamic_lookup"
51+
PHP_HAS_UNDEFINED_DYNAMIC_LOOKUP_FLAG_CXX
52+
)
53+
if(PHP_HAS_UNDEFINED_DYNAMIC_LOOKUP_FLAG_CXX)
54+
target_link_options(
55+
php_config
56+
INTERFACE
57+
$<$<AND:$<LINK_LANGUAGE:CXX>,$<IN_LIST:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY;SHARED_LIBRARY>>:LINKER:-undefined,dynamic_lookup>
4258
)
4359
endif()
4460
endif()

cmake/ext/phar/CMakeLists.txt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,14 @@ target_sources(
8181

8282
target_compile_definitions(php_ext_phar PRIVATE ZEND_ENABLE_STATIC_TSRMLS_CACHE)
8383

84-
target_link_options(
85-
php_ext_phar
86-
PRIVATE
87-
# Silence irrelevant-to-us warning in release builds.
88-
$<$<AND:$<NOT:$<CONFIG:Debug,DebugAssertions>>,$<C_COMPILER_ID:MSVC>>:LINKER:/IGNORE:4089>
89-
)
84+
if(MSVC AND TODO)
85+
target_link_options(
86+
php_ext_phar
87+
PRIVATE
88+
# Silence irrelevant warning in release builds.
89+
$<$<NOT:$<CONFIG:Debug,DebugAssertions>>:LINKER:/IGNORE:4089>
90+
)
91+
endif()
9092

9193
add_dependencies(php_ext_phar php_ext_hash php_ext_spl)
9294

cmake/ext/xsl/CMakeLists.txt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,13 @@ target_compile_definitions(
7474
$<$<PLATFORM_ID:Windows>:LIBXSLT_STATIC>
7575
)
7676

77-
target_link_options(
78-
php_ext_xsl
79-
PRIVATE
80-
$<$<AND:$<CONFIG:Debug,DebugAssertions>,$<C_COMPILER_ID:MSVC>>:LINKER:/nodefaultlib:msvcrt>
81-
)
77+
if(MSVC)
78+
target_link_options(
79+
php_ext_xsl
80+
PRIVATE
81+
$<$<CONFIG:Debug,DebugAssertions>:LINKER:/nodefaultlib:msvcrt>
82+
)
83+
endif()
8284

8385
include(Packages/LibXml2)
8486

cmake/sapi/apache2handler/CMakeLists.txt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,20 @@ if(CMAKE_SYSTEM_NAME STREQUAL "AIX" AND EXISTS ${Apache_LIBEXECDIR}/httpd.exp)
9494
target_link_options(
9595
php_sapi_apache2handler
9696
PRIVATE
97-
"$<$<PLATFORM_ID:AIX>LINKER:-brtl;LINKER:-bI${Apache_LIBEXECDIR}/httpd.exp>"
97+
"$<$<LINKER_LANGUAGE:C>:LINKER:-brtl;LINKER:-bI${Apache_LIBEXECDIR}/httpd.exp>"
98+
)
99+
endif()
100+
101+
check_linker_flag(
102+
CXX
103+
"LINKER:-brtl;LINKER:-bI${Apache_LIBEXECDIR}/httpd.exp"
104+
PHP_HAS_BRTL_FLAG_CXX
105+
)
106+
if(PHP_HAS_BRTL_FLAG_CXX)
107+
target_link_options(
108+
php_sapi_apache2handler
109+
PRIVATE
110+
"$<$<LINKER_LANGUAGE:CXX>:LINKER:-brtl;LINKER:-bI${Apache_LIBEXECDIR}/httpd.exp>"
98111
)
99112
endif()
100113
endif()

cmake/sapi/fuzzer/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ if(LIB_FUZZING_ENGINE OR DEFINED ENV{LIB_FUZZING_ENGINE})
8080
target_link_options(
8181
php_sapi_fuzzer
8282
INTERFACE
83-
"$<$<COMPILE_LANGUAGE:ASM,C,CXX>:${libFuzzingEngine}>"
83+
"$<$<LINK_LANGUAGE:C,CXX>:${libFuzzingEngine}>"
8484
)
8585
else()
8686
cmake_push_check_state(RESET)
@@ -124,7 +124,7 @@ else()
124124
target_link_options(
125125
php_sapi_fuzzer
126126
INTERFACE
127-
$<$<COMPILE_LANGUAGE:ASM,C,CXX>:-fsanitize=fuzzer>
127+
$<$<LINK_LANGUAGE:C,CXX>:-fsanitize=fuzzer>
128128
)
129129
endif()
130130

0 commit comments

Comments
 (0)