Hello again! I just wanted to drop a note detailing my experiences building 
Telegram's Database Library (https://github.com/tdlib/td) with the new WASM 
backend. Overall the experience was a bit rough, mainly due to errors that 
did not occur using fastcomp, primarily the new strict pthreads checking 
and lack of support for Position Independent Code.

To get TdLib building, I had to make the following changes:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3ec8c456..96736d4f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -36,7 +36,7 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" 
"${CMAKE_MODULE_PATH}"
 
 set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
 
-set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+# set(CMAKE_POSITION_INDEPENDENT_CODE ON)
 
 enable_testing()
 
@@ -98,8 +98,8 @@ if (EMSCRIPTEN)
     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s WASM=0 -Wno-almost-asm")
   else()
     set(TD_EMSCRIPTEN td_wasm)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s WASM=1")
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s WASM=1")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s WASM=1 -s 
ERROR_ON_UNDEFINED_SYMBOLS=0")
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s WASM=1 -s 
ERROR_ON_UNDEFINED_SYMBOLS=0")
   endif()
 endif()
 
diff --git a/example/web/build-openssl.sh b/example/web/build-openssl.sh
index faf4f657..0031bef8 100755
--- a/example/web/build-openssl.sh
+++ b/example/web/build-openssl.sh
@@ -12,7 +12,7 @@ echo "Unpacking OpenSSL sources..."
 tar xzf $OPENSSL.tar.gz || exit 1
 cd openssl-$OPENSSL
 
-emconfigure ./Configure linux-generic32 no-shared no-dso no-engine 
no-unit-test no-ui || exit 1
+emconfigure ./Configure linux-generic32 no-threads no-pic no-asm no-shared 
no-dso no-engine no-unit-test no-ui || exit 1
 sed -i.bak 's/CROSS_COMPILE=.*/CROSS_COMPILE=/g' Makefile || exit 1
 sed -i.bak 's/-ldl //g' Makefile || exit 1
 echo "Building OpenSSL..."

These changes disabled threading and PIC when building OpenSSL, and also 
disabled the error on undefined symbols. The latter change was necessary as 
I was running into "error: undefined symbol: __cxa_uncaught_exception".

Once those changes were made, I was able to successfully compile TdLib to 
WASM! Sadly I didn't see any significant size changes: the original 
fastcomp WASM module was 7.7 MB, and the new module was 7.5 MB. While the 
module seems to load and perform some actions correctly, the WebSocket 
connections are closed before a connection is established, so I wasn't able 
to make any calls to the Telegram API. I'm not a C++ developer, so I 
probably can't debug that particular issue and will have to wait for the 
Telegram developers to take a look.

I just wanted to share my experiences trying to compile a non-trivial WASM 
library with the new upstream backend. The only suggestions I can make are 
to add warnings to the fastcomp compiler for things that won't be supported 
in the new backend, such as linking a library built with threads support 
with a library that doesn't support it.

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/emscripten-discuss/bcd7836d-555a-4a68-aeb5-8f7c07510877%40googlegroups.com.

Reply via email to