| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
|
Maybe this should be called --enable-emscripten-dynamic-linking since it doesn't work with wasi or other wasm targets? |
Sorry, something went wrong.
WASI does not support dynamic linking yet. It may get it in the future, https://helda.helsinki.fi/bitstream/handle/10138/337740/Dynamic_linking_in_WebAssembly_Architecture_and_Performance_Evaluation.pdf . |
Sorry, something went wrong.
|
But probably stuff like -s SIDE_MODULE=1 will always be emscripten specific, so even when other wasm platforms gain dynamic linking it is not clear if this flag can work for both. |
Sorry, something went wrong.
|
I still think we should discuss with Emscripten whether we could set some environment variable like EMSCRIPTEN_RESPECT_SHARED and then use the -shared flag. Then other wasm targets would just ignore the EMSCRIPTEN_RESPECT_SHARED variable, whereas they would probably get angry when passed nonsense like -s SIDE_MODULE=1 as a command line argument. |
Sorry, something went wrong.
WASI wouldn't see the Emscripten flags. We can easily extend our configure file later to do something like: AS_VAR_IF([enable_wasm_dynamic_linking], [yes], [
AS_CASE([$ac_sys_system],
[Emscripten], [BLDSHARED='$(CC) -shared -s SIDE_MODULE=1 -s WASM=1'],
[WASI], [BLDSHARED='$(CC) --shared --wasi-magic-linking-flag']
)
])
|
Sorry, something went wrong.
|
Right, makes sense that autotools has ways of dealing with different compilers needing different flags. |
Sorry, something went wrong.
There was a problem hiding this comment.
AC changes look good to me!
Sorry, something went wrong.
|
The PR drops ac_cv_func_dlopen=no from our config.site override and will allow us to test dynamic linking in the future. @hoodmane does the PR help you, or at least not cause any new problems? |
Sorry, something went wrong.
|
I'm having trouble testing on tip of tree because of the changes to _sre and regex. I need a docker image like 3.11.0a6-slim-buster but with tip of tree. Or maybe I can just locate the changes to _sre and regex since alpha6 and revert them? I can still build locally against a locally built copy of tot Python but it's inconvenient not to have the CI working. |
Sorry, something went wrong.
|
Or maybe I can cherry-pick this commit onto 3.11.0a6? |
Sorry, something went wrong.
|
What's the problem with _sre module? GH-32177 converted the modules to a package. The change should be fully backwards compatible. |
Sorry, something went wrong.
|
I get failures at |
Sorry, something went wrong.
|
There is no line 17 in Lib/sre_compile.py any more. The file got moved and replaced with a shorter stub. Some files on your system are out of date. |
Sorry, something went wrong.
Yeah hence I need a docker image with tip of tree Python because my v3.11.0a6 system is out of date |
Sorry, something went wrong.
|
Are you familiar with out-of-tree builds? We compile a build Python interpreter to bootstrap Emscripten cross build from the same source check, https://github.com/ethanhs/python-wasm/blob/main/build-python-build.sh and https://github.com/ethanhs/python-wasm/blob/main/build-python-emscripten-browser.sh . The trick is ../../configure. |
Sorry, something went wrong.
Apparently not.
Is it important that there are two layers builddir/build? |
Sorry, something went wrong.
|
Also, are there docs on out of tree build somewhere that I should read? |
Sorry, something went wrong.
|
No, the paths are not important. Any directory structure will do. It's only important that you run make clean in the source directory first. And don't use build, it gets easily confused with distutils's build directory. ouf-of-tree builds (aka VPATH builds) are an autoconf feature. https://www.gnu.org/software/automake/manual/html_node/VPATH-Builds.html |
Sorry, something went wrong.
Do I need to do this if I have cloned a fresh copy of python/cpython? |
Sorry, something went wrong.
No, a fresh clone is clean. |
Sorry, something went wrong.
|
I tried to follow your directions for this: Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/src/cpython/installs/python-3.11.0dev0/lib/python3.11/lib2to3/pgen2/driver.py", line 21, in <module>
import logging
^^^^^^^^^^^^^^
File "/src/cpython/installs/python-3.11.0dev0/lib/python3.11/logging/__init__.py", line 26, in <module>
import sys, os, time, io, re, traceback, warnings, weakref, collections.abc
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/src/cpython/installs/python-3.11.0dev0/lib/python3.11/re/__init__.py", line 125, in <module>
from . import _compiler, _parser
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/src/cpython/installs/python-3.11.0dev0/lib/python3.11/re/_compiler.py", line 17, in <module>
assert _sre.MAGIC == MAGIC, "SRE module mismatch"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: SRE module mismatchMaybe you can tell me what I'm doing wrong? |
Sorry, something went wrong.
|
Ah maybe the problem is just buggy make recipes. |
Sorry, something went wrong.
|
I think the_sre.MAGIC crash is triggered while it is trying to log some other error, something about pybuilddir.txt. |
Sorry, something went wrong.
|
Okay the problem is on Makefile.pre.in line 2032: -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ $(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ -j0 -d $(LIBDEST) -f \ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) Note that this is the build Python (PYTHON_FOR_BUILD) running with the target Python's standard library (-PYTHONPATH=$(DESTDIR)$(LIBDEST)). |
Sorry, something went wrong.
|
Or something. I tried manually removing PYTHONPATH from that and it still broke in the same way so I don't know. |
Sorry, something went wrong.
|
Is the error coming from libinstall target? Our python-wasm PoC does not use make install. We are building WASM port in-place and then copy files around manually. I'll investigate after next alpha is out. I'm merging the PR now to get it into the upcoming alpha. It's unlike to cause you any problems and allows us to test dynamic linking more easily. |
Sorry, something went wrong.
|
Yeah I think make libinstall has a bug where when cross compiling it uses the Python standard library of the target Python with the Python executable of the build Python. As long as the target Python and the build Python are compatible for the small number of packages it needs, it works okay. But if there are changes to certain libraries, it breaks. |
Sorry, something went wrong.
|
Congratulations, you have discovered an annoying issue with development during Python's alpha phase. :) Code is moving fast and breaks often. You should rebuild your build Python interpreter every time you update your checkout or switch branches. It's going to stabilize during beta and won't be an issue once Python 3.11 reaches RC and final stages. I recommend config cache (./configure -C) and ccache (export EM_COMPILER_WRAPPER=ccache + export PATH=/usr/lib/ccache:$PATH) to speed up configure and build steps. |
Sorry, something went wrong.
|
Makes sense. At least Python is fast to build. The main annoyance is that if I want to get the CI running I have to set up building Python either in my Dockerfile or in my pipeline. |
Sorry, something went wrong.
|
Hmm, I'm still having trouble. Even building a x86 Linux Python and passing it as --with-build-python=, the build is generating invocations to /usr/local/bin/python3.11. The issue seems to be that ./configure is generating a slightly buggy Makefile. A bunch of variables are all on the same line: PYTHON_FOR_BUILD=_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) /src/cpython/build/Python-3.11.0dev0/builddir/build-host/python I think this should be: PYTHON_FOR_BUILD=/src/cpython/build/Python-3.11.0dev0/builddir/build-host/python _PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) |
Sorry, something went wrong.
|
@hoodmane at this point it's probably better to open an issue, else this is liable to get lost since the PR has already been merged. |
Sorry, something went wrong.
|
Okay I opened an issue here: https://bugs.python.org/issue47232 |
Sorry, something went wrong.
| dnl Emscripten's emconfigure sets LDSHARED. Set BLDSHARED outside the | ||
| dnl test -z $LDSHARED block to configure BLDSHARED for side module support. | ||
| if test "$enable_wasm_dynamic_linking" = "yes" -a "$ac_sys_system" = "Emscripten"; then | ||
| BLDSHARED='$(CC) -shared -sSIDE_MODULE=1 -sWASM=1' |
There was a problem hiding this comment.
Is there some reason why you add -sWASM=1 here. Since its the default its unlikely you need it.
Also, you can simplify this command line (and the ones elsewhere in this file) by dropping with =1 at the end of all the settings.
Sorry, something went wrong.
There was a problem hiding this comment.
Python shared extensions have a .so extension. emcc creates a .so JavaScript file and a .wasm file along the .so file. We want the .so file to contain the .wasm code.
Sorry, something went wrong.
There was a problem hiding this comment.
This is not what the -sWASM=1 option does though. The -sSIDE_MODULE option is enough to ensure that the output is just a wasm file.
If you are building a normal application without -sSIDE_MODULE then you always get a JS file and a wasm file side-by-side (even with -sWASM=1). The -sWASM=1 option (which is the default) simply means "don't convert the wasm file to JS using wasm2js".. which is what happens if you set -sWASM=0 (which is never the default).
-sSIDE_MODULE on its own should always build just a wasm file.
Sorry, something went wrong.
There was a problem hiding this comment.
Please note this PR is merged already, so it would be best to open a new issue to track this discussion if there's something to change.
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
https://bugs.python.org/issue40280