mirror of https://github.com/pyodide/pyodide.git
Fix cryptography build after emscripten update (#2683)
This commit is contained in:
parent
a83055b003
commit
9c305efc46
|
@ -148,7 +148,7 @@ export STDLIB_MODULE_CFLAGS= $(SIDE_MODULE_CFLAGS) -I Include/ -I .
|
|||
# For RUST
|
||||
export CARGO_HOME ?= $(HOME)/.cargo
|
||||
export CARGO_BUILD_TARGET=wasm32-unknown-emscripten
|
||||
export CARGO_TARGET_WASM32_UNKNOWN_EMSCRIPTEN_LINKER=emcc
|
||||
export CARGO_TARGET_WASM32_UNKNOWN_EMSCRIPTEN_LINKER=$(PYODIDE_ROOT)/tools/rust_emcc_wrapper.py
|
||||
export PYO3_CONFIG_FILE=$(PYODIDE_ROOT)/tools/pyo3_config.ini
|
||||
|
||||
# idealy we could automatically include all SIDE_MODULE_LDFLAGS here
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
From c250eb29047c4341cdc1d13f3706eb6991cf0f9b Mon Sep 17 00:00:00 2001
|
||||
From: Hood Chatham <roberthoodchatham@gmail.com>
|
||||
Date: Thu, 6 Jan 2022 09:40:39 -0800
|
||||
Subject: [PATCH 4/4] Disable whole-archive when linking rust
|
||||
|
||||
Rust .rlib archives contain an extra metadata file called lib.rmeta.
|
||||
Emscripten sets `--whole-archive` by default if LINKABLE is set.
|
||||
But with `--whole-archive` the linker crashes with an error due to
|
||||
the extra files. This disables the problematic `--whole-archive`
|
||||
setting when we are linking rust.
|
||||
|
||||
See emscripten issue:
|
||||
https://github.com/emscripten-core/emscripten/issues/17109
|
||||
---
|
||||
tools/building.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tools/building.py b/tools/building.py
|
||||
index 24ddaa13f..cb015e18f 100644
|
||||
--- a/tools/building.py
|
||||
+++ b/tools/building.py
|
||||
@@ -360,7 +360,7 @@ def link_lld(args, target, external_symbols=None):
|
||||
|
||||
# Emscripten currently expects linkable output (SIDE_MODULE/MAIN_MODULE) to
|
||||
# include all archive contents.
|
||||
- if settings.LINKABLE:
|
||||
+ if settings.LINKABLE and not any(arg.endswith(".rlib") for arg in args):
|
||||
args.insert(0, '--whole-archive')
|
||||
args.append('--no-whole-archive')
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
package:
|
||||
name: cryptography
|
||||
version: 36.0.2
|
||||
_disabled: true
|
||||
|
||||
source:
|
||||
url: https://files.pythonhosted.org/packages/10/a7/51953e73828deef2b58ba1604de9167843ee9cd4185d8aaffcb45dd1932d/cryptography-36.0.2.tar.gz
|
||||
|
@ -25,6 +24,7 @@ build:
|
|||
$(OPENSSL_INCLUDE_PATH)
|
||||
ldflags: |
|
||||
$(OPENSSL_LIBRARY_PATH)
|
||||
-Wl,--no-entry
|
||||
requirements:
|
||||
run:
|
||||
- openssl
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env python3
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
def update_args(args):
|
||||
# https://github.com/emscripten-core/emscripten/issues/17109
|
||||
args.insert(0, "-Wl,--no-whole-archive")
|
||||
|
||||
# Remove -s ASSERTIONS=1
|
||||
# See https://github.com/rust-lang/rust/pull/97928
|
||||
for i in range(len(args)):
|
||||
if "ASSERTIONS" in args[i]:
|
||||
del args[i - 1 : i + 1]
|
||||
break
|
||||
|
||||
# remove -lc. Not sure if it makes a difference but -lc doesn't belong here.
|
||||
# https://github.com/emscripten-core/emscripten/issues/17191
|
||||
for i in reversed(range(len(args))):
|
||||
if args[i] == "c" and args[i - 1] == "-l":
|
||||
del args[i - 1 : i + 1]
|
||||
|
||||
# Prevent a bunch of errors caused by buggy behavior in
|
||||
# `esmcripten/tools/building.py:lld_flags_for_executable` REQUIRED_EXPORTS
|
||||
# contains symbols that should come from the main module.
|
||||
# https://github.com/emscripten-core/emscripten/issues/17202
|
||||
args.append("-sERROR_ON_UNDEFINED_SYMBOLS=0")
|
||||
# Seems like --no-entry should be implied by SIDE_MODULE but apparently it
|
||||
# isn't?
|
||||
args.append("-Wl,--no-entry")
|
||||
# Without this, the dylink section seems to get deleted which causes trouble
|
||||
# at load time.
|
||||
args.append("-Wl,--no-gc-sections")
|
||||
|
||||
return args
|
||||
|
||||
|
||||
def main(args):
|
||||
args = update_args(args)
|
||||
return subprocess.call(["emcc"] + args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
args = sys.argv[1:]
|
||||
sys.exit(main(args))
|
Loading…
Reference in New Issue