mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 22:36:09 +03:00
115 lines
3.4 KiB
Plaintext
115 lines
3.4 KiB
Plaintext
|
# Copyright (C) 2018 The Android Open Source Project
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
|
||
|
wasm_toolchain = "//gn/standalone/toolchain:wasm"
|
||
|
is_wasm = current_toolchain == wasm_toolchain
|
||
|
emsdk_dir = rebase_path("//buildtools/emsdk", "")
|
||
|
nodejs_dir = rebase_path("//buildtools/nodejs", "")
|
||
|
|
||
|
# This variable is used by the //gn/standalone/toolchain/BUILD.gn.
|
||
|
em_config = "EMSCRIPTEN_ROOT='$emsdk_dir/emscripten';"
|
||
|
em_config += "LLVM_ROOT='$emsdk_dir/llvm';"
|
||
|
em_config += "BINARYEN_ROOT='$emsdk_dir/llvm/binaryen';"
|
||
|
em_config += "EMSCRIPTEN_NATIVE_OPTIMIZER='$emsdk_dir/llvm/optimizer';"
|
||
|
em_config += "NODE_JS='$nodejs_dir/bin/node';"
|
||
|
em_config += "COMPILER_ENGINE=NODE_JS;"
|
||
|
em_config += "JS_ENGINES=[NODE_JS];"
|
||
|
em_config = "\"$em_config\""
|
||
|
|
||
|
# Defines a WASM library target.
|
||
|
# Args:
|
||
|
# generate_js: when true generates a .wasm file and a .js file that wraps it
|
||
|
# and provides the boilerplate to initialize the module.
|
||
|
# generate_html: when true generates also an example .html file which contains
|
||
|
# a minimal console to interact with the module (useful for testing).
|
||
|
template("wasm_lib") {
|
||
|
_lib_name = target_name
|
||
|
|
||
|
if (is_wasm) {
|
||
|
assert(defined(invoker.sources))
|
||
|
_target_ldflags = [
|
||
|
"-s",
|
||
|
"WASM=1",
|
||
|
"-s",
|
||
|
"NO_FILESYSTEM=1",
|
||
|
"-s",
|
||
|
"DISABLE_EXCEPTION_CATCHING=1",
|
||
|
"-s",
|
||
|
"TOTAL_MEMORY=33554432",
|
||
|
"-s",
|
||
|
"RESERVED_FUNCTION_POINTERS=32",
|
||
|
"-s",
|
||
|
"BINARYEN_METHOD='native-wasm'",
|
||
|
"-s",
|
||
|
"EXPORT_FUNCTION_TABLES=1",
|
||
|
"-s",
|
||
|
"EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'addFunction']",
|
||
|
]
|
||
|
if (!is_debug) {
|
||
|
_target_ldflags += [ "-O3" ]
|
||
|
}
|
||
|
|
||
|
if (defined(invoker.js_library)) {
|
||
|
_target_ldflags += [
|
||
|
"--js-library",
|
||
|
invoker.js_library,
|
||
|
]
|
||
|
}
|
||
|
|
||
|
_vars_to_forward = [
|
||
|
"cflags",
|
||
|
"defines",
|
||
|
"deps",
|
||
|
"includes",
|
||
|
"sources",
|
||
|
"include_dirs",
|
||
|
"public_configs",
|
||
|
"testonly",
|
||
|
"visibility",
|
||
|
]
|
||
|
|
||
|
executable("${_lib_name}.js") {
|
||
|
forward_variables_from(invoker, _vars_to_forward)
|
||
|
ldflags = _target_ldflags
|
||
|
output_extension = ""
|
||
|
}
|
||
|
|
||
|
# This is just a workaround to deal with the fact that GN doesn't allow
|
||
|
# spcifying extra outputs for an executable() target. In reality the .wasm
|
||
|
# file here is generated by the executable() target above, together with the
|
||
|
# .js file. This dummy target is here to tell GN "there is a target that
|
||
|
# outputs also the .wasm file", so we can depend on that in copy() targets.
|
||
|
action("${_lib_name}.wasm") {
|
||
|
inputs = []
|
||
|
deps = [
|
||
|
":${_lib_name}.js",
|
||
|
]
|
||
|
outputs = [
|
||
|
"$root_out_dir/$_lib_name.wasm",
|
||
|
]
|
||
|
args = [ "--noop" ]
|
||
|
script = "//gn/standalone/build_tool_wrapper.py"
|
||
|
}
|
||
|
} else { # is_wasm
|
||
|
not_needed(invoker, "*")
|
||
|
}
|
||
|
|
||
|
group(target_name) {
|
||
|
deps = [
|
||
|
":${_lib_name}.js($wasm_toolchain)",
|
||
|
":${_lib_name}.wasm($wasm_toolchain)",
|
||
|
]
|
||
|
}
|
||
|
} # template
|