Skip to content

Commit 3eb4be5

Browse files
committed
unix: upgrade libffi 3.3 -> 3.4 (except Linux musl)
On Linux musl, we encounter a missing `linux/limits.h` include. Possibly from building with ancient Linux headers.
1 parent 0ecedff commit 3eb4be5

File tree

5 files changed

+96
-17
lines changed

5 files changed

+96
-17
lines changed

cpython-unix/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ $(OUTDIR)/kbproto-$(KBPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS
120120
$(OUTDIR)/libffi-3.3-$(LIBFFI_3.3_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libffi-3.3.sh
121121
$(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libffi-3.3
122122

123+
$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libffi.sh
124+
$(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libffi
125+
123126
$(OUTDIR)/libpthread-stubs-$(LIBPTHREAD_STUBS_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libpthread-stubs.sh $(OUTDIR)/image-$(DOCKER_IMAGE_BUILD).tar
124127
$(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libpthread-stubs
125128

@@ -274,6 +277,7 @@ PYTHON_DEPENDS := \
274277
$(if $(NEED_EXPAT),$(OUTDIR)/expat-$(EXPAT_VERSION)-$(PACKAGE_SUFFIX).tar) \
275278
$(if $(NEED_LIBEDIT),$(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar) \
276279
$(if $(NEED_LIBFFI_3_3),$(OUTDIR)/libffi-3.3-$(LIBFFI_3.3_VERSION)-$(PACKAGE_SUFFIX).tar) \
280+
$(if $(NEED_LIBFFI),$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar) \
277281
$(if $(NEED_m4),$(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar) \
278282
$(if $(NEED_MPDECIMAL),$(OUTDIR)/mpdecimal-$(MPDECIMAL_VERSION)-$(PACKAGE_SUFFIX).tar) \
279283
$(if $(NEED_NCURSES),$(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar) \

cpython-unix/build-libffi.sh

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#!/usr/bin/env bash
2+
# This Source Code Form is subject to the terms of the Mozilla Public
3+
# License, v. 2.0. If a copy of the MPL was not distributed with this
4+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
5+
6+
set -ex
7+
8+
ROOT=`pwd`
9+
10+
export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH
11+
12+
tar -xf libffi-${LIBFFI_VERSION}.tar.gz
13+
14+
pushd libffi-${LIBFFI_VERSION}
15+
16+
# Upstream commit ce077e5565366171aa1b4438749b0922fce887a4 to resolve a missing declaration.
17+
patch -p1 << 'EOF'
18+
diff --git a/include/ffi_common.h b/include/ffi_common.h
19+
index 2bd31b0..c53a794 100644
20+
--- a/include/ffi_common.h
21+
+++ b/include/ffi_common.h
22+
@@ -128,6 +128,10 @@ void *ffi_data_to_code_pointer (void *data) FFI_HIDDEN;
23+
static trampoline. */
24+
int ffi_tramp_is_present (void *closure) FFI_HIDDEN;
25+
26+
+/* Return a file descriptor of a temporary zero-sized file in a
27+
+ writable and executable filesystem. */
28+
+int open_temp_exec_file(void) FFI_HIDDEN;
29+
+
30+
/* Extended cif, used in callback from assembly routine */
31+
typedef struct
32+
{
33+
diff --git a/src/tramp.c b/src/tramp.c
34+
index 7e005b0..5f19b55 100644
35+
--- a/src/tramp.c
36+
+++ b/src/tramp.c
37+
@@ -39,6 +39,10 @@
38+
#ifdef __linux__
39+
#define _GNU_SOURCE 1
40+
#endif
41+
+
42+
+#include <ffi.h>
43+
+#include <ffi_common.h>
44+
+
45+
#include <stdio.h>
46+
#include <unistd.h>
47+
#include <stdlib.h>
48+
EOF
49+
50+
EXTRA_CONFIGURE=
51+
52+
# mkostemp() was introduced in macOS 10.10 and libffi doesn't have
53+
# runtime guards for it. So ban the symbol when targeting old macOS.
54+
if [ "${APPLE_MIN_DEPLOYMENT_TARGET}" = "10.9" ]; then
55+
EXTRA_CONFIGURE="${EXTRA_CONFIGURE} ac_cv_func_mkostemp=no"
56+
fi
57+
58+
CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \
59+
--build=${BUILD_TRIPLE} \
60+
--host=${TARGET_TRIPLE} \
61+
--prefix=/tools/deps \
62+
--disable-shared \
63+
${EXTRA_CONFIGURE}
64+
65+
make -j ${NUM_CPUS}
66+
make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out

cpython-unix/build.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,6 +1023,7 @@ def main():
10231023
"inputproto",
10241024
"kbproto",
10251025
"libffi-3.3",
1026+
"libffi",
10261027
"libpthread-stubs",
10271028
"m4",
10281029
"mpdecimal",

cpython-unix/targets.yml

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ aarch64-apple-darwin:
9292
- autoconf
9393
- bzip2
9494
- expat
95-
- libffi-3.3
95+
- libffi
9696
- m4
9797
- mpdecimal
9898
- openssl-3.0
@@ -136,7 +136,7 @@ aarch64-apple-ios:
136136
- autoconf
137137
- bzip2
138138
- expat
139-
- libffi-3.3
139+
- libffi
140140
- m4
141141
- mpdecimal
142142
- openssl-3.0
@@ -164,7 +164,7 @@ aarch64-unknown-linux-gnu:
164164
- bzip2
165165
- expat
166166
- libedit
167-
- libffi-3.3
167+
- libffi
168168
- libX11
169169
- libXau
170170
- libxcb
@@ -242,7 +242,7 @@ armv7-unknown-linux-gnueabi:
242242
- bzip2
243243
- expat
244244
- libedit
245-
- libffi-3.3
245+
- libffi
246246
- libX11
247247
- libXau
248248
- libxcb
@@ -280,7 +280,7 @@ armv7-unknown-linux-gnueabihf:
280280
- bzip2
281281
- expat
282282
- libedit
283-
- libffi-3.3
283+
- libffi
284284
- libX11
285285
- libXau
286286
- libxcb
@@ -324,7 +324,7 @@ i686-unknown-linux-gnu:
324324
- bzip2
325325
- expat
326326
- libedit
327-
- libffi-3.3
327+
- libffi
328328
- libX11
329329
- libXau
330330
- libxcb
@@ -362,7 +362,7 @@ mips-unknown-linux-gnu:
362362
- bzip2
363363
- expat
364364
- libedit
365-
- libffi-3.3
365+
- libffi
366366
- libX11
367367
- libXau
368368
- libxcb
@@ -400,7 +400,7 @@ mipsel-unknown-linux-gnu:
400400
- bzip2
401401
- expat
402402
- libedit
403-
- libffi-3.3
403+
- libffi
404404
- libX11
405405
- libXau
406406
- libxcb
@@ -438,7 +438,7 @@ ppc64le-unknown-linux-gnu:
438438
- bzip2
439439
- expat
440440
- libedit
441-
- libffi-3.3
441+
- libffi
442442
- libX11
443443
- libXau
444444
- libxcb
@@ -476,7 +476,7 @@ s390x-unknown-linux-gnu:
476476
- bzip2
477477
- expat
478478
- libedit
479-
- libffi-3.3
479+
- libffi
480480
- libX11
481481
- libXau
482482
- libxcb
@@ -576,7 +576,7 @@ x86_64-apple-darwin:
576576
- autoconf
577577
- bzip2
578578
- expat
579-
- libffi-3.3
579+
- libffi
580580
- m4
581581
- mpdecimal
582582
- openssl-3.0
@@ -620,7 +620,7 @@ x86_64-apple-ios:
620620
- autoconf
621621
- bzip2
622622
- expat
623-
- libffi-3.3
623+
- libffi
624624
- m4
625625
- mpdecimal
626626
- openssl-3.0
@@ -732,7 +732,7 @@ x86_64-unknown-linux-gnu:
732732
- bzip2
733733
- expat
734734
- libedit
735-
- libffi-3.3
735+
- libffi
736736
- libX11
737737
- libXau
738738
- libxcb
@@ -777,7 +777,7 @@ x86_64_v2-unknown-linux-gnu:
777777
- bzip2
778778
- expat
779779
- libedit
780-
- libffi-3.3
780+
- libffi
781781
- libX11
782782
- libXau
783783
- libxcb
@@ -822,7 +822,7 @@ x86_64_v3-unknown-linux-gnu:
822822
- bzip2
823823
- expat
824824
- libedit
825-
- libffi-3.3
825+
- libffi
826826
- libX11
827827
- libXau
828828
- libxcb
@@ -867,7 +867,7 @@ x86_64_v4-unknown-linux-gnu:
867867
- bzip2
868868
- expat
869869
- libedit
870-
- libffi-3.3
870+
- libffi
871871
- libX11
872872
- libXau
873873
- libxcb

pythonbuild/downloads.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@
116116
"licenses": ["BSD-3-Clause"],
117117
"license_file": "LICENSE.libedit.txt",
118118
},
119-
# libffi 3.4 has trouble building with musl due to Linux headers wonkiness.
120119
"libffi-3.3": {
121120
"url": "https://github.com/libffi/libffi/releases/download/v3.3/libffi-3.3.tar.gz",
122121
"size": 1305466,
@@ -126,6 +125,15 @@
126125
"licenses": ["MIT"],
127126
"license_file": "LICENSE.libffi.txt",
128127
},
128+
"libffi": {
129+
"url": "https://github.com/libffi/libffi/releases/download/v3.4.4/libffi-3.4.4.tar.gz",
130+
"size": 1362394,
131+
"sha256": "d66c56ad259a82cf2a9dfc408b32bf5da52371500b84745f7fb8b645712df676",
132+
"version": "3.4.4",
133+
"library_names": ["ffi"],
134+
"licenses": ["MIT"],
135+
"license_file": "LICENSE.libffi.txt",
136+
},
129137
"libpthread-stubs": {
130138
"url": "https://www.x.org/archive/individual/lib/libpthread-stubs-0.5.tar.gz",
131139
"size": 74938,

0 commit comments

Comments
 (0)