Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
matrix-org
Olm
Commits
602c00a8
Commit
602c00a8
authored
Oct 04, 2018
by
David Baker
Browse files
Dual-build wasm and asm.js olm
parent
00384ba8
Changes
4
Hide whitespace changes
Inline
Side-by-side
Makefile
View file @
602c00a8
...
...
@@ -17,7 +17,8 @@ AR = ar
RELEASE_TARGET
:=
$(BUILD_DIR)
/libolm.so.
$(VERSION)
STATIC_RELEASE_TARGET
:=
$(BUILD_DIR)
/libolm.a
DEBUG_TARGET
:=
$(BUILD_DIR)
/libolm_debug.so.
$(VERSION)
JS_TARGET
:=
javascript/olm.js
JS_WASM_TARGET
:=
javascript/olm.js
JS_ASMJS_TARGET
:=
javascript/olm_legacy.js
JS_EXPORTED_FUNCTIONS
:=
javascript/exported_functions.json
JS_EXTRA_EXPORTED_RUNTIME_METHODS
:=
ALLOC_STACK
...
...
@@ -84,8 +85,11 @@ EMCCFLAGS += -s NO_BROWSER=1
# mind that the plaintext can only be 48K because base64). We also have about
# 36K of statics. So let's have 256K of memory.
# (This can't be changed by the app with wasm since it's baked into the wasm).
EMCCFLAGS
+=
-s
TOTAL_STACK
=
65536
-s
TOTAL_MEMORY
=
262144
# (emscripten also mandates at least 16MB of memory for asm.js now, so
# we don't use this for the legacy build.)
EMCCFLAGS_WASM
+=
-s
TOTAL_STACK
=
65536
-s
TOTAL_MEMORY
=
262144
EMCCFLAGS_ASMJS
+=
-s
WASM
=
0
EMCC.c
=
$(EMCC)
$(CFLAGS)
$(CPPFLAGS)
-c
EMCC.cc
=
$(EMCC)
$(CXXFLAGS)
$(CPPFLAGS)
-c
...
...
@@ -121,7 +125,8 @@ $(FUZZER_DEBUG_BINARIES): LDFLAGS += $(DEBUG_OPTIMIZE_FLAGS)
$(JS_OBJECTS)
:
CFLAGS += $(JS_OPTIMIZE_FLAGS)
$(JS_OBJECTS)
:
CXXFLAGS += $(JS_OPTIMIZE_FLAGS)
$(JS_TARGET)
:
LDFLAGS += $(JS_OPTIMIZE_FLAGS)
$(JS_WASM_TARGET)
:
LDFLAGS += $(JS_OPTIMIZE_FLAGS)
$(JS_ASMJS_TARGET)
:
LDFLAGS += $(JS_OPTIMIZE_FLAGS)
### Fix to make mkdir work on windows and linux
ifeq
($(shell echo "check_quotes"),"check_quotes")
...
...
@@ -164,14 +169,27 @@ static: $(STATIC_RELEASE_TARGET)
$(STATIC_RELEASE_TARGET)
:
$(RELEASE_OBJECTS)
$(AR)
rcs
$@
$^
js
:
$(JS_TARGET)
js
:
$(JS_
WASM_TARGET) $(JS_ASMJS_
TARGET)
.PHONY
:
js
# Note that the output file we give to emcc determines the name of the
# wasm file baked into the js, hence messing around outputting to olm.js
# and then renaming it.
$(JS_TARGET)
:
$(JS_OBJECTS) $(JS_PRE) $(JS_POST) $(JS_EXPORTED_FUNCTIONS) $(JS_PREFIX) $(JS_SUFFIX)
$(JS_
WASM_
TARGET)
:
$(JS_OBJECTS) $(JS_PRE) $(JS_POST) $(JS_EXPORTED_FUNCTIONS) $(JS_PREFIX) $(JS_SUFFIX)
EMCC_CLOSURE_ARGS
=
"--externs
$(JS_EXTERNS)
"
$(EMCC_LINK)
\
$(EMCCFLAGS_WASM)
\
$(
foreach
f,
$(JS_PRE)
,--pre-js
$(f)
)
\
$(
foreach
f,
$(JS_POST)
,--post-js
$(f)
)
\
-s
"EXPORTED_FUNCTIONS=@
$(JS_EXPORTED_FUNCTIONS)
"
\
-s
"EXTRA_EXPORTED_RUNTIME_METHODS=
$(JS_EXTRA_EXPORTED_RUNTIME_METHODS)
"
\
$(JS_OBJECTS)
-o
$@
mv
$@
javascript/olmtmp.js
cat
$(JS_PREFIX)
javascript/olmtmp.js
$(JS_SUFFIX)
>
$@
rm
javascript/olmtmp.js
$(JS_ASMJS_TARGET)
:
$(JS_OBJECTS) $(JS_PRE) $(JS_POST) $(JS_EXPORTED_FUNCTIONS) $(JS_PREFIX) $(JS_SUFFIX)
EMCC_CLOSURE_ARGS
=
"--externs
$(JS_EXTERNS)
"
$(EMCC_LINK)
\
$(EMCCFLAGS_ASMJS)
\
$(
foreach
f,
$(JS_PRE)
,--pre-js
$(f)
)
\
$(
foreach
f,
$(JS_POST)
,--post-js
$(f)
)
\
-s
"EXPORTED_FUNCTIONS=@
$(JS_EXPORTED_FUNCTIONS)
"
\
...
...
javascript/olm_post.js
View file @
602c00a8
...
...
@@ -463,12 +463,3 @@ olm_exports["get_library_version"] = restore_stack(function() {
getValue
(
buf
+
2
,
'
i8
'
),
];
});
Module
[
'
onRuntimeInitialized
'
]
=
function
()
{
OLM_ERROR
=
Module
[
'
_olm_error
'
]();
if
(
onInitSuccess
)
onInitSuccess
();
};
Module
[
'
onAbort
'
]
=
function
(
err
)
{
if
(
onInitFail
)
onInitFail
(
err
);
};
javascript/olm_pre.js
View file @
602c00a8
...
...
@@ -37,3 +37,12 @@ if (typeof(OLM_OPTIONS) !== 'undefined') {
* use UTF8ToString.
*/
var
NULL_BYTE_PADDING_LENGTH
=
1
;
Module
[
'
onRuntimeInitialized
'
]
=
function
()
{
OLM_ERROR
=
Module
[
'
_olm_error
'
]();
if
(
onInitSuccess
)
onInitSuccess
();
};
Module
[
'
onAbort
'
]
=
function
(
err
)
{
if
(
onInitFail
)
onInitFail
(
err
);
};
javascript/olm_suffix.js
View file @
602c00a8
...
...
@@ -24,7 +24,9 @@ if (typeof(window) !== 'undefined') {
window
[
"
Olm
"
]
=
olm_exports
;
}
// Emscripten sets the module exports to be its module
// with wrapped c functions. Clobber it with our higher
// level wrapper class.
module
.
exports
=
olm_exports
;
if
(
typeof
module
===
'
object
'
)
{
// Emscripten sets the module exports to be its module
// with wrapped c functions. Clobber it with our higher
// level wrapper class.
module
.
exports
=
olm_exports
;
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment