Switch to -fsanitize=fuzzer

Fixes issue #78
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 81e94f5..8c3aa20 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,6 @@
 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 @@
                         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 @@
   endif()
 endif()
 
-if (LIB_PROTO_MUTATOR_HAS_TRACE_PC)
-  list(APPEND SANITIZE_COVERAGE_OPTIONS trace-pc-guard)
+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_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")
-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_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 @@
 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 @@
   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 @@
 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)