mirror of https://github.com/python/cpython
gh-111225: Link extension modules against libpython on Android (#115780)
Part of the work on PEP 738: Adding Android as a supported platform. * Rename the LIBPYTHON variable to MODULE_LDFLAGS, to more accurately reflect its purpose. * Edit makesetup to use MODULE_LDFLAGS when linking extension modules. * Edit the Makefile so that extension modules depend on libpython on Android and Cygwin. * Restore `-fPIC` on Android. It was removed several years ago with a note that the toolchain used it automatically, but this is no longer the case. Omitting it causes all linker commands to fail with an error like `relocation R_AARCH64_ADR_PREL_PG_HI21 cannot be used against symbol '_Py_FalseStruct'; recompile with -fPIC`.
This commit is contained in:
parent
113687a838
commit
7f5e3f04f8
|
@ -41,7 +41,7 @@ AR= @AR@
|
||||||
READELF= @READELF@
|
READELF= @READELF@
|
||||||
SOABI= @SOABI@
|
SOABI= @SOABI@
|
||||||
LDVERSION= @LDVERSION@
|
LDVERSION= @LDVERSION@
|
||||||
LIBPYTHON= @LIBPYTHON@
|
MODULE_LDFLAGS=@MODULE_LDFLAGS@
|
||||||
GITVERSION= @GITVERSION@
|
GITVERSION= @GITVERSION@
|
||||||
GITTAG= @GITTAG@
|
GITTAG= @GITTAG@
|
||||||
GITBRANCH= @GITBRANCH@
|
GITBRANCH= @GITBRANCH@
|
||||||
|
@ -2917,7 +2917,7 @@ Python/thread.o: @THREADHEADERS@ $(srcdir)/Python/condvar.h
|
||||||
|
|
||||||
# force rebuild when header file or module build flavor (static/shared) is changed
|
# force rebuild when header file or module build flavor (static/shared) is changed
|
||||||
MODULE_DEPS_STATIC=Modules/config.c
|
MODULE_DEPS_STATIC=Modules/config.c
|
||||||
MODULE_DEPS_SHARED=$(MODULE_DEPS_STATIC) $(EXPORTSYMS)
|
MODULE_DEPS_SHARED=@MODULE_DEPS_SHARED@
|
||||||
|
|
||||||
MODULE__CURSES_DEPS=$(srcdir)/Include/py_curses.h
|
MODULE__CURSES_DEPS=$(srcdir)/Include/py_curses.h
|
||||||
MODULE__CURSES_PANEL_DEPS=$(srcdir)/Include/py_curses.h
|
MODULE__CURSES_PANEL_DEPS=$(srcdir)/Include/py_curses.h
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Link extension modules against libpython on Android.
|
|
@ -87,18 +87,6 @@ esac
|
||||||
NL='\
|
NL='\
|
||||||
'
|
'
|
||||||
|
|
||||||
# Setup to link with extra libraries when making shared extensions.
|
|
||||||
# Currently, only Cygwin needs this baggage.
|
|
||||||
case `uname -s` in
|
|
||||||
CYGWIN*) if test $libdir = .
|
|
||||||
then
|
|
||||||
ExtraLibDir=.
|
|
||||||
else
|
|
||||||
ExtraLibDir='$(LIBPL)'
|
|
||||||
fi
|
|
||||||
ExtraLibs="-L$ExtraLibDir -lpython\$(LDVERSION)";;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Main loop
|
# Main loop
|
||||||
for i in ${*-Setup}
|
for i in ${*-Setup}
|
||||||
do
|
do
|
||||||
|
@ -286,7 +274,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
rule="$file: $objs"
|
rule="$file: $objs"
|
||||||
rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -o $file"
|
rule="$rule; \$(BLDSHARED) $objs $libs \$(MODULE_LDFLAGS) -o $file"
|
||||||
echo "$rule" >>$rulesf
|
echo "$rule" >>$rulesf
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
|
@ -834,7 +834,8 @@ LIBPL
|
||||||
PY_ENABLE_SHARED
|
PY_ENABLE_SHARED
|
||||||
PLATLIBDIR
|
PLATLIBDIR
|
||||||
BINLIBDEST
|
BINLIBDEST
|
||||||
LIBPYTHON
|
MODULE_LDFLAGS
|
||||||
|
MODULE_DEPS_SHARED
|
||||||
EXT_SUFFIX
|
EXT_SUFFIX
|
||||||
ALT_SOABI
|
ALT_SOABI
|
||||||
SOABI
|
SOABI
|
||||||
|
@ -7330,6 +7331,7 @@ printf "%s\n" "#define Py_ENABLE_SHARED 1" >>confdefs.h
|
||||||
case $ac_sys_system in
|
case $ac_sys_system in
|
||||||
CYGWIN*)
|
CYGWIN*)
|
||||||
LDLIBRARY='libpython$(LDVERSION).dll.a'
|
LDLIBRARY='libpython$(LDVERSION).dll.a'
|
||||||
|
BLDLIBRARY='-L. -lpython$(LDVERSION)'
|
||||||
DLLLIBRARY='libpython$(LDVERSION).dll'
|
DLLLIBRARY='libpython$(LDVERSION).dll'
|
||||||
;;
|
;;
|
||||||
SunOS*)
|
SunOS*)
|
||||||
|
@ -12789,7 +12791,6 @@ then
|
||||||
then CCSHARED="-fPIC";
|
then CCSHARED="-fPIC";
|
||||||
else CCSHARED="+z";
|
else CCSHARED="+z";
|
||||||
fi;;
|
fi;;
|
||||||
Linux-android*) ;;
|
|
||||||
Linux*|GNU*) CCSHARED="-fPIC";;
|
Linux*|GNU*) CCSHARED="-fPIC";;
|
||||||
Emscripten*|WASI*)
|
Emscripten*|WASI*)
|
||||||
if test "x$enable_wasm_dynamic_linking" = xyes
|
if test "x$enable_wasm_dynamic_linking" = xyes
|
||||||
|
@ -23959,10 +23960,12 @@ printf "%s\n" "$LDVERSION" >&6; }
|
||||||
|
|
||||||
# On Android and Cygwin the shared libraries must be linked with libpython.
|
# On Android and Cygwin the shared libraries must be linked with libpython.
|
||||||
|
|
||||||
|
|
||||||
|
MODULE_DEPS_SHARED='$(MODULE_DEPS_STATIC) $(EXPORTSYMS)'
|
||||||
|
MODULE_LDFLAGS=''
|
||||||
if test "$PY_ENABLE_SHARED" = "1" && ( test -n "$ANDROID_API_LEVEL" || test "$MACHDEP" = "cygwin"); then
|
if test "$PY_ENABLE_SHARED" = "1" && ( test -n "$ANDROID_API_LEVEL" || test "$MACHDEP" = "cygwin"); then
|
||||||
LIBPYTHON="-lpython${VERSION}${ABIFLAGS}"
|
MODULE_DEPS_SHARED="$MODULE_DEPS_SHARED \$(LDLIBRARY)"
|
||||||
else
|
MODULE_LDFLAGS="\$(BLDLIBRARY)"
|
||||||
LIBPYTHON=''
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
12
configure.ac
12
configure.ac
|
@ -1360,6 +1360,7 @@ if test $enable_shared = "yes"; then
|
||||||
case $ac_sys_system in
|
case $ac_sys_system in
|
||||||
CYGWIN*)
|
CYGWIN*)
|
||||||
LDLIBRARY='libpython$(LDVERSION).dll.a'
|
LDLIBRARY='libpython$(LDVERSION).dll.a'
|
||||||
|
BLDLIBRARY='-L. -lpython$(LDVERSION)'
|
||||||
DLLLIBRARY='libpython$(LDVERSION).dll'
|
DLLLIBRARY='libpython$(LDVERSION).dll'
|
||||||
;;
|
;;
|
||||||
SunOS*)
|
SunOS*)
|
||||||
|
@ -3333,7 +3334,6 @@ then
|
||||||
then CCSHARED="-fPIC";
|
then CCSHARED="-fPIC";
|
||||||
else CCSHARED="+z";
|
else CCSHARED="+z";
|
||||||
fi;;
|
fi;;
|
||||||
Linux-android*) ;;
|
|
||||||
Linux*|GNU*) CCSHARED="-fPIC";;
|
Linux*|GNU*) CCSHARED="-fPIC";;
|
||||||
Emscripten*|WASI*)
|
Emscripten*|WASI*)
|
||||||
AS_VAR_IF([enable_wasm_dynamic_linking], [yes], [
|
AS_VAR_IF([enable_wasm_dynamic_linking], [yes], [
|
||||||
|
@ -5888,11 +5888,13 @@ LDVERSION='$(VERSION)$(ABIFLAGS)'
|
||||||
AC_MSG_RESULT([$LDVERSION])
|
AC_MSG_RESULT([$LDVERSION])
|
||||||
|
|
||||||
# On Android and Cygwin the shared libraries must be linked with libpython.
|
# On Android and Cygwin the shared libraries must be linked with libpython.
|
||||||
AC_SUBST([LIBPYTHON])
|
AC_SUBST([MODULE_DEPS_SHARED])
|
||||||
|
AC_SUBST([MODULE_LDFLAGS])
|
||||||
|
MODULE_DEPS_SHARED='$(MODULE_DEPS_STATIC) $(EXPORTSYMS)'
|
||||||
|
MODULE_LDFLAGS=''
|
||||||
if test "$PY_ENABLE_SHARED" = "1" && ( test -n "$ANDROID_API_LEVEL" || test "$MACHDEP" = "cygwin"); then
|
if test "$PY_ENABLE_SHARED" = "1" && ( test -n "$ANDROID_API_LEVEL" || test "$MACHDEP" = "cygwin"); then
|
||||||
LIBPYTHON="-lpython${VERSION}${ABIFLAGS}"
|
MODULE_DEPS_SHARED="$MODULE_DEPS_SHARED \$(LDLIBRARY)"
|
||||||
else
|
MODULE_LDFLAGS="\$(BLDLIBRARY)"
|
||||||
LIBPYTHON=''
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue