Reland "Reland "[dart2wasm] Include wasm-opt in the shipped dart-sdk.""

This is a reland of commit b19091385a

Fixed the calculation of the paths of binaryen source files so that they
work properly when building as a dependency (inside the flutter engine
repo).

Original change's description:
> Reland "[dart2wasm] Include wasm-opt in the shipped dart-sdk."
>
> This is a reland of commit 6271d26baf
>
> The change broke the gcc riscv64 builders, due to a `unused-variable`
> warning coming from binaryen sources. That warning has now been
> disabled for binaryen targets.
>
> Original change's description:
> > [dart2wasm] Include wasm-opt in the shipped dart-sdk.
> >
> > Change-Id: Ib224f0b92fa28019ad3cf67d7ba2bef5c31b92ef
> > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/280840
> > Reviewed-by: Martin Kustermann <kustermann@google.com>
> > Commit-Queue: Jackson Gardner <jacksongardner@google.com>
> > Reviewed-by: Aske Simon Christensen <askesc@google.com>
>
> Change-Id: I76bf4ad5d1f6a8116631df4b91cbc5a52cac4f31
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/283240
> Reviewed-by: Martin Kustermann <kustermann@google.com>
> Commit-Queue: Jackson Gardner <jacksongardner@google.com>

Change-Id: I5cc269daebc5e2068c084bb72b2bd7cb58ba6fbe
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/283721
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Jackson Gardner <jacksongardner@google.com>
This commit is contained in:
Jackson Gardner 2023-02-16 22:10:18 +00:00 committed by Commit Queue
parent f17e9732c5
commit faecf41be1
6 changed files with 87 additions and 19 deletions

View file

@ -610,12 +610,12 @@ if (is_win) {
default_warning_flags += [
"-Wno-tautological-constant-compare",
"-Wno-unused-but-set-variable", # icu
"-Wno-unused-but-set-parameter", # binaryen
"-Wno-deprecated-non-prototype", # zlib
]
} else {
default_warning_flags +=
[ "-Wno-ignored-qualifiers" ] # Warnings in BoringSSL headers
default_warning_flags += [
"-Wno-ignored-qualifiers", # Warnings in BoringSSL headers
]
}
if (is_mac) {
@ -729,6 +729,15 @@ config("no_rtti") {
}
}
config("enable_exceptions") {
if (is_win) {
cflags_cc = [ "/EHsc" ]
defines = [ "_HAS_EXCEPTIONS=1" ]
} else if (is_clang) {
cflags_cc = [ "-fexceptions" ]
}
}
# Optimization -----------------------------------------------------------------
#
# Note that BUILDCONFIG.gn sets up a variable "default_optimization_config"

View file

