blob: 46fac24c3854444e72c015ae529465a93536298d [file] [log] [blame]
Kuba Mracek309182a2017-04-21 17:39:50 +00001include(CheckCXXSourceCompiles)
2
Kuba Mracekc3ecc4b2017-04-21 18:19:56 +00003if( APPLE )
4 CHECK_CXX_SOURCE_COMPILES("
5 static thread_local int blah;
6 int main() {
7 return 0;
8 }
9 " HAS_THREAD_LOCAL)
Kuba Mracek309182a2017-04-21 17:39:50 +000010
Kuba Mracekc3ecc4b2017-04-21 18:19:56 +000011 if( NOT HAS_THREAD_LOCAL )
Kuba Mracek309182a2017-04-21 17:39:50 +000012 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Dthread_local=__thread")
Kuba Mracekc3ecc4b2017-04-21 18:19:56 +000013 endif()
Kuba Mracek309182a2017-04-21 17:39:50 +000014endif()
15
George Karpenkov8ecdd7b2017-08-04 17:19:45 +000016if (CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux")
17 set(LIBFUZZER_ENABLED_CHECK ON)
18else()
19 set(LIBFUZZER_ENABLED_CHECK OFF)
Kuba Mracek71c40432017-04-21 22:38:24 +000020endif()
21
22# Compile libFuzzer if the compilation is specifically requested, OR
23# if the platform is known to be working.
George Karpenkov8ecdd7b2017-08-04 17:19:45 +000024set(LIBFUZZER_ENABLE ${LIBFUZZER_ENABLED_CHECK} CACHE BOOL "Build libFuzzer and its tests")
George Karpenkovb0c2bb52017-08-04 19:29:16 +000025set(LIBFUZZER_ENABLE_TESTS OFF CACHE BOOL "Build libFuzzer and its tests")
George Karpenkov8ecdd7b2017-08-04 17:19:45 +000026
George Karpenkov00e25c52017-08-07 20:56:11 +000027if (LLVM_USE_SANITIZE_COVERAGE)
28 set(CMAKE_CXX_FLAGS
29 "${CMAKE_CXX_FLAGS} -fno-sanitize-coverage=trace-pc-guard,edge,trace-cmp,indirect-calls,8bit-counters -Werror")
30endif()
31
George Karpenkov8ecdd7b2017-08-04 17:19:45 +000032if (LIBFUZZER_ENABLE)
Kuba Mracek81acbf32017-04-21 18:02:22 +000033 add_library(LLVMFuzzerNoMainObjects OBJECT
Kostya Serebryany0873be22017-08-11 23:03:22 +000034 FuzzerClangCounters.cpp
Kuba Mracek71c40432017-04-21 22:38:24 +000035 FuzzerCrossOver.cpp
36 FuzzerDriver.cpp
37 FuzzerExtFunctionsDlsym.cpp
38 FuzzerExtFunctionsDlsymWin.cpp
39 FuzzerExtFunctionsWeak.cpp
40 FuzzerExtraCounters.cpp
41 FuzzerIO.cpp
42 FuzzerIOPosix.cpp
43 FuzzerIOWindows.cpp
44 FuzzerLoop.cpp
45 FuzzerMerge.cpp
46 FuzzerMutate.cpp
47 FuzzerSHA1.cpp
48 FuzzerShmemPosix.cpp
49 FuzzerShmemWindows.cpp
50 FuzzerTracePC.cpp
Kuba Mracek71c40432017-04-21 22:38:24 +000051 FuzzerUtil.cpp
52 FuzzerUtilDarwin.cpp
53 FuzzerUtilLinux.cpp
54 FuzzerUtilPosix.cpp
55 FuzzerUtilWindows.cpp
56 )
Kuba Mracek81acbf32017-04-21 18:02:22 +000057 add_library(LLVMFuzzerNoMain STATIC
Kuba Mracek71c40432017-04-21 22:38:24 +000058 $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
59 )
Kuba Mracek81acbf32017-04-21 18:02:22 +000060 target_link_libraries(LLVMFuzzerNoMain ${LLVM_PTHREAD_LIB})
61 add_library(LLVMFuzzer STATIC
Kuba Mracek71c40432017-04-21 22:38:24 +000062 FuzzerMain.cpp
63 $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
64 )
Kuba Mracek81acbf32017-04-21 18:02:22 +000065 target_link_libraries(LLVMFuzzer ${LLVM_PTHREAD_LIB})
Kuba Mracek71c40432017-04-21 22:38:24 +000066endif()
Aaron Ballmanef116982015-01-29 16:58:29 +000067
George Karpenkov5bd05032017-08-04 00:26:12 +000068if (MSVC)
69
70 # Until bots are reconfigured, check-fuzzer on Windows is a no-OP.
71 add_custom_target(check-fuzzer)
72 add_custom_command(TARGET check-fuzzer
73 COMMAND cmake -E echo "check-fuzzer is disalbed on Windows")
74else()
George Karpenkovb0c2bb52017-08-04 19:29:16 +000075 if (LLVM_INCLUDE_TESTS AND LIBFUZZER_ENABLE_TESTS)
George Karpenkov5bd05032017-08-04 00:26:12 +000076 add_subdirectory(test)
77 endif()
Aaron Ballmanef116982015-01-29 16:58:29 +000078endif()