Skip to content

Commit 6e5785b

Browse files
authored
WASM: Support 64bit integers, drop PHP 7.0 and 7.1 (#74)
Enables 64bit arithmetic in all PHP.wasm builds. In particular, this PR: * Builds PHP with ` -D__x86_64__ ` to enable 64bit integers and links the entire project with `-s WASM_BIGINT=1` to use the native JavaScript BigInt for handling large integers in the JavaScript module. * Adds the same ` -D__x86_64__ ` CLI arg to nearly all the WASM dependencies. The only exceptions are `libwebp` and `libopenssl` where adding that flag triggered compilation errors. We can very likely fix them, but I didn't find a good reason to so we'll keep using 32bit ints in two libraries until a good reason emerges. * Drops support for PHP 7.0 and 7.1. ## Implementation As it turns out, Emscripten and WebAssembly just support 64bit integers. You can build this program and you'll see ```c #include <stdio.h> #include <stdlib.h> int main() { printf("Data type sizes in this environment:\n"); printf("Size of int: %d bytes\n", SIZEOF_INT); printf("Size of long: %d bytes\n", SIZEOF_LONG); printf("Size of long long: %d bytes\n", SIZEOF_LONG_LONG); printf("Size of int64_t: %zu bytes\n", sizeof(int64_t)); return 0; } /** * Prints: * Size of int: 4 bytes * Size of long: 4 bytes * Size of long long: 8 bytes * Size of int64_t: 8 bytes */ ``` I'm not sure when that happened. Or was it always like that? In any case, PHP will use 64bit integers for its arithmetics and data types when the `__x86_64__` preprocessor flag is present. This PR adds that flag and rebuilds everything. Unfortunately, when PHP detects `__x86_64__`, it also assumes it can inline assembly instructions via `__asm__`. I don't believe this is supported in Emscripten – we could make sure with the Google team. In either case, I had to hack my way around it by setting the GLIBC macro to 0 in specific files via different techniques. We'll likely have to revisit and adjust this code in some way on every major PHP release. In an ideal scenario, we would contribute a PR to PHP core with preprocessor branches dedicated to WebAssembly builds. ### What's the net effect of this PR? * PHP uses the `long long` data type for 64bit integers * The JavaScript module uses BigInt class to handle large integers * We **do not** use the memory64 spec, 64bit pointers, or 64bit address space. I can see two reasons to switch to the 64bit memory space: * [Use more than 4GB of memory in the WASM module](https://spidermonkey.dev/blog/2025/01/15/is-memory64-actually-worth-using.html). * Potentially get a munmap()–supporting allocator and remove our custom PHP memory allocator. We may or may not get it by building with Memory64 and I'd say it's out of scope of this PR. Memory64 also has a downside: it [slows down the WASM program by about 10%](https://spidermonkey.dev/blog/2025/01/15/is-memory64-actually-worth-using.html): > By reserving 4GB of memory for all 32-bit WebAssembly modules, it is impossible to go out of bounds. The largest possible pointer value, 2^32-1, will simply land inside the reserved region of memory and trap. This means that, when running 32-bit wasm on a 64-bit system, we can omit all bounds checks entirely[5](https://spidermonkey.dev/blog/2025/01/15/is-memory64-actually-worth-using.html#fn:5). > > This optimization is impossible for Memory64. The size of the WebAssembly address space is the same as the size of the host address space. Therefore, we must pay the cost of bounds checks on every access, and as a result, Memory64 is slower. ## Testing instructions * Confirm all the CI tests pass. I've added a bunch of 64bit-specific tests.
1 parent 75ca755 commit 6e5785b

File tree

342 files changed

+158760
-182421
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

342 files changed

+158760
-182421
lines changed

package.json

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@
3333
"recompile:php:web:jspi:7.4": "nx recompile-php:jspi php-wasm-web -- --PHP_VERSION=7.4 ",
3434
"recompile:php:web:jspi:7.3": "nx recompile-php:jspi php-wasm-web -- --PHP_VERSION=7.3 ",
3535
"recompile:php:web:jspi:7.2": "nx recompile-php:jspi php-wasm-web -- --PHP_VERSION=7.2 ",
36-
"recompile:php:web:jspi:7.1": "nx recompile-php:jspi php-wasm-web -- --PHP_VERSION=7.1 ",
37-
"recompile:php:web:jspi:7.0": "nx recompile-php:jspi php-wasm-web -- --PHP_VERSION=7.0 ",
3836
"recompile:php:web:asyncify:all": "nx recompile-php:asyncify:all php-wasm-web",
3937
"recompile:php:web:asyncify:8.4": "nx recompile-php:asyncify php-wasm-web -- --PHP_VERSION=8.4 ",
4038
"recompile:php:web:asyncify:8.3": "nx recompile-php:asyncify php-wasm-web -- --PHP_VERSION=8.3 ",
@@ -44,8 +42,6 @@
4442
"recompile:php:web:asyncify:7.4": "nx recompile-php:asyncify php-wasm-web -- --PHP_VERSION=7.4 ",
4543
"recompile:php:web:asyncify:7.3": "nx recompile-php:asyncify php-wasm-web -- --PHP_VERSION=7.3 ",
4644
"recompile:php:web:asyncify:7.2": "nx recompile-php:asyncify php-wasm-web -- --PHP_VERSION=7.2 ",
47-
"recompile:php:web:asyncify:7.1": "nx recompile-php:asyncify php-wasm-web -- --PHP_VERSION=7.1 ",
48-
"recompile:php:web:asyncify:7.0": "nx recompile-php:asyncify php-wasm-web -- --PHP_VERSION=7.0 ",
4945
"recompile:php:node": "nx recompile-php:all php-wasm-node ",
5046
"recompile:php:node:jspi:all": "nx recompile-php:jspi:all php-wasm-node ",
5147
"recompile:php:node:jspi:8.4": "nx recompile-php:jspi php-wasm-node -- --PHP_VERSION=8.4 ",
@@ -56,8 +52,6 @@
5652
"recompile:php:node:jspi:7.4": "nx recompile-php:jspi php-wasm-node -- --PHP_VERSION=7.4 ",
5753
"recompile:php:node:jspi:7.3": "nx recompile-php:jspi php-wasm-node -- --PHP_VERSION=7.3 ",
5854
"recompile:php:node:jspi:7.2": "nx recompile-php:jspi php-wasm-node -- --PHP_VERSION=7.2 ",
59-
"recompile:php:node:jspi:7.1": "nx recompile-php:jspi php-wasm-node -- --PHP_VERSION=7.1 ",
60-
"recompile:php:node:jspi:7.0": "nx recompile-php:jspi php-wasm-node -- --PHP_VERSION=7.0 ",
6155
"recompile:php:node:asyncify:all": "nx recompile-php:asyncify:all php-wasm-node ",
6256
"recompile:php:node:asyncify:8.4": "nx recompile-php:asyncify php-wasm-node -- --PHP_VERSION=8.4 ",
6357
"recompile:php:node:asyncify:8.3": "nx recompile-php:asyncify php-wasm-node -- --PHP_VERSION=8.3 ",
@@ -66,9 +60,7 @@
6660
"recompile:php:node:asyncify:8.0": "nx recompile-php:asyncify php-wasm-node -- --PHP_VERSION=8.0 ",
6761
"recompile:php:node:asyncify:7.4": "nx recompile-php:asyncify php-wasm-node -- --PHP_VERSION=7.4 ",
6862
"recompile:php:node:asyncify:7.3": "nx recompile-php:asyncify php-wasm-node -- --PHP_VERSION=7.3 ",
69-
"recompile:php:node:asyncify:7.2": "nx recompile-php:asyncify php-wasm-node -- --PHP_VERSION=7.2 ",
70-
"recompile:php:node:asyncify:7.1": "nx recompile-php:asyncify php-wasm-node -- --PHP_VERSION=7.1 ",
71-
"recompile:php:node:asyncify:7.0": "nx recompile-php:asyncify php-wasm-node -- --PHP_VERSION=7.0 "
63+
"recompile:php:node:asyncify:7.2": "nx recompile-php:asyncify php-wasm-node -- --PHP_VERSION=7.2 "
7264
},
7365
"private": true,
7466
"dependencies": {

packages/php-wasm/compile/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,14 +222,14 @@ oniguruma/jspi/dist/root/lib/lib/libonig.a: base-image
222222
docker cp $$(docker create playground-php-wasm:oniguruma):/root/lib/include ./oniguruma/jspi/dist/root/lib/
223223

224224
libcurl_asyncify: libcurl/asyncify/dist/root/lib/lib/libcurl.a
225-
libcurl/asyncify/dist/root/lib/lib/libcurl.a: base-image libz libopenssl
225+
libcurl/asyncify/dist/root/lib/lib/libcurl.a: base-image libz libopenssl_asyncify
226226
mkdir -p ./libcurl/asyncify/dist/root/lib
227227
docker build -f ./libcurl/Dockerfile -t playground-php-wasm:libcurl . --progress=plain
228228
docker cp $$(docker create playground-php-wasm:libcurl):/root/curl-7.69.1/lib/.libs ./libcurl/asyncify/dist/root/lib/lib
229229
docker cp $$(docker create playground-php-wasm:libcurl):/root/curl-7.69.1/include/ ./libcurl/asyncify/dist/root/lib
230230

231231
libcurl_jspi: libcurl/jspi/dist/root/lib/lib/libcurl.a
232-
libcurl/jspi/dist/root/lib/lib/libcurl.a: base-image libz libopenssl
232+
libcurl/jspi/dist/root/lib/lib/libcurl.a: base-image libz libopenssl_jspi
233233
mkdir -p ./libcurl/jspi/dist/root/lib
234234
docker build -f ./libcurl/Dockerfile -t playground-php-wasm:libcurl . --progress=plain --build-arg JSPI=1
235235
docker cp $$(docker create playground-php-wasm:libcurl):/root/curl-7.69.1/lib/.libs ./libcurl/jspi/dist/root/lib/lib

packages/php-wasm/compile/base-image/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ RUN chmod a+x /root/replace-across-lines.sh
7979
# * Enables adding -sSIDE_MODULE when running emcc
8080
#
8181
# Usage:
82-
# EMCC_SKIP="-lz -lxml2" EMCC_FLAGS="-sSIDE_MODULE" emmake make
82+
# EMCC_SKIP="-lz -lxml2" EMCC_FLAGS=" -D__x86_64__ -sSIDE_MODULE" emmake make
8383
# ↑ ↑
8484
# ┌──────────┴─────────────┐ ┌──────────┴─────────────┐
8585
# │ skip those flags when │ │ add these flags when │
Binary file not shown.
Binary file not shown.

packages/php-wasm/compile/libcurl/Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ RUN CPPFLAGS="-I/root/lib/include " \
5959
RUN if [ "$JSPI" = "1" ]; then \
6060
source /root/emsdk/emsdk_env.sh && \
6161
EMCC_SKIP="-lc -lz -lcurl -lssl " \
62-
EMCC_FLAGS="-sSIDE_MODULE -Wl,--wrap=select -sSUPPORT_LONGJMP=wasm -fwasm-exceptions " emmake make || true; \
62+
EMCC_FLAGS=" -D__x86_64__ -sSIDE_MODULE -Wl,--wrap=select -sSUPPORT_LONGJMP=wasm -fwasm-exceptions " emmake make || true; \
6363
fi
6464

6565
RUN if [ "$JSPI" != "1" ]; then \
@@ -77,11 +77,11 @@ fi
7777
RUN if [ "$JSPI" != "1" ]; then \
7878
source /root/emsdk/emsdk_env.sh && \
7979
EMCC_SKIP="-lc -lz -lcurl -lssl " \
80-
EMCC_FLAGS="-sSIDE_MODULE -Wl,--wrap=select " emmake make -i || true; \
80+
EMCC_FLAGS=" -D__x86_64__ -sSIDE_MODULE -Wl,--wrap=select " emmake make -i || true; \
8181
fi
8282

8383
RUN if [ "$JSPI" != "1" ]; then \
8484
source /root/emsdk/emsdk_env.sh && \
8585
EMCC_SKIP="-lc -lz -lcurl -lssl " \
86-
EMCC_FLAGS="-sSIDE_MODULE -Wl,--wrap=select " emmake make install -i || true; \
86+
EMCC_FLAGS=" -D__x86_64__ -sSIDE_MODULE -Wl,--wrap=select " emmake make install -i || true; \
8787
fi
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../libcurl.la
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# libcurl.la - a libtool library file
2+
# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-13
3+
#
4+
# Please DO NOT delete this file!
5+
# It is necessary for linking the library.
6+
7+
# The name that we can dlopen(3).
8+
dlname=''
9+
10+
# Names of this library.
11+
library_names=''
12+
13+
# The name of the static archive.
14+
old_library='libcurl.a'
15+
16+
# Linker flags that cannot go in dependency_libs.
17+
inherited_linker_flags=''
18+
19+
# Libraries that this one depends upon.
20+
dependency_libs=' -L/root/lib/lib -lssl -lcrypto -lz'
21+
22+
# Names of additional weak libraries provided by this library
23+
weak_library_names=''
24+
25+
# Version information for libcurl.
26+
current=10
27+
age=6
28+
revision=0
29+
30+
# Is this an already installed library?
31+
installed=yes
32+
33+
# Should we warn about portability when linking against -modules?
34+
shouldnotlink=no
35+
36+
# Files to dlopen/dlpreopen
37+
dlopen=''
38+
dlpreopen=''
39+
40+
# Directory that this library needs to be installed in:
41+
libdir='/root/lib/lib'
Binary file not shown.

packages/php-wasm/compile/libedit/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ RUN cd libedit-20221030-3.1 && \
2525
# http://lists.busybox.net/pipermail/buildroot/2016-January/149100.html
2626
RUN cd libedit-20221030-3.1 && \
2727
source /root/emsdk/emsdk_env.sh && \
28-
EMCC_SKIP="-lc -lncurses " EMCC_FLAGS=" -sSIDE_MODULE -D__STDC_ISO_10646__=201103L " \
28+
EMCC_SKIP="-lc -lncurses " EMCC_FLAGS=" -D__x86_64__ -sSIDE_MODULE -D__STDC_ISO_10646__=201103L " \
2929
emmake make && \
3030
emmake make install

packages/php-wasm/compile/libiconv/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ RUN set -euxo pipefail; \
3232
RUN set -euxo pipefail; \
3333
source /root/emsdk/emsdk_env.sh; \
3434
export JSPI_FLAGS=$(if [ "$JSPI" = "1" ]; then echo "-sSUPPORT_LONGJMP=wasm -fwasm-exceptions"; else echo ""; fi) && \
35-
EMCC_FLAGS="-fPIC $JSPI_FLAGS" emmake make; \
35+
EMCC_FLAGS=" -D__x86_64__ -fPIC $JSPI_FLAGS" emmake make; \
3636
emmake make install;
3737

3838
RUN ls -R /root/install
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

packages/php-wasm/compile/libjpeg/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ RUN source /root/emsdk/emsdk_env.sh && \
2121
emcmake cmake -G"Unix Makefiles" -DCMAKE_INSTALL_DEFAULT_PREFIX=/root/lib
2222
RUN source /root/emsdk/emsdk_env.sh && \
2323
export JSPI_FLAGS=$(if [ "$JSPI" = "1" ]; then echo "-sSUPPORT_LONGJMP=wasm -fwasm-exceptions"; else echo ""; fi) && \
24-
EMCC_SKIP="-lc -lz" EMCC_FLAGS="-sSIDE_MODULE $JSPI_FLAGS" emmake make
24+
EMCC_SKIP="-lc -lz" EMCC_FLAGS=" -D__x86_64__ -sSIDE_MODULE $JSPI_FLAGS" emmake make
2525
RUN source /root/emsdk/emsdk_env.sh && \
2626
export JSPI_FLAGS=$(if [ "$JSPI" = "1" ]; then echo "-sSUPPORT_LONGJMP=wasm -fwasm-exceptions"; else echo ""; fi) && \
27-
EMCC_FLAGS="$JSPI_FLAGS" emmake make install
27+
EMCC_FLAGS=" -D__x86_64__ $JSPI_FLAGS" emmake make install
2828
RUN sed -i 's/lib32/lib/g' /root/lib/lib32/pkgconfig/libjpeg.pc
2929
# @TODO: Do not remove dependencies like this – it's too easy to miss something.
3030
# Instead, source them from another directory and end up with a clean build.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
3+
####### Any changes to this file will be overwritten by the next CMake run ####
4+
####### The input file was Config.cmake.in ########
5+
6+
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
7+
8+
macro(set_and_check _var _file)
9+
set(${_var} "${_file}")
10+
if(NOT EXISTS "${_file}")
11+
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
12+
endif()
13+
endmacro()
14+
15+
macro(check_required_components _NAME)
16+
foreach(comp ${${_NAME}_FIND_COMPONENTS})
17+
if(NOT ${_NAME}_${comp}_FOUND)
18+
if(${_NAME}_FIND_REQUIRED_${comp})
19+
set(${_NAME}_FOUND FALSE)
20+
endif()
21+
endif()
22+
endforeach()
23+
endmacro()
24+
25+
####################################################################################
26+
27+
include("${CMAKE_CURRENT_LIST_DIR}/libjpeg-turboTargets.cmake")
28+
check_required_components("libjpeg-turbo")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# This is a basic version file for the Config-mode of find_package().
2+
# It is used by write_basic_package_version_file() as input file for configure_file()
3+
# to create a version-file which can be installed along a config.cmake file.
4+
#
5+
# The created file sets PACKAGE_VERSION_EXACT if the current version string and
6+
# the requested version string are exactly the same and it sets
7+
# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version.
8+
# The variable CVF_VERSION must be set before calling configure_file().
9+
10+
set(PACKAGE_VERSION "3.0.3")
11+
12+
if (PACKAGE_FIND_VERSION_RANGE)
13+
# Package version must be in the requested version range
14+
if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN)
15+
OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX)
16+
OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX)))
17+
set(PACKAGE_VERSION_COMPATIBLE FALSE)
18+
else()
19+
set(PACKAGE_VERSION_COMPATIBLE TRUE)
20+
endif()
21+
else()
22+
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
23+
set(PACKAGE_VERSION_COMPATIBLE FALSE)
24+
else()
25+
set(PACKAGE_VERSION_COMPATIBLE TRUE)
26+
if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
27+
set(PACKAGE_VERSION_EXACT TRUE)
28+
endif()
29+
endif()
30+
endif()
31+
32+
33+
# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
34+
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "4" STREQUAL "")
35+
return()
36+
endif()
37+
38+
# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
39+
if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "4")
40+
math(EXPR installedBits "4 * 8")
41+
set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
42+
set(PACKAGE_VERSION_UNSUITABLE TRUE)
43+
endif()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#----------------------------------------------------------------
2+
# Generated CMake target import file for configuration "Release".
3+
#----------------------------------------------------------------
4+
5+
# Commands may need to know the format version.
6+
set(CMAKE_IMPORT_FILE_VERSION 1)
7+
8+
# Import target "libjpeg-turbo::jpeg" for configuration "Release"
9+
set_property(TARGET libjpeg-turbo::jpeg APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
10+
set_target_properties(libjpeg-turbo::jpeg PROPERTIES
11+
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
12+
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib32/libjpeg.a"
13+
)
14+
15+
list(APPEND _cmake_import_check_targets libjpeg-turbo::jpeg )
16+
list(APPEND _cmake_import_check_files_for_libjpeg-turbo::jpeg "${_IMPORT_PREFIX}/lib32/libjpeg.a" )
17+
18+
# Import target "libjpeg-turbo::turbojpeg" for configuration "Release"
19+
set_property(TARGET libjpeg-turbo::turbojpeg APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
20+
set_target_properties(libjpeg-turbo::turbojpeg PROPERTIES
21+
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
22+
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib32/libturbojpeg.a"
23+
)
24+
25+
list(APPEND _cmake_import_check_targets libjpeg-turbo::turbojpeg )
26+
list(APPEND _cmake_import_check_files_for_libjpeg-turbo::turbojpeg "${_IMPORT_PREFIX}/lib32/libturbojpeg.a" )
27+
28+
# Import target "libjpeg-turbo::turbojpeg-static" for configuration "Release"
29+
set_property(TARGET libjpeg-turbo::turbojpeg-static APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
30+
set_target_properties(libjpeg-turbo::turbojpeg-static PROPERTIES
31+
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
32+
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib32/libturbojpeg.a"
33+
)
34+
35+
list(APPEND _cmake_import_check_targets libjpeg-turbo::turbojpeg-static )
36+
list(APPEND _cmake_import_check_files_for_libjpeg-turbo::turbojpeg-static "${_IMPORT_PREFIX}/lib32/libturbojpeg.a" )
37+
38+
# Import target "libjpeg-turbo::jpeg-static" for configuration "Release"
39+
set_property(TARGET libjpeg-turbo::jpeg-static APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
40+
set_target_properties(libjpeg-turbo::jpeg-static PROPERTIES
41+
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
42+
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib32/libjpeg.a"
43+
)
44+
45+
list(APPEND _cmake_import_check_targets libjpeg-turbo::jpeg-static )
46+
list(APPEND _cmake_import_check_files_for_libjpeg-turbo::jpeg-static "${_IMPORT_PREFIX}/lib32/libjpeg.a" )
47+
48+
# Commands beyond this point should not need to know the version.
49+
set(CMAKE_IMPORT_FILE_VERSION)

0 commit comments

Comments
 (0)