Skip to content

Commit bb12f55

Browse files
committed
Fix cross-compilation when generating files with built PHP binary
1 parent 134b7e0 commit bb12f55

File tree

4 files changed

+155
-154
lines changed

4 files changed

+155
-154
lines changed

cmake/Zend/CMakeLists.txt

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -456,34 +456,20 @@ endif()
456456

457457
if(PHPSystem_EXECUTABLE)
458458
set(PHP_EXECUTABLE ${PHPSystem_EXECUTABLE})
459-
elseif(
460-
NOT CMAKE_CROSSCOMPILING
461-
OR (CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
462-
)
459+
elseif(NOT CMAKE_CROSSCOMPILING)
463460
set(PHP_EXECUTABLE "$<TARGET_FILE:php_cli>")
461+
elseif(CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
462+
set(PHP_EXECUTABLE "${CMAKE_CROSSCOMPILING_EMULATOR};$<TARGET_FILE:php_cli>")
464463
endif()
465464

466465
if(PHP_EXECUTABLE)
467466
# Run the Zend/zend_vm_gen.php script.
468-
file(
469-
GENERATE
470-
OUTPUT CMakeFiles/GenerateZendVm.cmake
471-
CONTENT [[
472-
if(EXISTS ${PHP_EXECUTABLE})
473-
execute_process(
474-
COMMAND ${PHP_EXECUTABLE} ${CURRENT_SOURCE_DIR}/zend_vm_gen.php
475-
)
476-
endif()
477-
]]
478-
)
479-
480467
add_custom_command(
481468
OUTPUT zend_vm
482-
COMMAND ${CMAKE_COMMAND}
483-
-D PHP_EXECUTABLE=${PHP_EXECUTABLE}
484-
-D CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
485-
-P CMakeFiles/GenerateZendVm.cmake
486-
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/zend_vm_execute.skl
469+
COMMAND ${PHP_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/zend_vm_gen.php
470+
DEPENDS
471+
php_cli
472+
${CMAKE_CURRENT_SOURCE_DIR}/zend_vm_execute.skl
487473
COMMENT "[Zend] Regenerating zend_vm_execute.h and zend_vm_opcodes.{h,c}"
488474
VERBATIM
489475
)

cmake/cmake/toolchains/template.cmake

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@
22

33
# These are always required to set:
44
set(CMAKE_C_COMPILER "")
5-
set(CMAKE_C_COMPILER_ID "")
6-
set(CMAKE_C_COMPILER_VERSION "")
75
set(CMAKE_CXX_COMPILER "")
8-
set(CMAKE_CXX_COMPILER_ID "")
9-
set(CMAKE_CXX_COMPILER_VERSION "")
106
set(CMAKE_SYSTEM_NAME "")
7+
set(CMAKE_SYSTEM_PROCESSOR "")
118
set(CMAKE_FIND_ROOT_PATH "")
129

1310
# This is a list of all exit codes or result variables required when

cmake/ext/phar/CMakeLists.txt

Lines changed: 140 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -73,114 +73,153 @@ endif()
7373
# Generate files.
7474
################################################################################
7575

76-
# When cross-compiling without emulator PHP CLI target executable cannot be run.
77-
if(
78-
NOT CMAKE_CROSSCOMPILING
79-
OR (CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
80-
)
81-
block()
82-
# Create CMake script that generates phar.phar file.
83-
file(
84-
GENERATE
85-
OUTPUT CMakeFiles/GeneratePhar.cmake
86-
CONTENT [[
87-
# Generate phar.php.
88-
if(EXT_PHAR_SHARED OR BUILD_SHARED_LIBS)
89-
set(
90-
phar_shared_options
91-
-d extension_dir=${PHP_BINARY_DIR}/modules
92-
-d extension=phar
93-
)
94-
endif()
95-
96-
execute_process(
97-
COMMAND
98-
${PHP_EXECUTABLE}
99-
-n
100-
${phar_shared_options}
101-
-d open_basedir=
102-
-d output_buffering=0
103-
-d memory_limit=-1
104-
-d phar.readonly=0
105-
${CURRENT_SOURCE_DIR}/build_precommand.php
106-
OUTPUT_FILE ${CURRENT_BINARY_DIR}/phar.php
107-
OUTPUT_QUIET
108-
)
109-
110-
# Generate phar.phar.
111-
execute_process(
112-
COMMAND
113-
${PHP_EXECUTABLE}
114-
-n
115-
${phar_shared_options}
116-
-d open_basedir=
117-
-d output_buffering=0
118-
-d memory_limit=-1
119-
-d phar.readonly=0
120-
${CURRENT_BINARY_DIR}/phar.php
121-
pack
122-
-f ${CURRENT_BINARY_DIR}/phar.phar
123-
-a pharcommand
124-
-c auto
125-
-p 0
126-
-s ${CURRENT_SOURCE_DIR}/phar/phar.php
127-
-h sha1
128-
-b ${INSTALL_FULL_BINDIR}/${php_cli_filename}
129-
${CURRENT_SOURCE_DIR}/phar
130-
)
131-
132-
# Set phar.phar permissions.
133-
file(
134-
CHMOD
135-
${CURRENT_BINARY_DIR}/phar.phar
136-
FILE_PERMISSIONS
137-
OWNER_READ
138-
OWNER_WRITE
139-
OWNER_EXECUTE
140-
GROUP_READ
141-
GROUP_WRITE
142-
GROUP_EXECUTE
143-
WORLD_READ
144-
WORLD_EXECUTE
145-
)
146-
]]
147-
)
76+
if(NOT CMAKE_CROSSCOMPILING)
77+
set(PHP_EXECUTABLE "$<TARGET_FILE:php_cli>")
78+
elseif(CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
79+
set(PHP_EXECUTABLE "${CMAKE_CROSSCOMPILING_EMULATOR};$<TARGET_FILE:php_cli>")
80+
endif()
14881

149-
file(
150-
GLOB_RECURSE
151-
dependent_files
152-
${CMAKE_CURRENT_SOURCE_DIR}/phar/*.inc
153-
${CMAKE_CURRENT_SOURCE_DIR}/phar/*.php
82+
# Generate phar.php.
83+
if(PHP_EXECUTABLE)
84+
file(
85+
GLOB_RECURSE
86+
dependent_files
87+
${CMAKE_CURRENT_SOURCE_DIR}/phar/*.inc
88+
${CMAKE_CURRENT_SOURCE_DIR}/phar/*.php
89+
)
90+
91+
if(EXT_PHAR_SHARED OR BUILD_SHARED_LIBS)
92+
set(
93+
phar_shared_options
94+
-d extension_dir=${PHP_BINARY_DIR}/modules
95+
-d extension=phar
15496
)
97+
endif()
98+
99+
add_custom_command(
100+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/phar.php
101+
COMMAND
102+
${PHP_EXECUTABLE}
103+
-n
104+
${phar_shared_options}
105+
-d open_basedir=
106+
-d output_buffering=0
107+
-d memory_limit=-1
108+
-d phar.readonly=0
109+
${CMAKE_CURRENT_SOURCE_DIR}/build_precommand.php
110+
> ${CMAKE_CURRENT_BINARY_DIR}/phar.php
111+
COMMENT "[ext/phar] Generating phar.php"
112+
VERBATIM
113+
)
155114

156-
add_custom_command(
157-
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/phar.phar
115+
add_custom_command(
116+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/phar.phar
117+
COMMAND
118+
${PHP_EXECUTABLE}
119+
-n
120+
${phar_shared_options}
121+
-d open_basedir=
122+
-d output_buffering=0
123+
-d memory_limit=-1
124+
-d phar.readonly=0
125+
${CMAKE_CURRENT_BINARY_DIR}/phar.php
126+
pack
127+
-f ${CMAKE_CURRENT_BINARY_DIR}/phar.phar
128+
-a pharcommand
129+
-c auto
130+
-p 0
131+
-s ${CMAKE_CURRENT_SOURCE_DIR}/phar/phar.php
132+
-h sha1
133+
-b "$<TARGET_FILE:php_cli>"
134+
${CMAKE_CURRENT_SOURCE_DIR}/phar
135+
DEPENDS
136+
${CMAKE_CURRENT_BINARY_DIR}/phar.php
137+
COMMENT "[ext/phar] Generating phar.phar"
138+
VERBATIM
139+
)
140+
141+
file(
142+
GENERATE
143+
OUTPUT CMakeFiles/GeneratePhar.cmake
144+
CONTENT [[
145+
# Set phar.phar permissions.
146+
file(
147+
CHMOD
148+
${CURRENT_BINARY_DIR}/phar.phar
149+
FILE_PERMISSIONS
150+
OWNER_READ
151+
OWNER_WRITE
152+
OWNER_EXECUTE
153+
GROUP_READ
154+
GROUP_WRITE
155+
GROUP_EXECUTE
156+
WORLD_READ
157+
WORLD_EXECUTE
158+
)
159+
]]
160+
)
161+
162+
add_custom_command(
163+
OUTPUT php_phar_generated_phar
164+
COMMAND
165+
${CMAKE_COMMAND}
166+
-D CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
167+
-P CMakeFiles/GeneratePhar.cmake
168+
DEPENDS
169+
${CMAKE_CURRENT_BINARY_DIR}/phar.phar
170+
COMMENT "[ext/phar] Generating phar"
171+
)
172+
173+
add_custom_target(
174+
php_phar_generate_file
175+
ALL
176+
DEPENDS
177+
php_cli
178+
php_phar
179+
${dependent_files}
180+
php_phar_generated_phar
181+
)
182+
set_property(SOURCE php_phar_generated_phar PROPERTY SYMBOLIC TRUE)
183+
184+
# Install phar.phar file to destination. Here a duplicate phar.phar generation
185+
# step is used to generate it to a destination directory because of the
186+
# install prefix used in shebang (when using 'cmake --install --prefix ...').
187+
install(CODE "
188+
execute_process(
158189
COMMAND
159-
${CMAKE_COMMAND}
160-
-D EXT_PHAR_SHARED=${EXT_PHAR_SHARED}
161-
-D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
162-
-D PHP_BINARY_DIR=${PHP_BINARY_DIR}
163-
-D PHP_EXECUTABLE=$<TARGET_FILE:php_cli>
164-
-D php_cli_filename=$<TARGET_FILE_NAME:php_cli>
165-
-D CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
166-
-D CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
167-
-D INSTALL_FULL_BINDIR=${CMAKE_INSTALL_FULL_BINDIR}
168-
-P CMakeFiles/GeneratePhar.cmake
169-
DEPENDS
170-
php_cli
171-
php_phar
172-
${dependent_files}
173-
COMMENT "[ext/phar] Generating phar.phar"
190+
${PHP_EXECUTABLE}
191+
-n
192+
${phar_shared_options}
193+
-d open_basedir=
194+
-d output_buffering=0
195+
-d memory_limit=-1
196+
-d phar.readonly=0
197+
${CMAKE_CURRENT_BINARY_DIR}/phar.php
198+
pack
199+
-f \${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/phar.phar
200+
-a pharcommand
201+
-c auto
202+
-p 0
203+
-s ${CMAKE_CURRENT_SOURCE_DIR}/phar/phar.php
204+
-h sha1
205+
-b \${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/$<TARGET_FILE_NAME:php_cli>
206+
${CMAKE_CURRENT_SOURCE_DIR}/phar
174207
)
175208
176-
# Create target which consumes the command via DEPENDS.
177-
add_custom_target(
178-
php_phar_generated_files
179-
ALL
180-
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/phar.phar
181-
COMMENT "[ext/phar] Generating phar files"
209+
file(
210+
CHMOD
211+
\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/phar.phar
212+
FILE_PERMISSIONS
213+
OWNER_READ
214+
OWNER_WRITE
215+
OWNER_EXECUTE
216+
GROUP_READ
217+
GROUP_WRITE
218+
GROUP_EXECUTE
219+
WORLD_READ
220+
WORLD_EXECUTE
182221
)
183-
endblock()
222+
")
184223
endif()
185224

186225
# Man documentation.
@@ -193,9 +232,3 @@ install(
193232
${CMAKE_CURRENT_BINARY_DIR}/phar.phar.1
194233
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
195234
)
196-
197-
install(
198-
FILES
199-
${CMAKE_CURRENT_BINARY_DIR}/phar.phar
200-
DESTINATION ${CMAKE_INSTALL_BINDIR}
201-
)

cmake/ext/tokenizer/CMakeLists.txt

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -39,34 +39,19 @@ add_dependencies(php_tokenizer Zend::Zend)
3939

4040
if(PHPSystem_EXECUTABLE)
4141
set(PHP_EXECUTABLE ${PHPSystem_EXECUTABLE})
42-
elseif(
43-
NOT CMAKE_CROSSCOMPILING
44-
OR (CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
45-
)
42+
elseif(NOT CMAKE_CROSSCOMPILING)
4643
set(PHP_EXECUTABLE "$<TARGET_FILE:php_cli>")
44+
elseif(CMAKE_CROSSCOMPILING AND CMAKE_CROSSCOMPILING_EMULATOR)
45+
set(PHP_EXECUTABLE "${CMAKE_CROSSCOMPILING_EMULATOR};$<TARGET_FILE:php_cli>")
4746
endif()
4847

4948
if(PHP_EXECUTABLE)
50-
# Run the tokenizer_data_gen.php script.
51-
file(
52-
GENERATE
53-
OUTPUT CMakeFiles/GenerateTokenizerData.cmake
54-
CONTENT [[
55-
if(EXISTS ${PHP_EXECUTABLE})
56-
execute_process(
57-
COMMAND ${PHP_EXECUTABLE} ${CURRENT_SOURCE_DIR}/tokenizer_data_gen.php
58-
)
59-
endif()
60-
]]
61-
)
62-
6349
add_custom_command(
6450
OUTPUT php_tokenizer_data
65-
COMMAND ${CMAKE_COMMAND}
66-
-D PHP_EXECUTABLE=${PHP_EXECUTABLE}
67-
-D CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
68-
-P CMakeFiles/GenerateTokenizerData.cmake
69-
DEPENDS ${PHP_SOURCE_DIR}/Zend/zend_language_parser.y
51+
COMMAND ${PHP_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tokenizer_data_gen.php
52+
DEPENDS
53+
php_cli
54+
${PHP_SOURCE_DIR}/Zend/zend_language_parser.y
7055
COMMENT "[ext/tokenizer] Regenerating ext/tokenizer/tokenizer_data.c"
7156
VERBATIM
7257
)

0 commit comments

Comments
 (0)