2017-04-21 19:39:50 +02:00
|
|
|
include(CheckCXXSourceCompiles)
|
|
|
|
|
2017-04-21 20:19:56 +02:00
|
|
|
if( APPLE )
|
|
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
|
|
static thread_local int blah;
|
|
|
|
int main() {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
" HAS_THREAD_LOCAL)
|
2017-04-21 19:39:50 +02:00
|
|
|
|
2017-04-21 20:19:56 +02:00
|
|
|
if( NOT HAS_THREAD_LOCAL )
|
2017-04-21 19:39:50 +02:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Dthread_local=__thread")
|
2017-04-21 20:19:56 +02:00
|
|
|
endif()
|
2017-04-21 19:39:50 +02:00
|
|
|
endif()
|
|
|
|
|
2017-08-04 19:19:45 +02:00
|
|
|
if (CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux")
|
|
|
|
set(LIBFUZZER_ENABLED_CHECK ON)
|
|
|
|
else()
|
|
|
|
set(LIBFUZZER_ENABLED_CHECK OFF)
|
2017-04-22 00:38:24 +02:00
|
|
|
endif()
|
|
|
|
|
|
|
|
# Compile libFuzzer if the compilation is specifically requested, OR
|
|
|
|
# if the platform is known to be working.
|
2017-08-04 19:19:45 +02:00
|
|
|
set(LIBFUZZER_ENABLE ${LIBFUZZER_ENABLED_CHECK} CACHE BOOL "Build libFuzzer and its tests")
|
2017-08-04 21:29:16 +02:00
|
|
|
set(LIBFUZZER_ENABLE_TESTS OFF CACHE BOOL "Build libFuzzer and its tests")
|
2017-08-04 19:19:45 +02:00
|
|
|
|
2017-08-07 22:56:11 +02:00
|
|
|
if (LLVM_USE_SANITIZE_COVERAGE)
|
|
|
|
set(CMAKE_CXX_FLAGS
|
|
|
|
"${CMAKE_CXX_FLAGS} -fno-sanitize-coverage=trace-pc-guard,edge,trace-cmp,indirect-calls,8bit-counters -Werror")
|
|
|
|
endif()
|
|
|
|
|
2017-08-04 19:19:45 +02:00
|
|
|
if (LIBFUZZER_ENABLE)
|
2017-04-21 20:02:22 +02:00
|
|
|
add_library(LLVMFuzzerNoMainObjects OBJECT
|
2017-04-22 00:38:24 +02:00
|
|
|
FuzzerCrossOver.cpp
|
|
|
|
FuzzerDriver.cpp
|
|
|
|
FuzzerExtFunctionsDlsym.cpp
|
|
|
|
FuzzerExtFunctionsDlsymWin.cpp
|
|
|
|
FuzzerExtFunctionsWeak.cpp
|
|
|
|
FuzzerExtraCounters.cpp
|
|
|
|
FuzzerIO.cpp
|
|
|
|
FuzzerIOPosix.cpp
|
|
|
|
FuzzerIOWindows.cpp
|
|
|
|
FuzzerLoop.cpp
|
|
|
|
FuzzerMerge.cpp
|
|
|
|
FuzzerMutate.cpp
|
|
|
|
FuzzerSHA1.cpp
|
|
|
|
FuzzerShmemPosix.cpp
|
|
|
|
FuzzerShmemWindows.cpp
|
|
|
|
FuzzerTracePC.cpp
|
|
|
|
FuzzerUtil.cpp
|
|
|
|
FuzzerUtilDarwin.cpp
|
|
|
|
FuzzerUtilLinux.cpp
|
|
|
|
FuzzerUtilPosix.cpp
|
|
|
|
FuzzerUtilWindows.cpp
|
|
|
|
)
|
2017-04-21 20:02:22 +02:00
|
|
|
add_library(LLVMFuzzerNoMain STATIC
|
2017-04-22 00:38:24 +02:00
|
|
|
$<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
|
|
|
|
)
|
2017-04-21 20:02:22 +02:00
|
|
|
target_link_libraries(LLVMFuzzerNoMain ${LLVM_PTHREAD_LIB})
|
|
|
|
add_library(LLVMFuzzer STATIC
|
2017-04-22 00:38:24 +02:00
|
|
|
FuzzerMain.cpp
|
|
|
|
$<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
|
|
|
|
)
|
2017-04-21 20:02:22 +02:00
|
|
|
target_link_libraries(LLVMFuzzer ${LLVM_PTHREAD_LIB})
|
2017-04-22 00:38:24 +02:00
|
|
|
endif()
|
2015-01-29 17:58:29 +01:00
|
|
|
|
2017-08-04 02:26:12 +02:00
|
|
|
if (MSVC)
|
|
|
|
|
|
|
|
# Until bots are reconfigured, check-fuzzer on Windows is a no-OP.
|
|
|
|
add_custom_target(check-fuzzer)
|
|
|
|
add_custom_command(TARGET check-fuzzer
|
|
|
|
COMMAND cmake -E echo "check-fuzzer is disalbed on Windows")
|
|
|
|
else()
|
2017-08-04 21:29:16 +02:00
|
|
|
if (LLVM_INCLUDE_TESTS AND LIBFUZZER_ENABLE_TESTS)
|
2017-08-04 02:26:12 +02:00
|
|
|
add_subdirectory(test)
|
|
|
|
endif()
|
2015-01-29 17:58:29 +01:00
|
|
|
endif()
|