@ -8,6 +8,7 @@ is used to set up calls to tools used by the build that need wrappers.
"""
import os
import pathlib
import re
import shutil
import subprocess
@ -149,7 +150,28 @@ class WinTool(object):
not line.startswith('Generating code') and
not line.startswith('Finished generating code')):
print(line)
return link.wait()
link_result = link.wait()
if link_result != 0:
return link_result
# The toolchain configuration in gn always expects a .lib file to be
# included in the output of the link step. However, this only happens
# when the output has exports, and that is not always the case. In
# order to satisfy the expected outputs, we create a dummy .lib file
# in cases where the link step didn't actually create one.
for arg in args:
m = _LINK_EXE_OUT_ARG.match(arg)
if m:
output_filename = m.group('out')
(basename, extension) = os.path.splitext(output_filename)
if extension == '.exe':
lib_path = pathlib.Path(basename + ".lib")
if not os.path.exists(lib_path):
lib_path.touch()
break
return link_result
def ExecMidlWrapper(self, arch, outdir, tlb, h, dlldata, iid, proxy, idl,
*flags):

View file

@ -27,6 +27,7 @@ declare_args() {
dart_precompiled_runtime_stripped_binary = "dart_precompiled_runtime_product"
gen_snapshot_stripped_binary = "gen_snapshot_product"
analyze_snapshot_binary = "analyze_snapshot"
wasm_opt_stripped_binary = "wasm-opt"
}
# The directory layout of the SDK is as follows:
@ -518,6 +519,16 @@ copy("copy_dart2wasm_snapshot") {
[ "$root_out_dir/$dart_sdk_output/bin/snapshots/{{source_file_part}}" ]
}
copy("copy_wasm_opt") {
visibility = [ ":create_full_sdk" ]
deps = [
":copy_libraries",
"../third_party/binaryen:wasm-opt",
]
sources = [ "$root_out_dir/${wasm_opt_stripped_binary}${executable_suffix}" ]
outputs = [ "$root_out_dir/$dart_sdk_output/bin/utils/{{source_file_part}}" ]
}
# Copies DDC's SDK full and outline .dill files to lib/_internal.
copy("copy_dev_compiler_dills") {
visibility = [ ":copy_dev_compiler_sdk" ]
@ -755,6 +766,7 @@ group("create_full_sdk") {
public_deps += [
":copy_dart2wasm_platform",
":copy_dart2wasm_snapshot",
":copy_wasm_opt",
]
}
}

View file

@ -4,6 +4,14 @@
import("../../sdk_args.gni")
config("binaryen_warnings") {
if (is_clang) {
cflags = [ "-Wno-unused-but-set-parameter" ]
} else if (!is_win) {
cflags = [ "-Wno-unused-variable" ]
}
}
action("generate_needed_files") {
script = "generate_needed_files.py"
@ -31,24 +39,31 @@ action("generate_needed_files") {
source_set("binaryen_sources") {
src_dirs = [
rebase_path("src/src/ir", root_build_dir),
rebase_path("src/src/asmjs", root_build_dir),
rebase_path("src/src/cfg", root_build_dir),
rebase_path("src/src/passes", root_build_dir),
rebase_path("src/src/support", root_build_dir),
rebase_path("src/src/wasm", root_build_dir),
rebase_path("src/src/tools/fuzzing", root_build_dir),
rebase_path("src/src/emscripten-optimizer", root_build_dir),
"src/src/ir",
"src/src/asmjs",
"src/src/cfg",
"src/src/passes",
"src/src/support",
"src/src/wasm",
"src/src/tools/fuzzing",
"src/src/emscripten-optimizer",
]
# We avoid listing all sources manually, this means when updating
# binaryen in DEPS (or manually editing) one has to ensure to
# re-run GN in DEPS to ensure new dependencies are picked up.
# (this lowers the maintenance burden of GN build support for binaryen)
sources = exec_script("list_sources.py",
src_dirs,
sources = []
foreach(src_dir, src_dirs) {
foreach(src_file,
exec_script("list_sources.py",
[ rebase_path(src_dir, root_build_dir) ],
"list lines",
[ "$default_git_folder/logs/HEAD" ])
[ "$default_git_folder/logs/HEAD" ])) {
sources += [ "$src_dir/$src_file" ]
}
}
include_dirs = [ "src/src" ]
# Ensure WasmIntrinsics.cpp/config.h files are generated.
@ -59,6 +74,11 @@ source_set("binaryen_sources") {
# Ensure generated config.h file is include path.
include_dirs += [ "$target_gen_dir" ]
configs += [
"//build/config/compiler:enable_exceptions",
":binaryen_warnings",
]
}
template("wasm_tool") {
@ -72,6 +92,11 @@ template("wasm_tool") {
include_dirs = [ "src/src" ]
deps = [ ":binaryen_sources" ]
forward_variables_from(invoker, "*")
configs += [
"//build/config/compiler:enable_exceptions",
":binaryen_warnings",
]
}
}

View file

@ -8,10 +8,9 @@ import sys
def main(args):
for dirname in args:
for file in os.listdir(dirname):
if file.endswith('.cpp') or file.endswith('.h'):
print(os.path.join(dirname, file))
for file in os.listdir(args[0]):
if file.endswith('.cpp') or file.endswith('.h'):
print(file)
if __name__ == '__main__':

View file

@ -300,6 +300,7 @@ def ToGnArgs(args, mode, arch, target_os, sanitizer, verify_sdk_hash):
gn_args['gen_snapshot_stripped_binary'] = (
'exe.stripped/gen_snapshot_product')
gn_args['analyze_snapshot_binary'] = ('exe.stripped/analyze_snapshot')
gn_args['wasm_opt_stripped_binary'] = 'exe.stripped/wasm-opt'
# Setup the user-defined sysroot.
if UseSysroot(args, gn_args):