From b33e4642724b2fd375a41fc8eca9a47e7075f093 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Tue, 25 Apr 2023 15:11:49 -0400 Subject: [PATCH] Enable trivial ABI for CanvasKit and Bazel build This is a follow-up to http://review.skia.org/633089 This introduces a custom platform constraint which one could use in a platform definition. This also lets us opt-in to it in WASM builds (since I believe those don't care about ABI compatibility). Change-Id: I68c498d03726e82bd62f84581be14ea12bba3f2d Reviewed-on: https://skia-review.googlesource.com/c/skia/+/678276 Commit-Queue: Kevin Lubick Reviewed-by: Ben Wagner Reviewed-by: John Stiles --- bazel/platform/BUILD.bazel | 12 ++++++++++++ defines.bzl | 4 ++++ modules/canvaskit/compile.sh | 1 + modules/pathkit/compile.sh | 2 ++ 4 files changed, 19 insertions(+) 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" \