Kuba Mracek | 309182a | 2017-04-21 17:39:50 +0000 | [diff] [blame] | 1 | include(CheckCXXSourceCompiles) |
| 2 | |
Kuba Mracek | c3ecc4b | 2017-04-21 18:19:56 +0000 | [diff] [blame] | 3 | if( APPLE ) |
| 4 | CHECK_CXX_SOURCE_COMPILES(" |
| 5 | static thread_local int blah; |
| 6 | int main() { |
| 7 | return 0; |
| 8 | } |
| 9 | " HAS_THREAD_LOCAL) |
Kuba Mracek | 309182a | 2017-04-21 17:39:50 +0000 | [diff] [blame] | 10 | |
Kuba Mracek | c3ecc4b | 2017-04-21 18:19:56 +0000 | [diff] [blame] | 11 | if( NOT HAS_THREAD_LOCAL ) |
Kuba Mracek | 309182a | 2017-04-21 17:39:50 +0000 | [diff] [blame] | 12 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Dthread_local=__thread") |
Kuba Mracek | c3ecc4b | 2017-04-21 18:19:56 +0000 | [diff] [blame] | 13 | endif() |
Kuba Mracek | 309182a | 2017-04-21 17:39:50 +0000 | [diff] [blame] | 14 | endif() |
| 15 | |
George Karpenkov | 8ecdd7b | 2017-08-04 17:19:45 +0000 | [diff] [blame] | 16 | if (CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux") |
| 17 | set(LIBFUZZER_ENABLED_CHECK ON) |
| 18 | else() |
| 19 | set(LIBFUZZER_ENABLED_CHECK OFF) |
Kuba Mracek | 71c4043 | 2017-04-21 22:38:24 +0000 | [diff] [blame] | 20 | endif() |
| 21 | |
| 22 | # Compile libFuzzer if the compilation is specifically requested, OR |
| 23 | # if the platform is known to be working. |
George Karpenkov | 8ecdd7b | 2017-08-04 17:19:45 +0000 | [diff] [blame] | 24 | set(LIBFUZZER_ENABLE ${LIBFUZZER_ENABLED_CHECK} CACHE BOOL "Build libFuzzer and its tests") |
George Karpenkov | b0c2bb5 | 2017-08-04 19:29:16 +0000 | [diff] [blame] | 25 | set(LIBFUZZER_ENABLE_TESTS OFF CACHE BOOL "Build libFuzzer and its tests") |
George Karpenkov | 8ecdd7b | 2017-08-04 17:19:45 +0000 | [diff] [blame] | 26 | |
George Karpenkov | 00e25c5 | 2017-08-07 20:56:11 +0000 | [diff] [blame] | 27 | if (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") |
| 30 | endif() |
| 31 | |
George Karpenkov | 8ecdd7b | 2017-08-04 17:19:45 +0000 | [diff] [blame] | 32 | if (LIBFUZZER_ENABLE) |
Kuba Mracek | 81acbf3 | 2017-04-21 18:02:22 +0000 | [diff] [blame] | 33 | add_library(LLVMFuzzerNoMainObjects OBJECT |
Kostya Serebryany | 0873be2 | 2017-08-11 23:03:22 +0000 | [diff] [blame] | 34 | FuzzerClangCounters.cpp |
Kuba Mracek | 71c4043 | 2017-04-21 22:38:24 +0000 | [diff] [blame] | 35 | 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 Mracek | 71c4043 | 2017-04-21 22:38:24 +0000 | [diff] [blame] | 51 | FuzzerUtil.cpp |
| 52 | FuzzerUtilDarwin.cpp |
| 53 | FuzzerUtilLinux.cpp |
| 54 | FuzzerUtilPosix.cpp |
| 55 | FuzzerUtilWindows.cpp |
| 56 | ) |
Kuba Mracek | 81acbf3 | 2017-04-21 18:02:22 +0000 | [diff] [blame] | 57 | add_library(LLVMFuzzerNoMain STATIC |
Kuba Mracek | 71c4043 | 2017-04-21 22:38:24 +0000 | [diff] [blame] | 58 | $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects> |
| 59 | ) |
Kuba Mracek | 81acbf3 | 2017-04-21 18:02:22 +0000 | [diff] [blame] | 60 | target_link_libraries(LLVMFuzzerNoMain ${LLVM_PTHREAD_LIB}) |
| 61 | add_library(LLVMFuzzer STATIC |
Kuba Mracek | 71c4043 | 2017-04-21 22:38:24 +0000 | [diff] [blame] | 62 | FuzzerMain.cpp |
| 63 | $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects> |
| 64 | ) |
Kuba Mracek | 81acbf3 | 2017-04-21 18:02:22 +0000 | [diff] [blame] | 65 | target_link_libraries(LLVMFuzzer ${LLVM_PTHREAD_LIB}) |
Kuba Mracek | 71c4043 | 2017-04-21 22:38:24 +0000 | [diff] [blame] | 66 | endif() |
Aaron Ballman | ef11698 | 2015-01-29 16:58:29 +0000 | [diff] [blame] | 67 | |
George Karpenkov | 5bd0503 | 2017-08-04 00:26:12 +0000 | [diff] [blame] | 68 | if (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") |
| 74 | else() |
George Karpenkov | b0c2bb5 | 2017-08-04 19:29:16 +0000 | [diff] [blame] | 75 | if (LLVM_INCLUDE_TESTS AND LIBFUZZER_ENABLE_TESTS) |
George Karpenkov | 5bd0503 | 2017-08-04 00:26:12 +0000 | [diff] [blame] | 76 | add_subdirectory(test) |
| 77 | endif() |
Aaron Ballman | ef11698 | 2015-01-29 16:58:29 +0000 | [diff] [blame] | 78 | endif() |