diff --git a/bazel/platform/BUILD.bazel b/bazel/platform/BUILD.bazel index 3cd12b59963c..978c08b41037 100644 --- a/bazel/platform/BUILD.bazel +++ b/bazel/platform/BUILD.bazel @@ -80,3 +80,15 @@ constraint_value( constraint_setting = ":skia_hermetic_toolchain", visibility = ["//visibility:public"], ) + +# This constraint allows us to have clang use a "trivial_abi" that saves code size but +# breaks clients that aren't expecting it. +# http://review.skia.org/633089 +# https://quuxplusone.github.io/blog/2018/05/02/trivial-abi-101/ +constraint_setting(name = "clang_abi_mode") + +constraint_value( + name = "trivial_abi", + constraint_setting = ":clang_abi_mode", + visibility = ["//visibility:public"], +) diff --git a/defines.bzl b/defines.bzl index 7b0ee4f63634..3b9beae6a9d1 100644 --- a/defines.bzl +++ b/defines.bzl @@ -127,6 +127,10 @@ PLATFORM_DEFINES = select({ "SK_FORCE_AAA", ], "//conditions:default": [], +}) + select({ + "//bazel/platform:trivial_abi": ["SK_TRIVIAL_ABI=[[clang::trivial_abi]]"], + "//bazel/common_config_settings:cpu_wasm": ["SK_TRIVIAL_ABI=[[clang::trivial_abi]]"], + "//conditions:default": [], }) # Skia's public headers can work with any version of a Vulkan header. When compiling Skia internals, diff --git a/modules/canvaskit/compile.sh b/modules/canvaskit/compile.sh index df3cb42b5a3b..f9d8ecb6781b 100755 --- a/modules/canvaskit/compile.sh +++ b/modules/canvaskit/compile.sh @@ -208,6 +208,7 @@ echo "Compiling" --args="is_debug=${IS_DEBUG} \ is_official_build=${IS_OFFICIAL_BUILD} \ is_component_build=false \ + is_trivial_abi=true \ werror=true \ target_cpu=\"wasm\" \ \ diff --git a/modules/pathkit/compile.sh b/modules/pathkit/compile.sh index 5f029ad928f6..d4f90ed40002 100755 --- a/modules/pathkit/compile.sh +++ b/modules/pathkit/compile.sh @@ -89,6 +89,7 @@ echo "Compiling bitcode" ] \ is_debug=false \ is_official_build=true \ + is_trivial_abi=true \ is_component_build=false \ werror=true \ target_cpu=\"wasm\" " @@ -104,6 +105,7 @@ ${EMCXX} $RELEASE_CONF -std=c++17 \ --pre-js $BASE_DIR/helper.js \ --pre-js $BASE_DIR/chaining.js \ -fno-rtti -fno-exceptions -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 \ +"-DSK_TRIVIAL_ABI=[[clang::trivial_abi]]" \ $WASM_CONF \ -sERROR_ON_UNDEFINED_SYMBOLS=1 \ -sEXPORT_NAME="PathKitInit" \