aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2017-10-16 16:36:40 -0700
committerVitaly Buka <vitalybuka@gmail.com>2017-10-16 17:38:24 -0700
commit7218a158759cc2296927e807eb39c944f26b0c1d (patch)
treec83a0f51fdf06118eb4d32144450ce59072223f8
parente4eae600ef56c295642318dc592fa106a6199a1b (diff)
downloadlibprotobuf-mutator-7218a158759cc2296927e807eb39c944f26b0c1d.tar.gz
Switch to -fsanitize=fuzzer
Fixes issue #78
-rw-r--r--CMakeLists.txt42
-rw-r--r--cmake/external/libfuzzer.cmake39
-rw-r--r--examples/expat/CMakeLists.txt2
-rw-r--r--examples/libfuzzer/CMakeLists.txt2
-rw-r--r--examples/libxml2/CMakeLists.txt2
5 files changed, 13 insertions, 74 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 81e94f5..8c3aa20 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,6 @@ enable_language(CXX)
option(LIB_PROTO_MUTATOR_DOWNLOAD_PROTOBUF
"Automatically download working protobuf" OFF)
option(LIB_PROTO_MUTATOR_WITH_ASAN "Enable address sanitizer" OFF)
-set(LIB_PROTO_MUTATOR_FUZZER_LIBRARIES "" CACHE STRING "Fuzzing engine libs")
# External dependencies
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/external)
@@ -50,16 +49,12 @@ check_cxx_compiler_flag("-fsanitize=address -fsanitize-address-use-after-scope"
LIB_PROTO_MUTATOR_HAS_SANITIZE_SCOPE)
unset(CMAKE_REQUIRED_FLAGS)
-set(CMAKE_REQUIRED_FLAGS "-fsanitize-coverage=0")
-check_cxx_compiler_flag(-fsanitize-coverage= LIB_PROTO_MUTATOR_HAS_NO_COVERAGE)
+set(CMAKE_REQUIRED_FLAGS "-fsanitize=fuzzer-no-link")
+check_cxx_compiler_flag(-fsanitize=fuzzer-no-link LIB_PROTO_MUTATOR_HAS_SANITIZE_FUZZER)
unset(CMAKE_REQUIRED_FLAGS)
-set(CMAKE_REQUIRED_FLAGS "-fsanitize-coverage=trace-pc-guard")
-check_cxx_compiler_flag(-fsanitize-coverage=trace-pc-guard LIB_PROTO_MUTATOR_HAS_TRACE_PC)
-unset(CMAKE_REQUIRED_FLAGS)
-
-set(CMAKE_REQUIRED_FLAGS "-fsanitize-coverage=trace-cmp")
-check_cxx_compiler_flag(-fsanitize-coverage=trace-cmp LIB_PROTO_MUTATOR_HAS_TRACE_CMP)
+set(CMAKE_REQUIRED_FLAGS "-fno-sanitize=fuzzer")
+check_cxx_compiler_flag(-fno-sanitize=fuzzer LIB_PROTO_MUTATOR_HAS_NO_SANITIZE_FUZZER)
unset(CMAKE_REQUIRED_FLAGS)
check_cxx_compiler_flag(-Wstring-conversion LIB_PROTO_MUTATOR_HAS_WSTRING_CONVERSION)
@@ -78,24 +73,12 @@ if (LIB_PROTO_MUTATOR_WITH_ASAN)
endif()
endif()
-if (LIB_PROTO_MUTATOR_HAS_TRACE_PC)
- list(APPEND SANITIZE_COVERAGE_OPTIONS trace-pc-guard)
-endif()
-if (LIB_PROTO_MUTATOR_HAS_TRACE_CMP)
- list(APPEND SANITIZE_COVERAGE_OPTIONS trace-cmp)
-endif()
-
-if (SANITIZE_COVERAGE_OPTIONS)
- foreach(OPT ${SANITIZE_COVERAGE_OPTIONS})
- set(FUZZING_FLAGS "${FUZZING_FLAGS},${OPT}")
- endforeach()
- string(SUBSTRING ${FUZZING_FLAGS} 1 -1 FUZZING_FLAGS)
- set(FUZZING_FLAGS "-fsanitize-coverage=${FUZZING_FLAGS}")
- set(NO_FUZZING_FLAGS "-fsanitize-coverage=0")
+if (LIB_PROTO_MUTATOR_HAS_SANITIZE_FUZZER)
+ set(FUZZING_FLAGS "-fsanitize=fuzzer-no-link")
+ set(FUZZING_FLAGS_BINARY "-fsanitize=fuzzer")
endif()
-
-if (LIB_PROTO_MUTATOR_HAS_NO_COVERAGE)
- set(NO_FUZZING_FLAGS "-fsanitize-coverage=0")
+if (LIB_PROTO_MUTATOR_HAS_SANITIZE_NO_FUZZER)
+ set(NO_FUZZING_FLAGS "-fno-sanitize=fuzzer")
endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_FLAGS}")
@@ -128,12 +111,7 @@ add_custom_target(check
add_subdirectory(src)
-if ("${LIB_PROTO_MUTATOR_FUZZER_LIBRARIES}" STREQUAL "" AND
- NOT "${FUZZING_FLAGS}" STREQUAL "")
- include(libfuzzer)
-endif()
-
-if (NOT "${LIB_PROTO_MUTATOR_FUZZER_LIBRARIES}" STREQUAL "")
+if (NOT "${FUZZING_FLAGS}" STREQUAL "")
add_subdirectory(examples EXCLUDE_FROM_ALL)
endif()
diff --git a/cmake/external/libfuzzer.cmake b/cmake/external/libfuzzer.cmake
deleted file mode 100644
index 4eb1f3b..0000000
--- a/cmake/external/libfuzzer.cmake
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright 2017 Google Inc. All rights reserved.
-#
-# 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.
-
-set(LIBFUZZER_TARGET external.libfuzzer)
-set(LIBFUZZER_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/${LIBFUZZER_TARGET})
-
-list(APPEND LIB_PROTO_MUTATOR_FUZZER_LIBRARIES Fuzzer)
-
-foreach(lib IN LISTS LIB_PROTO_MUTATOR_FUZZER_LIBRARIES)
- set(CUR_LIB ${LIBFUZZER_INSTALL_DIR}/src/${LIBFUZZER_TARGET}-build/lib${lib}.a)
- list(APPEND LIBFUZZER_BUILD_BYPRODUCTS ${CUR_LIB})
-
- add_library(${lib} STATIC IMPORTED)
- set_property(TARGET ${lib} PROPERTY IMPORTED_LOCATION ${CUR_LIB})
- add_dependencies(${lib} ${LIBFUZZER_TARGET})
-endforeach(lib)
-
-include (ExternalProject)
-ExternalProject_Add(${LIBFUZZER_TARGET}
- PREFIX ${LIBFUZZER_TARGET}
- GIT_REPOSITORY https://chromium.googlesource.com/chromium/llvm-project/llvm/lib/Fuzzer
- GIT_TAG master
- UPDATE_COMMAND ""
- CONFIGURE_COMMAND ""
- BUILD_COMMAND CXX=${CMAKE_CXX_COMPILER} ${LIBFUZZER_INSTALL_DIR}/src/${LIBFUZZER_TARGET}/build.sh
- INSTALL_COMMAND ""
- BUILD_BYPRODUCTS ${LIBFUZZER_BUILD_BYPRODUCTS}
-)
diff --git a/examples/expat/CMakeLists.txt b/examples/expat/CMakeLists.txt
index e719d4b..f2031f5 100644
--- a/examples/expat/CMakeLists.txt
+++ b/examples/expat/CMakeLists.txt
@@ -25,7 +25,7 @@ target_link_libraries(expat_example
set_property(TARGET expat_example
PROPERTY COMPILE_FLAGS ${FUZZING_FLAGS})
set_property(TARGET expat_example
- PROPERTY LINK_FLAGS ${FUZZING_FLAGS})
+ PROPERTY LINK_FLAGS ${FUZZING_FLAGS_BINARY})
add_executable(expat_example_test
expat_example_test.cc)
diff --git a/examples/libfuzzer/CMakeLists.txt b/examples/libfuzzer/CMakeLists.txt
index a0f103f..dc39177 100644
--- a/examples/libfuzzer/CMakeLists.txt
+++ b/examples/libfuzzer/CMakeLists.txt
@@ -38,6 +38,6 @@ foreach(fuzzer libfuzzer_example libfuzzer_bin_example)
set_property(TARGET ${fuzzer}
PROPERTY COMPILE_FLAGS ${FUZZING_FLAGS})
set_property(TARGET ${fuzzer}
- PROPERTY LINK_FLAGS ${FUZZING_FLAGS})
+ PROPERTY LINK_FLAGS ${FUZZING_FLAGS_BINARY})
add_dependencies(libfuzzer_example_test ${fuzzer})
endforeach(fuzzer)
diff --git a/examples/libxml2/CMakeLists.txt b/examples/libxml2/CMakeLists.txt
index f39e35d..cf9f8a2 100644
--- a/examples/libxml2/CMakeLists.txt
+++ b/examples/libxml2/CMakeLists.txt
@@ -26,7 +26,7 @@ target_link_libraries(libxml2_example
set_property(TARGET libxml2_example
PROPERTY COMPILE_FLAGS ${FUZZING_FLAGS})
set_property(TARGET libxml2_example
- PROPERTY LINK_FLAGS ${FUZZING_FLAGS})
+ PROPERTY LINK_FLAGS ${FUZZING_FLAGS_BINARY})
add_executable(libxml2_example_test
libxml2_example_test.cc)