Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged blaugold's WASM branch, plus fixes #2069

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from
Draft

Merged blaugold's WASM branch, plus fixes #2069

wants to merge 4 commits into from

Conversation

snej
Copy link
Collaborator

@snej snej commented Jun 14, 2024

Cherry-picked @blaugold 's branch that adds WASM support via emscripten.
Made some changes to get it to build again.
This depends on the emscripten support in Fleece, currently couchbase/fleece#232

  • C4Tests passes, although the threading test is painfully slow (takes at least 10 minutes to run!)
  • CppTests has 3 failures.

I chose to disable all of the socket and listener code -- BuiltInWebSocket, etc. It doesn't make sense to have code that uses custom TCP sockets in a library targeted at web browsers. Instead the hypothetical JS platform code would use the C4Socket API to bridge to the JS WebSocket class, the same way the other (non-C) platforms do.

blaugold and others added 3 commits June 14, 2024 10:47
(cherry picked from commit 9e3f4d7)

# Conflicts:
#	C/tests/CMakeLists.txt
#	C/tests/c4DatabaseTest.cc
#	LiteCore/Support/Error.cc
#	LiteCore/Support/FilePath.cc
#	LiteCore/Support/LogDecoder.cc
#	LiteCore/Support/Logging.cc
#	LiteCore/Support/MultiLogDecoder.hh
#	LiteCore/Support/StringUtil.cc
#	LiteCore/Support/StringUtil.hh
#	LiteCore/Support/ThreadUtil.cc
#	LiteCore/tests/DataFileTest.cc
#	LiteCore/tests/SQLiteFunctionsTest.cc
#	REST/tests/RESTListenerTest.cc
CppTests:
test cases:    499 |    496 passed | 3 failed
assertions: 682799 | 682794 passed | 5 failed

failed tests:
    >>> Query Functions
    >>> RealClockSource
    >>> Continuous Fast Push

C4Tests:
All tests passed (791941 assertions in 155 test cases)
@cbl-bot
Copy link

cbl-bot commented Jun 14, 2024

Code Coverage Results:

Type Percentage
branches 68.96
functions 79.79
instantiations 35.55
lines 79.6
regions 76.18

@snej
Copy link
Collaborator Author

snej commented Jun 14, 2024

FYI, in a Release build the size of C4Tests.wasm is 4MB, and CppTests.wasm is 6.2MB.

(In a RelWithDebSym build they're 10x larger (!), which I assume is all the debug symbols in the binary.)

For comparison, in a Mac build C4Tests is 4.7MB, or about 2.3MB per architecture; CppTests is 21MB, or about 10.5MB per architecture [which is surprisingly big...]

- Defined the compile/link flags as variables and reuse them
- Enabled LTO
- Forced -Os, since build type MinSizeRel doesn't seem to do anything
- Changed build type to Release, since the debug symbols add ~50MB to
  the .wasm files
@snej
Copy link
Collaborator Author

snej commented Jun 14, 2024

To make the WASM smaller I

  • Built with Release instead of RelWithDebInfo
  • Enabled LTO
  • Forced -Os since the MinSizeRel build type doesn't seem to do anything with Emscripten

This reduced C4Tests to 3.1MB (1.1MB gzipped), and CppTests to 5.2MB (1.7MB gzipped). Nice!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants