[fuzz] Add libfuzzer binaries to BUILD.gn
For the longest time, the libfuzzer binaries used by oss-fuzz were just hacked onto the BUILD.gn file. This removes that patch and makes them buildable from Skia proper. After this, there should not be any modifications oss-fuzz needs to do to a Skia checkout before it builds and runs. Of note, oss-fuzz will define skia_use_libfuzzer_defaults to be false so it can control those flags with more finesse (e.g. fuzz with ASAN, fuzz with hong fuzz instead of libfuzzer). I added on skia_use_libfuzzer_defaults so that a normal developer gets something that works by default. Bug: skia:10713 Change-Id: I024f5805060cba8f8560e1c2569b9309fb49a564 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/316536 Commit-Queue: Kevin Lubick <kjlubick@google.com> Reviewed-by: Mike Klein <mtklein@google.com>
This commit is contained in:
parent
22aa7d7915
commit
272e8bcd24
357
BUILD.gn
357
BUILD.gn
@ -2674,6 +2674,363 @@ if (skia_enable_tools) {
|
||||
deps += [ "modules/canvaskit:viewer_wasm" ]
|
||||
}
|
||||
}
|
||||
|
||||
if (skia_build_fuzzers) {
|
||||
template("libfuzzer_app") {
|
||||
output_dir = root_build_dir
|
||||
executable(target_name) {
|
||||
check_includes = false
|
||||
forward_variables_from(invoker, "*", [ "is_shared_library" ])
|
||||
configs += [ ":skia_private" ]
|
||||
sources += [
|
||||
"fuzz/Fuzz.cpp",
|
||||
"fuzz/FuzzCommon.cpp",
|
||||
]
|
||||
deps += [
|
||||
":flags",
|
||||
":gpu_tool_utils",
|
||||
":skia",
|
||||
]
|
||||
defines = [ "SK_BUILD_FOR_LIBFUZZER" ]
|
||||
if (skia_use_libfuzzer_defaults) {
|
||||
cflags = [ "-fsanitize=fuzzer" ]
|
||||
ldflags = [ "-fsanitize=fuzzer" ]
|
||||
}
|
||||
testonly = true
|
||||
}
|
||||
}
|
||||
|
||||
libfuzzer_app("region_deserialize") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzRegionDeserialize.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("image_filter_deserialize") {
|
||||
include_dirs = [
|
||||
"tools",
|
||||
"tools/fonts",
|
||||
]
|
||||
sources = [
|
||||
"fuzz/oss_fuzz/FuzzImageFilterDeserialize.cpp",
|
||||
"tools/Resources.cpp",
|
||||
"tools/fonts/TestFontMgr.cpp",
|
||||
"tools/fonts/TestSVGTypeface.cpp",
|
||||
"tools/fonts/TestTypeface.cpp",
|
||||
]
|
||||
deps = [ ":experimental_svg_model" ]
|
||||
}
|
||||
|
||||
libfuzzer_app("region_set_path") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzRegionSetPath.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("textblob_deserialize") {
|
||||
include_dirs = [
|
||||
"tools",
|
||||
"tools/fonts",
|
||||
]
|
||||
sources = [
|
||||
"fuzz/oss_fuzz/FuzzTextBlobDeserialize.cpp",
|
||||
"tools/Resources.cpp",
|
||||
"tools/fonts/TestFontMgr.cpp",
|
||||
"tools/fonts/TestSVGTypeface.cpp",
|
||||
"tools/fonts/TestTypeface.cpp",
|
||||
]
|
||||
deps = [ ":experimental_svg_model" ]
|
||||
}
|
||||
|
||||
libfuzzer_app("path_deserialize") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzPathDeserialize.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("image_decode") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzImage.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("animated_image_decode") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzAnimatedImage.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("api_create_ddl") {
|
||||
include_dirs = [
|
||||
"include",
|
||||
"include/gpu",
|
||||
]
|
||||
sources = [
|
||||
"fuzz/FuzzCreateDDL.cpp",
|
||||
"fuzz/oss_fuzz/FuzzAPICreateDDL.cpp",
|
||||
"tools/Resources.cpp",
|
||||
"tools/UrlDataManager.cpp",
|
||||
"tools/debugger/DebugCanvas.cpp",
|
||||
"tools/debugger/DebugLayerManager.cpp",
|
||||
"tools/debugger/DrawCommand.cpp",
|
||||
"tools/debugger/JsonWriteBuffer.cpp",
|
||||
"tools/fonts/TestFontMgr.cpp",
|
||||
"tools/fonts/TestSVGTypeface.cpp",
|
||||
"tools/fonts/TestTypeface.cpp",
|
||||
]
|
||||
deps = [
|
||||
":experimental_svg_model",
|
||||
"//third_party/libpng",
|
||||
]
|
||||
}
|
||||
|
||||
libfuzzer_app("api_draw_functions") {
|
||||
sources = [
|
||||
"fuzz/FuzzDrawFunctions.cpp",
|
||||
"fuzz/oss_fuzz/FuzzDrawFunctions.cpp",
|
||||
]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("api_gradients") {
|
||||
sources = [
|
||||
"fuzz/FuzzGradients.cpp",
|
||||
"fuzz/oss_fuzz/FuzzGradients.cpp",
|
||||
]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("api_image_filter") {
|
||||
include_dirs = [
|
||||
"tools",
|
||||
"tools/debugger",
|
||||
]
|
||||
sources = [
|
||||
"fuzz/FuzzCanvas.cpp",
|
||||
"fuzz/oss_fuzz/FuzzAPIImageFilter.cpp",
|
||||
"tools/UrlDataManager.cpp",
|
||||
"tools/debugger/DebugCanvas.cpp",
|
||||
"tools/debugger/DebugLayerManager.cpp",
|
||||
"tools/debugger/DrawCommand.cpp",
|
||||
"tools/debugger/JsonWriteBuffer.cpp",
|
||||
]
|
||||
deps = [ "//third_party/libpng" ]
|
||||
}
|
||||
|
||||
libfuzzer_app("api_path_measure") {
|
||||
sources = [
|
||||
"fuzz/FuzzPathMeasure.cpp",
|
||||
"fuzz/oss_fuzz/FuzzPathMeasure.cpp",
|
||||
]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("api_pathop") {
|
||||
sources = [
|
||||
"fuzz/FuzzPathop.cpp",
|
||||
"fuzz/oss_fuzz/FuzzPathop.cpp",
|
||||
]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("api_raster_n32_canvas") {
|
||||
include_dirs = [
|
||||
"tools",
|
||||
"tools/debugger",
|
||||
"tools/fonts",
|
||||
]
|
||||
sources = [
|
||||
"fuzz/FuzzCanvas.cpp",
|
||||
"fuzz/oss_fuzz/FuzzRasterN32Canvas.cpp",
|
||||
"tools/Resources.cpp",
|
||||
"tools/UrlDataManager.cpp",
|
||||
"tools/debugger/DebugCanvas.cpp",
|
||||
"tools/debugger/DebugLayerManager.cpp",
|
||||
"tools/debugger/DrawCommand.cpp",
|
||||
"tools/debugger/JsonWriteBuffer.cpp",
|
||||
"tools/fonts/TestFontMgr.cpp",
|
||||
"tools/fonts/TestSVGTypeface.cpp",
|
||||
"tools/fonts/TestTypeface.cpp",
|
||||
]
|
||||
deps = [
|
||||
":experimental_svg_model",
|
||||
"//third_party/libpng",
|
||||
]
|
||||
}
|
||||
|
||||
if (skia_use_gl) {
|
||||
libfuzzer_app("api_mock_gpu_canvas") {
|
||||
include_dirs = [
|
||||
"tools",
|
||||
"tools/debugger",
|
||||
"tools/fonts",
|
||||
]
|
||||
sources = [
|
||||
"fuzz/FuzzCanvas.cpp",
|
||||
"fuzz/oss_fuzz/FuzzMockGPUCanvas.cpp",
|
||||
"tools/LsanSuppressions.cpp",
|
||||
"tools/Resources.cpp",
|
||||
"tools/UrlDataManager.cpp",
|
||||
"tools/debugger/DebugCanvas.cpp",
|
||||
"tools/debugger/DebugLayerManager.cpp",
|
||||
"tools/debugger/DrawCommand.cpp",
|
||||
"tools/debugger/JsonWriteBuffer.cpp",
|
||||
"tools/fonts/TestFontMgr.cpp",
|
||||
"tools/fonts/TestSVGTypeface.cpp",
|
||||
"tools/fonts/TestTypeface.cpp",
|
||||
]
|
||||
deps = [
|
||||
":experimental_svg_model",
|
||||
"//third_party/libpng",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
libfuzzer_app("api_null_canvas") {
|
||||
include_dirs = [
|
||||
"tools",
|
||||
"tools/debugger",
|
||||
"tools/fonts",
|
||||
]
|
||||
sources = [
|
||||
"fuzz/FuzzCanvas.cpp",
|
||||
"fuzz/oss_fuzz/FuzzNullCanvas.cpp",
|
||||
"tools/Resources.cpp",
|
||||
"tools/UrlDataManager.cpp",
|
||||
"tools/debugger/DebugCanvas.cpp",
|
||||
"tools/debugger/DebugLayerManager.cpp",
|
||||
"tools/debugger/DrawCommand.cpp",
|
||||
"tools/debugger/JsonWriteBuffer.cpp",
|
||||
"tools/fonts/TestFontMgr.cpp",
|
||||
"tools/fonts/TestSVGTypeface.cpp",
|
||||
"tools/fonts/TestTypeface.cpp",
|
||||
]
|
||||
deps = [
|
||||
":experimental_svg_model",
|
||||
"//third_party/libpng",
|
||||
]
|
||||
}
|
||||
|
||||
libfuzzer_app("api_svg_canvas") {
|
||||
include_dirs = [
|
||||
"include",
|
||||
"include/svg",
|
||||
]
|
||||
sources = [
|
||||
"fuzz/FuzzCanvas.cpp",
|
||||
"fuzz/oss_fuzz/FuzzAPISVGCanvas.cpp",
|
||||
"tools/Resources.cpp",
|
||||
"tools/UrlDataManager.cpp",
|
||||
"tools/debugger/DebugCanvas.cpp",
|
||||
"tools/debugger/DebugLayerManager.cpp",
|
||||
"tools/debugger/DrawCommand.cpp",
|
||||
"tools/debugger/JsonWriteBuffer.cpp",
|
||||
"tools/fonts/TestFontMgr.cpp",
|
||||
"tools/fonts/TestSVGTypeface.cpp",
|
||||
"tools/fonts/TestTypeface.cpp",
|
||||
]
|
||||
deps = [
|
||||
":experimental_svg_model",
|
||||
"//third_party/libpng",
|
||||
]
|
||||
}
|
||||
|
||||
libfuzzer_app("png_encoder") {
|
||||
sources = [
|
||||
"fuzz/FuzzEncoders.cpp",
|
||||
"fuzz/oss_fuzz/FuzzPNGEncoder.cpp",
|
||||
]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("jpeg_encoder") {
|
||||
sources = [
|
||||
"fuzz/FuzzEncoders.cpp",
|
||||
"fuzz/oss_fuzz/FuzzJPEGEncoder.cpp",
|
||||
]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("webp_encoder") {
|
||||
sources = [
|
||||
"fuzz/FuzzEncoders.cpp",
|
||||
"fuzz/oss_fuzz/FuzzWEBPEncoder.cpp",
|
||||
]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("skottie_json") {
|
||||
sources = [
|
||||
"modules/skottie/fuzz/FuzzSkottieJSON.cpp",
|
||||
"tools/Resources.cpp",
|
||||
"tools/fonts/TestFontMgr.cpp",
|
||||
"tools/fonts/TestSVGTypeface.cpp",
|
||||
"tools/fonts/TestTypeface.cpp",
|
||||
]
|
||||
deps = [
|
||||
":experimental_svg_model",
|
||||
"modules/skottie:skottie",
|
||||
]
|
||||
}
|
||||
|
||||
libfuzzer_app("skjson") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzJSON.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("api_polyutils") {
|
||||
sources = [
|
||||
"fuzz/FuzzPolyUtils.cpp",
|
||||
"fuzz/oss_fuzz/FuzzPolyUtils.cpp",
|
||||
]
|
||||
deps = [ ":skia" ]
|
||||
}
|
||||
|
||||
libfuzzer_app("android_codec") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzAndroidCodec.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("image_decode_incremental") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzIncrementalImage.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("sksl2glsl") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzSKSL2GLSL.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("sksl2spirv") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzSKSL2SPIRV.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("sksl2metal") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzSKSL2Metal.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("sksl2pipeline") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzSKSL2Pipeline.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("skdescriptor_deserialize") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzSkDescriptorDeserialize.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("svg_dom") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzSVG.cpp" ]
|
||||
deps = [ ":experimental_svg_model" ]
|
||||
}
|
||||
|
||||
libfuzzer_app("skruntimeeffect") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzSkRuntimeEffect.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
|
||||
libfuzzer_app("skp") {
|
||||
sources = [ "fuzz/oss_fuzz/FuzzSKP.cpp" ]
|
||||
deps = []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_ios && skia_use_metal && !skia_enable_flutter_defines) {
|
||||
|
@ -93,6 +93,9 @@ declare_args() {
|
||||
} else {
|
||||
skia_use_vulkan = false
|
||||
}
|
||||
|
||||
skia_build_fuzzers = is_clang && is_linux
|
||||
skia_use_libfuzzer_defaults = true
|
||||
}
|
||||
|
||||
declare_args() {
|
||||
|
@ -424,10 +424,6 @@
|
||||
#define SK_BUILD_FOR_FUZZER
|
||||
#endif
|
||||
|
||||
#if defined(SK_BUILD_FOR_LIBFUZZER)
|
||||
SK_API void SkDebugf(const char format[], ...) {}
|
||||
#endif
|
||||
|
||||
/** Called internally if we hit an unrecoverable error.
|
||||
The platform implementation must not return, but should either throw
|
||||
an exception or otherwise exit.
|
||||
@ -437,6 +433,9 @@
|
||||
#ifndef SkDebugf
|
||||
SK_API void SkDebugf(const char format[], ...);
|
||||
#endif
|
||||
#if defined(SK_BUILD_FOR_LIBFUZZER)
|
||||
SK_API inline void SkDebugf(const char format[], ...) {}
|
||||
#endif
|
||||
|
||||
// SkASSERT, SkASSERTF and SkASSERT_RELEASE can be used as stand alone assertion expressions, e.g.
|
||||
// uint32_t foo(int x) {
|
||||
|
Loading…
Reference in New Issue
Block a user