Add loadDynlib to micropip._compat (split off from #2591). More work split off of #2591 because #2591 mysteriously fails *all* the github actions tests, even though #2591 currently only changes micropip and not all tests load micropip.
export PYVERSION ?= 3.10.2
export PYODIDE_EMSCRIPTEN_VERSION ?= 2.0.27

export PLATFORM_TRIPLET=wasm32-emscripten

# BASH_ENV tells bash to run pyodide_env.sh on startup, which sets various
# environment variables. The next line instructs make to use bash to run each
# command.
export BASH_ENV := $(PYODIDE_ROOT)/pyodide_env.sh
SHELL := /bin/bash

export TOOLSDIR=$(PYODIDE_ROOT)/tools

version_tuple := $(subst ., ,$(PYVERSION:v%=%))
export PYMAJOR=$(word 1,$(version_tuple))
export PYMINOR=$(word 2,$(version_tuple))
export PYMICRO=$(word 3,$(version_tuple))

export HOSTPYTHONROOT=$(shell python${PYMAJOR}.${PYMINOR} -c "import sys; print(sys.prefix)")
export HOSTPYTHON=$(HOSTPYTHONROOT)/bin/python$(PYMAJOR).$(PYMINOR)

export CPYTHONROOT=$(PYODIDE_ROOT)/cpython
export CPYTHONLIB=$(CPYTHONROOT)/installs/python-$(PYVERSION)/lib/python$(PYMAJOR).$(PYMINOR)
export CPYTHONBUILD=$(CPYTHONROOT)/build/Python-$(PYVERSION)/

export TARGETINSTALLDIR=$(PYODIDE_ROOT)/cpython/installs/python-$(PYVERSION)
export HOSTINSTALLDIR=$(PYODIDE_ROOT)/packages/.artifacts
export HOSTSITEPACKAGES=$(PYODIDE_ROOT)/packages/.artifacts/lib/python$(PYMAJOR).$(PYMINOR)/site-packages
export WASM_LIBRARY_DIR=$(PYODIDE_ROOT)/packages/.libs
export WASM_PKG_CONFIG_PATH=$(PYODIDE_ROOT)/packages/.libs/lib/pkgconfig

export PYTHONINCLUDE=$(PYODIDE_ROOT)/cpython/installs/python-$(PYVERSION)/include/python$(PYMAJOR).$(PYMINOR)

# Use env variable if defined, otherwise fallback to './'
export PYODIDE_BASE_URL?=./

# For packages that depend on numpy.
# TODO: maybe move this somewhere else?
export NUMPY_LIB=$(HOSTSITEPACKAGES)/numpy/


# This environment variable is used for packages to detect if they are built
# for pyodide during build time
export PYODIDE=1
# This is the legacy environment variable used for the aforementioned purpose
export PYODIDE_PACKAGE_ABI=1

export DBGFLAGS_NODEBUG=-g0
export DBGFLAGS_WASMDEBUG=-g2
export DBGFLAGS_SOURCEMAPDEBUG=-g3
export DBG_LDFLAGS_SOURCEMAPDEBUG=-gseparate-dwarf

export DBGFLAGS=$(DBGFLAGS_NODEBUG)

# Include debug symbols but no source maps (most useful)
#export DBGFLAGS=$(DBGFLAGS_WASMDEBUG)

# Debug with source maps (less useful than WASMDEBUG but easier if it helps)
#export DBGFLAGS=$(DBGFLAGS_SOURCEMAPDEBUG)
#export DBG_LDFLAGS=$(DBG_LDFLAGS_SOURCEMAPDEBUG)

export OPTFLAGS=-O2
export CFLAGS_BASE=\
	$(OPTFLAGS) \
	$(DBGFLAGS) \
	-fPIC \
	$(EXTRA_CFLAGS)


export LDFLAGS_BASE=\
	$(OPTFLAGS) \
	$(DBGFLAGS) \
	$(DBG_LDFLAGS) \
	-s MODULARIZE=1 \
	-s LINKABLE=1 \
	-s EXPORT_ALL=1 \
	-s WASM=1 \
	-std=c++14 \
	-s LZ4=1 \
	-L $(CPYTHONROOT)/installs/python-$(PYVERSION)/lib/ \
	$(EXTRA_LDFLAGS)

export CXXFLAGS_BASE=

export SIDE_MODULE_LDFLAGS=	$(LDFLAGS_BASE) -s SIDE_MODULE=1
export MAIN_MODULE_LDFLAGS= $(LDFLAGS_BASE) \
	-s MAIN_MODULE=1 \
	-s EXPORT_NAME="'_createPyodideModule'" \
	-s EXPORTED_FUNCTIONS='["___cxa_guard_acquire", "__ZNSt3__28ios_base4initEPv", "_main"]' \
	-s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules'] \
	-s DEMANGLE_SUPPORT=1 \
	-s USE_FREETYPE=1 \
	-s USE_LIBPNG=1 \
	-s FORCE_FILESYSTEM=1 \
	-s TOTAL_MEMORY=20971520 \
	-s ALLOW_MEMORY_GROWTH=1 \
	\
	-lpython$(PYMAJOR).$(PYMINOR) \
	-lffi \
	-lsqlite3 \
	-lbz2 \
	-lstdc++ \
	-lidbfs.js \
	-lnodefs.js \
	-lproxyfs.js \
	-lworkerfs.js \
	\
	--use-preload-plugins \
	--preload-file $(CPYTHONLIB)@/lib/python$(PYMAJOR).$(PYMINOR) \
	--preload-file src/py/lib@/lib/python$(PYMAJOR).$(PYMINOR)/\
	--exclude-file "*__pycache__*" \
	--exclude-file "*/test/*" \
	--exclude-file "*/tests/*" \
	--exclude-file "*/distutils/*" \
	--pre-js src/core/pre.js \
	--pre-js src/js/_pyodide.out.js \
	--post-js src/core/post.js


export SIDE_MODULE_CXXFLAGS = $(CXXFLAGS_BASE)

export SIDE_MODULE_CFLAGS= $(CFLAGS_BASE)
export MAIN_MODULE_CFLAGS= $(CFLAGS_BASE) \
	-Wall \
	-Wno-warn-absolute-paths \
	-Werror=unused-variable \
	-Werror=sometimes-uninitialized \
	-Werror=int-conversion \
	-Werror=incompatible-pointer-types \
	-Werror=unused-result \
	-I$(PYTHONINCLUDE) \
	-s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules']

export STDLIB_MODULE_CFLAGS= $(SIDE_MODULE_CFLAGS) -I Include/ -I .

.output_vars:
	set

export PYVERSION ?= 3.10.2
# Note: when updating EMSCRIPTEN_VERSION make sure to update
# the version number in the "uname" patch.
export PYODIDE_EMSCRIPTEN_VERSION ?= 2.0.27

export PLATFORM_TRIPLET=wasm32-emscripten

# BASH_ENV tells bash to run pyodide_env.sh on startup, which sets various
# environment variables. The next line instructs make to use bash to run each
# command.
export BASH_ENV := $(PYODIDE_ROOT)/pyodide_env.sh
SHELL := /bin/bash

export TOOLSDIR=$(PYODIDE_ROOT)/tools

version_tuple := $(subst ., ,$(PYVERSION:v%=%))
export PYMAJOR=$(word 1,$(version_tuple))
export PYMINOR=$(word 2,$(version_tuple))
export PYMICRO=$(word 3,$(version_tuple))

export HOSTPYTHONROOT=$(shell python${PYMAJOR}.${PYMINOR} -c "import sys; print(sys.prefix)")
export HOSTPYTHON=$(HOSTPYTHONROOT)/bin/python$(PYMAJOR).$(PYMINOR)

export CPYTHONROOT=$(PYODIDE_ROOT)/cpython
export CPYTHONLIB=$(CPYTHONROOT)/installs/python-$(PYVERSION)/lib/python$(PYMAJOR).$(PYMINOR)
export CPYTHONBUILD=$(CPYTHONROOT)/build/Python-$(PYVERSION)/

export TARGETINSTALLDIR=$(PYODIDE_ROOT)/cpython/installs/python-$(PYVERSION)
export HOSTINSTALLDIR=$(PYODIDE_ROOT)/packages/.artifacts
export HOSTSITEPACKAGES=$(PYODIDE_ROOT)/packages/.artifacts/lib/python$(PYMAJOR).$(PYMINOR)/site-packages
export WASM_LIBRARY_DIR=$(PYODIDE_ROOT)/packages/.libs
export WASM_PKG_CONFIG_PATH=$(PYODIDE_ROOT)/packages/.libs/lib/pkgconfig

export PYTHONINCLUDE=$(PYODIDE_ROOT)/cpython/installs/python-$(PYVERSION)/include/python$(PYMAJOR).$(PYMINOR)

# Use env variable if defined, otherwise fallback to './'
export PYODIDE_BASE_URL?=./

# For packages that depend on numpy.
# TODO: maybe move this somewhere else?
export NUMPY_LIB=$(HOSTSITEPACKAGES)/numpy/


# This environment variable is used for packages to detect if they are built
# for pyodide during build time
export PYODIDE=1
# This is the legacy environment variable used for the aforementioned purpose
export PYODIDE_PACKAGE_ABI=1

export DBGFLAGS_NODEBUG=-g0
export DBGFLAGS_WASMDEBUG=-g2
export DBGFLAGS_SOURCEMAPDEBUG=-g3
export DBG_LDFLAGS_SOURCEMAPDEBUG=-gseparate-dwarf

export DBGFLAGS=$(DBGFLAGS_NODEBUG)

# Include debug symbols but no source maps (most useful)
#export DBGFLAGS=$(DBGFLAGS_WASMDEBUG)

# Debug with source maps (less useful than WASMDEBUG but easier if it helps)
#export DBGFLAGS=$(DBGFLAGS_SOURCEMAPDEBUG)
#export DBG_LDFLAGS=$(DBG_LDFLAGS_SOURCEMAPDEBUG)

export OPTFLAGS=-O2
export CFLAGS_BASE=\
	$(OPTFLAGS) \
	$(DBGFLAGS) \
	-fPIC \
	$(EXTRA_CFLAGS)


export LDFLAGS_BASE=\
	$(OPTFLAGS) \
	$(DBGFLAGS) \
	$(DBG_LDFLAGS) \
	-s MODULARIZE=1 \
	-s LINKABLE=1 \
	-s EXPORT_ALL=1 \
	-s WASM=1 \
	-std=c++14 \
	-s LZ4=1 \
	-L $(CPYTHONROOT)/installs/python-$(PYVERSION)/lib/ \
	$(EXTRA_LDFLAGS)

export CXXFLAGS_BASE=

export SIDE_MODULE_LDFLAGS=	$(LDFLAGS_BASE) -s SIDE_MODULE=1
export MAIN_MODULE_LDFLAGS= $(LDFLAGS_BASE) \
	-s MAIN_MODULE=1 \
	-s EXPORT_NAME="'_createPyodideModule'" \
	-s EXPORTED_FUNCTIONS='["___cxa_guard_acquire", "__ZNSt3__28ios_base4initEPv", "_main"]' \
	-s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules'] \
	-s DEMANGLE_SUPPORT=1 \
	-s USE_FREETYPE=1 \
	-s USE_LIBPNG=1 \
	-s FORCE_FILESYSTEM=1 \
	-s TOTAL_MEMORY=20971520 \
	-s ALLOW_MEMORY_GROWTH=1 \
	\
	-lpython$(PYMAJOR).$(PYMINOR) \
	-lffi \
	-lsqlite3 \
	-lbz2 \
	-lstdc++ \
	-lidbfs.js \
	-lnodefs.js \
	-lproxyfs.js \
	-lworkerfs.js \
	\
	--use-preload-plugins \
	--preload-file $(CPYTHONLIB)@/lib/python$(PYMAJOR).$(PYMINOR) \
	--preload-file src/py/lib@/lib/python$(PYMAJOR).$(PYMINOR)/\
	--exclude-file "*__pycache__*" \
	--exclude-file "*/test/*" \
	--exclude-file "*/tests/*" \
	--exclude-file "*/distutils/*" \
	--pre-js src/core/pre.js \
	--pre-js src/js/_pyodide.out.js \
	--post-js src/core/post.js


export SIDE_MODULE_CXXFLAGS = $(CXXFLAGS_BASE)

export SIDE_MODULE_CFLAGS= $(CFLAGS_BASE)
export MAIN_MODULE_CFLAGS= $(CFLAGS_BASE) \
	-Wall \
	-Wno-warn-absolute-paths \
	-Werror=unused-variable \
	-Werror=sometimes-uninitialized \
	-Werror=int-conversion \
	-Werror=incompatible-pointer-types \
	-Werror=unused-result \
	-I$(PYTHONINCLUDE) \
	-s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules']

export STDLIB_MODULE_CFLAGS= $(SIDE_MODULE_CFLAGS) -I Include/ -I .

.output_vars:
	set
