-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Integration of pw_fuzzer using FuzzTest (#34274)
* latest trial to build pw_fuzz * migrating FuzzPayloadDecoder FuzzTest * fix error related to latomic * adding template for pw_fuzz_tests * fix for linux_sysroot issue * adding FuzzTests * fixing warning issue * adding support to build pw-fuzztests with build_examples.py * Restyled by whitespace * Restyled by clang-format * adding pw_fuzz_tests to default target * fixing build_examples test golden standard * Adding Fuzzing Targets * Adding Documentation * cleaning-up tests * spelling mistakes * integrating comments --------- Co-authored-by: Restyled.io <commits@restyled.io>
- Loading branch information
Showing
24 changed files
with
824 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# Copyright (c) 2024 Project CHIP Authors | ||
# | ||
# 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. | ||
|
||
import("//build_overrides/build.gni") | ||
import("//build_overrides/pigweed.gni") | ||
|
||
import("$dir_pigweed/targets/host/target_toolchains.gni") | ||
import("${build_root}/toolchain/gcc_toolchain.gni") | ||
|
||
# creating a secondary toolchain to be used with pw_fuzzer FuzzTests | ||
# This toolchain is downstreamed from pigweed's pw_target_toolchain_host.clang_fuzz | ||
# it allows us to specifically use googletest for fuzzing (instead of the lighter version of googletest used for unit testing) | ||
|
||
gcc_toolchain("chip_pw_fuzztest") { | ||
forward_variables_from(pw_target_toolchain_host.clang_fuzz, "*", [ "name" ]) | ||
|
||
toolchain_args = { | ||
# This is needed to have the defaults passed from pw_target_toolchain_host.clang_fuzz to the current scope | ||
forward_variables_from(defaults, "*") | ||
|
||
pw_unit_test_MAIN = "$dir_pw_fuzzer:fuzztest_main" | ||
pw_unit_test_BACKEND = "$dir_pw_fuzzer:gtest" | ||
|
||
# The next three lines are needed by the gcc_toolchain template | ||
current_os = host_os | ||
current_cpu = host_cpu | ||
is_clang = true | ||
|
||
# the upstream pigweed host_clang toolchain defines a default sysroot, which results in build errors | ||
# since it does not include SSL lib and is supposed to be minimal by design. | ||
# by removing this default config, we will use the system's libs. Otherwise we can define our own sysroot. | ||
# discussion on: https://discord.com/channels/691686718377558037/1275092695764959232 | ||
remove_default_configs = [ "$dir_pw_toolchain/host_clang:linux_sysroot" ] | ||
|
||
# when is_debug = true, we pass -O0 to cflags and ldflags, while upstream pw_fuzzer toolchain defines "optimize_speed" config that passes -O2. | ||
# This condition was added to prevent mixing the flags | ||
if (is_debug) { | ||
remove_default_configs += [ "$dir_pw_build:optimize_speed" ] | ||
} | ||
|
||
# removing pigweed downstreamed configs related to warnings | ||
# These are triggering an error related to -Wcast-qual in third_party/nlio | ||
remove_default_configs += [ | ||
"$dir_pw_build:strict_warnings", | ||
"$dir_pw_build:extra_strict_warnings", | ||
] | ||
|
||
# the third_party abseil-cpp triggers warnings related to [-Wformat-nonliteral] | ||
treat_warnings_as_errors = false | ||
|
||
dir_pw_third_party_abseil_cpp = "//third_party/abseil-cpp/src" | ||
dir_pw_third_party_fuzztest = "//third_party/fuzztest" | ||
dir_pw_third_party_googletest = "//third_party/googletest" | ||
|
||
# TODO: Seems that re2 support within FuzzTest was deprecated, keeping it defined is triggering warning | ||
# Remove if re2 is indeed not needed | ||
# dir_pw_third_party_re2 = "//third_party/re2/src" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.